Module:Infobox: Difference between revisions

Content added Content deleted
(allow setting ids for rows, headers, labels and data fields, per protected edit request by User:Czarkoff)
(update to use mw.html instead of Module:HtmlBuilder - conversion courtesy of User:WOSlinker)
Line 4: Line 4:
local p = {}
local p = {}

local HtmlBuilder = require('Module:HtmlBuilder')
local args = {}
local args = {}
local origArgs
local origArgs
local root
local root

local function union(t1, t2)
local function union(t1, t2)
-- Returns the union of the values of two tables, as a sequence.
-- Returns the union of the values of two tables, as a sequence.
Line 45: Line 43:
if rowArgs.header then
if rowArgs.header then
root
root
.tag('tr')
:tag('tr')
.addClass(rowArgs.rowclass)
:addClass(rowArgs.rowclass)
.attr('id', rowArgs.rowid)
:attr('id', rowArgs.rowid)
.tag('th')
:tag('th')
.attr('colspan', 2)
:attr('colspan', 2)
.attr('id', rowArgs.headerid)
:attr('id', rowArgs.headerid)
.addClass(rowArgs.class)
:addClass(rowArgs.class)
.addClass(args.headerclass)
:addClass(args.headerclass)
.css('text-align', 'center')
:css('text-align', 'center')
.cssText(args.headerstyle)
:cssText(args.headerstyle)
.wikitext(rowArgs.header)
:wikitext(rowArgs.header)
elseif rowArgs.data then
elseif rowArgs.data then
local row = root.tag('tr')
local row = root:tag('tr')
row.addClass(rowArgs.rowclass)
row:addClass(rowArgs.rowclass)
row.attr('id', rowArgs.rowid)
row:attr('id', rowArgs.rowid)
if rowArgs.label then
if rowArgs.label then
row
row
.tag('th')
:tag('th')
.attr('scope', 'row')
:attr('scope', 'row')
.attr('id', rowArgs.labelid)
:attr('id', rowArgs.labelid)
.css('text-align', 'left')
:css('text-align', 'left')
.cssText(args.labelstyle)
:cssText(args.labelstyle)
.wikitext(rowArgs.label)
:wikitext(rowArgs.label)
.done()
:done()
end
end
local dataCell = row.tag('td')
local dataCell = row:tag('td')
if not rowArgs.label then
if not rowArgs.label then
dataCell
dataCell
.attr('colspan', 2)
:attr('colspan', 2)
.css('text-align', 'center')
:css('text-align', 'center')
end
end
dataCell
dataCell
.attr('id', rowArgs.dataid)
:attr('id', rowArgs.dataid)
.addClass(rowArgs.class)
:addClass(rowArgs.class)
.cssText(rowArgs.datastyle)
:cssText(rowArgs.datastyle)
.newline()
:newline()
.wikitext(rowArgs.data)
:wikitext(rowArgs.data)
end
end
end
end
Line 90: Line 88:


root
root
.tag('caption')
:tag('caption')
.addClass(args.titleclass)
:addClass(args.titleclass)
.cssText(args.titlestyle)
:cssText(args.titlestyle)
.wikitext(args.title)
:wikitext(args.title)
end
end


Line 100: Line 98:
root
root
.tag('tr')
:tag('tr')
.tag('th')
:tag('th')
.attr('colspan', 2)
:attr('colspan', 2)
.addClass(args.aboveclass)
:addClass(args.aboveclass)
.css('text-align', 'center')
:css('text-align', 'center')
.css('font-size', '125%')
:css('font-size', '125%')
.css('font-weight', 'bold')
:css('font-weight', 'bold')
.cssText(args.abovestyle)
:cssText(args.abovestyle)
.wikitext(args.above)
:wikitext(args.above)
end
end


Line 115: Line 113:
root
root
.tag('tr')
:tag('tr')
.tag('td')
:tag('td')
.attr('colspan', '2')
:attr('colspan', '2')
.addClass(args.belowclass)
:addClass(args.belowclass)
.css('text-align', 'center')
:css('text-align', 'center')
.cssText(args.belowstyle)
:cssText(args.belowstyle)
.newline()
:newline()
.wikitext(args.below)
:wikitext(args.below)
end
end


Line 153: Line 151:
for k, num in ipairs(imagenums) do
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local caption = args['caption' .. tostring(num)]
local data = HtmlBuilder.create().wikitext(args['image' .. tostring(num)])
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
if caption then
data
data
.tag('div')
:tag('div')
.cssText(args.captionstyle)
:cssText(args.captionstyle)
.wikitext(caption)
:wikitext(caption)
end
end
addRow({
addRow({
Line 194: Line 192:
root
root
.tag('tr')
:tag('tr')
.tag('td')
:tag('td')
.attr('colspan', '2')
:attr('colspan', '2')
.css('text-align', 'right')
:css('text-align', 'right')
.wikitext(mw.getCurrentFrame():expandTemplate({
:wikitext(mw.getCurrentFrame():expandTemplate({
title = 'navbar',
title = 'navbar',
args = { args.name, mini = 1 }
args = { args.name, mini = 1 }
Line 207: Line 205:
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root.wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))
root:wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))
end
end
end
end
Line 214: Line 212:
if args.decat ~= 'yes' then
if args.decat ~= 'yes' then
if #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
if #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root.wikitext('[[Category:Articles which use infobox templates with no data rows]]')
root:wikitext('[[Category:Articles which use infobox templates with no data rows]]')
end
end
if args.child == 'yes' and args.title then
if args.child == 'yes' and args.title then
root.wikitext('[[Category:Articles which use embedded infobox templates with the title parameter]]')
root:wikitext('[[Category:Articles which use embedded infobox templates with the title parameter]]')
end
end
end
end
Line 226: Line 224:
-- if the infobox is used as a 'child' inside another infobox.
-- if the infobox is used as a 'child' inside another infobox.
if args.child ~= 'yes' then
if args.child ~= 'yes' then
root = HtmlBuilder.create('table')
root = mw.html.create('table')
root
root
.addClass('infobox')
:addClass('infobox')
.addClass(args.bodyclass)
:addClass(args.bodyclass)
.attr('cellspacing', 3)
:attr('cellspacing', 3)
.css('border-spacing', '3px')
:css('border-spacing', '3px')
if args.subbox == 'yes' then
if args.subbox == 'yes' then
root
root
.css('padding', '0')
:css('padding', '0')
.css('border', 'none')
:css('border', 'none')
.css('margin', '-3px')
:css('margin', '-3px')
.css('width', 'auto')
:css('width', 'auto')
.css('min-width', '100%')
:css('min-width', '100%')
.css('font-size', '100%')
:css('font-size', '100%')
.css('clear', 'none')
:css('clear', 'none')
.css('float', 'none')
:css('float', 'none')
.css('background-color', 'transparent')
:css('background-color', 'transparent')
else
else
root
root
.css('width', '22em')
:css('width', '22em')
end
end
root
root
.cssText(args.bodystyle)
:cssText(args.bodystyle)
renderTitle()
renderTitle()
renderAboveRow()
renderAboveRow()
else
else
root = HtmlBuilder.create()
root = mw.html.create()
root
root
.wikitext(args.title)
:wikitext(args.title)
end
end