Difference between revisions of "Module:Side box"
Jump to navigation
Jump to search
blackwiki>Mr. Stradivarius (add newlines) |
blackwiki>Mr. Stradivarius (add more newlines) |
||
| Line 81: | Line 81: | ||
-- The "above" row | -- The "above" row | ||
if data.above then | if data.above then | ||
| − | local aboveCell = root:tag('tr'):tag('td') | + | local aboveCell = root:newline()tag('tr'):tag('td') |
aboveCell | aboveCell | ||
:attr('colspan', data.imageright and 3 or 2) | :attr('colspan', data.imageright and 3 or 2) | ||
| Line 97: | Line 97: | ||
-- The body row | -- The body row | ||
| − | local bodyRow = root:newline():tag('tr') | + | local bodyRow = root:newline():tag('tr'):newline() |
if data.image then | if data.image then | ||
bodyRow:tag('td') | bodyRow:tag('td') | ||
| Line 105: | Line 105: | ||
bodyRow:tag('td'):css('width', '1px') | bodyRow:tag('td'):css('width', '1px') | ||
end | end | ||
| − | local textCell = bodyRow:tag('td') | + | local textCell = bodyRow:newline():tag('td') |
textCell:addClass('mbox-text plainlist') | textCell:addClass('mbox-text plainlist') | ||
if data.textstyle then | if data.textstyle then | ||
| Line 112: | Line 112: | ||
textCell:wikitext(data.text) | textCell:wikitext(data.text) | ||
if data.imageright then | if data.imageright then | ||
| − | bodyRow:tag('td') | + | bodyRow:newline():tag('td') |
:addClass('mbox-imageright') | :addClass('mbox-imageright') | ||
:wikitext(data.imageright) | :wikitext(data.imageright) | ||
end | end | ||
| + | textCell:newline() | ||
-- The below row | -- The below row | ||
| Line 126: | Line 127: | ||
belowCell:cssText(data.textstyle) | belowCell:cssText(data.textstyle) | ||
end | end | ||
| − | belowCell:wikitext(data.below) | + | belowCell |
| + | :wikitext(data.below) | ||
| + | :newline() | ||
end | end | ||
Revision as of 06:26, 2 June 2014
| 40x40px | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This module implements the {{side box}} template.
Usage from wikitext
This module cannot be used directly from wikitext. It can only be used through the {{side box}} template. Please see the template page for documentation.
Usage from Lua modules
To use this module from other Lua modules, first load the module.
local mSideBox = require('Module:Side box')
You can then generate a side box using the _main function.
mSideBox._main(args)
The args variable should be a table containing the arguments to pass to the module. To see the different arguments that can be specified and how they affect the module output, please refer to the {{side box}} template documentation.
-- This module implements {{side box}}.
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 = {}
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 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')
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{border = '1px solid #aaa', ['background-color'] = '#f9f9f9'}
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 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
textCell:newline()
-- 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)
:newline()
end
return tostring(root)
end
return p