<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FSwpb%2FNPVIC_chart_new</id>
	<title>Module:Sandbox/Swpb/NPVIC chart new - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FSwpb%2FNPVIC_chart_new"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Swpb/NPVIC_chart_new&amp;action=history"/>
	<updated>2026-04-21T16:11:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Swpb/NPVIC_chart_new&amp;diff=146245&amp;oldid=prev</id>
		<title>imported&gt;Swpb at 21:47, 10 April 2019</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Swpb/NPVIC_chart_new&amp;diff=146245&amp;oldid=prev"/>
		<updated>2019-04-10T21:47:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;p = {}&lt;br /&gt;
&lt;br /&gt;
function julian(date_string)&lt;br /&gt;
	jdate = mw.getCurrentFrame():getParent():expandTemplate{ title = &amp;#039;MDY to Julian&amp;#039;, args = { date_string } }&lt;br /&gt;
	return jdate&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function year(jdate)&lt;br /&gt;
	year = mw.getCurrentFrame():getParent():expandTemplate{ title = &amp;#039;JULIANDAY.YEAR&amp;#039;, args = { jdate } }&lt;br /&gt;
	return year	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function historic_EVs(state, year)&lt;br /&gt;
	historic_EVs = tonumber(mw.getCurrentFrame():getParent():expandTemplate{ title = &amp;#039;USHRseats&amp;#039;, args = { state, year } }) + 2&lt;br /&gt;
	return historic_EVs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Plots bar segments&lt;br /&gt;
function p.bars(frame)&lt;br /&gt;
	local height = frame.args[&amp;#039;height&amp;#039;] or 450&lt;br /&gt;
	local max_tot = frame.args[&amp;#039;max_tot&amp;#039;]&lt;br /&gt;
	local updated = frame.args[&amp;#039;updated&amp;#039;]&lt;br /&gt;
	local parent = mw.getCurrentFrame():getParent()&lt;br /&gt;
	&lt;br /&gt;
	running_dates = { julian(&amp;#039;1/1/2011&amp;#039;), julian(&amp;#039;1/1/2021&amp;#039;) }&lt;br /&gt;
	running_EVs = { 0, 0 }&lt;br /&gt;
--	for index,date in pairs(running_dates) do&lt;br /&gt;
--		running_totals[index] = 0	&lt;br /&gt;
--	end&lt;br /&gt;
&lt;br /&gt;
	local i = 1&lt;br /&gt;
	local bars = &amp;#039;&amp;#039;&lt;br /&gt;
	local totals = {}&lt;br /&gt;
	while parent:expandTemplate{ title = &amp;#039;component&amp;#039; , args = { frame.args[i] , 1 } }~=&amp;#039;&amp;#039; do&lt;br /&gt;
		state = parent:expandTemplate{ title = &amp;#039;component&amp;#039; , args = { frame.args[i] , 1 } }&lt;br /&gt;
		&lt;br /&gt;
		join1 = julian( parent:expandTemplate{ title = &amp;#039;component&amp;#039; , args = { frame.args[i] , &amp;#039;start&amp;#039; } } )&lt;br /&gt;
		drop1 = julian( parent:expandTemplate{ title = &amp;#039;component&amp;#039; , args = { frame.args[i] , &amp;#039;end&amp;#039; } } )&lt;br /&gt;
		join2 = julian( parent:expandTemplate{ title = &amp;#039;component&amp;#039; , args = { frame.args[i] , &amp;#039;start2&amp;#039; } } )&lt;br /&gt;
		drop2 = julian( parent:expandTemplate{ title = &amp;#039;component&amp;#039; , args = { frame.args[i] , &amp;#039;end2&amp;#039; } } )&lt;br /&gt;
		state_dates = {join1, drop1, join2, drop2}&lt;br /&gt;
		state_ismember = {1, 0, 1, 0}&lt;br /&gt;
		&lt;br /&gt;
		state_EVs = {}&lt;br /&gt;
		for index,state_date in pairs(state_dates) do&lt;br /&gt;
			state_EVs[index] = 0	&lt;br /&gt;
		end&lt;br /&gt;
		if state==&amp;#039;DC&amp;#039; then&lt;br /&gt;
			state_EVs[1] = 3&lt;br /&gt;
			state_EVs[3] = 3&lt;br /&gt;
		else&lt;br /&gt;
			state_EVs[1] = historic_EVs(state, year(join1))&lt;br /&gt;
			state_EVs[3] = historic_EVs(state, year(join2))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		for running_index,running_date in pairs(running_dates) do&lt;br /&gt;
			for state_index,state_date in pairs(state_dates) do&lt;br /&gt;
			&lt;br /&gt;
				if running_date &amp;gt; state_dates[state_index] and not running_date &amp;gt; state_dates[state_index+1] then&lt;br /&gt;
					table.insert( state_dates, state_index+1, running_date)&lt;br /&gt;
					if state_ismember[state_index]==1 then&lt;br /&gt;
						table.insert( state_EVs, state_index+1, historic_EVs(state,running_date) )&lt;br /&gt;
						table.insert( state_ismember, state_index+1, 1)&lt;br /&gt;
					else&lt;br /&gt;
						table.insert( state_EVs, state_index+1, 0)&lt;br /&gt;
						table.insert( state_ismember, state_index+1, 0)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		running_dates = state_dates&lt;br /&gt;
		&lt;br /&gt;
		for index,running_date in pairs(running_dates) do&lt;br /&gt;
		&lt;br /&gt;
			&lt;br /&gt;
			&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Update running_EVs array&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		bars = bars .. parent:expandTemplate{ title = &amp;#039;User:Swpb/sandbox9&amp;#039; , args = {  size = height, max_tot = max_tot, updated = updated, new_tot = totals[i], frame.args[i] } }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	i = i+1	&lt;br /&gt;
	return bars&lt;br /&gt;
end&lt;br /&gt;
--		if i&amp;lt;num_items then&lt;br /&gt;
--			if mw.ustring.match(state,&amp;#039;MD&amp;#039;) then&lt;br /&gt;
--				totals[i] = EVs&lt;br /&gt;
--			else&lt;br /&gt;
--				totals[i] = (totals[i-1] or 0) + EVs&lt;br /&gt;
--			end&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
--		for each date in dates: date_EV_pairs([date]) = USHRseats(date)+2 (when a member); = 0 (when not a member)&lt;br /&gt;
--		multiply a binary array of joined status by an array of EV values on those dates&lt;br /&gt;
&lt;br /&gt;
--		start1_EVs = parent:expandTemplate{ title = &amp;#039;USHRseats&amp;#039;, args = { state, mw.ustring.sub(start, -4) } }&lt;br /&gt;
--		end1_EVs = parent:expandTemplate{ title = &amp;#039;USHRseats&amp;#039;, args = { state, mw.ustring.sub(end1, -4) } }&lt;br /&gt;
--		start2_EVs = parent:expandTemplate{ title = &amp;#039;USHRseats&amp;#039;, args = { state, mw.ustring.sub(start2, -4) } }&lt;br /&gt;
--		end2_EVs = parent:expandTemplate{ title = &amp;#039;USHRseats&amp;#039;, args = { state, mw.ustring.sub(end2, -4) } }&lt;br /&gt;
	&lt;br /&gt;
--		Generate table of dates and EVs, and insert Census and other change dates&lt;br /&gt;
--		Add any new change dates (events other than start1) and expand running_totals table&lt;br /&gt;
--		Sort dates and totals and send to bars template&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
--Given a timespan from Jan 1, 2006 to a given end date &amp;quot;updated&amp;quot;&amp;gt;, calculates the percentage of time elapsed as of a given intermediate date &amp;quot;date&amp;quot;.&lt;br /&gt;
function p.percent(frame)&lt;br /&gt;
	local parent = mw.getCurrentFrame():getParent()&lt;br /&gt;
	local date = parent:expandTemplate{ title = &amp;#039;MDY to Julian&amp;#039;, frame.args[&amp;#039;date&amp;#039;]}&lt;br /&gt;
	local updated = parent:expandTemplate{ title = &amp;#039;MDY to Julian&amp;#039;, frame.args[&amp;#039;updated&amp;#039;]}&lt;br /&gt;
	local start = parent:expandTemplate{ title = &amp;#039;MDY to Julian&amp;#039;, &amp;#039;1/1/2006&amp;#039; }&lt;br /&gt;
	percent = 100 * (date - start)/(updated - start)&lt;br /&gt;
	return percent	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Draws interior gray bars on odd years&lt;br /&gt;
function p.stripes(frame)&lt;br /&gt;
	local parent = mw.getCurrentFrame():getParent()&lt;br /&gt;
	local updated = frame.args[&amp;#039;updated&amp;#039;]&lt;br /&gt;
	local year_updated = parent:expandTemplate{ title = &amp;#039;str rightc&amp;#039;, args = {updated, 4} }&lt;br /&gt;
	&lt;br /&gt;
	local stripes = &amp;#039;&amp;#039;&lt;br /&gt;
	for year = 2006, year_updated, 2 do&lt;br /&gt;
		stripes = stripes .. &amp;#039;&amp;lt;div style=&amp;quot;display: inline-block; position: absolute;&amp;#039; ..&lt;br /&gt;
		&amp;#039;left: {{NPVIC chart/percent| date=1/1/&amp;#039; .. year .. &amp;#039;}} | updated=&amp;#039; .. updated .. &amp;#039; }}%;&amp;#039; ..&lt;br /&gt;
		&amp;#039;right: {{max|0|{{#expr: 100-{{NPVIC chart/percent| date=12/31/&amp;#039; .. year .. &amp;#039; | updated=&amp;#039; .. updated .. &amp;#039; }} }} }}%;&amp;#039; ..&lt;br /&gt;
		&amp;#039;bottom: 0%;&amp;#039; ..&lt;br /&gt;
		&amp;#039;top: 0%;&amp;#039; ..&lt;br /&gt;
		&amp;#039;background-color: #F9F9F9;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return stripes	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Swpb</name></author>
	</entry>
</feed>