The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Documentation for this module may be created at Module:Party name with color/doc

local p = {}
local fetch = nil -- lazy load

local function load_political_party_module()
	if fetch == nil then
		fetch = require('Module:Political party')._fetch
	end
end

local function page_exist(page_name)
    if not page_name then return false end
    if mw.title.new(page_name).exists then return true end
    return false
end

local function simplify_rowspan(text)
	text = mw.ustring.gsub(text or '', 'rowspan="1"%s*', '')
	return text
end

local function getData(args)
	local display_name = nil
	local yesno = require('Module:Yesno')
	if args[1] == "Independent" then
		args[1] = "Independent politician"
	end
	if yesno(args.dab) == true then
		display_name = args[1]
	elseif yesno(args.full) == true then
		display_name = mw.ustring.gsub(args[1], '%s+%b()$', '')
	elseif args.shortname then
		display_name = args.shortname
	else
		load_political_party_module()
		display_name = fetch({args[1], 'shortname'})
	end
	
	if yesno(args.bold) == true then display_name = "'''" .. display_name .. "'''" end

	local text = nil
	if yesno(args.no_link) == true then
		text = display_name
	else
		-- TODO: should this be on by default or do we want red links?
		if page_exist(args[1]) then
			text = string.format("[[%s|%s]]", args[1], display_name)
		else
			text = display_name
		end
	end

	local color = args.colour or args.color
	if not color then
		load_political_party_module()
		color = fetch({args[1], 'color'})
	end
	return text, color
end

function p._cell(args)
	if not args[1] then return '' end
	local text, color = getData(args)
	
	local line1 = 'rowspan="%s" style="width: 2px; background-color: %s;" data-sort-value="%s" |\n'
	local line2 = '| scope="row" rowspan="%s" style="text-align: left;" | %s'
	
	local rowspan = tonumber(args.rowspan) or 1
	line1 = string.format(line1, rowspan, color, args[1])
	line2 = string.format(line2, rowspan, text)

	return simplify_rowspan(line1 .. line2)
end

function p._box(args)
	if not args[1] then return '' end
	local text, color = getData(args)
	
	local seats
	if args.seats then seats = ' (' .. args.seats .. ')' end
	seats = seats or ''
	
	local outline = args.outline or 'black'
	
	local legend = '<span class="legend nowrap" style="page-break-inside:avoid;break-inside:avoid-column"><span class="legend-color" style="display:inline-block;min-width:1.25em;height:1.25em;line-height:1.25;margin:1px 0;border:1px solid ' .. outline .. ';background-color:' .. color .. '"> </span> ' .. text .. seats .. '</span>'
	return legend
end

function p.cell(frame)
	local getArgs = require('Module:Arguments').getArgs
	local args = getArgs(frame)
	local check = require('Module:Check for unknown parameters')._check
	local tracking = check({
		['unknown']='[[Category:Pages using Party name with color with unknown parameters|_VALUE_ ]]',
		['preview']='Page using [[Template:Party name with color]] with unknown parameter "_VALUE_"',
		['showblankpositional']='1',
		'1', 'color', 'colour', 'dab', 'full', 'no_link', 'rowspan', 'shortname', 'bold'
	}, frame:getParent().args)
	return p._cell(args) .. tracking
end

function p.box(frame)
	local getArgs = require('Module:Arguments').getArgs
	local args = getArgs(frame)
	return p._box(args)
end

return p