Module:Political party: Difference between revisions

From TEPwiki, Urth's Encyclopedia
Jump to navigation Jump to search
Content added Content deleted
(add in an "error" value that can be used for templates calling this module)
m (43 revisions imported from wikipedia:Module:Political_party)
 
(21 intermediate revisions by 4 users not shown)
Line 1: Line 1:
local p = {}
local p = {}

local default_color = '#F8F9FA'


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

local function create_error(error_message)
return string.format('<strong class="error">%s</strong>', error_message)
end


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


Line 19: Line 27:
if type(text) == 'string' then
if type(text) == 'string' then
text = text:match('(%S.-)%s*$')
text = text:match('(%S.-)%s*$')
local delink = require('Module:Delink')._delink
text = delink({text, wikilinks = "target"})
end
end
return text
return text
Line 24: Line 34:


-- 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.
-- 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)
function p._fetch(args)
if not args[1] then
-- Initialise and populate variables
return create_error("parameter 1 should be a party name.")
local args = frame.args
end
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')
if not args[2] then
return create_error("parameter 2 should be the output type.")
end

local party = stripToNil(args[1])
local out_type = stripToNil(args[2])
if out_type == 'colour' then
out_type = 'color'
end
local index = getFirstLetter(party)
local index = getFirstLetter(party)
-- Load data from submodule
-- Load data from submodule
local data = mw.loadData('Module:Political names/' .. index)
local data = mw.loadData('Module:Political party/' .. index)
local data_all = data.full
local data_all = data.full


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


-- Check if database value exists
if not party then
-- * Not even in database - return given error or input
return frame.args[1] .. categories.party_not_in_list
-- * No color - return error
-- * No shortname/abbrev - return first non-blank of abbrev->shortname->input
if not party_info then
if out_type == 'color' then
return args.error or default_color
else
return args.error or party
end
end
end
local return_value = party_info[out_type]

local return_value = party[out_type]
if return_value == "" then
-- If database value doesn't exist, return an error (for colors) or input (for others)
if return_value == nil then
if out_type == 'color' then
if out_type == 'color' then
return args.error or error('Value not in template. Please request that it be added.')
return args.error or create_error("Value not in template. Please request that it be added.")
elseif out_type == 'abbrev' then
if party_info.shortname ~= "" then
return party_info.shortname
else
return party
end
elseif out_type == 'shortname' then
if party_info.abbrev ~= "" then
return party_info.abbrev
else
return party
end
else
else
return party
return party
Line 66: Line 104:
end
end
return return_value
return return_value
end

function p.fetch(frame)
-- Initialise and populate variables
local getArgs = require("Module:Arguments").getArgs
local args = getArgs(frame)
return p._fetch(args)
end
end



Latest revision as of 03:12, 28 May 2022

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

local p = {}

local default_color = '&#35;F8F9FA'

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

local function create_error(error_message)
	return string.format('<strong class="error">%s</strong>', error_message)
end

local function getFirstLetter(party)
	local index = mw.ustring.sub(party, 1, 1)
	-- Set index for non-A-Z starts
	if string.match(index, '%A') then
		return '1'
	end
	return string.upper(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*$')
		local delink = require('Module:Delink')._delink
		text = delink({text, wikilinks = "target"})
	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(args)
	if not args[1] then
		return create_error("parameter 1 should be a party name.")
	end

	if not args[2] then
		return create_error("parameter 2 should be the output type.")
	end

 	local party = stripToNil(args[1])
	local out_type = stripToNil(args[2])
	if out_type == 'colour' then
		out_type = 'color'
	end
	local index = getFirstLetter(party)
	
	-- Load data from submodule
	local data = mw.loadData('Module:Political party/' .. index)
	local data_all = data.full

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

	-- Check if database value exists
	-- * Not even in database - return given error or input
	-- * No color - return error
	-- * No shortname/abbrev - return first non-blank of abbrev->shortname->input
	if not party_info then
		if out_type == 'color' then
			return args.error or default_color
		else
			return args.error or party
		end
	end
	local return_value = party_info[out_type]
	if return_value == "" then
		if out_type == 'color' then
			return args.error or create_error("Value not in template. Please request that it be added.")
		elseif out_type == 'abbrev' then
			if party_info.shortname ~= "" then
				return party_info.shortname
			else
				return party
			end
		elseif out_type == 'shortname' then
			if party_info.abbrev ~= "" then
				return party_info.abbrev 
			else
				return party
			end
		else
			return party
		end
	end

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

function p.fetch(frame)
	-- Initialise and populate variables
	local getArgs = require("Module:Arguments").getArgs
	local args = getArgs(frame)
	
	return p._fetch(args)
end

return p