Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:2-ary truth table

From Wikipedia, the free encyclopedia

local p = {}

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame)
	
	-- table_headings includes the headings and the class for the heading
	local table_headings = {
		{frame:extensionTag("math",args['A'] or 'A',{}), ''},
		{frame:extensionTag("math",args['B'] or 'B',{}), ''}
	}
	-- truth_table is the transpose of the rendered table
	local truth_table = {
		{false, false, true, true},
		{false, true, false, true}
	}
	-- thick_border marks which columns have a thick left border
	local thick_border = {false, false, true}

	-- pre-process the inputs, saving data in the tables defined above
	local col = 3
	while args[6*(col-2) - 1] do
		thick_border[col + 1] = string.lower(args[6*(col-2)] or '') == 'thick'
		table_headings[col] = {args[6*(col-2) - 1], 'unsortable'}
		truth_table[col] = {}
		for i = 1,4 do
			truth_table[col][i] = (tonumber(args[6*(col-3) + i]) or 0) == 1
		end
		col = col + 1
	end
	local total_cols = col - 1

	-- start building the html table
	root = mw.html.create('table')
		:addClass('wikitable')
		:addClass('sortable')
		:addClass('two-ary-truth-table')

	-- add headings
	local row = root:tag('tr')
	for col = 1,total_cols do
		local headings = table_headings[col]
		row:tag('th')
			:addClass(headings[2] ~= '' and headings[2] or nil)
			:addClass(thick_border[col] and 'two-ary-truth-table-border' or nil)
			:wikitext(headings[1])
	end

	-- add rows
	for i = 1,4 do
		row = root:tag('tr')
		for j = 1,total_cols do
			local val = truth_table[j][i]
			row:tag('td')
				:addClass(thick_border[j] and 'two-ary-truth-table-border' or nil)
				:addClass(val and 'two-ary-truth-table-true' or 'two-ary-truth-table-false')
				:tag('abbr')
					:attr('title', val and 'true' or 'false')
					:wikitext(val and 'T' or 'F')
					:done()
		end
	end

	-- get the templatestyles
	local templatestyles = frame:extensionTag{
		name = 'templatestyles', args = { src = 'Module:2-ary truth table/styles.css' }
	}
	
	-- return the templatestyles plus the html table
	return templatestyles .. tostring(root)
	
end

return p