« Module:Infobox » : différence entre les versions
Apparence
Modèle:Infobox>Tpt + images |
Modèle:Infobox>Tpt + support des modules |
||
| Ligne 11 : | Ligne 11 : | ||
__tostring = function( self ) return self:tostring() end | __tostring = function( self ) return self:tostring() end | ||
}) | }) | ||
if args.isPart then | |||
object.isPart = true | |||
end | |||
--Open main div | --Open main div | ||
if object.isPart then | |||
return object --On retourne si on construit seulement un module | |||
end | |||
local str = '<div class="infobox_v3 ' | local str = '<div class="infobox_v3 ' | ||
if args.class then | if args.class then | ||
| Ligne 176 : | Ligne 184 : | ||
function Infobox:tostring() | function Infobox:tostring() | ||
return self.text .. '</div>' | if self.isPart then | ||
return self.text | |||
else | |||
return self.text .. '</div>' | |||
end | |||
end | end | ||
Version du 1 avril 2013 à 15:41
La documentation pour ce module peut être créée à Module:Infobox/doc
local Infobox = {}
function Infobox:new( args )
--Object initialisation
local object = {
text = "",
title = mw.title.getCurrentTitle()
}
setmetatable(object, {
__index = Infobox,
__tostring = function( self ) return self:tostring() end
})
if args.isPart then
object.isPart = true
end
--Open main div
if object.isPart then
return object --On retourne si on construit seulement un module
end
local str = '<div class="infobox_v3 '
if args.class then
str = str .. args.class
end
str = str ..'"'
if args.width then
str = str .. ' style="width: ' .. args.width .. 'em"'
end
object.text = str .. '>'
return object
end
function Infobox:addTitle( args )
local str = '<p class="entete '
if args.icon then
str = str .. 'icon ' .. args.icon
end
if args.class then
str = str .. args.class
end
str = str .. '"'
if args.background then
local style = {}
style['background-color'] = args.background
if args.border-color then
style['border-color'] = args.border-color
else
style['border-color'] = args.background
end
if args.color then
style['color'] = args.color
end
str = str .. 'style="' .. formatStyle( style ) .. '"'
end
str = str .. '>'
if args.text and args.text ~= '' then
str = str .. args.text
else
str = str .. self.title.text
end
self.text = self.text .. str .. '</p>'
end
function Infobox:openTable( args )
local str = '<table'
if args.type then
str = str .. ' class="' .. args.type .. '"'
end
str = str .. '><caption'
if class then
str = str .. ' class="' .. args.class .. '"'
end
--Style of the caption
local style = {}
if args.border then
style['border-color'] = args.border
end
if args.background then
style['background'] = args.background
if args.color then
style['color'] = args.color
end
end
if style ~= {} then
str = str .. ' style="' .. formatStyle( style ) .. '"'
end
str = str .. '>'
if args.text and args.text ~= '' then
str = str .. args.text
else
str = str .. 'Données clés'
end
self.text = self.text .. str .. '</caption>'
end
function Infobox:closeTable( args )
self.text = self.text .. '</table>'
end
function Infobox:addMixedRow( args )
if not args.value or args.value == '' then
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>'
end
local str = '<tr><th scope="row"'
if args.class then
str = str .. ' class="' .. args.class .. '"'
end
local style = {}
if args.width then
style['width'] = args.width .. 'em'
end
if style ~= {} then
str = str .. ' style="' .. formatStyle( style ) .. '"'
end
self.text = self.text .. str .. '>' .. args.label .. '</th><td>' .. 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 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
str = str .. '[[Fichier:' .. image.name .. '|thumb|upright='
if image.upright then
str = str .. image.upright
else
str = str .. ( 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: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
elems.add( 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