Module:Sprite: Difference between revisions

Allow separate height and width
m rebase dev changes onto prod
Line 42: 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 71: Line 67:
local left = pos % tiles * width * scale
local left = pos % tiles * width * scale
local top = math.floor( pos / tiles ) * height * 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 height ~= defaultStyle.size or width ~= 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
Line 184: 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
function p.getParsedUrlStyle( f )
local args = f:getParent().args
local module = args[1]
return require( 'Module:' .. module ).settings.url.style
end
end


Line 257: 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 273: 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 324: 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