Editing
Module:Infobox
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} function p.infobox( f ) local args = require( 'Module:ProcessArgs' ).merge( true ) local titleObject = mw.title.getCurrentTitle() local title = args.title or titleObject.baseText local template = f:getParent():getTitle():lower():gsub( 'template:', '' ):gsub( 'infobox ', '' ) local headerArea = '' local json = { images = {}, invimages = {}, rows = {} } local imageArea = args.imagearea if not imageArea and imageArea ~= 'none' then local images = {} local invImages = {} local defaultImageSize = args.defaultimagesize or '150px' local defaultImageClass = args.defaultimageclass args.image1 = args.image1 or args.image or 'title' args.image1size = args.image1size or args.imagesize args.image1class = args.image1class or args.imageclass args.image1caption = args.image1caption or args.imagecaption or '' args.invimage1 = args.invimage1 or args.invimage or 'none' args.group1 = args.group1 or args.group args.group1size = args.group1size or args.groupsize args.group1class = args.group1class or args.groupclass args.group1caption = args.group1caption or args.groupcaption or '' local imgCount = {} local invImgCount = {} local groupCount = {} local groupImgList = {} for k, v in pairs( args ) do if type( k ) == 'string' then local image, num = k:match( '^(image)(%d+)$' ) local invImage, invNum = k:match( '^(invimage)(%d+)$' ) local group, groupNum = k:match( '^(group)(%d+)$' ) local groupImg, groupImgNum = k:match( '^(%d+)-(%d+)$' ) if v:lower() ~= 'none' then if image then table.insert( imgCount, tonumber( num ) ) elseif invImage then table.insert( invImgCount, tonumber( invNum ) ) elseif group then table.insert( groupCount, tonumber( groupNum ) ) if not groupImgList['group' .. groupNum] then groupImgList['group' .. groupNum] = {} end elseif groupImg then if not groupImgList['group' .. groupImg] then groupImgList['group' .. groupImg] = {} end table.insert( groupImgList['group' .. groupImg], tonumber( groupImgNum ) ) end end end end local animate if #groupCount > 0 then table.sort( groupCount ) local tabber = {} for k, v in ipairs( groupCount ) do local group = args['group' .. v] local groupSize = args['group' .. v .. 'size'] or defaultImageSize local groupClass = args['group' .. v .. 'class'] or defaultImageClass local groupCaption = args['group' .. v .. 'caption'] or '' local groupImages = {} table.sort( groupImgList['group' .. v] ) for _, w in ipairs( groupImgList['group' .. v] ) do local image = args[v .. '-' .. w] local size = args[v .. '-' .. w .. 'size'] or groupSize local class = args[v .. '-' .. w .. 'class'] or groupClass local caption = args[v .. '-' .. w .. 'caption'] or '' if string.match( image, 'UNIQ%-%-gallery%-' ) then image = image elseif image:match( ';' ) then if not animate then animate = require( 'Module:Animate' ).animate end image = animate{ image, size, class = class } else json.images[#json.images + 1] = image local altText = image .. ': Infobox image for ' .. title .. ' the ' .. template .. ' in Minecraft' image = '[[File:' .. image .. '|' .. size .. '|class=' .. ( class or '' ) .. '|alt=' .. altText .. ']]' end if caption ~= '' then caption = '<div class="infobox-imagecaption">\n' .. caption .. '\n</div>' end table.insert( groupImages, '<div>' .. image .. caption .. '</div>' ) end if groupCaption ~= '' 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 ) for k, v in ipairs( imgCount ) do local image = args['image' .. v] local size = args['image' .. v .. 'size'] or defaultImageSize local class = args['image' .. v .. 'class'] or defaultImageClass local caption = args['image' .. v .. 'caption'] or '' if image == 'title' then local imageTitle = mw.title.new( 'Media:' .. title .. '.png' ) if #groupCount == 0 and imageTitle and imageTitle.exists then json.images[#json.images + 1] = title .. '.png' local altText = title .. '.png: Infobox image for ' .. title .. ' the ' .. template .. ' in Minecraft' image = '[[File:' .. title .. '.png|' .. size .. '|class=' .. ( class or '' ) .. '|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 ]=] elseif string.match( image, 'UNIQ%-%-gallery%-' ) then image = image elseif image:match( ';' ) then if not animate then animate = require( 'Module:Animate' ).animate end image = animate{ image, size, class = class } else json.images[#json.images + 1] = image local altText = image .. ': Infobox image for ' .. title .. ' the ' .. template .. ' in Minecraft' image = '[[File:' .. image .. '|' .. size .. '|class=' .. ( class or '' ) .. '|alt=' .. altText .. ']]' end if caption ~= '' then caption = '<div class="infobox-imagecaption">\n' .. caption .. '\n</div>' end if image ~= '' or caption ~= '' then table.insert( images, '<div>' .. image .. caption .. '</div>' ) end end images = table.concat( images, '\n' ) if #invImgCount > 0 then table.sort( invImgCount ) local slot local invTitle = mw.title.new( 'Media:Invicon ' .. title .. '.png' ) local invAliases = mw.loadData( 'Module:Inventory slot/Aliases' ) for k, v in ipairs( invImgCount ) do local image = args['invimage' .. v] if image == 'title' then if invTitle and invTitle.exists or invAliases[title] then image = title else image = false end end if image == '----' then table.insert( invImages, '</div><div style="padding-top:.5em">' ) elseif image then if not slot then slot = require( 'Module:Inventory slot' ).slot end json.invimages[#json.invimages + 1] = image table.insert( invImages, slot{ image, link = 'none' } ) end end if slot and #invImages > 0 then invImages = '<div class="infobox-invimages"><div>' .. table.concat( invImages, '' ) .. '</div></div>' else invImages = '' end else invImages = '' end if images ~= '' or invImages ~= '' then imageArea = images .. '\n' .. invImages else imageArea = 'none' end end if imageArea and imageArea ~= 'none' then imageArea = '<div class="infobox-imagearea animated-container">' .. imageArea .. '</div>' else local groupArea = args.grouparea if groupArea then imageArea = groupArea else imageArea = '' end end local extraText = args.extratext if extraText and extraText ~= 'none' then json.extratext = extraText extraText = '<div class="infobox-extratext">'.. extraText ..'</div>' else extraText = '' end headerArea = imageArea.. '' ..extraText local footer = args.footer if footer then json.footer = footer footer = '| class="infobox-footer" colspan="2" | ' .. footer end json.title = title local repl = 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.rows or '', '<code class="history%-json">{"label": (".-"), "field": (".-")}</code>\n', repl ) local html = { '<div class="notaninfobox">', '<div class="mcwiki-header infobox-title">' .. title .. '</div>', headerArea, '{| class="infobox-rows" cellspacing="1" cellpadding="4"', '|-', args.rows or '', footer or '', '|}', '</div>', f:callParserFunction( '#tag', { 'pre', class = 'history-json noexcerpt navigation-not-searchable', mw.text.jsonEncode( json, mw.text.JSON_PRETTY ) } ) } return table.concat( html, '\n' ) end return p
Summary:
Please note that all contributions to Modded Wiki are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see
Wiki:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Module
Discussion
English
Views
Read
Edit source
View history
More
Refresh
Search
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Tools
What links here
Related changes
Special pages
Page information