Module:Infobox
La documentation pour ce module peut être créée à Module:Infobox/doc
local Infobox = {} local i18n = { ['see doc'] = 'Documentation du modèle', ['edit infobox'] = 'Modifier l\'infobox', } function Infobox:new( args ) -- Initialisation de l'object local object = { text = "", isPart = false } setmetatable(object, { __index = Infobox, __tostring = function( self ) return self:tostring() end }) if args.isPart then object.isPart = true end -- Ouverture de l'élément principal de l'infobox if object.isPart then return object -- On retourne si on construit seulement un module end local class = args.class if class == nil or class == '' then class = "infobox_v3" end local style = args.style local str = mw.html.create('div') :addClass("infobox_v3") :css(style) :done() object.text = tostring(str) return object end function Infobox:addTitle( args ) local str = '<p' if args.class then str = str .. ' class= "' .. args.class ..'"' else str = str .. ' class= "entete"' end if args.style then str = str .. ' style= "' .. table.concat( args.style, '; ' ) .. '"' end str = str .. '>' if args.text and args.text ~= '' then str = str .. args.text else str = str .. mw.title.getCurrentTitle().text end self.text = self.text .. str .. '</p>' end function Infobox:addText( args ) local str = '<p' if args.class then str = str .. ' class= "' .. args.class ..'"' end if args.style then str = str .. ' style= "' .. table.concat( args.style, '; ' ) .. '"' end str = str .. '>' if args.text then str = str .. args.text end self.text = self.text .. str .. '</p>' end function Infobox:openTable( args ) local str = '<table' if args.class then str = str .. ' class="' .. args.class .. '"' end if args.style then str = str .. ' style= "' .. table.concat( args.style, '; ' ) .. '"' end str = str .. '>' if args.text and args.text ~= '' then str = str .. '<caption' if args.styleCaption then str = str .. ' style= "' .. table.concat( args.styleCaption, '; ' ) .. '"' end str = str .. '>' .. args.text .. '</caption>' end self.text = self.text .. str end function Infobox:closeTable( args ) self.text = self.text .. '</table>' end function Infobox:addMixedRow( args ) if not args.value or args.value == '' then if args.cat then self.text = self.text .. '[[Catégorie:' .. args.cat .. ']]'-- ajoute catégorie de maintenance end return end if not args.label then self.text = self.text .. '<tr><td class="error">Le paramètre label n\'est pas renseigné.</td></tr>' return end local str = '<tr><th scope="row"' if args.styleHeader then str = str .. ' style= "' .. table.concat( args.styleHeader, '; ' ) .. '"' end self.text = self.text .. str .. '>' .. args.label .. '</th><td>' if args.hidden and args.hidden == 1 then -- option caché sélectionné: affichage de la valeur sera masqué self.text = self.text .. '<div class="NavFrame" title="[Afficher]/[Masquer]" style="border: none; padding: 0;"><div class="NavContent" style="display: none; text-align: left;">' .. args.value ..'</div></div></td></tr>' elseif args.weblink and args.weblink ~= '' then -- option lien externe self.text = self.text .. '<span class="reflink plainlinksneverexpand">[' .. args.weblink .. args.value .. ' ' .. args.value .. ']</span></td></tr>' else self.text = self.text .. args.value .. '</td></tr>' -- affichage normal de la valeur end end function Infobox:addDoubledRow( args ) if not args.value or args.value == '' then if args.cat then self.text = self.text .. '[[Catégorie:' .. args.cat .. ']]'-- ajoute catégorie de maintenance end return end if not args.label then self.text = self.text .. '<tr><td class="error">Le paramètre label n\'est pas renseigné!!!</td></tr>' return end local str = '<tr><td scope="row" colspan="2"' if args.styleHeader then str = str .. ' style= "' .. table.concat( args.styleHeader, '; ' ) .. '"' end str = str .. '>' .. args.label .. '</td></tr><tr><td scope="row" colspan="2"' if args.styleValue then str = str .. ' style= "' .. table.concat( args.styleValue, '; ' ) .. '"' end self.text = self.text .. str .. '>' .. args.value ..'</td></tr>' end function Infobox:addImages( args ) --Get images local images = {} if not args.images then return end for i,conf in pairs( args.images ) do if conf.name and conf.name ~= '' then table.insert( images, conf ) end end if not next( images ) then return --Pas d'images end local imagesCount = table.maxn( images ) local str = '' if imagesCount == 2 then str = '<div class="image2"' if args.background then str = str .. ' style="background: ' .. args.background .. ';"' end str = str .. '>' end for i,image in pairs( images ) do -- hack pour enlever puis remettre la catégorie de tracking Wikidata du nom de fichier local t = mw.text.split( image.name, '[[', true ) local imagename = t[1] local cat = '' if t[2] then cat = '[[' .. t[2] end str = str .. cat .. '[[Fichier:' .. imagename .. '|thumb' if imagesCount == 1 then str = str .. '|center' end if image.upright then str = str .. '|upright=' .. image.upright else str = str .. '|upright=' .. ( 1 / imagesCount ) end if image.alt then str = str .. '|alt=' .. image.alt else str = str .. '|alt=Description de ' if args.legend then str = str .. 'cette image, également commentée ci-après' else str = str .. 'l\'image ' .. image.name end end str = str .. ']]' end if imagesCount == 2 then str = str .. '</div>' end if args.legend then str = str .. '<p class="legend">' .. args.legend .. '</p>' end self.text = self.text .. str end function Infobox:addFooter( args ) local templatename = args.templatename local pagename = mw.title.getCurrentTitle().prefixedText local class = args.class or '' local itemlink = '' if args.item then itemlink = ' - [[d:' .. args.item .. '|modifier l\'élément Wikidata]]' end text = '<p class="navbar noprint ' .. class .. '" style="1px;">' .. '<span class="plainlinks">' .. '[' .. tostring( mw.uri.fullUrl( pagename, '&action=edit§ion=0' ) ) .. ' ' .. i18n['edit infobox'] .. ']' .. itemlink .. '</span>' .. '[[Image:Gtk-dialog-info.svg|12px|link=' .. templatename .. '|' .. i18n['see doc'] .. ']]' .. '</p>' self.text = self.text .. text end function Infobox:tostring() if self.isPart then return self.text else return self.text .. '</div>' end end --Create a style property value from an array CSS property = CSS value --function formatStyle( args ) -- local elems = {} -- for key, val in pairs( args ) do -- table.insert( elems, key .. ':' .. val ) -- end -- return table.concat( elems, '; ' ) --end local p = {} function p.new( args ) return Infobox:new( args ) end function p.test() local a = Infobox:new( {} ) a:addTitle( {} ) a:addImages( { images = { { name = 'Pellicule.jpg' }, { name = 'Pellicule.jpg' } }, legend = 'legend' } ) a:openTable( {} ) a:addMixedRow( { label = 'Test', value = 'test' } ) a:closeTable( {} ) return tostring(a) end return p