This is the current revision of this page, as edited by imported>Izno at 07:18, 2 March 2024(get this saved). The present address (URL) is a permanent link to this version.
Revision as of 07:18, 2 March 2024 by imported>Izno(get this saved)
This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing.
This module depends on the following other modules:
require('strict')
local p = {}
local infobox_image = require('Module:InfoboxImage').InfoboxImage
function p._main(args)
local root = mw.html.create()
root = root
:tag('table')
:addClass('infobox')
:addClass('cabinet-members')
:addClass(args.float and ('cabinet-members-' .. args.float:lower()) or 'cabinet-members-right')
local columns = args.party_column and 4 or 3
mw.log(columns)
if args.topcaption then
args.topcaption = tostring(
mw.html.create('div')
:cssText(args.topcaptionstyle)
:wikitext(args.topcaption)
)
end
if args.topimage then
root
:tag('tr'):tag('td')
:attr('colspan', columns)
:addClass('cabinet-members-image')
:wikitext(infobox_image{
args = {
image = args.topimage,
size = args.topimagesize,
sizedefault = 'frameless',
upright = 1,
alt = args.topimagealt
}
} .. (args.topcaption or ''))
end
if args.above then
root
:tag('tr'):tag('th')
:attr('colspan', columns)
:addClass('cabinet-members-above')
:wikitext(args.above)
end
if args.caption then
args.caption = tostring(
mw.html.create('div')
:cssText(args.captionstyle)
:wikitext(args.caption)
)
end
if args.image then
root
:tag('tr'):tag('td')
:attr('colspan', columns)
:addClass('cabinet-members-image')
:wikitext(infobox_image{
args = {
image = args.image,
size = args.imagesize,
sizedefault = 'frameless',
upright = 1,
alt = args.imagealt
}
} .. (args.caption or ''))
end
-- Actual table
local cabinet = mw.html.create('table')
local header = cabinet:tag('tr')
header:tag('th')
:addClass('cabinet-members-header')
:wikitext(args.office_label or 'Office')
:attr('scope', 'col')
header:tag('th')
:wikitext(args.name_label or 'Name')
:attr('scope', 'col')
if args.party_column then
header:tag('th')
:wikitext(args.party_label or 'Party')
:attr('scope', 'col')
end
header:tag('th')
:wikitext(args.term_label or 'Term')
:attr('scope', 'col')
local subRows = {}
local keys = {}
for k, v in pairs(args) do
k = tostring(k)
local num = k:match('^office(%d+)$')
if num and args['name' .. num .. 'a'] then
num = tonumber(num)
if subRows[num] == nil then
subRows[num] = {}
table.insert(keys, num)
end
end
local num, l = k:match('^name(%d+)([a-z])$')
if num then
num = tonumber(num)
if subRows[num] == nil then
subRows[num] = {}
table.insert(keys,num)
end
subRows[num][l] = l
end
end
table.sort(keys)
for _, num in ipairs(keys) do
local row_table = {}
for _, letter in pairs(subRows[num]) do
table.insert(row_table, letter)
end
table.sort(row_table)
for j, letter in pairs(row_table) do
local row = mw.html.create('tr')
if j == 1 then
row:addClass('cabinet-members-office')
local office = row:tag('td'):wikitext(args['office' .. num])
office:attr('rowspan', (row_table:size() > 1) and row_table:size() or nil)
end
row:tag('th')
:wikitext(args['name'..num..letter])
:attr('scope', 'row')
if args.party_column then
row:tag('td')
:wikitext(args['party'..num..letter])
end
row:tag('td')
:wikitext(args['term'..num..letter])
cabinet:node(row)
end
end
if args.below then
root:tag('tr')
:tag('td')
:attr('colspan', columns)
:wikitext(args.below)
end
local frame = mw.getCurrentFrame()
local base_templatestyles = frame:extensionTag{
'templatestyles', args = { src = 'Module:Infobox cabinet members/styles.css' }
}
local templatestyles = ''
if args.templatestyles and mw.text.trim(args.templatestyles) ~= '' then
templatestyles = frame:extensionTag{
'templatestyles', args = { src = 'Module:Infobox cabinet members/styles.css' }
}
end
return base_templatestyles .. templatestyles .. tostring(root)
end
function main(frame)
local args = require('Module:Arguments').getArgs(frame)
return p._main(args)
end
return p