Module:Sprite: Difference between revisions

m Remove inline background image for sprites with defined class
m 91 revisions imported
 
(7 intermediate revisions by 4 users not shown)
Line 42: Line 42:
local styles = {}
local styles = {}
if not setting( 'nourl' ) and setting( 'url' ) and not setting( 'url' ).style 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 60: 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 68: 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 183: 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 256: 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 272: 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 323: 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