Module:NPVIC status
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 } } .. ' [[' .. state_name .. dab .. '|' .. state_name .. ']]' end return signatories end --function p.progress_bar(frame) -- local -- --end return p