首页
随机
登录
设置
关于NeuroWiki
免责声明
NeuroWiki
搜索
查看“Module:Sprite”的源代码
←
Module:Sprite
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
local p = {} function p.base( f ) local args = f if f == mw.getCurrentFrame() then args = require( 'Module:ProcessArgs' ).merge( true ) else f = mw.getCurrentFrame() end local data = args.data and mw.loadData( 'Module:' .. args.data ) or {} local settings = data.settings local Autolink = require( 'Module:Autolink' ) -- Default settings local default = { scale = 1, sheetsize = 256, size = 16, pos = 1, align = 'text-top' } local defaultStyle = default if settings then if not settings.stylesheet then -- Make a separate clone of the current default settings defaultStyle = { scale = 1, sheetsize = 256, size = 16, pos = 1, align = 'text-top' } end for k, v in pairs( settings ) do default[k] = v end end setmetatable( args, { __index = default } ) local sprite = mw.html.create( 'span' ):addClass( 'sprite' ) -- mw.html's css method performs very slow escaping, which doubles the time it takes -- to run, so we'll construct the styles manually, and put them in the cssText -- method, which only does html escaping (which isn't slow) local styles = {} -- for tint local classname = args['classname'] or mw.ustring.lower( args['name'] :gsub( ' ', '-' ) ) .. '-sprite' local css_image = "background" if args['formask'] then classname = classname .. '-mask' css_image = "mask" end sprite:addClass( classname ) local class = args['class'] if class then sprite:addClass( class ) end local width = args['width'] or args['size'] local height = args['height'] or args['size'] local sheetWidth = args['sheetsize'] local tiles = sheetWidth / width local pos = args['pos'] - 1 local scale = args['scale'] local autoScale = args['autoscale'] if pos then local left = pos % tiles * width * scale local top = math.floor( pos / tiles ) * height * scale 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 if not autoScale and scale ~= defaultStyle.scale then 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 if height ~= defaultStyle.size or width ~= defaultStyle.size or ( not autoScale and scale ~= defaultStyle.scale ) then styles[#styles + 1] = 'height:' .. height * scale .. 'px' styles[#styles + 1] = 'width:' .. width * scale .. 'px' end local align = args['align'] if align ~= defaultStyle.align then styles[#styles + 1] = 'vertical-align:' .. align end styles[#styles + 1] = args['css'] sprite:cssText( table.concat( styles, ';' ) ) local text = args['text'] local root local spriteText if text then if not args['wrap'] then root = mw.html.create( 'span' ):addClass( 'nowrap' ) end local autolinkText if args['no-autolink'] then autolinkText = text else autolinkText = Autolink.invlink( text, 'nolink', args.data, args.notypefallback ) end spriteText = mw.html.create( 'span' ):addClass( 'sprite-text' ):wikitext( autolinkText ) end local title = args['title'] if title then ( root or sprite ):attr( 'title', title ) end if not root then root = mw.html.create( '' ) end root:node( sprite ) if spriteText then root:node( spriteText ) end local link = args['link'] or '' if link ~= '' and mw.ustring.lower( link ) ~= 'none' then -- External link if link:find( '//' ) then return '[' .. link .. ' ' .. tostring( root ) .. ']' end -- Internal link local linkPrefix = args['linkprefix'] or '' return '[[' .. linkPrefix .. Autolink.invlink( link, 'linkonly', args.data, args.notypefallback ) .. '|' .. tostring( root ) .. ']]' end return tostring( root ) end function p.sprite( f ) local args = f if f == mw.getCurrentFrame() then args = require( 'Module:ProcessArgs' ).merge( true ) else f = mw.getCurrentFrame() end local data = args.data and mw.loadData( 'Module:' .. args.data ) or {} local categories = {} local idData = args.iddata if not idData then local name = args.name or data.settings.name local id = mw.text.trim( tostring( args[1] or '' ) ) idData = data.ids[id] or data.ids[mw.ustring.lower( id ):gsub( '[%s%+]', '-' )] end local title = mw.title.getCurrentTitle() -- Remove categories on language pages, talk pages, and in User/UserWiki/UserProfile namespaces local disallowCats = args.nocat or title.isTalkPage or title.nsText:find( '^User' ) if idData then if idData.deprecated then args.class = ( args.class or '' ) .. ' sprite-deprecated' if not disallowCats then categories[#categories + 1] = '[[Category:使用已弃用Sprite的页面]]' end end args.pos = idData.pos elseif not disallowCats then categories[#categories + 1] = '[[Category:含有错误Sprite的页面]]' end return p.base( args ), table.concat( categories ) end function p.link( f ) local args = f if f == mw.getCurrentFrame() then args = require( 'Module:ProcessArgs' ).merge( true ) end local link = args[1] if args[1] and not args.id then link = args[1]:match( '^(.-)%+' ) or args[1] end local text if not args.notext then text = args.text or args[2] or link end args[1] = args.id or args[1] args.link = args.link or link args.text = text return p.sprite( args ) end function p.doc( f ) local args = f if f == mw.getCurrentFrame() then args = f.args else f = mw.getCurrentFrame() end local dataPage = mw.text.trim( args[1] ) local data = mw.loadData( 'Module:' .. dataPage ) local getProtection = function( title, action, extra ) local protections = { 'edit' } if extra then protections[#protections + 1] = extra end local addProtection = function( protection ) if protection == 'autoconfirmed' then protection = 'editsemiprotected' elseif protection == 'sysop' then protection = 'editprotected' end protections[#protections + 1] = protection end local direct = title.protectionLevels[action] or {} for _, protection in ipairs( direct ) do addProtection( protection ) end local cascading = title.cascadingProtection.restrictions[action] or {} if #cascading > 0 then protections[#protections + 1] = 'protect' end for _, protection in ipairs( cascading ) do addProtection( protection ) end return table.concat( protections, ',' ) end local spriteStyle = '' if data.settings.url and data.settings.url.style then spriteStyle = data.settings.url.style end local dataTitle = mw.title.new( 'Module:' .. dataPage ) -- Temporary until this is updated local spritesheet = data.settings.image or data.settings.name .. 'Sprite.png' local spriteTitle = mw.title.new( 'File:' .. spritesheet ) local dataProtection = getProtection( dataTitle, 'edit' ) local spriteProtection = getProtection( spriteTitle, 'upload', 'upload,reupload' ) local body = mw.html.create( 'div' ):attr( { id = 'spritedoc', ['data-dataprotection'] = dataProtection, ['data-datatimestamp'] = f:callParserFunction( 'REVISIONTIMESTAMP', 'Module:' .. dataPage ), ['data-datapage'] = 'Module:' .. dataPage, ['data-spritesheet'] = spritesheet, ['data-spriteprotection'] = spriteProtection, ['data-refreshtext'] = mw.text.nowiki( '{{#invoke:sprite|doc|' .. dataPage .. '|refresh=1}}' ), ['data-settings'] = mw.text.jsonEncode( data.settings ), } ) local sections = {} for _, sectionData in ipairs( data.sections or { name = 'Uncategorized' } ) do local sectionTag = body:tag( 'div' ):addClass( 'spritedoc-section' ):attr( 'data-section-id', sectionData.id ) sectionTag:tag( 'h3' ):wikitext( sectionData.name ) sections[sectionData.id] = { boxes = sectionTag:tag( 'ul' ):addClass( 'spritedoc-boxes' ) } end local keyedData = {} local i = 1 for name, idData in pairs( data.ids ) do keyedData[i] = { sortKey = mw.ustring.lower( name ), name = name, data = idData } i = i + 1 end table.sort( keyedData, function( a, b ) return a.sortKey < b.sortKey end ) for _, data in ipairs( keyedData ) do local idData = data.data local pos = idData.pos local section = sections[idData.section] local names = section[pos] if not names then local box = section.boxes:tag( 'li' ):addClass( 'spritedoc-box' ):attr( 'data-pos', pos ) box:tag( 'div' ):addClass( 'spritedoc-image' ) :wikitext( p.base{ pos = pos, data = dataPage, nourl = spriteStyle ~= '' } ) names = box:tag( 'ul' ):addClass( 'spritedoc-names' ) section[pos] = names end local nameElem = mw.html.create( 'li' ):addClass( 'spritedoc-name' ) local codeElem = nameElem:tag( 'code' ):wikitext( data.name ) if idData.deprecated then codeElem:addClass( 'spritedoc-deprecated' ) end names:wikitext( tostring( nameElem ) ) end if args.refresh then return '', '', tostring( body ) end local styles = require( 'Module:TSLoader' ).call( 'Template:Sprite/doc.css' ) return styles, spriteStyle, tostring( body ) end return p
该页面使用的模板:
Template:Dd
(
查看源代码
)
Template:Dependency declaration
(
查看源代码
)
Template:Documentation header
(
查看源代码
)
Template:Sprite see also
(
查看源代码
)
Template:T
(
查看源代码
)
Template:Template link
(
查看源代码
)
Template:Tl
(
查看源代码
)
Template:Transclude
(
查看源代码
)
Module:Sprite/doc
(
查看源代码
)
返回
Module:Sprite
。