Module:HtmlUtil
Jump to navigation
Jump to search
Documentation for this module may be created at Module:HtmlUtil/doc
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