Módulo:Caixa lateral/Testes
![]() | Este módulo pode ter sua documentação deficiente. Por favor, documente-o ou melhore suas explicações caso o saiba usar ou tenha conhecimentos para tal. |
![]() |
![]() | 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
editarEste Módulo implementa a predefinição {{Caixa lateral}}
. Por favor consulte a predefinição para mais instruções.
Uso
editarOutra documentação:
-- This module implements {{caixa lateral}}.
local yesno = require('Module:Yesno')
local p = {}
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
function p._main(args)
local data = p.makeData(args)
return p.renderSidebox(data)
end
function p.makeData(args)
local data = {}
-- Main table classes
data.classes = {}
data.css = {}
if yesno(args.metadata) ~= false then
table.insert(data.classes, 'metadata')
end
if args.position and args.position:lower() == 'left' then
table.insert(data.classes, 'noprint') --mbox-small-left
table.insert(data.css, {clear = 'right',
['bordersizing'] = 'border-box', overflow = 'hidden',
width = '238px', ['border-collapse'] = 'collapse',
['font-size'] = '88%', ['line-height'] = '1.25em'})
else
table.insert(data.classes, 'mbox-small')
table.insert(data.css, {clear = 'right', float = 'right',
margin = '4px 0 4px 1em', ['box-sizing'] = 'border-box',
width = '238px', ['font-size'] = '88%',
['line-height'] = '1.25em'})
end
table.insert(data.classes, args.class)
-- Image
if args.image and args.image ~= 'none' then
data.image = args.image
end
-- Copy over data that doesn't need adjusting
local argsToCopy = {
-- Styles
'style',
'textstyle',
-- Above row
'above',
'abovestyle',
-- Body row
'text',
'imageright',
-- Below row
'below',
}
for i, key in ipairs(argsToCopy) do
data[key] = args[key]
end
return data
end
function p.renderSidebox(data)
-- Renders the sidebox HTML.
-- Table root
local root = mw.html.create('table')
root:attr('role', 'presentation')
root:css{clear = 'right', border = 'solid #aaa 1px',
margin = '0 0 1em 1em', ['font-size'] = '90%',
['background-color'] = '#f9f9f9', width = '238px',
padding = '5px', spacing = '2px',
['text-align'] = 'center', float = 'right'
}
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
if data.style then
root:cssText(data.style)
end
-- The "above" row
if data.above then
local aboveCell = root:newline():tag('tr'):tag('td')
aboveCell
:attr('colspan', data.imageright and 3 or 2)
:attr({border = 'none'})
:attr({padding = '0.25em 0.9em'})
:attr({width = '100%'})
:addClass('mbox-text')
if data.textstyle then
aboveCell:cssText(data.textstyle)
end
if data.abovestyle then
aboveCell:cssText(data.abovestyle)
end
aboveCell
:newline()
:wikitext(data.above)
end
-- The body row
local bodyRow = root:newline():tag('tr'):newline()
if data.image then
bodyRow:tag('td')
:attr({float ='left', ['vertical-align'] = 'middle'})
:wikitext(data.image)
else
bodyRow:tag('td'):css('width', '1px')
end
local textCell = bodyRow:newline():tag('td')
textCell:addClass('plainlist')
textCell:attr({['margin-left'] = '30px', ['line-height'] = 'normal', ['vertical-align'] = 'middle'})
if data.textstyle then
textCell:cssText(data.textstyle)
end
textCell:wikitext(data.text)
if data.imageright then
bodyRow:newline():tag('td')
:attr({border = 'none'})
:attr({padding = '2px 0.9em 2px 0'})
:attr({['text-align'] = 'center'})
:addClass('mbox-imageright')
:wikitext(data.imageright)
end
-- The below row
if data.below then
local belowCell = root:newline():tag('tr'):tag('td')
belowCell
:attr('colspan', data.imageright and 3 or 2)
:attr({border = 'none'})
:attr({padding = '0.25em 0.9em'})
:attr({width = '100%'})
:addClass('mbox-text')
if data.textstyle then
belowCell:cssText(data.textstyle)
else
belowCell:cssText(data.textstyle, {float = 'left',
['vertical-align'] = 'middle'})
end
belowCell:wikitext(data.below)
end
return tostring(root)
end
return p