查看“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
。
导航菜单
个人工具
中文
创建账号
登录
命名空间
模块
讨论
English
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
最新文件
随机页面
官方Discord
浏览NeuroWiki
人物列表
直播记录
梗列表
事件列表
物品列表
场景列表
辟谣专区
帮助
帮助
沙盒
NeuroWiki政策文件
编辑规范
怎么正确编辑&更新?
工具
链入页面
相关更改
上传文件
特殊页面
页面信息