Module:Political party

Þetta er skrifta sem inniheldur litakóða fyrir þingflokka um allan heim.

Notkun breyta

{{Political party|fetch|<flokkur>|<gildi>}}

Uppfærsla á skriftu breyta

Þingflokkarnir sem eru tilgreindir í þessari skriftu eru flokkaðir í stafrófsröð. Hver fyrsti stafur er á sér síðu (til dæmis er "Alþýðubandalagið" undir /A).

Á hverri síðu eru tveir hópar: local alternate and local full.

Vara (Alternate) nöfn þingflokka breyta

Flokkurinn vara er fyrir önnur nöfn flokksins. Aðalnafn er alltaf titill greinarinnar um flokkinn, varanöfn geta verið einföldun á því nafni. Eftirfarandi eru varanöfn Framsóknarflokksins:

local alternate = {
    ....
	["Framsókn"] = "Framsóknarflokkurinn",
    ...
}

Fyrsta atriðið innan hornklofanna er varanafnið, og síðara atriðið innan gæsalappa er nafnið sem finnst undir heildar hópnum, eins og farið verður yfir neðar á síðunni. Athugaðu að varanafn flokks verður að vera á réttri síðu, þeirri sem hefur fyrsta staf flokksins í titlinum. Til dæmis myndi Sjálfstæðisflokkur Finnlands (finnska: Kansalaisliitto) hafa skammstöfunina og varanafnið IPU. Varanafnið IPU væri undir /I, þar sem það er fyrsti stafur skammstöfununnar, þó svo að aðalnafnið byrji á /S.

Gildi í töflu breyta

local full = {
    ....
	["Verkamannaflokkurinn (Bretland)"] = {abbrev = "Lab", color = "#E4003B", shortname = "Labour",},
    ...
}

Fyrir hvern stjórnmálaflokk eru geymd þrjú gildi:

  • Skammstöfunin undir abbrev.
  • Litakóði flokksins undir color, sem getur verið hex kóði (t.d. #FFFFFF) eða grunnheiti litar.
  • Stytting á nafni flokksins undir shortname.

Þessi þrjú gildi þurfa ekki að vera einstök á meðal annara flokka. Varanöfn og aðalnöfn flokka þurfa hinsvegar að vera einstök.

Ef nafn flokks er ekki tilgreint þá mun skriftan skila öðru stuttu nafni flokksins. Þannig ef abbrev er tilgreint en shortname er það ekki, þá mun skriftan skila skammstöfuninni (abbrev), óháð því hvoru gildinu sé óskað eftir.

Gagnasíður breyta



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 mw.ustring.match(index, '%A') then
		return '1'
	end
	return mw.ustring.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 = mw.ustring.match(text, '(%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 -- lazy load
	local data_all
	local party_alt
	if index and mw.title.new('Political party/' .. index, 'Module') and mw.title.new('Political party/' .. index, 'Module').exists then
		data = mw.loadData('Module:Political party/' .. index)
		data_all = data.full
		party_alt = data.alternate[party]
	end

	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
	elseif data_all then
		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 mw.ustring.find(return_value, '#') then
		return_value = mw.ustring.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