« Module:Infobox » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
Aucun résumé des modifications
0x010D (discussion | contributions)
mAucun résumé des modifications
Ligne 15 : Ligne 15 :




local function getWikidataValue(params) -- helper function
local function getWikidataValue(params)
-- Récupère la valeur Wikidata pour la valeur, soit dans le paramètre "wikidata" soit dans le praramètre "property"
if not item then
if not item then
return nil
return nil
Ligne 21 : Ligne 22 :
params.item = item
params.item = item
if params.wikidata then
if params.wikidata then
if type(params.wikidata) == 'function' then
return params.wikidata()
return params.wikidata()
else
return params.wikidata
end
elseif params.property then
elseif params.property then
local value = wikidata.formatStatements({property = params.property})
local value = wikidata.formatStatements({property = params.property})
Ligne 32 : Ligne 29 :
return value
return value
end
end
else
return nil
end
end
end
end
Ligne 309 : Ligne 304 :
style['font-size'] = '80%'
style['font-size'] = '80%'
end
end
local backlinktext = '[' .. tostring( mw.uri.fullUrl( pagename, '&action=edit&section=0' ) ) .. ' ' .. i18n['edit infobox'] .. ']'
local backlinkstr = '[' .. tostring( mw.uri.fullUrl( pagename, '&action=edit&section=0' ) ) .. ' ' .. i18n['edit infobox'] .. ']'
local backlink =  mw.html.create('span')
 
:wikitext(backlinktext)
local itemlinkstr
:addClass('plainlinks')
:done()
local itemlinktext = ''
if item then
if item then
itemlinktext = '[[d:' .. item.id .. '|' .. i18n['edit item'] .. ']]'
itemlinkstr = '[[d:' .. item.id .. '|' .. i18n['edit item'] .. ']]'
end
local editstr = backlinkstr
if itemlinkstr then
editstr = editstr .. ' - ' .. itemlinkstr
end
end
local itemlink =  mw.html.create('span')
local editlinkspan =  mw.html.create('span')
:wikitext(itemlinktext)
:css({['text-align'] = "left"})
:addClass('plainlinks')
:wikitext(editstr)
:done()
:done()
local doclinktext = '[[Image:Gtk-dialog-info.svg|12px|link=' .. infoboxname .. '|' .. i18n['see doc'] .. ']]'
local doclinkstr = '[[Image:Gtk-dialog-info.svg|12px|link=' .. infoboxname .. '|' .. i18n['see doc'] .. ']]'
local doclink = mw.html.create('span')
local doclinkspan = mw.html.create('span')
:css({['text-align'] = "right"})
:css({['text-align'] = "right"})
:wikitext(doclinktext)
:wikitext(doclinkstr)
:done()
:done()
Ligne 332 : Ligne 329 :
:addClass(class)
:addClass(class)
:css(style)
:css(style)
:node(backlink)
:node(editlinkspan)
:node(itemlink)
:node(doclinkspan)
:node(doclink)
return footer
return footer
end
end

Version du 22 septembre 2014 à 17:59

local p = {} local infobox = mw.html.create('div') local wikidata = require('Module:Wikidata') local maintenance = local infoboxname, infoboxmodule local localdata = {} local pagename = mw.title.getCurrentTitle().prefixedText local maincolor -- la couleur par défaut des titres, sous-titres etc.

local i18n = { ['see doc'] = 'Documentation du modèle', ['edit infobox'] = 'modifier l\'infobox', ['edit item'] = 'modifier Wikidata' }


local function getWikidataValue(params) -- Récupère la valeur Wikidata pour la valeur, soit dans le paramètre "wikidata" soit dans le praramètre "property" if not item then return nil end params.item = item if params.wikidata then return params.wikidata() elseif params.property then local value = wikidata.formatStatements({property = params.property}) if value then maintenance = maintenance .. return value end end end

local function buildtitle(params) local text = text or localdata[params.value] or params.textdefaultvalue or mw.title.getCurrentTitle().text local class = params.class or "entete" local style = params.style or {} if not style['background-color'] then style['background-color'] = maincolor end local text = localdata[params.value] or params.textdefaultvalue or mw.title.getCurrentTitle().text local title = mw.html.create('p') :addClass(class) :css(style) :wikitext(text) :done() return title end

local function buildnavbox(params) local class = "overflow nav " .. (params.class or ) local style = params.style or {['border-width'] = '1px'} if not style['border-color'] then style['border-color'] = maincolor end local previousval = localdata[params.previousparameter] local nextval = localdata[params.nextparameter] local navbox = mw.html.create('p') :addClass(class) :css(style) :tag('span') :addClass('prev_bloc') :wikitext(previousval) :done() :tag('span') :addClass('next_bloc') :wikitext(nextval) :done() :done() return navbox end


local function buildimages(params) local images = {} for j, k in ipairs(params.imageparameters) do table.insert(images, localdata[k]) end if #images == 0 then images = getWikidataValue(params) end if (not images) or #images == 0 then images = params.defaultimage end if not images then return nil end local captiontext = localdata[params.captionparameter] or params.defaultcaption if type(captiontext) == 'function' then captiontext = captiontext(localdata) end local style = params.style or {padding ='5px 0'} local class = "images" if #images == 2 then class = "image2" end

-- Partie image

local imagesString = for i,image in pairs(images) do imagesString = imagesString .. 'upright=' .. ( 1 / #images ) end imagesString = imagesString .. ''

   end

local image = mw.html.create('div') :css(style) :addClass("images") :wikitext(imagesString)

-- Partie légende local caption = mw.html.create('p') if captiontext then caption :wikitext(captiontext) :css(params.style or {}) :addClass("legend") :done() end

return image, caption end

local function buildtext(params) local class = params.class or local style = params.style or {} if not style['background-color'] then style['background-color'] = maincolor end local text = localdata[params.value] or getWikidataValue(params) or params.defaulttext

if not text then return nil -- à ajouter : option cat de maintenance end local formattedtext = mw.html.create('p') :addClass(class) :css(style) :wikitext(text) :done() return formattedtext end

local function buildmixedrow(params) local class = params.class or local style = params.style or {} local value

-- retrieve value if type(params.value) == 'function' then local raw = params.value value = raw(localdata) elseif type(params.value) == 'string' then value = localdata[params.value] end

if not value then value = getWikidataValue(params) or params.defaultvalue end

local label = params.label if not value then return nil -- todo: maintenance end

-- formatting local formattedvalue = mw.html.create('div') :wikitext(value)

if (params.hidden == true)then formattedvalue :attr({class="NavContent", style="display: none; text-align: left;"}) formattedvalue = mw.html.create('div') :attr({class="NavFrame", title="[Afficher]/[Masquer]", style="border: none; padding: 0;"}) :node(formattedvalue) end formattedvalue = mw.html.create('td') :node(formattedvalue) :allDone()

local formattedlabel = mw.html.create('th') :attr('scope', 'row') :wikitext(label) :done()

local row = mw.html.create('tr') :addClass(class) :css(style) :node(formattedlabel) :node(formattedvalue) :done()

return row end

local function buildtable(params) local tab = mw.html.create('table') local title if params.title then local text if type(params.title) == 'string' then -- raccourci moche mais pratique : n'utiliser qu'une chaîne pour le titre text = params.title else text = params.title.value or error('no value provided for this title') params = {} end local style = params.title.style or {['text-align'] = 'center', color = '000000'} if not style['background-color'] then style['background-color'] = maincolor end local colspan = params.title.colspan or '2' title = mw.html.create('th') :attr({colspan = 2}) :css(style) :wikitext(text) :done() end local rows = {} -- does not add the rows directly to tab: check if some rows are non empty beoforehand so that we do not add a title if there are no data to show for k, l in pairs(params.rows) do if type(l) == 'table' and l.type == 'mixed' then local row = buildmixedrow(l) if row then table.insert(rows, row) end end end if title and (#rows > 0) then tab:node(title) end if #rows > 0 then for i, j in pairs (rows) do tab:node(j) end end tab:allDone() return tab end

local function buildmap(params) -- A faire local image = 'France_location_map-Regions_and_departements.svg' local image2 = 'France_location_map-Regions_and_departements.svg'

local map1 = mw.html.create('div') :addClass("geobox") :tag('table') :addClass('DebutCarte') :attr({border="0", cellspacing="0", cellpadding="0"}) :css({margin = '0', border = 'none', padding = '0', ['text-align'] = 'center'}) :tag('tr') :tag('td') :tag('div') :css({position= 'relative', margin = "auto"}) :wikitext('(Voir situation sur carte : [[{{Géolocalisation/{{{1}}}') :done() :done() :done() :done() local map1 = mw.html.create('div') :addClass("geobox") :tag('table') :addClass('DebutCarte') :attr({border="0", cellspacing="0", cellpadding="0"}) :css({margin = '0', border = 'none', padding = '0', ['text-align'] = 'center'}) :tag('tr') :tag('td') :tag('div') :css({position= 'relative', margin = "auto"}) :wikitext('{{{alt}}}') :done() :done() :done() :done() local div = mw.html.create('div') :addClass("img_toogle") :node(map1):done() :node(map2):done() :allDone() return div end

local function buildfooter(params) if not params then params = {} end

local class = 'navbar noprint ' .. (params.class or ) local style = params.style or {} if not style['border-top-style'] then style['border-top-style'] = 'solid' end if not style['border-width'] then style['border-width'] = '1px' end if not style['border-color'] then style['border-color'] = maincolor end if not style['font-size'] then style['font-size'] = '80%' end local backlinkstr = '[' .. tostring( mw.uri.fullUrl( pagename, '&action=edit&section=0' ) ) .. ' ' .. i18n['edit infobox'] .. ']'

local itemlinkstr if item then itemlinkstr = '' .. i18n['edit item'] .. '' end local editstr = backlinkstr if itemlinkstr then editstr = editstr .. ' - ' .. itemlinkstr end local editlinkspan = mw.html.create('span') :css({['text-align'] = "left"}) :addClass('plainlinks') :wikitext(editstr) :done()

local doclinkstr = '' .. i18n['see doc'] .. '' local doclinkspan = mw.html.create('span') :css({['text-align'] = "right"}) :wikitext(doclinkstr) :done()

local footer = mw.html.create('p') :addClass(class) :css(style) :node(editlinkspan) :node(doclinkspan) return footer end

function p._build(localinfoboxmodule) -- analyse le module d'infobox local style = localinfoboxmodule.style or {} local class = localinfoboxmodule.class or "infobox_v3" local parts = localinfoboxmodule.parts maincolor = localinfoboxmodule.maincolor or "#E1E1E1" local footerparams = localinfoboxmodule.footer or {} infobox:css(style) infobox:addClass(class)

for i, j in pairs(parts) do if type(j) ~= 'table' then return 'error' elseif j.type == 'title' then infobox:node(buildtitle(j)) elseif j.type == 'images' then local image, caption = buildimages(j) infobox:node(image):node(caption) elseif j.type == 'text' then infobox:node(buildtext(j)) elseif j.type == 'map' then infobox:node(buildmap(j)) elseif j.type == 'navbox' then infobox:node(buildnavbox(j)) elseif j.type == 'table' then infobox:node(buildtable(j)) end end local div = mw.html.create('div') infobox:node(div):node(tab) infobox :node(buildfooter(footerparams)) :done() return tostring(infobox) .. maintenance end

function p.build(frame) -- set variables infoboxname = 'Module:Infobox/' .. frame.args.nom localinfoboxmodule = require(infoboxname)

-- get the localinfoboxmodule parameter values and clen them up for i, j in pairs(frame:getParent().args) do if j and mw.text.trim(j) ~= then localdata[i] = j end end -- fetch wikidata item and assign it to the item global variable if localdata.wikidata == 'non' then item = nil elseif (not localdata.wikidata) or (localdata.wikidata == ) then item = mw.wikibase.getEntityObject() else item = mw.wikibase.getEntityObject() -- todo: fetch arbitrary item and check for errors end -- build infobox return p._build(localinfoboxmodule) end

return p