Module:HtmlUtil
To edit the documentation or categories for this module, click here.
In September 2019 this module was moved from HTMLUtil to HtmlUtil to accommodate regex replacements of utility module names with consistent casing conventions.
local i18n = require('Module:i18nUtil')
local util_table = require("Module:TableUtil")
local p = {}
function p.makeFootnoteN(n)
if n and n ~= "" then
return string.format('<sup>%s</sup>', n)
end
return ""
end
function p.vsAlign(team1, team2, vs, tbl)
if not tbl then
tbl = mw.html.create("div")
end
tbl:addClass('vs-align-outer')
tbl:tag("div")
:addClass('vs-align-left')
:wikitext(team1)
:done()
:tag("div")
:addClass('vs-align-vs')
:wikitext(vs or " vs ")
:done()
:tag("div")
:addClass('vs-align-right')
:wikitext(team2)
:done()
return tbl
end
function p.blockBox(content, padding)
local tbl = mw.html.create('table')
:addClass('blockbox')
local tr = tbl:tag('tr')
local td = tr:tag('td')
for k, v in ipairs(content) do
local div = td:tag('div')
div:css({
display = "inline-block",
['vertical-align'] = 'top',
})
if padding and k ~= #content then
div:css('padding-right',padding)
end
div:wikitext(v)
end
return tbl
end
function p.printEmptySortRow(tbl, n)
local tr = tbl:tag('tr'):css('font-size','60%')
for i = 1, n do
tr:tag('th')
:wikitext(' ')
end
return
end
function p.printEmptyWidthRow(tbl, widths)
local tr = tbl:tag('tr'):addClass('empty-width-row')
for _, v in ipairs(widths) do
tr:tag('td'):css('width', v):wikitext(' ')
end
return
end
function p.printEmptyWidthRowPX(tbl, widths)
local tr = tbl:tag('tr'):addClass('empty-width-row')
for _, v in ipairs(widths) do
tr:tag('td'):css('width', v .. 'px'):wikitext(' ')
end
return
end
function p.printColspanHeader(tbl, display, colspan, class, width)
local tr = tbl:tag('tr'):addClass(class)
local th = tr:tag('th'):attr('colspan', colspan):wikitext(display)
if width then
th:cssText(('width:%spx'):format(width))
end
end
function p.printColspanCell(tbl, display, colspan, class, width)
local tr = tbl:tag('tr'):addClass(class)
local td = tr:tag('td'):attr('colspan', colspan):wikitext(display)
if width then
td:cssText(('width:%spx'):format(width))
end
end
function p.printHeaderFromI18n(tbl, data)
local classes = data.classes or {}
local class = type(classes) == 'string' and classes
local attrs = data.attrs or {}
local tr = tbl:tag('tr')
:addClass(classes.row)
for _, v in ipairs(data) do
local th = tr:tag('th')
:addClass(class or classes[v] or '')
:wikitext(i18n.print(v))
for attr, val in pairs(attrs[v] or {}) do
th:attr(attr, val)
end
end
return tr
end
function p.printRowsByList(tbl, data, list)
-- data is an array of tables
for _, row in ipairs(data) do
p.printRowByList(tbl, row, list)
end
return
end
function p.printRowByList(tbl, row, list)
local classes = util_table.mergeAndConcat(row.classes or {}, ' ', list.classes)
local attrs = row.attrs or {}
local tr = tbl:tag('tr')
for _, item in ipairs(list) do
local td = tr:tag('td')
:addClass(classes[item] or '')
for k, v in pairs(attrs[item] or {}) do
td:attr(k, v)
end
if row[item] then
td:wikitext(tostring(row[item]))
end
end
return tr
end
function p.printHelpText(div, text)
local questionmark = div:tag('div')
:addClass('helptext-questionmark')
questionmark:tag('div')
:addClass('helptext')
:wikitext(text)
end
function p.clear(tbl)
if not tbl then tbl = mw.html.create() end
tbl:tag('div'):addClass('clear')
return tbl
end
function p.innerColspanTable(tbl, colspan)
local th = p.innerColspanCellOnly(tbl, colspan)
local tblNew = th:tag('table'):addClass('nested-table wikitable')
return tblNew
end
function p.innerColspanCellOnly(tbl, colspan)
local th = tbl:tag('tr'):tag('th')
:attr('colspan', colspan)
:addClass('nested-table-outer')
return th
end
function p.makeFlatlist(tbl)
local div = mw.html.create('div')
:addClass('hlist')
local ul = div:tag('ul')
for _, v in ipairs(tbl) do
ul:tag('li'):wikitext(v)
end
return div
end
function p.lastChild(tbl)
return tbl.nodes[#tbl.nodes]
end
function p.mapChildren(tbl, f, ...)
for _, node in ipairs(tbl.nodes) do
f(node, ...)
end
end
function p.printVerticalData(tbl, data, list)
for _, v in ipairs(list) do
if data[v] then
local tr = tbl:tag('tr')
tr:tag('th'):wikitext(i18n.print(v))
tr:tag('td'):wikitext(data[v])
end
end
end
return p