« Module:Infobox » : différence entre les versions
Aller à la navigation
Aller à la recherche
suppression de Infobox.title (inutile dans la plus part des cas) |
+ support Wikidata expérimental |
||
| Ligne 5 : | Ligne 5 : | ||
local object = { | local object = { | ||
text = "", | text = "", | ||
isPart = false | isPart = false, | ||
entity = nil --Lazy loading of the related Wikidata item | |||
} | } | ||
setmetatable(object, { | setmetatable(object, { | ||
| Ligne 32 : | Ligne 33 : | ||
return object | return object | ||
end | end | ||
function Infobox:addText( args ) | function Infobox:addText( args ) | ||
self.text = self.text .. args.text | self.text = self.text .. args.text | ||
end | end | ||
function Infobox:getEntity() | |||
if self.entity == nil then | |||
self.entity = mw.wikibase.getEntity() | |||
end | |||
return self.entity | |||
end | |||
function Infobox:addTitle( args ) | function Infobox:addTitle( args ) | ||
| Ligne 105 : | Ligne 113 : | ||
function Infobox:addMixedRow( args ) | function Infobox:addMixedRow( args ) | ||
--Get value from Wikidata if needed | |||
if args.property and ( not args.value or args.value == '' ) then | |||
local entity = self:getEntity() | |||
if entity then | |||
local Wikidata = require 'Module:Wikidata' | |||
args.value = Wikidata.formatStatementsFromLua( { | |||
entity = entity, | |||
property = args.property, | |||
rank = args.rank | |||
} ) | |||
end | |||
end | |||
if not args.value or args.value == '' then | if not args.value or args.value == '' then | ||
return | return | ||
Version du 1 juin 2013 à 08:20
local Infobox = {}
function Infobox:new( args )
--Object initialisation
local object = {
text = "",
isPart = false,
entity = nil --Lazy loading of the related Wikidata item
}
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 = '
'
return object
end
function Infobox:addText( args )
self.text = self.text .. args.text
end
function Infobox:getEntity()
if self.entity == nil then
self.entity = mw.wikibase.getEntity()
end
return self.entity
end
function Infobox:addTitle( args )
local 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 .. '
'end
function Infobox:openTable( args )
local str = '<table'
str = str .. '><caption'
if args.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 next( 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 .. ''
end
function Infobox:closeTable( args )
self.text = self.text .. ''
end
function Infobox:addMixedRow( args )
--Get value from Wikidata if needed
if args.property and ( not args.value or args.value == ) then
local entity = self:getEntity()
if entity then
local Wikidata = require 'Module:Wikidata'
args.value = Wikidata.formatStatementsFromLua( {
entity = entity,
property = args.property,
rank = args.rank
} )
end
end
if not args.value or args.value == then
return
end
if not args.label then
self.text = self.text .. 'Le paramètre label n\'est pas renseigné.'
return endlocal str = '' .. args.label .. '' .. args.value .. ''
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 thenstr = '
'
'
end
for i,image in pairs( images ) do
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 thenstr = str .. '
end
if args.legend thenstr = str .. '
' .. args.legend .. '
'end self.text = self.text .. str
end
function Infobox:tostring()
if self.isPart then
return self.text
else
return self.text .. ''
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