Jump to content

Module:Navbox or wikitable

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Frietjes (talk | contribs) at 16:44, 27 May 2025. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

require('strict')

local p = {}

function p.main(frame)
	
	local yesno = require('Module:Yesno')
	local is_navbox = yesno(frame.args['navbox'] or 'yes', true)

	-- If this is not a table, then jump straight over to the navbox module
	if ( is_navbox ) then
		return require('Module:Navbox').navbox(frame, 'navbox')
	end

	local args = frame.args
	-- get the group and list numbers
	local groups, lists, nums = {}, {}, {}
	for k,v in pairs(args) do
		if type(k) == 'string' and k:match('^list[0-9][0-9]*$') then
			local i = mw.ustring.gsub(k,'^list([0-9][0-9]*)$', '%1')
			i = tonumber(i)
			if lists[i] == nil and groups[i] == nil then
				table.insert(nums, i)
			end
			lists[i] = v
		elseif type(k) == 'string' and k:match('^group[0-9][0-9]*$') then
			local i = mw.ustring.gsub(k,'^group([0-9][0-9]*)$', '%1')
			i = tonumber(i)
			if groups[i] == nil and lists[i] == nil then
				table.insert(nums, i)
			end
			groups[i] = v
		end
	end
	-- sort the group and list numbers
	table.sort(nums)
	
	-- generate the table
	local tbl = mw.html.create('table')
		:addClass('wikitable')
		:addClass('args.bodyclass')
		
	local navbar = require('Module:Navbar')._navbar
	tbl:tag('caption')
		:wikitext(args.title or '')
		:wikitext(navbar{
				['name'] = args.name,
				['mini'] = 1,
				['brackets'] = 1,
				['style'] = 'float:right'
			})
	
	if args['above'] then
		local row = tbl:tag('tr')
		row:tag('td')
			:attr('colspan', 2)
			:css('text-align', 'center')
			:wikitext(args['above'])
	end
	
	for ni = 1, #nums do
		local i = nums[ni]
		if args['group' .. i] and args['list' .. i] then
			local row = tbl:tag('tr'):css('vertical-align', 'top')
			row:tag('th')
				:attr('scope', 'row')
				:css('font-weight', 'normal')
				:css('white-space', 'nowrap')
				:wikitext(args['group' .. i])
			row:tag('td')
				:tag('div')
				:addClass(args.listclass)
				:wikitext('\n' .. args['list' .. i] .. '\n')
		elseif args['list' .. i] then
			local row = tbl:tag('tr')
			row:tag('td')
				:css('text-align', 'center')
				:tag('div')
				:addClass(args.listclass)
				:wikitext('\n' .. args['list' .. i] .. '\n')
		end
	end
	
	if args['below'] then
		local row = tbl:tag('tr')
		row:tag('td')
			:attr('colspan', 2)
			:css('text-align', 'center')
			:wikitext(args['below'])
	end
	
	return tbl
end

return p