Módulo:Infobox – Wikipédia, a enciclopédia livre
Descrição
Este módulo implementa a predefinição {{Info/Biografia/Lua}}
. Por favor consulte a predefinição para mais instruções.
Uso
Subpáginas
Os sub-modelos que começam com um carácter minúsculo são meta-modelos, enquanto os modelos que começam com caracteres maiúsculos devem ser utilizados directamente. Observe que esta lista também inclui arquivos de modelos diversos
- Infobox/Animal
- Infobox/Animal/doc
- Infobox/Arte
- Infobox/Arte/doc
- Infobox/Artista
- Infobox/Artista/Testes
- Infobox/Artista/doc
- Infobox/Ascensão ciclista
- Infobox/Astro
- Infobox/Astro/doc
- Infobox/Bebida
- Infobox/Bebida/doc
- Infobox/Biografia
- Infobox/Biografia/Testes
- Infobox/Biografia/doc
- Infobox/Campeonato de wrestling profissional
- Infobox/Campeonato de wrestling profissional/doc
- Infobox/Carreira ciclista
- Infobox/Carreira ciclista/doc
- Infobox/Cemitério
- Infobox/Cemitério/doc
- Infobox/Central
- Infobox/Central/doc
- Infobox/Centro comercial
- Infobox/Ciclista
- Infobox/Ciclista/Testes
- Infobox/Ciclista/doc
- Infobox/Corpo de água
- Infobox/Corpo de água/Testes
- Infobox/Corpo de água/doc
- Infobox/Empresa
- Infobox/Epidemia
- Infobox/Equipa ciclista
- Infobox/Equipa ciclista/doc
- Infobox/Estrada
- Infobox/Estrada/doc
- Infobox/Estrutura alta
- Infobox/Estrutura alta/Testes
- Infobox/Estrutura alta/doc
- Infobox/Estádio
- Infobox/Evento meteorológico
- Infobox/Evento meteorológico/doc
- Infobox/Exemplos para testes
- Infobox/Exemplos para testes/doc
- Infobox/Farol
- Infobox/Farol/doc
- Infobox/Filme
- Infobox/Fogo florestal
- Infobox/Fogo florestal/doc
- Infobox/Formato de arquivo
- Infobox/Funções
- Infobox/Funções/Central elétrica
- Infobox/Funções/Central elétrica/doc
- Infobox/Funções/Competição desportiva
- Infobox/Funções/Competição desportiva/doc
- Infobox/Funções/Edifício
- Infobox/Funções/Edifício/Testes
- Infobox/Funções/Edifício/doc
- Infobox/Funções/Geolocalização
- Infobox/Funções/Geolocalização/Testes
- Infobox/Funções/Geolocalização/doc
- Infobox/Funções/Localidade
- Infobox/Funções/Localidade/doc
- Infobox/Funções/Organização
- Infobox/Funções/Organização/doc
- Infobox/Funções/Pessoa
- Infobox/Funções/Pessoa/Testes
- Infobox/Funções/Pessoa/doc
- Infobox/Funções/Testes
- Infobox/Funções/doc
- Infobox/Futebolista
- Infobox/Futebolista/doc
- Infobox/Fábrica
- Infobox/Fábrica/doc
- Infobox/Hotel
- Infobox/Infobox universal
- Infobox/Instituição educacional de pesquisa
- Infobox/Instituição educacional de pesquisa/doc
- Infobox/Livro
- Infobox/Livro/doc
- Infobox/Localdata
- Infobox/Localdata/Testes
- Infobox/Localdata/doc
- Infobox/Localidade
- Infobox/Localidade/Testes
- Infobox/Localidade/doc
- Infobox/Meteorito
- Infobox/Meteorito/doc
- Infobox/Mina
- Infobox/Mina/doc
- Infobox/Montanha
- Infobox/Montanha/doc
- Infobox/Monumento
- Infobox/Monumento/Testes
- Infobox/Monumento/doc
- Infobox/Motor
- Infobox/Motor/doc
- Infobox/Nuvem
- Infobox/Nuvem/doc
- Infobox/Nó
- Infobox/Nó/doc
- Infobox/Objeto
- Infobox/Objeto/doc
- Infobox/Observatório
- Infobox/Observatório/doc
- Infobox/Ocupação
- Infobox/Ocupação/doc
- Infobox/Organização
- Infobox/Organização/doc
- Infobox/Parque
- Infobox/Parque/doc
- Infobox/Partícula
- Infobox/Porto
- Infobox/Porto/doc
- Infobox/Praia
- Infobox/Praia/doc
- Infobox/Queda de água
- Infobox/Queda de água/doc
- Infobox/Queijo
- Infobox/Queijo/doc
- Infobox/Relevo
- Infobox/Relevo/doc
- Infobox/Rio
- Infobox/Rio/Testes
- Infobox/Rio/doc
- Infobox/Selo
- Infobox/Selo/doc
- Infobox/Seção da tabela/doc
- Infobox/Style
- Infobox/Style/doc
- Infobox/Telescópio
- Infobox/Telescópio/doc
- Infobox/Temporada de equipa ciclista
- Infobox/Temporada de equipa ciclista/doc
- Infobox/Testes
- Infobox/Trilho
- Infobox/Trilho/doc
- Infobox/Título
- Infobox/Título/doc
- Infobox/Vacina
- Infobox/Vacina/doc
- Infobox/Vestuário
- Infobox/Vestuário/doc
- Infobox/Wikidata
- Infobox/Wikidata/Testes
- Infobox/Wikidata/doc
- Infobox/config
- Infobox/datas
- Infobox/doc
- Infobox/estilos.css
- Infobox/import
- Infobox/styles.css
- Infobox/Área protegida
- Infobox/Área protegida/doc
Ver também
Outra documentação:
A documentação acima é transcluída de Módulo:Infobox/doc. (editar | histórico) Editores podem experimentar nas páginas de teste (editar | dif) e de exemplos para testes (editar | executar) deste módulo. Subpáginas deste módulo. |
local p = {} local lang = 'pt' local item = nil -- o elemento Wikidata ligado local localdata = {}-- guarda parâmetros passados à predefinição local page = { -- guarda parâmetros da página mostrados na infocaixa name = mw.title.getCurrentTitle().prefixedText, namespace = mw.title.getCurrentTitle().namespace } local maincolor, secondcolor, thirdcolor = '#E1E1E1', '#E1E1E1', '#000000' -- o objecto principal a mostrar local infobox = mw.html.create('div') -- objetos secundários a mostrar local maintenance = '' -- cadeia devolvida com o módulo : cats de monitoramento local externaltext = '' -- para exemplo com coordenadas no título -- modules importados local linguistic = require "Módulo:Linguística" local wd = require 'Módulo:Infobox/Wikidata' local valueexpl = wd.translate("activate-query") local CategorizacaoABeAD = require('Módulo:Categorização AD e AB de outras wikis') local i18n = { ['see doc'] = 'Documentação da predefinição', ['edit'] = 'editar', ['edit code'] = 'editar código-fonte', ['edit item'] = 'editar Wikidata', ['tracking cat'] = "!Páginas que utilizam dados no Wikidata", ['invalid block type'] = "Bloco de dados inválidos dentro do módulo infobox", ['default cat'] = "!Monitoramento das infobox", } local function addWikidataCat(prop) maintenance = maintenance .. wd.addTrackingCat(prop) end local function expandQuery(query) local value, number -- valor a mostrar, nome dos valores para o rótulo if not query.entity then query.entity = localdata.item end if not query.conjtype then query.conjtype = 'new line' end local claims = wd.getClaims(query) if (not claims) then return nil end return wd.formatAndCat(query), #claims -- para acordo do plural end local function getWikidataValue(params, wikidataparam) -- Mostrar o valor Wikidata para o valor, quer no parâmetro "wikidata" ou no parâmetro "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 -- o valor a retornar e o número de valores (para concordância gramatical) if not wikidataparam then -- por padrão o valor wikidata está no parâmetro "wikidata" mas nas estruturas compostas como "title", existem vários parâmetros 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 -- se vários parâmetros possíveis (legado do código antigo), tomar o primeiro não-vazio 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['estilo separador'] or {} style.height = style.height or '2px' style['background-color'] = style['background-color'] or maincolor return mw.html.create('hr'):css( style ) end function p.buildtitle(params) local text = getValue(params.value, params) or params.textdefaultvalue or getWikidataValue(params) or mw.title.getCurrentTitle().text local subtext = getValue(params.subtitle) or getWikidataValue(params, 'wikidatasubtitle') or params.subtitledefaultvalue if subtext and (subtext ~= text) then text = text .. '<br /><small>' .. subtext .. '</small>' end local style = { border = 'none', ['text-align'] = 'center', ['font-size'] = '1.3em', padding = '0', display = 'table', height = '45px', width = '100%', ['*height'] = 'auto', -- be kind ie7 ['*padding'] = '12px 0', } local style2 = { display = 'table-cell', ['vertical-align'] = 'middle', padding = '3px', } local icon = params.icon or '' if icon ~= '' and not params.large then icon = ' ' .. icon else -- style.padding = '12px' icon = " " end local class = 'topo' .. icon -- 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') :css(style2) :wikitext(text) :allDone() return title end p.buildTitle = p.buildtitle function p.buildnavbox(params) -- definição do estilo local class = "navbox " .. (params.class or '') local style = params.style or {['overflow'] = 'hidden'} if params.separated then -- opções para adicionar uma linha de separação acima class = class .. ' bordered' style['border-top'] = '1px solid' .. maincolor end -- ajuste de parâmetros de dados params.previousval = params.previousval or params.previousparameter -- nome do parâmetro obsoleto 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 -- para quem está dentro de uma tabela 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 navbox :css({['background-color'] = '#E6E6E6'}) :addClass(class) -- :css(style) :css{border = '2px ' .. maincolor, ['font-weight'] = 'normal'} :tag('div') :addClass('prev_bloc') :wikitext(previousval) :done() :tag('div') :addClass('next_bloc') :wikitext(nextval) :done() :allDone() return navbox 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 -- se não houver nenhum parâmetro de imagem, continue, talvez haja uma imagem padrão definida no módulo de 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 --provavelmente é um erro no pedido => mostrar a mensagem 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 -- se apenas uma imagem, usamos a legenda (se mais duas imagens, como formatar?) caption = wd.getFormattedQualifiers('P18', {qualifier = 'P2096'}, {isinlang = 'pt'}) end images[i] = image.mainsnak.datavalue.value end end end end -- Imagens por padrao 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] == 'Padrao.svg' or images[1] == 'Padrao 2.svg' ) then alt = 'uma ilustração licenciada gratuita seria bem-vinda' end end end if #images == 0 then return nil end upright = upright or getValue(params.uprightparameter) or params.defaultupright or "1" -- 1.2 deixa uma margem 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 -- tamanho com "size" (obsoleto) size = size or getValue(params.sizeparameter) or params.defaultsize or params.tamanho-- deprecated if size then local numsize = size:gsub('px', '') numsize = mw.ustring.gsub(numsize, 'x.*', '') numsize = tonumber(numsize) if type(numsize) ~= 'number' or numsize > 280 then addMaintenanceCat("tamanho da imagem inválido") end if tonumber(size) then size = size .. 'px' end size = '|' .. size else size = '' end if tonumber(upright) then upright = tostring(tonumber(upright) ) / #images end if tonumber(size) then size = tostring(tonumber(size) ) / #images end local style = params.style or { padding ='2px 0', ['text-align'] = 'center', ['display'] = 'flex', ['justify-content'] = 'space-around', ['align-items'] = 'center', } local styleLegend = params.stylelegend or { ['font-size'] = '0.9em', ['text-align'] = 'center', ['margin'] = '5px 0 5px 0', } -- Imagem da peça local imagesString = '' for i,image in pairs(images) do if image == '-' then return end imagesString = imagesString .. '[[File:' .. image .. "|" .. size .. '|frameless' 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 then imagesString = imagesString .. '|upright=' .. ( 1 / #images ) end imagesString = imagesString .. ']]' end local image = mw.html.create('div') :addClass("image") :css(style) :wikitext(imagesString) -- Parte da legenda local captionobj if caption then captionobj = mw.html.create('p') :css(styleLegend) :wikitext(caption) :css(params.style or {}) :addClass("caption") :done() end -- separador 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 {} style['vertical-align'] = 'middle' local style2 = { ['text-align'] = 'left', ['padding-right'] = '10px', ['width'] = '8em', ['max-width'] = '140px', ['word-wrap'] = 'normal', } 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 -- == indefinido 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) -- 'não é necessário quando o valor é uma lista que começa com '*' ou '#' if (params.hidden == true)then formattedvalue :attr({class="NavContent", background= "none !important", ['padding-top'] = "0 !important", ['padding-bottom']="0 !important", ['border-top']= "1px solid grey !important", ['border-bottom']= "1px solid grey !important", ['margin-left']= "2em !important", ['margin-right']= "2em !important", style="display: none; text-align: left;"}) formattedvalue = mw.html.create('div') :attr({class="NavFrame", title="[Mostrar]/[Esconder]", style="border: none; padding: 0;"}) :node(formattedvalue) end formattedvalue = mw.html.create('td') :node(formattedvalue) :allDone() local formattedlabel if label then formattedlabel = mw.html.create('th') :attr('scope', 'row') :css(style2) :wikitext(label) :done() end local row = mw.html.create('tr') :attr('scope', 'row') :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 colspan = '2' cellI = mw.html.create('td') :attr({colspan = colspan}) :attr({align = 'center'}) local styleT = {} 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 style['background-color'] = '#E6E6E6' arrowLeft = '[[Ficheiro:Fleche-defaut-gauche.png|13px|alt=Precedente|link=]]' arrowRight = '[[Ficheiro:Fleche-defaut-droite.png|13px|alt=Precedente|link=]]' else style['background-color'] = color arrowLeft = '[[Ficheiro:Fleche-defaut-gauche-gris-32.png|13px|alt=Próximo|link=]]' arrowRight = '[[Ficheiro:Fleche-defaut-droite-gris-32.png|13px|alt=Próximo|link=]]' end local styleTrans = {} styleTrans['background-color'] = '#F9F9F9' 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('as linhas da infobox ("rows") devem ser tabelas, e ' .. 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['font-weight'] = style['font-weight'] or 'bolder' style['width'] = style['width'] or '23em' style['text-align'] = style['text-align'] or 'center' style['line-height'] = style['line-height'] or '1.5' style['margin'] = style['margin'] or '0 0 5px 0' --style['padding-top'] = style['padding-top'] or '.5em' --style['padding-bottom'] = style['padding-bottom'] or '.5em' style['color'] = style['color'] or thirdcolor style['background-color'] = style['background-color'] or maincolor style['max-width'] = style['max-width'] or '300px' style['word-wrap'] = style['word-wrap'] or 'break-word' 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 = "Blocos de infobox devem ser tabelas" else text = i18n["invalid block type"] .. ' : ' .. (args.type or '??') end return text end p.buildInvalidBlock = p.buildinvalidblock function p.buildmap(params) -- configuração de exibição local maplist = getValue(params.maps) local pointtype = params.pointtype local maptype = params.maptype -- escolhe o tipo de mapa mais adequado (alívio, administrativo, etc.) if type(maplist) == 'function' then maplist = maplist(localdata, localdata.item) end local width = tonumber(params.largura) or 270 -- 280 padrao f.ajustar if width > 280 then addMaintenanceCat("!Erro de infobox - imagem muito grande") return 'imagem muito grande, a largura deve ser menor ou igual a 280px' end -- mostrar os dados locais 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 -- mostrar os dados 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 -- parâmetro adicionais for i, j in pairs(params.params) do newparams[i] = j end end return require('Módulo:Mapa').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 {['border-width'] = '1px'} style['margin-top'] = '5px' -- espaço vertical para o footer style['margin-bottom'] = '-0.125em' style['border-top'] = style['border-top'] or '1px solid ' .. maincolor style['border-bottom'] = '0' style['display'] = 'block' 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"}) :css({['width'] = "23em"}) --:css({['float'] = "left"}) :addClass('plainlinks') --?existe :wikitext(editstr) :done() local doclinkstr = '[[Imagem:Info Simple.svg|12px|link=' .. localdata.templatename .. '|' .. i18n['see doc'] .. ']]' -- Se esse link nem sempre funcionar, adicione uma variável para o nome da infobox recuperada pelo quadro local doclinkspan = mw.html.create('span') :css({['text-align'] = "right"}) :css({['float'] = "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.buildnavbox, ['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['cor infobox'] or localdata['caixa de cor'] or moduledata.maincolor or maincolor secondcolor = moduledata.secondcolor or secondcolor thirdcolor = moduledata.thirdcolor or thirdcolor if maincolor:match( '^%x%x%x%x%x%x$' ) or maincolor:match( '^%x%x%x$' ) then maincolor = '#' .. maincolor end -- class local class = 'infobox_v2' if moduledata.class then class = class .. ' ' .. moduledata.class end -- style local style = moduledata.style or {} --{'width: 20em; text-align: left; font-size: 88%; max-width: 23em'} style['font-size'] = style['font-size'] or '88%' -- build infobox infobox :addClass(class) :attr({cellpadding= "3"}) :attr({border= "0"}) :css(style) for i, j in pairs( moduledata.parts ) do infobox:node( p.buildblock(j) ) end infobox :node(p.buildfooter(moduledata.footer)) :done() if CategorizacaoABeAD.hasAnyBadge() == '1' then maintenance = maintenance .. (CategorizacaoABeAD.badgesCategories()) end return tostring(infobox) .. externaltext, maintenance end return p