Module:Sprite: Difference between revisions

No edit summary
m 91 revisions imported
 
(12 intermediate revisions by 6 users not shown)
Line 36: Line 36:
local sprite = mw.html.create( 'span' ):addClass( 'sprite' )
local sprite = mw.html.create( 'span' ):addClass( 'sprite' )
sprite:tag( 'br' )
-- mw.html's css method performs very slow escaping, which doubles the time it takes
-- mw.html's css method performs very slow escaping, which doubles the time it takes
Line 43: Line 42:
local styles = {}
local styles = {}
if not setting( 'nourl' ) and setting( 'url' ) then
-- for tint
styles[#styles + 1] = 'background-image:' .. ( setting( 'url' ).url or setting( 'url' ) )
local classname = setting( 'classname' ) or mw.ustring.lower( setting( 'name' ):gsub( ' ', '-' ) ) .. '-sprite'
end
local css_image = "background"
if setting( 'stylesheet' ) then
if setting( 'formask' ) then
sprite:addClass(
classname = classname .. '-mask'
setting( 'classname' ) or
css_image = "mask"
mw.ustring.lower( setting( 'name' ):gsub( ' ', '-' ) ) .. '-sprite'
)
elseif not setting( 'url' ) then
styles[#styles + 1] = 'background-image:' .. p.getUrl(
setting( 'image' ) or setting( 'name' ) .. 'Sprite.png'
).url
end
end
sprite:addClass( classname )
local class = setting( 'class' )
local class = setting( 'class' )
if class then
if class then
Line 61: Line 56:
end
end
local size = setting( 'size' )
local width = setting( 'width' ) or setting( 'size' )
local height = setting( 'height' ) or setting( 'size' )
local sheetWidth = setting( 'sheetsize' )
local sheetWidth = setting( 'sheetsize' )
local tiles = sheetWidth / size
local tiles = sheetWidth / width
local pos = setting( 'pos' ) - 1
local pos = setting( 'pos' ) - 1
local scale = setting( 'scale' )
local scale = setting( 'scale' )
Line 69: Line 65:
if pos then
if pos then
local left = pos % tiles * size * scale
local left = pos % tiles * width * scale
local top = math.floor( pos / tiles ) * size * scale
local top = math.floor( pos / tiles ) * height * scale
styles[#styles + 1] = 'background-position:-' .. left .. 'px -' .. top .. 'px'
if css_image == 'mask' then
styles[#styles + 1] = '-webkit-mask-position:-' .. left .. 'px -' .. top .. 'px'
end
styles[#styles + 1] = css_image .. '-position:-' .. left .. 'px -' .. top .. 'px'
end
end
if not autoScale and scale ~= defaultStyle.scale then
if not autoScale and scale ~= defaultStyle.scale then
styles[#styles + 1] = 'background-size:' .. sheetWidth * scale .. 'px auto'
if css_image == 'mask' then
styles[#styles + 1] = '-webkit-mask-size:' .. sheetWidth * scale .. 'px auto'
end
styles[#styles + 1] = css_image .. '-size:' .. sheetWidth * scale .. 'px auto'
end
end
if size ~= defaultStyle.size or ( not autoScale and scale ~= defaultStyle.scale ) then
if height ~= defaultStyle.size or width ~= defaultStyle.size or ( not autoScale and scale ~= defaultStyle.scale ) then
styles[#styles + 1] = 'height:' .. size * scale .. 'px'
styles[#styles + 1] = 'height:' .. height * scale .. 'px'
styles[#styles + 1] = 'width:' .. size * scale .. 'px'
styles[#styles + 1] = 'width:' .. width * scale .. 'px'
end
end
Line 94: Line 96:
local spriteText
local spriteText
if text then
if text then
root = mw.html.create( 'span' ):addClass( 'nowrap' )
if not args['wrap'] then
root = mw.html.create( 'span' ):addClass( 'nowrap' )
end
spriteText = mw.html.create( 'span' ):addClass( 'sprite-text' ):wikitext( text )
spriteText = mw.html.create( 'span' ):addClass( 'sprite-text' ):wikitext( text )
end
end
Line 147: Line 151:
local disallowCats = args.nocat or title.isTalkPage or title.nsText:find( '^User' )
local disallowCats = args.nocat or title.isTalkPage or title.nsText:find( '^User' )
if idData then
if idData then
if idData.deprecated and not disallowCats then
if idData.deprecated then
categories[#categories + 1] = f:expandTemplate{ title = 'Translation category', args = { 'Pages using deprecated sprite names', project = 0 } }
args.class = ( args.class or '' ) .. ' sprite-deprecated'
if not disallowCats then
categories[#categories + 1] = f:expandTemplate{ title = 'Translation category', args = { 'Pages using deprecated sprite names', project = 0 } }
end
end
end
Line 179: Line 186:
return p.sprite( args )
return p.sprite( args )
end
function p.getUrl( image, query, classname )
local f = mw.getCurrentFrame()
local t = {
url = f:expandTemplate{
title = 'FileUrl',
args = { image, query = query }
},
}
if classname and classname ~= '' then
t.style = f:expandTemplate{
title = 'FileUrlStyle',
args = { classname, image, query = query }
}
end
return t
end
end


Line 246: Line 236:
local dataTitle = mw.title.new( 'Module:' .. dataPage )
local dataTitle = mw.title.new( 'Module:' .. dataPage )
-- Temporary until this is updated
-- Temporary until this is updated
local classname = ''
if data.settings.stylesheet then
classname = data.settings.classname or
mw.ustring.lower( data.settings.name:gsub( ' ', '-' ) ) .. '-sprite'
end
local spritesheet = data.settings.image or data.settings.name .. 'Sprite.png'
local spritesheet = data.settings.image or data.settings.name .. 'Sprite.png'
local spriteTitle = mw.title.new( 'File:' .. spritesheet )
local spriteTitle = mw.title.new( 'File:' .. spritesheet )
Line 262: Line 247:
['data-spritesheet'] = spritesheet,
['data-spritesheet'] = spritesheet,
['data-spriteprotection'] = spriteProtection,
['data-spriteprotection'] = spriteProtection,
['data-urlfunc'] = "require( [[Module:Sprite]] ).getUrl( '" .. spritesheet .. "', '$1', '" .. classname .. "' )",
['data-refreshtext'] = mw.text.nowiki( '{{#invoke:sprite|doc|' .. dataPage .. '|refresh=1}}' ),
['data-refreshtext'] = mw.text.nowiki( '{{#invoke:sprite|doc|' .. dataPage .. '|refresh=1}}' ),
['data-settings'] = mw.text.jsonEncode( data.settings ),
['data-settings'] = mw.text.jsonEncode( data.settings ),
Line 313: Line 297:
return '', '', tostring( body )
return '', '', tostring( body )
end
end
local styles = f:callParserFunction( '#widget:SpriteDoc.css' )
local styles = f:extensionTag( 'templatestyles', '', { src = 'Sprite/doc.css' } )
return styles, spriteStyle, tostring( body )
return styles, spriteStyle, tostring( body )
end
end
return p
return p