Module:HtmlUtil

From Porn Base Central
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('&nbsp;')
	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('&nbsp;')
	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('&nbsp;')
	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