Module:NPVIC status

MyWikiBiz, Author Your Legacy — Saturday July 06, 2024
Jump to navigationJump to search

Accepts raw status strings from the article National Popular Vote Interstate Compact and returns processed status information for use in that article.

The parameter "section" takes the name of a labelled section of the article, either "passed" or "pending", containing a string of state equivalents (identified by US postal abbreviation, with any non-letter separator) to use as inputs to the specified function.

Functions

"States" returns the number of states (excluding DC) listed in the input string. An unnamed argument with value "spell" will cause the number to be spelled out per MOS:NUMERAL.

{{#invoke:NPVIC status|states|section=section}}

"EVs" returns the total number of electoral votes controlled by jurisdictions listed in the input string.

{{#invoke:NPVIC status|EVs|section=section}}

"Overlays" returns overlay maps indicating the compact has a status of "passed" (green) or "pending" (yellow), in the jurisdictions listed in the input string. This function takes an additional "size" argument to ensure that the overlay images align with the base map.

{{#invoke:NPVIC status|overlays|section=section|size=size}}

"Signatories" returns a bulleted list of the jurisdictions where the compact has passed into law, with their flags. The "passed" section is used automatically.

{{#invoke:NPVIC status|signatories}}


local p = {}

function getstates(frame)
	local states = frame:expandTemplate{ title = 'section transclude', args = { frame.args['section'] } }
	if states == '' then
		states = frame.args[1]
	end
	return states
end

function p.EVs(frame)
	local states = getstates(frame)
	if not states then
		return frame:expandTemplate{ title = 'error', args = { 'Value not available when editing this section in isolation.' } }
	else
		local total = 0
		for state in mw.ustring.gmatch( states, "%a%a" ) do
			seats = frame:expandTemplate{ title = 'USHRseats', args = { state } }
			if state=='DC' then seats=1 end
			if type(tonumber(seats))=='nil' then
				total = error("Unrecognized state")
				break
			else
				total = total + seats + 2
			end
		end
		return total
	end
end

function p.percent(frame)
	local EVs = p.EVs(frame)
	if frame.args[1] then
		denom = frame.args[1]
	else
		denom = 538
	end
	if frame.args[2] then
		places = frame.args[2]
	else
		places = 1
	end
	percent = frame:expandTemplate{ title = 'percent', args = { EVs, denom, places} }
	return percent
end

function p.states(frame)
	local states = getstates(frame)
	local total = 0
	for state in mw.ustring.gmatch( states, "%a%a" ) do
		if state~='DC' then
			total = total + 1
		end
	end
	if total==0 then
		return frame:expandTemplate{ title = 'error', args = { 'Value not available when editing this section in isolation.' } }
	else
		if frame.args[1]=='spell' then
			total = frame:expandTemplate{ title = 'spellnum per MOS', args = { total } }
		end
		return total
	end
end

function p.overlays(frame)
	local states = getstates(frame)
	local size = frame.args['size'] or '325px'

	if frame.args['section']=='passed' then
		color = 'green'
	elseif frame.args['section']=='pending' then
		color = 'yellow'
	end
		
	local overlays = ''
	for state in mw.ustring.gmatch( states, "%a%a" ) do
		state_overlay = '<div style=\"position: absolute; left: 0px; top: 0px\">[[File:' .. state .. ' ' .. color .. ' 21.svg|' .. size .. ']]</div>'
		overlays = overlays .. state_overlay
	end
	return overlays
end

function p.signatories(frame)
	local states = frame:expandTemplate{ title = 'section transclude', args = { 'passed' } }
	local signatories = ''
	for state in mw.ustring.gmatch( states, "%a%a" ) do
		state_name = frame:expandTemplate{ title = 'US State Abbrev', args = { state } }
		local dab = ''
		if state_name=='New York' or state_name=='Washington' then
			dab=' (state)'
		end
		signatories = signatories .. '\n* ' .. frame:expandTemplate{ title = 'flagicon', args = { state_name } } .. '&nbsp;[[' ..  state_name .. dab .. '|' ..  state_name .. ']]'
	end
	return signatories
end

--function p.progress_bar(frame)
--	local
--	
--end


return p