Module:Political party: Difference between revisions

From TEPwiki, Urth's Encyclopedia
Jump to navigation Jump to search
Content added Content deleted
(Undid revision 1045295564 by Primefac (talk) slightly better error handling)
(better error handling)
Line 2: Line 2:


local categories = {
local categories = {
party_not_in_list = "[[Category:Pages using Political names with unknown party]]",
party_not_in_list = '[[Category:Pages using Political names with unknown party]]',
shortname_not_in_list = '[[Category:Pages using Political names with missing shortname]]',
color_not_in_list = '[[Category:Pages using Political names with missing color]]',
}
}


Line 48: Line 50:
end
end


-- Check if database value exists
-- *Not even in database - return given error or input (+tracking cat)
-- *No color - return error
-- *No shortname/abbrev - return input (+tracking cat)
if not party then
if not party then
return (args.error or frame.args[1]) .. categories.party_not_in_list
return args.error or (frame.args[1] .. categories.party_not_in_list)
end
end

local return_value = party[out_type]
local return_value = party[out_type]
-- If database value doesn't exist, return input (for shortname) or error (for others)
if return_value == nil then
if return_value == nil then
if out_type == 'shortname' then
if out_type == 'color' then
return args.error or (error('Value not in template. Please request that it be added.') .. categories.color_not_in_list)
return party
else
else
return party .. categories.shortname_not_in_list
return error('Value not in template. Please request that it be added.')
end
end
end
end

Revision as of 12:54, 24 September 2021

Documentation for this module may be created at Module:Political party/doc

local p = {}

local categories = {
	party_not_in_list = '[[Category:Pages using Political names with unknown party]]',
	shortname_not_in_list = '[[Category:Pages using Political names with missing shortname]]',
	color_not_in_list = '[[Category:Pages using Political names with missing color]]',
}

local function getFirstLetter(party)
	index = mw.ustring.sub(party, 1, 1)
	-- Set index for non-A-Z starts
	if string.match(index, '%A') then
		index = '1'
	end
	return index
end

local function stripToNil(text)
	-- If text is a string, return its trimmed content, or nil if empty.
	-- Otherwise return text (which may, for example, be nil).
	if type(text) == 'string' then
		text = text:match('(%S.-)%s*$')
	end
	return text
end

-- Example of having all the data - color and names - in one table. Requires one page to be edited instead of two when adding a new party.
function p.fetch(frame)
	-- Initialise and populate variables
	local args = frame.args
 	local party = stripToNil(args[1]) or error('parameter 1 should be a party name')
	local out_type = stripToNil(args[2]) or error('parameter 2 should be the output type')
	local index = getFirstLetter(party)
	
	-- Load data from submodule
	local data = mw.loadData('Module:Political names/' .. index)
	local data_all = data.full

	local party_alt = data.alternate[party]
	if party_alt then
		if data_all[party_alt] then
			party = data_all[party_alt]
		else
			index = getFirstLetter(party_alt)
			data = mw.loadData('Module:Political names/' .. index)
			party = data.full[party_alt]
		end
	else
		party = data_all[party]
	end

	-- Check if database value exists
	--  *Not even in database - return given error or input (+tracking cat)
	--  *No color - return error
	--  *No shortname/abbrev - return input (+tracking cat)
	if not party then
		return args.error or (frame.args[1] .. categories.party_not_in_list)
	end
	local return_value = party[out_type]
	if return_value == nil then
		if out_type == 'color' then
			return args.error or (error('Value not in template. Please request that it be added.') .. categories.color_not_in_list)
		else
			return party .. categories.shortname_not_in_list
		end
	end

	if out_type == 'color' and string.find(return_value, '#') then
		return_value = string.gsub(return_value, '#', '#')
	end
	return return_value	
end

return p