Spring til indhold

Modul:Partifarve

Fra Wikipedia, den frie encyklopædi

--[[ Modul til at finde partifarve for et politisk ud fra partinavnet. ]]

local p = {}

require('Modul:No globals')

local function get_color_from_meta_template(frame, party_name, template_name)

	mw.log("get_color_from_meta_template: Prøver '" .. party_name .. '/meta/' .. template_name .. "'")
	local template =  party_name .. '/meta/' .. template_name
	local title = mw.title.makeTitle('Template', template)
	if title.exists then
		mw.log ("fundet")
		return frame:expandTemplate{title = template, args = {} }
	end
	mw.log ("ikke fundet")
	return nil
end

function p._partifarve(party_name, lang, frame)

	party_name = mw.text.trim(party_name) -- Remove whitespace at start and end
	mw.logObject(party_name, "party_name")

	--[=[ Udtræk linknavnet fra et eventuelt link af typen "[[link|label]]"
	 eller af typen "link|label" (Bruges fx i Infoboks valg og Infoboks valg1).
	 Afslut også partinavnet ved forekomst af ASCII tegnet \127 som strip markers
	 (forekommer fx hvis der er fodnoter) starter med.
	]=]
	local delink = string.match(party_name, '%[?%[?([^|%]\127]*)')
	mw.logObject(delink, "delink")
	if delink
		then party_name = delink
	end

	if lang == nil then
		-- Try for local meta color files
		if frame == nil then
			frame = mw.getCurrentFrame()
		end
		
		local color = get_color_from_meta_template(frame, party_name, 'farve')
		if color then return color end

		local color = get_color_from_meta_template(frame, party_name, 'color')
		if color then return color end
		
		-- Resolve redirects
		local article_title = mw.title.new(party_name)
		local redirectTarget = article_title.redirectTarget
		if redirectTarget ~= false then 
			mw.log("Er redirect")
			mw.logObject(redirectTarget, "redirectTarget")
			party_name = redirectTarget.text
		else
			mw.log("Ikke redirect")
		end
	end

	-- Try Wikidata

	local entity_id
	if lang then
		entity_id = mw.wikibase.getEntityIdForTitle(party_name, lang .. 'wiki')
	else
		entity_id = mw.wikibase.getEntityIdForTitle(party_name)
	end

	if entity_id then
		mw.logObject(entity_id, 'entity_id')
		local statements = mw.wikibase.getBestStatements(entity_id, "P465")
		if statements and #statements == 1 and
			statements[1].mainsnak and
			statements[1].mainsnak.snaktype == 'value' then
			mw.log('WD-farve fundet')
			return mw.text.nowiki('#' .. statements[1].mainsnak.datavalue.value)
		else
			mw.log('WD-farve ikke fundet')
		end
	else
		mw.log('entity_id ikke fundet')
	end

	-- Intet fundet ... sporingskategori?
	return mw.text.nowiki('#FFFFFF')
end

function p.partifarve(frame)
	local args = (frame == mw.getCurrentFrame()) and frame:getParent().args or frame.args
	local party_name = args[1]
	local lang = args["sprog"]
	return p._partifarve(party_name, lang, frame)
end

return p