Gamepedia
帮助
登录
注册
查看“模块:Sprite”的源代码
←
模块: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 = mw.clone( default ) end for k, v in pairs( settings ) do default[k] = v end end local setting = function( arg ) return args[arg] or default[arg] end 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 = {} if not setting( 'nourl' ) and setting( 'url' ) then styles[#styles + 1] = 'background-image:' .. ( setting( 'url' ).url or setting( 'url' ) ) end if setting( 'stylesheet' ) then sprite:addClass( setting( 'classname' ) or 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 local class = setting( 'class' ) if class then sprite:addClass( class ) end local size = setting( 'size' ) local sheetWidth = setting( 'sheetsize' ) local tiles = sheetWidth / size local pos = setting( 'pos' ) - 1 local scale = setting( 'scale' ) local autoScale = setting( 'autoscale' ) if pos then local left = pos % tiles * size * scale local top = math.floor( pos / tiles ) * size * scale styles[#styles + 1] = 'background-position:-' .. left .. 'px -' .. top .. 'px' end if not autoScale and scale ~= defaultStyle.scale then styles[#styles + 1] = 'background-size:' .. sheetWidth * scale .. 'px auto' end if size ~= defaultStyle.size or ( not autoScale and scale ~= defaultStyle.scale ) then styles[#styles + 1] = 'height:' .. size * scale .. 'px' styles[#styles + 1] = 'width:' .. size * scale .. 'px' end local align = setting( 'align' ) if align ~= defaultStyle.align then styles[#styles + 1] = 'vertical-align:' .. align end styles[#styles + 1] = setting( 'css' ) sprite:cssText( table.concat( styles, ';' ) ) local text = setting( 'text' ) local root local spriteText if text then if not args['wrap'] then root = mw.html.create( 'span' ):addClass( 'nowrap' ) end spriteText = mw.html.create( 'span' ):addClass( 'sprite-text' ):wikitext( Autolink.invlink( text, 'nolink', args.data ) ) end local title = setting( '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 = setting( '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 = setting( 'linkprefix' ) or '' return '[[' .. linkPrefix .. Autolink.invlink( link, 'linkonly', args.data ) .. '|' .. 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.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 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 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 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-urlfunc'] = "require( [[Module:Sprite]] ).getUrl( '" .. spritesheet .. "', '$1', '" .. classname .. "' )", ['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 = f:callParserFunction( '#widget:SpriteDoc.css' ) return styles, spriteStyle, tostring( body ) end return p
该页面使用的模板:
Template:Documentation header
(
查看源代码
)
Template:Sprite see also
(
查看源代码
)
Template:Template link
(
查看源代码
)
Template:Tl
(
查看源代码
)
Template:Transclude
(
查看源代码
)
模块:Documentation
(
编辑
)
模块:ProcessArgs
(
查看源代码
)(受保护)
模块:Sprite/doc
(
编辑
)
返回至
模块:Sprite
。
导航菜单
名字空间
模块
讨论
变种
分享
视图
查看
查看源代码
历史
更多
搜索
Minecraft Wiki
首页
社区专页
管理员告示板
管理制度
Wiki条例
Wiki手册
标准译名列表
Wiki贡献排名
最近更改
随机页面
Wiki微博
计划
沙盒
游戏
Minecraft
Minecraft Earth
Minecraft Dungeons
常用页面
方块
物品
合成
烧炼
附魔
药水酿造
生物
交易
红石电路
教程
资源包
Minecraft
官方网站
官方论坛
客户服务
漏洞追踪
建议反馈
Twitter
Facebook
YouTube
Minecraft Twitch
Mojang Twitch
Mixer
Gamepedia
支持
汇报不良广告
Wiki帮助
联系我们
工具
链入页面
相关更改
特殊页面
页面信息