Módulo:Banner
Aparência
A documentação para este módulo pode ser criada na página Módulo:Banner/doc
local p = {}
-- Compatibilidade: aceita tanto "main" quanto "principal"
function p.main(frame)
local args = frame:getParent().args
return p.renderizar(args)
end
function p.principal(frame)
local args = frame:getParent().args
return p.renderizar(args)
end
function p.renderizar(args)
local imagemParam = args[1] or ''
local titulo = args['título'] or mw.title.getCurrentTitle().text
local descricao = args['descrição'] or ''
local mesmonome = args['mesmonome'] or ''
local semmdc = args['semmdc'] or ''
local caixa = args['caixa'] or 'p'
local desambig = args['desambig'] or ''
local tamanho = args['tamanho'] or '25'
local proporcao = args['proporção'] or args['proporcao'] or ''
local cor = args['cor'] or ''
local cortitulo = args['cortitulo'] or args['cortítulo'] or ''
local corfundo = args['corfundo'] or ''
-- Determinar qual imagem usar
local imagem = p.obterImagem(imagemParam)
-- Construir HTML
local html = mw.html.create('div')
:addClass('naoimprime')
:node(mw.html.create('div')
:addClass('naomobile')
:node(p.construirBanner(titulo, mesmonome, tamanho, imagem, descricao, semmdc, caixa, proporcao, cor, cortitulo, corfundo))
)
-- Adicionar texto de desambiguação se necessário
local resultado = tostring(html)
if desambig ~= '' then
resultado = resultado .. p.textoDesambiguacao(desambig)
end
return resultado
end
function p.obterImagem(param)
local wikidata = mw.wikibase.getEntity()
local imagemWikidata = wikidata and wikidata:getBestStatements('P948')[1]
-- Mapear parâmetros para imagens padrão
local imagensPadrao = {
['none'] = 'Pagebanner default.jpg',
['Europa'] = 'Pagebanner default.jpg',
['América do Norte'] = 'Pagebanner default.jpg',
['Pagebanner default.jpg'] = 'Pagebanner default.jpg',
['Oriente Médio'] = 'Mena-asia_default_banner.jpg',
['OM'] = 'Mena-asia_default_banner.jpg',
['Norte da África'] = 'Mena-asia_default_banner.jpg',
['NA'] = 'Mena-asia_default_banner.jpg',
['Ásia'] = 'Mena-asia_default_banner.jpg',
['América do Sul'] = 'S-amer africa default banner.jpg',
['AS'] = 'S-amer africa default banner.jpg',
['África'] = 'S-amer africa default banner.jpg',
['Caribe'] = 'Caribbean default banner.jpg',
['AO'] = 'Australia-oceania default banner.jpg',
['Austrália'] = 'Australia-oceania default banner.jpg',
['Oceania'] = 'Australia-oceania default banner.jpg',
['Nova Zelândia'] = 'NZ default banner.jpg',
['NZ'] = 'NZ default banner.jpg',
['Dica'] = 'TT Banner.jpg',
['Dicas'] = 'TT Banner.jpg',
['Dica de viagem'] = 'TT Banner.jpg',
['dica'] = 'TT Banner.jpg',
['dicas'] = 'TT Banner.jpg',
['dica de viagem'] = 'TT Banner.jpg',
['Guia de mergulho'] = 'Default Scuba diving banner.JPG',
['Mergulho'] = 'Default Scuba diving banner.JPG',
['Itinerário'] = 'Itinerary banner.jpg',
['itinerário'] = 'Itinerary banner.jpg',
['Guia de conversação'] = 'Welcome banner.jpg',
['Conversação'] = 'Welcome banner.jpg',
['guia de conversação'] = 'Welcome banner.jpg',
['conversação'] = 'Welcome banner.jpg',
['Desambiguação'] = 'Disambiguation banner.png',
['desambiguação'] = 'Disambiguation banner.png',
['desamb'] = 'Disambiguation banner.png'
}
-- Prioridade: Wikidata > Parâmetro específico > Padrão regional
if imagemWikidata and imagemWikidata.mainsnak.datavalue then
return imagemWikidata.mainsnak.datavalue.value
elseif param ~= '' and not imagensPadrao[param] then
return param
elseif imagensPadrao[param] then
return imagensPadrao[param]
else
return 'Pagebanner default.jpg'
end
end
function p.construirBanner(titulo, mesmonome, tamanho, imagem, descricao, semmdc, caixa, proporcao, cor, cortitulo, corfundo)
local banner = mw.html.create('div')
:addClass('topbanner')
:css('position', 'relative')
:css('width', '100%')
:css('overflow', 'hidden')
:css('display', 'flex')
:css('align-items', 'center')
-- Definir cor de fundo (padrão: preto, ou customizado)
if corfundo ~= '' then
banner:css('background', corfundo)
else
banner:css('background', '#000')
end
-- Se proporção = sim, não limitar altura
if proporcao == '' or proporcao == 'não' or proporcao == 'nao' then
banner:css('height', '200px')
end
-- Definir cor do título (padrão: branco, ou customizado)
local corTitulo = cortitulo ~= '' and cortitulo or 'white'
-- Título
banner:node(mw.html.create('div')
:addClass('name')
:css('position', 'absolute')
:css('top', '10px')
:css('left', '10px')
:css('z-index', '2')
:css('color', corTitulo)
:css('text-shadow', '2px 2px 4px rgba(0,0,0,0.8)')
:css('font-size', '2em')
:css('font-weight', 'bold')
:wikitext("'''" .. titulo .. "'''")
)
-- Ícone de desambiguação
if mesmonome ~= '' then
local linkDesamb = mesmonome == 'sim' and mw.title.getCurrentTitle().text or mesmonome
banner:node(mw.html.create('div')
:addClass('caixaicone')
:css('position', 'absolute')
:css('top', '10px')
:css('right', '10px')
:css('z-index', '2')
:wikitext('[[Imagem:Question_Circle.svg|' .. tamanho .. 'px|link=' .. linkDesamb .. ' (desambiguação)|Para outros locais com este mesmo nome, vide ' .. linkDesamb .. ' (desambiguação)]]')
)
end
-- Imagem do banner
local containerImg = mw.html.create('div')
:css('width', '100%')
:css('line-height', '0')
:css('display', 'flex')
:css('align-items', 'center')
:css('justify-content', 'center')
:css('overflow', 'hidden')
-- Se tem limite de altura, aplicar ao container
if proporcao == '' or proporcao == 'não' or proporcao == 'nao' then
containerImg:css('max-height', '300px')
end
local imgTag = '[[File:' .. imagem .. '|1800px'
if descricao ~= '' then
imgTag = imgTag .. '|' .. descricao
end
imgTag = imgTag .. ']]'
containerImg:wikitext(imgTag)
banner:node(containerImg)
-- MDC (Mapa de Conteúdo / TOC)
if semmdc ~= 'sim' then
local classeTabela = 'tabmdc-p'
local corMDC = ''
-- Verificar se é cor hexadecimal (começa com # e tem 4 ou 7 caracteres)
local primeiroCar = string.sub(caixa, 1, 1)
local tamanhoCaixa = string.len(caixa)
if primeiroCar == '#' and (tamanhoCaixa == 7 or tamanhoCaixa == 4) then
-- É uma cor hexadecimal
corMDC = caixa
elseif caixa == 'branco' or caixa == 'b' then
classeTabela = 'tabmdc-b'
elseif caixa == 'cinza' or caixa == 'c' then
classeTabela = 'tabmdc-c'
end
local divMDC = mw.html.create('div')
:css('position', 'absolute')
:css('bottom', '6px')
:css('left', '0')
:css('z-index', '3')
:css('width', '100%')
local caixaMDC = mw.html.create('div')
:addClass('hlista')
:addClass(classeTabela)
:wikitext('__TOC__')
-- Se for cor customizada, aplicar
if corMDC ~= '' then
caixaMDC:css('background-color', corMDC)
end
divMDC:node(caixaMDC)
banner:node(divMDC)
end
return banner
end
function p.textoDesambiguacao(desambig)
local pageName = mw.title.getCurrentTitle().text
local link = desambig == 'sim' and pageName or desambig
return "\n:''Para outros locais com este mesmo nome, vide [[" .. link .. " (desambiguação)]].'''"
end
return p