|
|
| Line 1: |
Line 1: |
| local p = {}
| | <includeonly>{{#invoke:infobox|infobox |
| function p.infobox( f )
| | | image = {{#if:{{{image1|{{{photo1|}}}}}}|[[File:{{{image1|{{{photo1}}}}}}|200px|center]]{{#if:{{{image1desc|{{{photo1desc|}}}}}}|<div style="text-align: center;">{{{image1desc|{{{photo1desc}}}}}}</div>}}}} |
| local args = require( 'Module:ProcessArgs' ).merge( true )
| | | caption = |
| local titleObject = mw.title.getCurrentTitle()
| | | rows = |
| local title = args.title or titleObject.baseText
| | {{#if:{{{image2|{{{photo2|}}}}}}|{{Infobox row|Image|[[File:{{{image2|{{{photo2}}}}}}|200px|center]]{{#if:{{{image2desc|{{{photo2desc|}}}}}}|<div style="text-align: center;">{{{image2desc|{{{photo2desc}}}}}}</div>}}}}}} |
| local template = f:getParent():getTitle():lower():gsub( 'template:', '' )
| | {{#if:{{{image3|{{{photo3|}}}}}}|{{Infobox row|Image|[[File:{{{image3|{{{photo3}}}}}}|200px|center]]{{#if:{{{image3desc|{{{photo3desc|}}}}}}|<div style="text-align: center;">{{{image3desc|{{{photo3desc}}}}}}</div>}}}}}} |
| local headerArea = ''
| | {{#if:{{{image4|{{{photo4|}}}}}}|{{Infobox row|Image|[[File:{{{image4|{{{photo4}}}}}}|200px|center]]{{#if:{{{image4desc|{{{photo4desc|}}}}}}|<div style="text-align: center;">{{{image4desc|{{{photo4desc}}}}}}</div>}}}}}} |
|
| | {{#if:{{{image5|{{{photo5|}}}}}}|{{Infobox row|Image|[[File:{{{image5|{{{photo5}}}}}}|200px|center]]{{#if:{{{image5desc|{{{photo5desc|}}}}}}|<div style="text-align: center;">{{{image5desc|{{{photo5desc}}}}}}</div>}}}}}} |
| local json = {
| | {{#if:{{{image6|{{{photo6|}}}}}}|{{Infobox row|Image|[[File:{{{image6|{{{photo6}}}}}}|200px|center]]{{#if:{{{image6desc|{{{photo6desc|}}}}}}|<div style="text-align: center;">{{{image6desc|{{{photo6desc}}}}}}</div>}}}}}} |
| images = {},
| | {{#if:{{{image7|{{{photo7|}}}}}}|{{Infobox row|Image|[[File:{{{image7|{{{photo7}}}}}}|200px|center]]{{#if:{{{image7desc|{{{photo7desc|}}}}}}|<div style="text-align: center;">{{{image7desc|{{{photo7desc}}}}}}</div>}}}}}} |
| rows = {}
| | {{#if:{{{image8|{{{photo8|}}}}}}|{{Infobox row|Image|[[File:{{{image8|{{{photo8}}}}}}|200px|center]]{{#if:{{{image8desc|{{{photo8desc|}}}}}}|<div style="text-align: center;">{{{image8desc|{{{photo8desc}}}}}}</div>}}}}}} |
| }
| | {{#if:{{{image9|{{{photo9|}}}}}}|{{Infobox row|Image|[[File:{{{image9|{{{photo9}}}}}}|200px|center]]{{#if:{{{image9desc|{{{photo9desc|}}}}}}|<div style="text-align: center;">{{{image9desc|{{{photo9desc}}}}}}</div>}}}}}} |
|
| | {{#if:{{{image10|{{{photo10|}}}}}}|{{Infobox row|Image|[[File:{{{image10|{{{photo10}}}}}}|200px|center]]{{#if:{{{image10desc|{{{photo10desc|}}}}}}|<div style="text-align: center;">{{{image10desc|{{{photo10desc}}}}}}</div>}}}}}} |
| local imageArea = args.imagearea
| | {{#if:{{{brand|}}}|{{Infobox row|Brand|{{{brand}}}}}}} |
| if not imageArea and imageArea ~= 'none' then
| | {{#if:{{{model|}}}|{{Infobox row|Model|{{{model}}}}}}} |
| local images = {}
| | {{#if:{{{colors|}}}|{{Infobox row|Available Colors|{{{colors}}}}}}} |
| local defaultImageSize = args.defaultimagesize or '150px'
| | {{#if:{{{formfactor|}}}|{{Infobox row|Form Factor|{{{formfactor}}}}}}} |
| local defaultImageClass = args.defaultimageclass
| | {{#if:{{{answeringmachine|}}}|{{Infobox row|Built-in Answering Machine|{{{answeringmachine}}}}}}} |
| args.image1 = args.image1 or args.image or 'title'
| | {{#if:{{{series|}}}|{{Infobox row|Series|{{{series}}}}}}} |
| args.image1size = args.image1size or args.imagesize
| | {{#if:{{{line|}}}|{{Infobox row|Line|{{{line}}}}}}} |
| args.image1class = args.image1class or args.imageclass
| | {{#if:{{{introduced|}}}|{{Infobox row|Introduced|{{{introduced}}}}}}} |
| args.group1 = args.group1 or args.group
| | {{#if:{{{discontinued|}}}|{{Infobox row|Discontinued|{{{discontinued}}}}}}} |
| args.group1size = args.group1size or args.groupsize
| | {{#if:{{{predecessor|}}}|{{Infobox row|Predecessor|{{{predecessor}}}}}}} |
| args.group1class = args.group1class or args.groupclass
| | {{#if:{{{successor|}}}|{{Infobox row|Successor|{{{successor}}}}}}} |
|
| | {{#if:{{{lines|}}}|{{Infobox row|Number of Lines|{{{lines}}}}}}} |
| local imgCount = {}
| | {{#if:{{{ringer|}}}|{{Infobox row|Ringer|{{{ringer}}}}}}} |
| local invImgCount = {}
| | {{#if:{{{frequency|}}}|{{Infobox row|Frequency|{{{frequency}}}}}}} |
| local groupCount = {}
| | {{#if:{{{technology|}}}|{{Infobox row|Wireless Technology|{{{technology}}}}}}} |
| local groupImgList = {}
| | {{#if:{{{range|}}}|{{Infobox row|Operating Range|{{{range}}}}}}} |
| for k, v in pairs( args ) do
| | {{#if:{{{port|}}}|{{Infobox row|Port(s)|{{{port}}}}}}} |
| if type( k ) == 'string' then
| | {{#if:{{{originalprice|}}}|{{Infobox row|Original Retail Price|{{{originalprice}}}}}}} |
| local image, num = k:match( '^(image)(%d+)$' )
| | {{#if:{{{currentprice|}}}|{{Infobox row|Current Retail Price|{{{currentprice}}}}}}} |
| local invImage, invNum = k:match( '^(invimage)(%d+)$' )
| | {{#if:{{{manufacturer|}}}|{{Infobox row|Manufacturer|{{{manufacturer}}}}}}} |
| local group, groupNum = k:match( '^(group)(%d+)$' )
| | {{#if:{{{manual|}}}|{{Infobox row|Manual|[{{{manual}}} View Manual]}}}} |
| local groupImg, groupImgNum = k:match( '^(%d+)-(%d+)$' )
| | | footer = {{#if:{{{notes|}}}|'''Notes:''' {{{notes}}}}} |
| if v:lower() ~= 'none' then
| | }} |
| if image then
| | [[Category:Landline Telephones]] |
| table.insert( imgCount, tonumber( num ) )
| | </includeonly> |
| 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 groupImages = {}
| |
|
| |
| table.sort( groupImgList['group' .. v] )
| |
| for _, w in ipairs( groupImgList['group' .. v] ) do
| |
| local image = args[v .. '-' .. w]
| |
| image = string.gsub(string.gsub(image, "^[Ff][Ii][Ll][Ee]:", ""), "^[Ii][Mm][Aa][Gg][Ee]:", "")
| |
| local size = args[v .. '-' .. w .. 'size'] or groupSize
| |
| local class = args[v .. '-' .. w .. 'class'] or groupClass
| |
|
| |
| 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 .. '.'
| |
| image = '[[File:' .. image .. '|' .. size .. '|class=' .. ( class or '' ) .. '|alt=' .. altText .. ']]'
| |
| end
| |
|
| |
| table.insert( groupImages, '<div>' .. image .. '</div>' )
| |
| end
| |
|
| |
| table.insert( tabber, '|-|' .. group .. '=\n' .. table.concat( groupImages, '\n' ) )
| |
| 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]
| |
| image = string.gsub(string.gsub(image, "^[Ff][Ii][Ll][Ee]:", ""), "^[Ii][Mm][Aa][Gg][Ee]:", "")
| |
| local size = args['image' .. v .. 'size'] or defaultImageSize
| |
| local class = args['image' .. v .. 'class'] or defaultImageClass
| |
|
| |
| 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 .. '.'
| |
| image = '[[File:' .. title .. '.png|' .. size .. '|class=' .. ( class or '' ) .. '|alt=' .. altText .. ']]'
| |
| else
| |
| image = ''
| |
| end
| |
| elseif string.match( image, 'UNIQ%-%-gallery%-' ) then
| |
| image = image
| |
| else
| |
| json.images[#json.images + 1] = image
| |
| local altText = image .. ': Infobox image for ' .. title .. ' the ' .. template .. '.'
| |
| image = '[[File:' .. image .. '|' .. size .. '|class=' .. ( class or '' ) .. '|alt=' .. altText .. ']]'
| |
| end
| |
|
| |
| table.insert( images, '<div>' .. image .. '</div>' )
| |
| end
| |
|
| |
| images = table.concat( images, '\n' )
| |
|
| |
| if images ~= '' then
| |
| imageArea = images
| |
| 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 html = {
| |
| '<div class="infobox">',
| |
| '<div class="infobox-title">' .. title .. '</div>',
| |
| headerArea,
| |
| '{| class="infobox-rows" cellspacing="1" cellpadding="4"',
| |
| '|-',
| |
| args.rows or '',
| |
| footer or '',
| |
| '|}',
| |
| '</div>'
| |
| } | |
| | |
| return table.concat( html, '\n' )
| |
| end
| |
| | |
| return p
| |