Module:Political party: Difference between revisions

From TEPwiki, Urth's Encyclopedia
Jump to navigation Jump to search
Content added Content deleted
(moving to where it's used)
(Undid revision 1042945525 by Gonnym (talk) maybe this is just the way I was taught how to code, but I don't think I've seen a module where the variables aren't populated all at once (especially if they have similar syntax))
Line 12: Line 12:
-- 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(frame)
-- Initialise and populate variables
local args = frame.args
local args = frame.args
local party = stripToNil(args[1]) or error('parameter 1 should be a party name')
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 = mw.ustring.sub(party, 1, 1)
local index = mw.ustring.sub(party, 1, 1)
Line 26: Line 27:
local data_all = data.full
local data_all = data.full
local data_alt = data.alternate
local data_alt = data.alternate

local out_type = stripToNil(args[2]) or error('parameter 2 should be the output type')
local return_value = data_all[party][out_type] or data_all[data_alt[party]][out_type]
local return_value = data_all[party][out_type] or data_all[data_alt[party]][out_type]



Revision as of 10:17, 7 September 2021

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

local p = {}

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 = mw.ustring.sub(party, 1, 1)
	
	-- Set index for non-A-Z starts
	if string.match(index, '%A') then
		index = '1'
	end
	
	-- Load data from submodule
	local data = mw.loadData('Module:Political names/' .. index)
	local data_all = data.full
	local data_alt = data.alternate
	
	local return_value = data_all[party][out_type] or data_all[data_alt[party]][out_type]

	-- If database value doesn't exist, return input (for shortname) or error (for others)
	if return_value == nil and frame.args[1] ~= nil then
		if out_type == 'shortname' then
			return_value = party
		else
			return_value = error('value not in template. Please request that it be added')
		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