Modul:Side box
Utseende
Dokumentation [visa] [redigera] [historik] [rensa sidcachen]
Denna modul implementerar mallen {{side box}}
.
Användning från wikitext
[redigera wikitext]Denna modul kan inte användas direkt från wikitext. Det kan endast användas via mallen {{side box}}
. Se mallsidan för dokumentation.
Användning från Lua
[redigera wikitext]För att använda den här modulen från andra Lua-moduler, ladda först modulen.
local mSideBox = require('Modul:Side box')
Du kan sedan generera en sidoruta med funktionen _main
.
mSideBox._main(args)
Variabeln args bör vara en tabell som innehåller de argument som ska överföras till modulen. För att se de olika argumenten som kan specificeras och hur de påverkar modulutgången hänvisar du till malldokumentationen {{side box}}
.
-- This module implements {{side box}}.
local yesno = require('Modul: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 = {}
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, 'mbox-small-left')
else
table.insert(data.classes, 'mbox-small')
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 does not need adjusting
local argsToCopy = {
-- Classes
'textclass',
-- 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')
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{border = '1px solid #aaa', ['background-color'] = '#f9f9f9', color = '#000'}
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)
: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')
:addClass('mbox-image')
:wikitext(data.image)
else
bodyRow:tag('td'):css('width', '1px')
end
local textCell = bodyRow:newline():tag('td')
textCell:addClass('mbox-text')
textCell:addClass(data.textclass or 'plainlist')
if data.textstyle then
textCell:cssText(data.textstyle)
end
textCell:wikitext(data.text)
if data.imageright then
bodyRow:newline():tag('td')
: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)
:addClass('mbox-text')
if data.textstyle then
belowCell:cssText(data.textstyle)
end
belowCell:wikitext(data.below)
end
root:newline()
return tostring(root)
end
return p