infobox

La documentación para este módulo puede ser creada en Módulo:Infobox/doc

-- -- This module implements {{Infobox}} --   local p = {} local wikiLang = 'qu'  local navbar = require('Module:Navbar')._navbar  local args = {} local origArgs local root  local item = nil -- l'élément Wikidata lié local localdata = {}-- données concernant les paramètres passés au modèle local page = { -- données concernant la page où est affichée l'infobox name = mw.title.getCurrentTitle().prefixedText, namespace =  mw.title.getCurrentTitle().namespace } local maincolor, secondcolor, thirdcolor = '#E1E1E1', '#E1E1E1', '#000000' -- l'objet principal à retourner local infobox = mw.html.create('div')  -- objets secondaires à retourner local maintenance = '' -- chaîne retournée avec le module : cats de maintenance local externaltext = '' -- par exemple coordonnées en titre -- modules importés local linguistic = require "Módulo:Simi-yachay" local wd = require 'Módulo:Wikidata' local yesno = require 'Módulo:Yesno'  --->local valueexpl = wd.translate("activate-query") <--- local function union(t1, t2)     -- Returns the union of the values of two tables, as a sequence.     local vals = {}     for k, v in pairs(t1) do         vals[v] = true     end     for k, v in pairs(t2) do         vals[v] = true     end     local ret = {}     for k, v in pairs(vals) do         table.insert(ret, k)     end     return ret end  local function getArgNums(prefix)     -- Returns a table containing the numbers of the arguments that exist     -- for the specified prefix. For example, if the prefix was 'data', and     -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.     local nums = {}     for k, v in pairs(args) do         local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')         if num then table.insert(nums, tonumber(num)) end     end     table.sort(nums)     return nums end  local function addRow(rowArgs)     -- Adds a row to the infobox, with either a header cell     -- or a label/data cell combination.     if rowArgs.header then         root             :tag('tr')                 :addClass(rowArgs.rowclass)                 :cssText(rowArgs.rowstyle)                 :attr('id', rowArgs.rowid)                 :tag('th')                     :attr('colspan', 2)                     :attr('id', rowArgs.headerid)                     :addClass(rowArgs.class)                     :addClass(args.headerclass)                     :css('text-align', 'center')                     :cssText(args.headerstyle)                     :wikitext(rowArgs.header)     elseif rowArgs.data then         local row = root:tag('tr')         row:addClass(rowArgs.rowclass)         row:cssText(rowArgs.rowstyle)         row:attr('id', rowArgs.rowid)         if rowArgs.label then             row                 :tag('th')                     :attr('scope', 'row')                     :attr('id', rowArgs.labelid)                     :cssText(args.labelstyle)                     :wikitext(rowArgs.label)                     :done()         end                  local dataCell = row:tag('td')         if not rowArgs.label then              dataCell                 :attr('colspan', 2)                 :css('text-align', 'center')          end         dataCell             :attr('id', rowArgs.dataid)             :addClass(rowArgs.class)             :cssText(rowArgs.datastyle)             :newline()             :wikitext(rowArgs.data)     end end  local function renderTitle()     if not args.title then return end      root         :tag('caption')             :addClass(args.titleclass)             :cssText(args.titlestyle)             :wikitext(args.title) end  local function renderAboveRow()     if not args.above then return end          root         :tag('tr')             :tag('th')                 :attr('colspan', 2)                 :addClass(args.aboveclass)                 :css('text-align', 'center')                 :css('font-size', '125%')                 :css('font-weight', 'bold')                 :cssText(args.abovestyle)                 :wikitext(args.above) end  local function renderBelowRow()     if not args.below then return end          root         :tag('tr')             :tag('td')                 :attr('colspan', '2')                 :addClass(args.belowclass)                 :css('text-align', 'center')                 :cssText(args.belowstyle)                 :newline()                 :wikitext(args.below) end  local function renderSubheaders()     if args.subheader then         args.subheader1 = args.subheader     end     if args.subheaderrowclass then         args.subheaderrowclass1 = args.subheaderrowclass     end     local subheadernums = getArgNums('subheader')     for k, num in ipairs(subheadernums) do         addRow({             data = args['subheader' .. tostring(num)],             datastyle = args.subheaderstyle or args['subheaderstyle' .. tostring(num)],             class = args.subheaderclass,             rowclass = args['subheaderrowclass' .. tostring(num)]         })     end end  local function renderImages()     if args.image then         args.image1 = args.image     end     if args.caption then         args.caption1 = args.caption     end     local imagenums = getArgNums('image')     for k, num in ipairs(imagenums) do         local caption = args['caption' .. tostring(num)]         local data = mw.html.create():wikitext(args['image' .. tostring(num)])         if caption then             data                 :tag('div')                     :cssText(args.captionstyle)                     :wikitext(caption)         end         addRow({             data = tostring(data),             datastyle = args.imagestyle,             class = args.imageclass,             rowclass = args['imagerowclass' .. tostring(num)]         })     end end  local function renderRows()     -- Gets the union of the header and data argument numbers,     -- and renders them all in order using addRow.     local rownums = union(getArgNums('header'), getArgNums('data'))     table.sort(rownums)     for k, num in ipairs(rownums) do         addRow({             header = args['header' .. tostring(num)],             label = args['label' .. tostring(num)],             data = args['data' .. tostring(num)],             datastyle = args.datastyle,             class = args['class' .. tostring(num)],             rowclass = args['rowclass' .. tostring(num)],             rowstyle = args['rowstyle' .. tostring(num)],             dataid = args['dataid' .. tostring(num)],             labelid = args['labelid' .. tostring(num)],             headerid = args['headerid' .. tostring(num)],             rowid = args['rowid' .. tostring(num)]         })     end end  local function renderNavBar()     if not args.name then return end          root         :tag('tr')             :tag('td')                 :attr('colspan', '2')                 :css('text-align', 'right')                 :wikitext(navbar{                     args.name,                     mini = 1,                 }) end  local function renderItalicTitle()     local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])     if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then         root:wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))     end end  local function renderTrackingCategories()     if args.decat ~= 'yes' then         if #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then             root:wikitext('[[Category:Articles which use infobox templates with no data rows]]')         end         if args.child == 'yes' and args.title then             root:wikitext('[[Category:Pages which use embedded infobox templates with the title parameter]]')         end     end end  local function _infobox()     -- Specify the overall layout of the infobox, with special settings     -- if the infobox is used as a 'child' inside another infobox.     if args.child ~= 'yes' then         root = mw.html.create('table')                  root             :addClass('infobox')             :addClass(args.bodyclass)                          if args.subbox == 'yes' then                 root                     :css('padding', '0')                     :css('border', 'none')                     :css('margin', '-3px')                     :css('width', 'auto')                     :css('min-width', '100%')                     :css('font-size', '100%')                     :css('clear', 'none')                     :css('float', 'none')                     :css('background-color', 'transparent')             else                 root                     :css('width', '22em')             end         root             :cssText(args.bodystyle)              renderTitle()         renderAboveRow()     else         root = mw.html.create()                  root             :wikitext(args.title)     end      renderSubheaders()     renderImages()      renderRows()      renderBelowRow()       renderNavBar()     renderItalicTitle()     renderTrackingCategories()          return tostring(root) end  local function preprocessSingleArg(argName)     -- If the argument exists and isn't blank, add it to the argument table.     -- Blank arguments are treated as nil to match the behaviour of ParserFunctions.     if origArgs[argName] and origArgs[argName] ~= '' then         args[argName] = origArgs[argName]     end end  local function preprocessArgs(prefixTable, step)     -- Assign the parameters with the given prefixes to the args table, in order, in batches     -- of the step size specified. This is to prevent references etc. from appearing in the     -- wrong order. The prefixTable should be an array containing tables, each of which has     -- two possible fields, a "prefix" string and a "depend" table. The function always parses     -- parameters containing the "prefix" string, but only parses parameters in the "depend"     -- table if the prefix parameter is present and non-blank.     if type(prefixTable) ~= 'table' then         error("Non-table value detected for the prefix table", 2)     end     if type(step) ~= 'number' then         error("Invalid step value detected", 2)     end          -- Get arguments without a number suffix, and check for bad input.     for i,v in ipairs(prefixTable) do         if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then             error('Invalid input detected to preprocessArgs prefix table', 2)         end         preprocessSingleArg(v.prefix)         -- Only parse the depend parameter if the prefix parameter is present and not blank.         if args[v.prefix] and v.depend then             for j, dependValue in ipairs(v.depend) do                 if type(dependValue) ~= 'string' then                     error('Invalid "depend" parameter value detected in preprocessArgs')                 end                 preprocessSingleArg(dependValue)             end         end     end      -- Get arguments with number suffixes.     local a = 1 -- Counter variable.     local moreArgumentsExist = true     while moreArgumentsExist == true do         moreArgumentsExist = false         for i = a, a + step - 1 do             for j,v in ipairs(prefixTable) do                 local prefixArgName = v.prefix .. tostring(i)                 if origArgs[prefixArgName] then                     moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.                     preprocessSingleArg(prefixArgName)                 end                 -- Process the depend table if the prefix argument is present and not blank, or                 -- we are processing "prefix1" and "prefix" is present and not blank, and                 -- if the depend table is present.                 if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then                     for j,dependValue in ipairs(v.depend) do                         local dependArgName = dependValue .. tostring(i)                         preprocessSingleArg(dependArgName)                     end                 end             end         end         a = a + step     end end   function p.infobox(frame)     -- If called via #invoke, use the args passed into the invoking template.     -- Otherwise, for testing purposes, assume args are being passed directly in.     if frame == mw.getCurrentFrame() then         origArgs = frame:getParent().args     else         origArgs = frame     end          -- Parse the data parameters in the same order that the old {{infobox}} did, so that     -- references etc. will display in the expected places. Parameters that depend on     -- another parameter are only processed if that parameter is present, to avoid     -- phantom references appearing in article reference lists.     preprocessSingleArg('child')     preprocessSingleArg('bodyclass')     preprocessSingleArg('subbox')     preprocessSingleArg('bodystyle')     preprocessSingleArg('title')     preprocessSingleArg('titleclass')     preprocessSingleArg('titlestyle')     preprocessSingleArg('above')     preprocessSingleArg('aboveclass')     preprocessSingleArg('abovestyle')     preprocessArgs({         {prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}     }, 10)     preprocessSingleArg('subheaderstyle')     preprocessSingleArg('subheaderclass')     preprocessArgs({         {prefix = 'image', depend = {'caption', 'imagerowclass'}}     }, 10)     preprocessSingleArg('captionstyle')     preprocessSingleArg('imagestyle')     preprocessSingleArg('imageclass')     preprocessArgs({         {prefix = 'header'},         {prefix = 'data', depend = {'label'}},         {prefix = 'rowclass'},         {prefix = 'rowstyle'},         {prefix = 'class'},         {prefix = 'dataid'},         {prefix = 'labelid'},         {prefix = 'headerid'},         {prefix = 'rowid'}     }, 50)     preprocessSingleArg('headerclass')     preprocessSingleArg('headerstyle')     preprocessSingleArg('labelstyle')     preprocessSingleArg('datastyle')     preprocessSingleArg('below')     preprocessSingleArg('belowclass')     preprocessSingleArg('belowstyle')     preprocessSingleArg('name')     args['italic title'] = origArgs['italic title'] -- different behaviour if blank or absent     preprocessSingleArg('decat')       return _infobox() end    local function addWikidataCat(prop) maintenance = maintenance .. wd.addTrackingCat(prop) end  local function expandQuery(query) local value, number -- valeur à retourner, nombre de valeurs pour accorder le libellé if not query.entity then query.entity = localdata.item end if not query.conjtype then query.conjtype = 'comma' end local claims = wd.getClaims(query) if (not claims) then return nil end return wd.formatAndCat(query), #claims -- pour l'accord au pluriel end  local function getWikidataValue(params, wikidataparam) -- Récupère la valeur Wikidata pour la valeur, soit dans le paramètre "wikidata" soit dans le paramètre "property" if not localdata.item then return nil end  if params.blockers then -- blockers are local parameters that disable the wikidata query local blockers = params.blockers if (type(blockers) == 'string') then blockers = {blockers} end for i, blocker in ipairs(blockers) do if localdata[blocker] then return nil end end end  local v, valnum -- la valeur à retourner, et le nombre de de valeurs (pour l'accord grammatical)  if not wikidataparam then -- par défaut la valeur wikidata est dans le paramètre "wikidata" mais dans les structures composées comme "title", il y a plusieurs paramètres wikidata wikidataparam = 'wikidata' end  if params[wikidataparam] then if type(params[wikidataparam]) == 'function' then v, valnum = params[wikidataparam](localdata.item) elseif type(params[wikidataparam]) == 'table' then v, valnum = expandQuery(params[wikidataparam]) else v, valnum = params[wikidataparam] end end if not v then return nil end v = linguistic.ucfirst(v) return v, valnum end  local function getValue(val, params) if type(val) == 'string' then return localdata[val] elseif type(val) == 'function' then return val(localdata, localdata.item, params) elseif type(val) == 'table' then for i, j in pairs(val) do -- si plusieurs paramètres possibles (legacy de vieux code), prendre le premier non vide if localdata[j] then return localdata[j] end end end end  local function addMaintenanceCat(cat, sortkey) if page.namespace ~= 0 then return '' end if cat then maintenance = maintenance .. '[[Category:' .. cat .. '|' .. (sortkey or page.name) .. ']]' end end  function p.separator(params) local style = params['separator style'] or {} style.height = style.height or '2px' style['background-color'] = style['background-color'] or maincolor  return mw.html.create('hr'):css( style ) end  --[=[ Construit le code du bloc de titre de l'infobox  Paramètres (liste partielle) : - value : Moyen d'obtenir le titre via getValue (nom de paramètre de modèle ou fonction). - textdefaultvalue : Valeur par défaut du titre. - icon : Pictogramme d'infobox (voir [[Projet:Infobox/Pictogramme]]). - italic : Indique si le titre doit être affiché en italique.   Si italic=true, le paramètre "titre en italique" de l'infobox peut forcer la désactivation. - setdisplaytitle : Indique si le titre de l'article doit être mis en forme comme celui de l'infobox.   Si setdisplaytitle=true, le paramètre "titre article en italique" de l'infobox peut forcer la désactivation. ]=] function p.buildtitle(params) local text = getValue(params.value, params) or params.textdefaultvalue or  getWikidataValue(params) or mw.title.getCurrentTitle().text local lang = localdata['langue du titre'] or '' if lang ~= '' then local langueFunction = require( 'Módulo:Simi' ).langue text = langueFunction( { lang, text } ) end local subtext = getValue(params.subtitle) or  getWikidataValue(params, 'wikidatasubtitle') or params.subtitledefaultvalue if subtext and (subtext ~= text) then text = text .. '
'
.. subtext .. '' end local icon = params.icon or '' if icon ~= '' and icon ~= 'defaut' then text = text .. mw.getCurrentFrame():extensionTag('templatestyles', '', {src = 'Infobox/Pictogramme/' .. mw.text.trim(icon) .. '.css'}) if not params.large then icon = 'icon ' .. icon end end local class = 'entete ' .. icon local italic = params.italic and yesno(localdata['titre en italique'] or '', true, true) if italic then class = class .. ' italique' end if params.setdisplaytitle and yesno(localdata['titre article en italique'] or '', true, true) then local formatTitleModule = require( 'Módulo:Formatage du titre' ) text = text .. formatTitleModule.setDisplayTitle{ args = { lang = lang, italic = italic, options = 'noreplace', } } end -- overwrites with those provided in the module local style = {} style['background-color'] = maincolor style['color'] = thirdcolor if params.style then for i, j in pairs(params.style) do style[i] = j end end local title = mw.html.create('div') :addClass(class) :css(style) :tag('div') :wikitext(text) :allDone() return title end p.buildTitle = p.buildtitle function p.buildnavbox(params) -- définition du style local class = "overflow nav " .. (params.class or '') local style = params.style or {} if params.separated then -- options pour ajouter une ligne de séparation au dessus class = class .. ' bordered' style['border-top'] = '1px solid' .. maincolor end -- ajustement des paramètres de données params.previousval = params.previousval or params.previousparameter -- nom de paramètre obsolète params.nextval = params.nextval or params.nextparameter if params.previousproperty then params.previouswikidata = {property = params.previousproperty} end if params.nextproperty then params.nextwikidata = {property = params.nextproperty} end local previousval = getValue(params.previousval, params) or getWikidataValue(params, 'previouswikidata') local nextval = getValue(params.nextval, params) or getWikidataValue(params, 'nextwikidata') local navbox if params.inner then -- pour celles qui sont à l'intérieur d'une table navbox = mw.html.create('tr'):tag('th'):attr('colspan', 2) style['font-weight'] = style['font-weight'] or 'normal' else navbox = mw.html.create('div') end if previousval or nextval then navbox :addClass(class) :css(style) :tag('div') :addClass('prev_bloc') :wikitext(previousval) :done() :tag('div') :addClass('next_bloc') :wikitext(nextval) :done() :allDone() return navbox end return nil end p.buildNavbox = p.buildnavbox function p.buildimages(params) local images = {} local upright, link, caption, alt, size -- size is deprecated if type(params.imageparameters) == 'string' then params.imageparameters = {params.imageparameters} end if not params.imageparameters then -- s'il n'y a pas de paramètre image, continuer, peut-être y a-t-il une image par défaut définie dans le module d'infobox params.imageparameters = {} end for j, k in ipairs(params.imageparameters) do table.insert(images, localdata[k]) end -- Images de Wikidata if #images == 0 and localdata.item then if params.property then params.wikidata = {entity = localdata.item, property = params.property} end if params.wikidata then local wdq = params.wikidata wdq.excludespecial = true if type(wdq) == 'table' then wdq.entity = wdq.entity or localdata.item wdq.numval = wdq.numval or params.numval or 1 images = wd.getClaims(wdq) end if type(wdq) == 'function' then images = params.wikidata() if type(images) == 'string' then return images end --c'est probablement une erreur dans la requête => afficher le message end if (not images) then images = {} end if (#images > 0) and (params.wikidata.property) then addWikidataCat(params.wikidata.property) end if type(images[1]) == 'table' then for i, image in pairs(images) do if image.mainsnak.snaktype ~= 'value' then return end if #images == 1 then -- si une seule image, on utilise la légende (si deux plusieurs images, comment mettre en forme ?) caption = wd.getFormattedQualifiers(images[i], {'P2096'}, {isinlang = wikiLang}) or wd.getFormattedQualifiers(images[i], {'P805'}) end images[i] = image.mainsnak.datavalue.value end end end end -- Images par défaut if #images == 0 then if params.maintenancecat then addMaintenanceCat(params.maintenancecat, params.sortkey) end if params.defaultimages then images = params.defaultimages if type(images) == 'string' then images = {images} end upright = params.defaultimageupright caption = params.defaultimagecaption link = params.defaultimagelink alt = params.defaultimagealt if not alt and ( images[1] == 'Defaut.svg' or images[1] == 'Defaut 2.svg' ) then alt = 'une illustration sous licence libre serait bienvenue' end end end if #images == 0 then return nil end upright = upright or getValue(params.uprightparameter) or params.defaultupright or "1.2" link = link or getValue(params.linkparameter) or params.defaultlink caption = caption or getValue(params.captionparameter) or params.defaultcaption alt = alt or getValue( params.altparameter) or params.defaultalt -- taille avec "size" (obsolète) size = size or getValue(params.sizeparameter) or params.defaultsize -- deprecated if size then local sizevalue = size:gsub('px$', '') local widthonly = mw.ustring.gsub(sizevalue, 'x.*', '') widthonly = tonumber(widthonly) if type(widthonly) ~= 'number' or widthonly > 280 then addMaintenanceCat("taille d'image invalide") end if tonumber(sizevalue) then size = tostring( tonumber(sizevalue) / #images ) .. 'px' end end if tonumber(upright) then upright = tostring( tonumber(upright) / #images ) end local style = params.style or {padding ='2px 0',} -- Partie image local imagesString = '' for i,image in pairs(images) do if image == '-' then return end imagesString = imagesString .. '[[Fichier:' .. image .. '|frameless' if size then imagesString = imagesString .. '|' .. size -- not a mistake, parameter is unnamed end if alt then imagesString = imagesString .. '|alt=' .. alt end if link then imagesString = imagesString .. '|link=' .. link end if upright then imagesString = imagesString .. '|upright=' .. upright elseif #images > 1 and not size then imagesString = imagesString .. '|upright=' .. ( 1 / #images ) end if image:sub(-4):lower() == '.svg' then imagesString = imagesString .. '|lang=' .. wikiLang end imagesString = imagesString .. ']]' end local image = mw.html.create('div') :addClass("images") :css(style) :wikitext(imagesString) -- Partie légende local captionobj if caption then captionobj = mw.html.create('div') :wikitext(caption) :css(params.legendstyle or {}) :addClass("legend") :done() end -- séparateur local separator if params.separator then separator = separator(params) end return mw.html.create('div') :node(image) :node(captionobj) :node(separator) :done() end p.buildImages = p.buildimages function p.buildtext(params) local class = params.class or '' local style = { ['text-align'] = 'center', ['font-weight'] = 'bold' } if params.style then for i, j in pairs(params.style) do style[i] = j end end local text = getValue(params.value, params) or getWikidataValue(params) or params.defaultvalue if text == '-' then return end if not text then addMaintenanceCat(params.maintenancecat, params.sortkey) return nil end local formattedtext = mw.html.create('p') :addClass(class) :css(style) :wikitext(text) :done() return formattedtext end p.buildText = p.buildtext function p.buildrow(params) local class = params.class or '' local style = params.style or {} local valueClass = params.valueClass or '' local valueStyle = params.valueStyle or {} local value, number = getValue(params.value, params) if (value == valueexpl) then value = nil params.wikidata.expl = false end if (not value) then value, number = getWikidataValue(params, 'wikidata') end if (not value) and (params.property) then value, number = expandQuery{ property = params.property, ucfirst = params.ucfirst } end if not value then value = params.defaultvalue end if value == '-' then return nil end if not number then number = 0 -- == indéfini end if not value then if params.maintenancecat then local maintenancecat = getValue(params.maintenancecat, params) addMaintenanceCat(maintenancecat, params.sortkey) end return nil end local label = params.label if number > 1 and (params.plurallabel) then label = params.plurallabel elseif number == 1 and (params.singularlabel) then label = params.singularlabel end if type(label) == 'function' then label = label(localdata, localdata.item) end -- format local formattedvalue = mw.html.create('div') :wikitext('\n' .. value) -- Le '\n' est requis lorsque value est une liste commençant par '*' ou '#' 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) :addClass(valueClass) :css(valueStyle) :allDone() local formattedlabel if label then formattedlabel = mw.html.create('th') :attr('scope', 'row') :wikitext(label) :done() end local row = mw.html.create('tr') :addClass(class) :css(style) :node(formattedlabel) :node(formattedvalue) :done() return row end p.buildRow = p.buildrow function p.buildsuccession(params) if not params.value then return nil end --local style = params.style or {} --style['text-align'] = style['text-align'] or 'center' --style['color'] = style['color'] or '#000000' --style['background-color'] = style['background-color'] or '#F9F9F9' local rowI = mw.html.create('tr') local styleI = {} local colspan = '2' styleI['padding'] = '1px' cellI = mw.html.create('td') :attr({colspan = colspan}) :attr({align = 'center'}) :css(styleI) local styleT = {} styleT['margin'] = '0px' styleT['background-color'] = 'transparent' styleT['width'] = '100%' tabC = mw.html.create('table') :attr({cellspacing = '0'}) :addClass('navigation-not-searchable') :css(styleT) local row = mw.html.create('tr') local color = params.color local style = {} local arrowLeft local arrowRight if color == 'default' then arrowLeft = '[[Fichier:Arrleft.svg|13px|alt=Précédent|link=]]' arrowRight = '[[Fichier:Arrright.svg|13px|alt=Précédent|link=]]' else arrowLeft = '[[Fichier:Arrleft.svg|13px|alt=Suivant|link=]]' arrowRight = '[[Fichier:Arrright.svg|13px|alt=Suivant|link=]]' style['background-color'] = color end local styleTrans = {} local values = params.value local before = values['before'] local center = values['center'] local after = values['after'] local widthCell = '44%' if center then widthCenter = '28%' widthCell = '29%' end local formattedbefore if before then formattedbefore = mw.html.create('td') :attr({valign = 'middle'}) :attr({align = 'left'}) :attr({width = '5%'}) :css(style) :wikitext(arrowLeft) :done() row:node(formattedbefore) formattedbefore = mw.html.create('td') :attr({width = '1%'}) :css(style) :wikitext('') :done() row:node(formattedbefore) formattedbefore = mw.html.create('td') :attr({align = 'left'}) :attr({valign = 'middle'}) :attr({width = widthCell}) :css(style) :wikitext(before) :done() row:node(formattedbefore) else formattedbefore = mw.html.create('td') :attr({valign = 'middle'}) :attr({align = 'left'}) :attr({width = '5%'}) :css(styleTrans) :wikitext('') :done() row:node(formattedbefore) formattedbefore = mw.html.create('td') :attr({width = '1%'}) :css(styleTrans) :wikitext('') :done() row:node(formattedbefore) formattedbefore = mw.html.create('td') :attr({align = 'left'}) :attr({valign = 'middle'}) :attr({width = widthCell}) :css(styleTrans) :wikitext('') :done() row:node(formattedbefore) end local formattedcenter formattedcenter = mw.html.create('td') :attr({width = '1%'}) :css(styleTrans) :wikitext('') :done() row:node(formattedcenter) if center then formattedcenter = mw.html.create('td') :attr({align = 'center'}) :attr({valign = 'middle'}) :attr({width = widthCenter}) :css(style) :wikitext(center) :done() row:node(formattedcenter) formattedcenter = mw.html.create('td') :attr({width = '1%'}) :css(styleTrans) :wikitext('') :done() row:node(formattedcenter) end local formattedafter if after then formattedafter = mw.html.create('td') :attr({align = 'right'}) :attr({valign = 'middle'}) :attr({width = widthCell}) :css(style) :wikitext(after) :done() row:node(formattedafter) formattedbefore = mw.html.create('td') :attr({width = '1%'}) :css(style) :wikitext('') :done() row:node(formattedbefore) formattedafter = mw.html.create('td') :attr({align = 'right'}) :attr({valign = 'middle'}) :attr({width = '5%'}) :css(style) :wikitext(arrowRight) :done() row:node(formattedafter) else formattedafter = mw.html.create('td') :attr({align = 'right'}) :attr({valign = 'middle'}) :attr({width = widthCell}) :css(styleTrans) :wikitext('') :done() row:node(formattedafter) formattedbefore = mw.html.create('td') :attr({width = '1%'}) :css(styleTrans) :wikitext('') :done() row:node(formattedbefore) formattedafter = mw.html.create('td') :attr({align = 'right'}) :attr({valign = 'middle'}) :attr({width = '5%'}) :css(styleTrans) :wikitext('') :done() row:node(formattedafter) end row:done() tabC:node(row) tabC:done() cellI:node(tabC) cellI:done() rowI:node(cellI) rowI:allDone() return rowI end p.buildSuccession = p.buildsuccession function p.buildrow1col(params) if not params.value then return nil end --local style = params.style or {} --style['text-align'] = style['text-align'] or 'center' --style['color'] = style['color'] or '#000000' --style['background-color'] = style['background-color'] or '#F9F9F9' local class = params.class local rowcolor if params.color == 'secondcolor' then rowcolor = secondcolor else rowcolor = params.color end local style = {} style['padding'] = '4px' style['text-align'] = 'center' style['background-color'] = rowcolor or '#F9F9F9' style['color'] = '#000000' local text = params.value local colspan ='2' local formattedlabel formattedlabel = mw.html.create('th') :attr({colspan = colspan}) :css(style) :wikitext(text) :done() local row = mw.html.create('tr') :addClass(class) :css(style) :node(formattedlabel) :done() return row end p.buildRow1Col = p.buildrow1col function p.buildtable(params) local tab = mw.html.create('table'):css(params.style or {}) local rows = params.rows -- expand parameters so that we have a list of tables local i = 1 while (i <= #rows) do local l = rows[i] if type(l) == 'function' then l = l(localdata, localdata.item) end if (type(l) == 'table') and (l.type == 'multi') then table.remove(rows, i) for j, row in ipairs(l.rows) do table.insert(rows, i + j - 1, row) end elseif type(l) == 'nil' then table.remove(rows, i) elseif type(l) ~= 'table' then return error('les lignes d\'infobox ("rows") doivent être des tables, est ' .. type(l)) else i = i + 1 end end -- CREATE ROW local expandedrows = {} for k, row in ipairs(rows) do local v = p.buildblock(row) if v then table.insert(expandedrows, v) end end if (#expandedrows == 0) then return nil end rows = expandedrows -- ADD TITLE local title if params.title or params.singulartitle or params.pluraltitle then local text if #rows > 1 and params.pluraltitle then text = params.pluraltitle elseif #rows == 1 and params.singulartitle then text = params.singulartitle else text = params.title end local style = params.titlestyle or {} style['text-align'] = style['text-align'] or 'center' style['color'] = style['color'] or thirdcolor style['background-color'] = style['background-color'] or maincolor local colspan ='2' title = mw.html.create('caption') :attr({colspan = colspan}) :css(style) :wikitext(text) :done() end if title then tab:node(title) end for i, j in pairs (rows) do tab:node(j) end if params.separator then local separator = p.separator(params) tab:node(separator) end tab:allDone() return tab end p.buildTable = p.buildtable function p.buildinvalidblock(args) addMaintenanceCat(defaultcat) local text = '' if type(args) ~= 'table' then text = "Les blocs d'infobox doivent être des tables" else text = i18n["invalid block type"] .. ' : ' .. (args.type or '??') end return text end p.buildInvalidBlock = p.buildinvalidblock function p.buildmap(params) -- paramètre d'affichage local maplist = getValue(params.maps) local pointtype = params.pointtype local maptype = params.maptype -- choisit le type de carte le plus approprié (relief, administratif, etc.) if type(maplist) == 'function' then maplist = maplist(localdata, localdata.item) end local width = tonumber(params.width) or 280 if width > 280 then addMaintenanceCat("Erreur d'Infobox/Image trop grande") return 'image trop grande, la largeur doit être inférieure ou égale à 280px' end -- récupération des données locales local pointtable = {} local globe = params.globe if params.latitude then local lat, long if type(params.latitude) == 'function' then lat, long = params.latitude(localdata, localdata.item), params.longitude(localdata, localdata.item) else lat, long = localdata[params.latitude], localdata[params.longitude] end if lat then table.insert(pointtable, {latitude = lat, longitude = long}) end end -- récupération des données wikidata local function processWDval(claim, displayformat) if not claim then return nil end local val = wd.formatSnak( claim.mainsnak ) return {latitude = val.latitude, longitude = val.longitude, globe = val.globe, marker = displayformat.marker} end local function getWDvals(query) query.excludespecial = true query.numval = query.numval or 1 query.entity = query.entity or localdata.item local claims = wd.getClaims(query) if (not claims) then return end for i, claim in ipairs(claims) do claim = processWDval(claim, query) table.insert(pointtable, claim) end end if (#pointtable == 0) and localdata.item and params.wikidata and (params.wikidata ~= '-') then for i, query in ipairs(params.wikidata) do if type(query) == 'function' then query = query() end if query then getWDvals(query) end end end if (not pointtable) or (#pointtable == 0) then return nil end local newparams = {maplist = maplist, pointtype = pointtype, maptype = maptype, width = width, item = localdata.item, pointtable = pointtable, globe = globe, marker=params.marker, default_zoom=params.default_zoom, ids = params.ids, markercolor = params.markercolor, shapecolor = params.shapecolor } if params.params and type(params.params) == 'table' then -- paramètres additionnels for i, j in pairs(params.params) do newparams[i] = j end end return require('Módulo:Saywitu').multimap(newparams) end p.buildMap = p.buildmap function p.buildexternaltext(params) local value = getValue(params.value) if value and (type(value) == 'string') then externaltext = externaltext .. value end end p.buildExternalText = p.buildexternaltext function p.buildfooter(params) if not params then params = {} end local class = 'navbar noprint bordered ' .. (params.class or '') local style = params.style or {} style['border-top'] = style['border-top'] or '1px solid ' .. maincolor local backlinkstr = '[' .. tostring( mw.uri.fullUrl( page.name, 'veaction=edit§ion=0' ) ) .. ' ' .. i18n['edit'] .. ']' .. ' - [' .. tostring( mw.uri.fullUrl( page.name, 'action=edit§ion=0' ) ) .. ' ' .. i18n['edit code'] .. ']' local itemlinkstr if localdata.item then itemlinkstr = '[[d:' .. localdata.item.id .. '|' .. 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 = '[[Fichier:Info Simple.svg|12px|link=' .. localdata.templatename .. '|' .. i18n['see doc'] .. ']]' -- si ce lien ne marche pas toujours, il faut ajouter un variable pour le nom de l'infobox récupéré par le frame 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 p.buildFooter = p.buildfooter function p.buildblock(block) if type(block) == 'function' then block = block( localdata ) end local blocktypes = { -- list of functions for block buildings ['invalid'] = p.buildinvalidblock, ['external text'] = p.buildexternaltext, ['footer'] = p.buildfooter, ['images'] = p.buildimages, ['map']= p.buildmap, ['mixed'] = p.buildrow, ['navbox'] = p.buildnavbox, ['table'] = p.buildtable, ['row'] = p.buildrow, ['row1col'] = p.buildrow1col, ['succession'] = p.buildsuccession, ['text'] = p.buildtext, ['title'] = p.buildtitle, } if type(block) ~= 'table' or (not block.type) or (not blocktypes[block.type]) then return blocktypes['invalid'](block) end return blocktypes[block.type](block) end p.buildBlock = p.buildblock function p.build() localdata = require( 'Módulo:Infobox / Localdata' ) item = localdata.item -- assign rank to the infobox, "secondary" means special formatting like no displaytitle for coordinates local infoboxrank = 'main' -- main infobox of the page, with coordinates displayed in title etc. if page.namespace ~= 0 then infoboxrank = 'secondary' end -- if infobox is linked to another item: rank = secondary if localdata.item then local itemlink = mw.wikibase.sitelink(localdata.item.id) local pagetitle = mw.title.getCurrentTitle().text if (itemlink or '') ~= pagetitle then infoboxrank = 'secondary' end end localdata.infoboxrank = infoboxrank -- load infobox module page local moduledata = require('Módulo:Infobox/' .. localdata.modulename) moduledata.name = localdata.modulename -- defines main color maincolor = localdata['couleur infobox'] or localdata['couleur boîte'] or moduledata.maincolor or maincolor secondcolor = moduledata.secondcolor or secondcolor thirdcolor = localdata['texte noir'] or localdata['couleur texte'] or moduledata.thirdcolor or thirdcolor if maincolor:match( '^%x%x%x%x%x%x$' ) or maincolor:match( '^%x%x%x$' ) then maincolor = '#' .. maincolor end if thirdcolor:match ('oui') or thirdcolor:match( 'true' ) then thirdcolor = '#000' end if thirdcolor:match ('non') or thirdcolor:match( 'false' ) then thirdcolor = '#fff' end -- class local class = 'infobox infobox v3 large' if moduledata.class then class = class .. ' ' .. moduledata.class end -- style local style = moduledata.style or {} -- build infobox infobox:addClass(class) :css(style) for i, j in pairs( moduledata.parts ) do infobox:node( p.buildblock(j) ) end infobox:node(p.buildfooter(moduledata.footer)) :done() return tostring(infobox) .. externaltext, maintenance end return p

Tags:

🔥 Trending searches on Wiki Qichwa simi:

PiruwAllquShona simiMississippi mayu3 ñiqin kantaray killapiKunsipsyun munisipyu (Santa Krus)HayasuyuWillaychaRaqta1654MumbaiAwqakuq1214Vladimir PutinPuriq quyllurchaPalatyuIwrupaNuna yachayKawsay rikch'aMarie AntoinetteApachi732Qullqi q'illayMario BungeMiki UkuchaSaywitiYuyay hallch'anaPinchikilla unanchaAntanka qhispinaTeorias sobre el origen del quechuaIranAnchak'uyu18631990Michigan suyuRansiyaIslantha17699 ñiqin chakra yapuy killapiErnesto Teodoro Moneta8 ñiqin ayamarq'a killapiAymuray killaUllu k'aspiyay6 ñiqin qhulla puquy killapiLinux rak'iyQ'illuAllquritmuChinchiru distritu (Qusqu)Kuyuq rikch'a waqaychana allwiya22 ñiqin kantaray killapiKakáCh'usaq puriqNihun simiInti wayllay1859187023 ñiqin kantaray killapiTarpuyInlis simiEBayC++Wik'uñaD19 ñiqin chakra yapuy killapiTullu challwaPacha tupuqShukllachishka KichwaPirwa973QullpachaqLimaq Hatun llaqta suyuSiki22 ñiqin ayriway killapiWeb wamp'uqIsrayil🡆 More