require('strict')local getArgs = require('Module:Arguments').getArgs
local p = function p.infobox(frame, args) if not args then args = getArgs(frame) end
local root = mw.html.create local columns = args.party_column and 4 or 3 mw.log(columns) if args.caption then args.caption = '
' .. tostring(mw.html.create('span') :cssText(args.captionstyle) :wikitext(args.caption) ) end if args.topcaption then args.topcaption = '
' .. tostring(mw.html.create('span') :cssText(args.topcaptionstyle) :wikitext(args.topcaption) ) end local floatcss = root = root :tag('table') :addClass('infobox') :css('width', 'auto') :css('text-align', 'left') :css('line-height', '1.2em') :cssText(args.float and floatcss[(args.float):lower] or floatcss['right'])
if args.topimage then root :tag('tr'):tag('td') :attr('colspan', columns) :css('text-align', 'center') :wikitext(require('Module:InfoboxImage').InfoboxImage .. (args.topcaption or ) ) end if args.above then root :tag('tr'):tag('th') :attr('colspan', columns) :css('line-height','1.5em') :css('font-size','110%') :css('background','#DCDCDC') :css('text-align', 'center') :wikitext(args.above) end if args.image then root :tag('tr'):tag('td') :attr('colspan', columns) :css('text-align', 'center') :wikitext(require('Module:InfoboxImage').InfoboxImage .. (args.caption or ) ) end local header = root:tag('tr') header:tag('th') :wikitext(args.office_label or 'Office') header:tag('th') :wikitext(args.name_label or 'Name') if args.party_column then header:tag('th') :wikitext(args.party_label or 'Party') end header:tag('th') :wikitext(args.term_label or 'Term') root:tag('tr') :tag('td') :attr('colspan', columns) :css('background', '#000')
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]
local num,l = k:match('^name(%d+)([a-z])$') if num then num = tonumber(num) if subRows[num]
for i, num in ipairs(keys) do if i > 1 then root:tag('tr') :tag('td') :attr('colspan',columns) :css('background','#D1D1D1') end local r = for j,l in pairs(subRows[num]) do table.insert(r,l) end table.sort(r) local row = root:tag('tr') local ocell = row:tag('td'):wikitext(args['office' .. num]) local subrow = 0 for j, l in pairs(r) do subrow = subrow + 1 if subrow > 1 then row:tag('tr') end row:tag('th') :css('font-weight', 'bold') :wikitext(args['name'..num..l]) if args.party_column then row:tag('td') :wikitext(args['party'..num..l]) end row:tag('td') :wikitext(args['term'..num..l]) end ocell:attr('rowspan', (subrow > 1) and subrow or nil) end if args.below then root:tag('tr') :tag('td') :attr('colspan', columns) :css('border-top', '#D1D1D1 2px solid') :wikitext(args.below) end
return tostring(root)endreturn p