Modulis:InfoboxBuilder
Moduļa dokumentācija[izveidot]
Iespējams, vēlies izveidot dokumentāciju šim modulim Vari eksperimentēt šī moduļa smilšu kastes (izveidot | spoguļversija) un testu (izveidot) lapā Lūdzu, kategorijas pievieno dokumentācijas apakšlapā. Moduļa apakšlapas. |
Builder = {}
local datamodule = require('Module:Wikidata/fr')
function Builder:build( conf, frame, templatename )
--Object initialisation
local object = {
frame = frame,
infobox = nil
}
item = nil -- variable globale
if frame.args.wikidata ~= 'non' then
item = mw.wikibase.getEntity() -- devrait devenir l'ID de l'éléménet Wikiata quand ce sera possible
end
templatename = conf.templatename
setmetatable(object, {
__index = Builder,
__tostring = function( self ) return tostring( self.infobox ) end
})
-- Création de l'infobox
local infoboxModule = require 'Module:Frwiki infokaste'
object.infobox = infoboxModule.new( conf )
--Ajout des éléments de l'infobox
for i, part in pairs( conf.parts ) do
object:buildElement( part )
end
-- Footer
local itemid = nil
if item then
itemid = item.id
end --apparemment nécessaire de faire ça sur cette page, peut-être à cause des problèmes de transclusion Wikidata
object:buildElement({type= 'footer', item = itemid, templatename = templatename })
return tostring( object.infobox )
end
function Builder:buildElement( conf )
if not conf.type then
self.infobox:addText( { text = '<span class="error">Vous devez donnez un "type" à chaque élément de l\'infobox</span>' } )
return
end
if conf.type == 'title' then
self:buildTitle( conf )
elseif conf.type == 'table' then
self:buildTable( conf )
elseif conf.type == 'images' then
self:buildImages( conf )
elseif conf.type == 'text' then
self:buildText( conf )
elseif conf.type == 'footer' then
self:buildFooter( conf )
else
self.infobox:addText( { text = '<span class="error">Le type ' .. conf.type .. ' est inconnu</span>' } )
end
end
function Builder:buildTitle( conf )
conf.text = self:getValueForParam(conf.value, conf.default, conf.wikidata, conf.property)
conf.background = self:getValueForParam(conf.background)
self.infobox:addTitle( conf )
end
function Builder:buildTable( conf )
-- if then -- si la table contient une autre table
-- self:buildTable( conf )
-- else
self.infobox:openTable( conf )
if conf.rows then
for i, row in pairs( conf.rows ) do
self:buildRow( row )
end
end
-- end
self.infobox:closeTable( {} )
end
function Builder:buildImages( conf )
if not conf.images then
self.infobox:addText( { text = '<span class="error">Vous devez remplire le paramètre images de la configuration</span>' } )
return
end
local imagesConf = {}
for i,imconf in pairs( conf.images ) do
imconf.name = self:getValueForParam( imconf.value, imconf.default, imconf.wikidata, imconf.property )
table.insert( imagesConf, imconf )
end
conf.images = imagesConf
conf.legend = self:getValueForParam( conf.legendText, legenddDefault )
self.infobox:addImages( conf )
end
function Builder:buildRow( conf )
if not conf.type then
self.infobox:addText( { text = '<span class="error">Vous devez donnez un "type" à chaque ligne de l\'infobox</span>' } )
return
end
if conf.type == 'mixed' then
self:buildMixedRow( conf )
elseif conf.type == 'doubled' then
self:buildDoubledRow( conf )
elseif conf.type == 'text' then
self:buildText( conf )
else
self.infobox:addText( { text = '<span class="error">Le type ' .. conf.type .. ' est inconnu</span>' } )
end
end
function Builder:buildFooter(conf)
self.infobox:addFooter(conf)
end
function Builder:buildMixedRow( conf )
conf.value = self:getValueForParam(conf.value, conf.default, conf.wikidata, conf.property )
self.infobox:addMixedRow( conf )
end
function Builder:buildDoubledRow( conf )
conf.value = self:getValueForParam(conf.value, conf.default, conf.wikidata, conf.propety )
self.infobox:addDoubledRow( conf )
end
function Builder:buildText( conf )
if not conf.value then
self.infobox:addText( { text = '<span class="error">Vous devez renseigner le paramètre "text"</span>' } )
return
end
conf.text = self:getValueForParam( conf.value, conf.default, conf.wikidata, conf.property )
self.infobox:addText( conf )
end
function Builder:getValueForParam( value, default, wikidata, property )
-- valeur donnée dans le Wikitexte
if type(value) == 'function' then
local val = value(self.frame)
if val and val ~= '' then
return val
end
end
if type(value) == 'string' then
local val = self.frame.args[value]
if val and val ~= '' then
return val
end
end
-- par défaut, cherche sur Wikidata
if item and wikidata then
return wikidata
end
if item and property then
return datamodule._formatStatements({property= property, item = item, separator = ', ', conjunction = ', '})
end
if default then
return default
end
end
local p = {}
function p.build( frame )
if not frame.args.nom then
return '<span class="error">Infobox inconnu</span>'
end
local conf = require('Module:InfoboxBuilder/' .. frame.args.nom)
if not conf then
return '<span class="error">Erreur lors du chargement de' .. templatename .. ']]</span>'
end
newframe = frame:getParent()
conf.templatename = newframe:getTitle()
return Builder:build( conf, newframe )
end
return p