![]() |
VOOZH | about |
Implements {{Infobox}}.
localp={} functionp.infobox(f) localargs=require('Module:ProcessArgs').merge(true) localtitleObject=mw.title.getCurrentTitle() localtitle=args.titleortitleObject.subpageText localsubtitle=args.subtitleor'' localtemplate=f:getParent():getTitle():lower():gsub('template:',''):gsub('infobox ','') localheaderArea='' localjson={ images={}, invimages={}, rows={} } localtitleArea=args.titlearea ifnottitleAreathen json.title=title ifsubtitle~=''then json.subtitle=subtitle subtitle='<br><small class="infobox-subtitle">'..subtitle..'</small>' end titleArea=title..subtitle end localimageArea=args.imagearea ifnotimageAreaandimageArea~='none'then localimages={} localinvImages={} localdefaultImageSize=args.defaultimagesizeor'150px' localdefaultImageClass=args.defaultimageclass args.image1=args.image1orargs.imageor'title' args.image1size=args.image1sizeorargs.imagesize args.image1class=args.image1classorargs.imageclass args.image1caption=args.image1captionorargs.imagecaptionor'' args.invimage1=args.invimage1orargs.invimageor'none' args.group1=args.group1orargs.group args.group1size=args.group1sizeorargs.groupsize args.group1class=args.group1classorargs.groupclass args.group1caption=args.group1captionorargs.groupcaptionor'' localimgCount={} localinvImgCount={} localgroupCount={} localgroupImgList={} fork,vinpairs(args)do iftype(k)=='string'then localimage,num=k:match('^(image)(%d+)$') localinvImage,invNum=k:match('^(invimage)(%d+)$') localgroup,groupNum=k:match('^(group)(%d+)$') localgroupImg,groupImgNum=k:match('^(%d+)-(%d+)$') ifv:lower()~='none'then ifimagethen table.insert(imgCount,tonumber(num)) elseifinvImagethen table.insert(invImgCount,tonumber(invNum)) elseifgroupthen table.insert(groupCount,tonumber(groupNum)) ifnotgroupImgList['group'..groupNum]then groupImgList['group'..groupNum]={} end elseifgroupImgthen ifnotgroupImgList['group'..groupImg]then groupImgList['group'..groupImg]={} end table.insert(groupImgList['group'..groupImg],tonumber(groupImgNum)) end end end end localanimate if#groupCount>0then table.sort(groupCount) localtabber={} fork,vinipairs(groupCount)do localgroup=args['group'..v] localgroupSize=args['group'..v..'size']ordefaultImageSize localgroupClass=args['group'..v..'class']ordefaultImageClass localgroupCaption=args['group'..v..'caption']or'' localgroupImages={} table.sort(groupImgList['group'..v]) for_,winipairs(groupImgList['group'..v])do localimage=args[v..'-'..w] localsize=args[v..'-'..w..'size']orargs['*-'..w..'size']orgroupSize localclass=args[v..'-'..w..'class']orargs['*-'..w..'class']orgroupClass localcaption=args[v..'-'..w..'caption']orargs['*-'..w..'caption']or'' ifstring.match(image,'UNIQ%-%-gallery%-')then image=image elseifimage:match(';')then ifnotanimatethen animate=require('Module:Animate').animate end image=animate{image,size,class=class} else json.images[#json.images+1]=image localaltText=image..': Infobox image for Minecraft '..template.." '"..title.."'" image='[[File:'..image..'|'..size..'|class='..(classor'')..'|alt='..altText..']]' end ifcaption~=''then caption='<div class="infobox-imagecaption">\n'..caption..'\n</div>' end table.insert(groupImages,'<div>'..image..caption..'</div>') end ifgroupCaption~=''then groupCaption='<div class="infobox-imagecaption">\n'..groupCaption..'\n</div>' end table.insert(tabber,'|-|'..group..'=\n'..table.concat(groupImages,'\n')..groupCaption) end table.insert(images,'<div>'..f:extensionTag('tabber',table.concat(tabber,'\n'))..'</div>') end table.sort(imgCount) fork,vinipairs(imgCount)do localimage=args['image'..v] localsize=args['image'..v..'size']ordefaultImageSize localclass=args['image'..v..'class']ordefaultImageClass localcaption=args['image'..v..'caption']or'' ifimage=='title'then localimageTitle=mw.title.new('Media:'..title..'.png') if#groupCount==0andimageTitleandimageTitle.existsthen json.images[#json.images+1]=title..'.png' localaltText=title..'.png: Infobox image for Minecraft '..template.." '"..title.."'" image='[[File:'..title..'.png|'..size..'|class='..(classor'')..'|alt='..altText..']]' else image='' end --[=[ elseif titleObject.namespace == 0 then image = '[[File:No image.svg|' .. size .. '|link=File:' .. title .. '.png|Upload ' .. title .. '.png]]' else image = '[[File:No image.svg|' .. size .. '|link=]]' end ]=] elseifstring.match(image,'UNIQ%-%-gallery%-')then image=image elseifimage:match(';')then ifnotanimatethen animate=require('Module:Animate').animate end image=animate{image,size,class=class} else json.images[#json.images+1]=image localaltText=image..': Infobox image for Minecraft '..template.." '"..title.."'" image='[[File:'..image..'|'..size..'|class='..(classor'')..'|alt='..altText..']]' end ifcaption~=''then caption='<div class="infobox-imagecaption">\n'..caption..'\n</div>' end ifimage~=''orcaption~=''then table.insert(images,'<div>'..image..caption..'</div>') end end images=table.concat(images,'\n') if#invImgCount>0then table.sort(invImgCount) localslot localinvTitle=mw.title.new('Media:Invicon '..title..'.png') localinvAliases=mw.loadData('Module:Inventory slot/Aliases') fork,vinipairs(invImgCount)do localimage=args['invimage'..v] ifimage=='title'then ifinvTitleandinvTitle.existsorinvAliases[title]then image=title else image=false end end ifimage=='----'then table.insert(invImages,'</div><div style="padding-top:.5em">') elseifimagethen ifnotslotthen slot=require('Module:Inventory slot').slot end json.invimages[#json.invimages+1]=image table.insert(invImages,slot{image,link='none'}) end end ifslotand#invImages>0then invImages='<div class="infobox-invimages"><div>'..table.concat(invImages,'')..'</div></div>' else invImages='' end else invImages='' end ifimages~=''orinvImages~=''then imageArea=images..'\n'..invImages else imageArea='none' end end ifimageAreaandimageArea~='none'then imageArea='<div class="infobox-imagearea animated-container">'..imageArea..'</div>' else localgroupArea=args.grouparea ifgroupAreathen imageArea=groupArea else imageArea='' end end localextraText=args.extratext ifextraTextandextraText~='none'then json.extratext=extraText extraText='<div class="infobox-extratext">'..extraText..'</div>' else extraText='' end headerArea=imageArea..''..extraText localfooter=args.footer iffooterthen json.footer=footer footer='| class="infobox-footer" colspan="2" | '..footer end localrepl=function(label,field) json.rows[#json.rows+1]={ label=mw.text.jsonDecode(label:gsub('\n','\\n')), field=mw.text.jsonDecode(field:gsub('\n','\\n')) } return'' end args.rows=string.gsub(args.rowsor'','<code class="history%-json">{"label": (".-"), "field": (".-")}</code>\n',repl) localhtml={ '<div class="infobox notaninfobox '..(args.infoboxclassor'')..'">', '<div class="mcwiki-header infobox-title">'..titleArea..'</div>', headerArea, '{| class="infobox-rows" cellspacing="1" cellpadding="4"', '|-', args.rowsor'', footeror'', '|}', f:callParserFunction('#tag',{'pre',class='history-json noexcerpt navigation-not-searchable', mw.text.jsonEncode(json,mw.text.JSON_PRETTY) }), '</div>', } returntable.concat(html,'\n') end returnp