Módulo:Caixa lateral
Aspeto
Este módulo é usado em mais de 4 000 páginas e as alterações em seu conteúdo serão amplamente notadas. Por favor, teste as alterações na subpágina de testes deste módulo, na subpágina de testes de módulos ou na subpágina de testes em seu espaço usuário. Considere discutir mudanças na página de discussão antes de implementá-las. |
Este módulo depende dos seguintes outros módulos: |
Esse módulo utiliza TemplateStylesEN: |
Descrição
[editar código-fonte]Este Módulo implementa a predefinição {{Caixa lateral}}. Por favor consulte a predefinição para mais instruções.
Uso
[editar código-fonte]Outra documentação:
-- Este módulo implementa {{caixa lateral}}.
local yesno = require('Módulo:Yesno')
local p = {}
local function makeData(args)
local data = {}
-- Classes principais da tabela
data.classes = {}
if yesno(args.metadata) ~= false or yesno(args.metadados) ~= false then
table.insert(data.classes, 'metadata')
end
if args.position and args.position:lower() == 'left' or args['posição'] and args['posição']:lower() == 'left' then
table.insert(data.classes, 'mbox-small-left')
else
table.insert(data.classes, 'mbox-small')
end
if args.collapsible or args['colapsável'] then
table.insert(data.classes, 'mw-collapsible')
if args.collapsible == "collapsed" or args['colapsável'] == "collapsed" then
table.insert(data.classes, 'mw-collapsed')
end
data.collapsible = true
end
table.insert(data.classes, args.class or args.classe)
-- Imagem
if args.image and args.image ~= 'none' and args.image ~= 'nenhuma' then
data.image = args.image
elseif args.imagem and args.imagem ~= 'none' and args.imagem ~= 'nenhuma' then
data.image = args.imagem
end
-- Classe de texto
if args.textclass == 'plainlist' or not args.textclass then
data.textclass = 'plainlist'
data.plainlist_templatestyles = 'Plainlist/styles.css'
else
data.textclass = args.textclass or args['classe-texto']
end
-- Copiar os dados que não precisam de ajuste
local argsToCopy = {
-- Atributos ARIA
'role',
'labelledby',
-- Estilos
'style',
'estilo',
'textstyle',
'estilotexto',
'templatestyles',
-- Linha acima
'above',
'acima',
'abovestyle',
'acimaestilo',
-- Linha do corpo
'text',
'texto',
'imageright',
'imagemdireita',
-- Linha abaixo
'below',
'abaixo',
}
for i, key in ipairs(argsToCopy) do
data[key] = args[key]
end
return data
end
local function renderSidebox(data)
-- Renderiza o HTML da caixa lateral.
-- Raiz da tabela
local root = mw.html.create('div')
root:attr('role', data.role)
:attr('aria-labelledby', data.labelledby)
:addClass('side-box')
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
if data.style or data.estilo then
root:cssText(data.style or data.estilo)
end
local frame = mw.getCurrentFrame()
if data.plainlist_templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles', args = { src = data.plainlist_templatestyles }
})
end
-- A linha "acima"
if data.above or data.acima then
local above = root:newline():tag('div')
above:addClass('side-box-abovebelow')
:newline()
:wikitext(data.above or data.acima)
if data.textstyle or data.estilotexto then
above:cssText(data.textstyle or data.estilotexto)
end
if data.abovestyle or data.acimaestilo then
above:cssText(data.abovestyle or data.acimaestilo)
end
end
-- Linha do corpo
local body = root:newline():tag('div')
body:addClass('side-box-flex')
:addClass(data.collapsible and 'mw-collapsible-content')
:newline()
if data.image then
body:tag('div')
:addClass('side-box-image')
:wikitext(data.image)
end
local text = body:newline():tag('div')
text:addClass('side-box-text')
:addClass(data.textclass)
if data.textstyle or data.estilotexto then
text:cssText(data.textstyle or data.estilotexto)
end
text:wikitext(data.text or data.texto)
if data.imageright or data.imagemdireita then
body:newline():tag('div')
:addClass('side-box-imageright')
:wikitext(data.imageright or data.imagemdireita)
end
-- A linha "abaixo"
if data.below or data.abaixo then
local below = root:newline():tag('div')
below
:addClass('side-box-abovebelow')
:wikitext(data.below or data.abaixo)
if data.textstyle or data.estilotexto then
below:cssText(data.textstyle or data.estilotexto)
end
end
root:newline()
local templatestyles = ''
if data.templatestyles then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = data.templatestyles }
}
end
return frame:extensionTag{
name = 'templatestyles', args = { src = 'Módulo:Caixa lateral/styles.css' }
} .. templatestyles .. tostring(root)
end
function p._main(args)
local data = makeData(args)
return renderSidebox(data)
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
return p