<?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%3ARanking_movements</id>
	<title>Module:Ranking movements - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARanking_movements"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Ranking_movements&amp;action=history"/>
	<updated>2026-05-27T11:23:27Z</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:Ranking_movements&amp;diff=144596&amp;oldid=prev</id>
		<title>imported&gt;Frietjes: add nocat</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Ranking_movements&amp;diff=144596&amp;oldid=prev"/>
		<updated>2022-03-23T15:55:12Z</updated>

		<summary type="html">&lt;p&gt;add nocat&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements [[Template:Ranking movements]]&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local templatestyles = &amp;#039;Module:Ranking movements/styles.css&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local colors = {&lt;br /&gt;
	[&amp;#039;+&amp;#039;] = &amp;#039;#D8FFEB&amp;#039;,&lt;br /&gt;
	[&amp;#039;-&amp;#039;] = &amp;#039;#FFE6E6&amp;#039;,&lt;br /&gt;
	[&amp;#039;not released&amp;#039;] = &amp;#039;#999999&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
local labels = {&lt;br /&gt;
	[&amp;#039;title&amp;#039;] = &amp;#039;Ranking movements&amp;#039;,&lt;br /&gt;
	[&amp;#039;legend&amp;#039;] = &amp;#039;Legend&amp;#039;,&lt;br /&gt;
	[&amp;#039;week&amp;#039;] = &amp;#039;Week&amp;#039;,&lt;br /&gt;
	[&amp;#039;poll&amp;#039;] = &amp;#039;Poll&amp;#039;,&lt;br /&gt;
	[&amp;#039;pre&amp;#039;] = &amp;#039;Pre&amp;#039;,&lt;br /&gt;
	[&amp;#039;final&amp;#039;] = &amp;#039;Final&amp;#039;,&lt;br /&gt;
	[&amp;#039;not released&amp;#039;] = &amp;#039;Not released&amp;#039;,&lt;br /&gt;
	[&amp;#039;+&amp;#039;] = &amp;#039;Increase in ranking.&amp;#039;,&lt;br /&gt;
	[&amp;#039;-&amp;#039;] = &amp;#039;Decrease in ranking.&amp;#039;,&lt;br /&gt;
	[&amp;#039;—&amp;#039;] = &amp;#039;Not ranked.&amp;#039;,&lt;br /&gt;
	[&amp;#039;RV&amp;#039;] = &amp;#039;Received votes.&amp;#039;,&lt;br /&gt;
	[&amp;#039;т&amp;#039;] = &amp;#039;Tied with team above or below.&amp;#039;,&lt;br /&gt;
	[&amp;#039;( )&amp;#039;] = &amp;#039;First place votes.&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local legend = {&lt;br /&gt;
	[&amp;#039;+&amp;#039;] = false,&lt;br /&gt;
	[&amp;#039;-&amp;#039;] = false,&lt;br /&gt;
	[&amp;#039;—&amp;#039;] = false,&lt;br /&gt;
	[&amp;#039;RV&amp;#039;] = false,&lt;br /&gt;
	[&amp;#039;т&amp;#039;] = false,&lt;br /&gt;
	[&amp;#039;( )&amp;#039;] = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function format_cell_text(s)&lt;br /&gt;
	if s then&lt;br /&gt;
		if s:match(&amp;#039;^[Nn][Rr]&amp;#039;) or s:match(&amp;#039;^—&amp;#039;) then&lt;br /&gt;
			legend[&amp;#039;—&amp;#039;] = true&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(&amp;#039;^[Rr][Vv]&amp;#039;) then&lt;br /&gt;
			legend[&amp;#039;RV&amp;#039;] = true&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(&amp;#039;%d[%-%s]*[Tt]&amp;#039;) or s:match(&amp;#039;[Tт]&amp;#039;) then&lt;br /&gt;
			legend[&amp;#039;т&amp;#039;] = true&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(&amp;#039;[%(%)]&amp;#039;) then&lt;br /&gt;
			legend[&amp;#039;( )&amp;#039;] = true&lt;br /&gt;
		end&lt;br /&gt;
		s = mw.ustring.gsub(s, &amp;#039;^NR&amp;#039;, &amp;#039;—&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_rank(s)&lt;br /&gt;
	-- This is intended to remove any extra stuff after the ranking&lt;br /&gt;
	local result = mw.ustring.match(s or &amp;#039;&amp;#039;, &amp;#039;^%d*&amp;#039;) or &amp;#039;&amp;#039; -- Is it numbers?&lt;br /&gt;
	if result == &amp;#039;&amp;#039; then&lt;br /&gt;
		result = mw.ustring.match(s or &amp;#039;&amp;#039;, &amp;#039;^[%a/—]*&amp;#039;) or &amp;#039;&amp;#039; -- Is it letters?&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_color(lastweek, thisweek)&lt;br /&gt;
	-- No coloring if first week or this week is blank&lt;br /&gt;
	if (lastweek == &amp;#039;first week&amp;#039;) or (thisweek == &amp;#039;&amp;#039;) or (lastweek == &amp;#039;&amp;#039;)&lt;br /&gt;
		or (lastweek == &amp;#039;N/A&amp;#039;) or (thisweek == &amp;#039;N/A&amp;#039;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- No coloring if the rank has not changes&lt;br /&gt;
	if (lastweek == thisweek) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- If last week was NR then rank has increased&lt;br /&gt;
	if (lastweek == &amp;#039;NR&amp;#039; or lastweek == &amp;#039;—&amp;#039;) then&lt;br /&gt;
		legend[&amp;#039;+&amp;#039;] = true&lt;br /&gt;
		return colors[&amp;#039;+&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
	-- If last week was RV&lt;br /&gt;
	if (lastweek == &amp;#039;RV&amp;#039;) then&lt;br /&gt;
		-- If this week is NR then rank has decreased, otherwise increased&lt;br /&gt;
		if (thisweek == &amp;#039;NR&amp;#039; or thisweek == &amp;#039;—&amp;#039;) then&lt;br /&gt;
			legend[&amp;#039;-&amp;#039;] = true&lt;br /&gt;
			return colors[&amp;#039;-&amp;#039;]&lt;br /&gt;
		else&lt;br /&gt;
			legend[&amp;#039;+&amp;#039;] = true&lt;br /&gt;
			return colors[&amp;#039;+&amp;#039;]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- In all other cases, just compare the numbers&lt;br /&gt;
	lastweek = tonumber(lastweek) or 999999&lt;br /&gt;
	thisweek = tonumber(thisweek) or 999999&lt;br /&gt;
	if (lastweek &amp;gt; thisweek) then&lt;br /&gt;
		legend[&amp;#039;+&amp;#039;] = true&lt;br /&gt;
		return colors[&amp;#039;+&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
	if (thisweek &amp;gt; lastweek) then&lt;br /&gt;
		legend[&amp;#039;-&amp;#039;] = true&lt;br /&gt;
		return colors[&amp;#039;-&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local tracking, preview = {}, {}&lt;br /&gt;
&lt;br /&gt;
local function checkargs(args)&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
    	if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			if k and type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				if k:match(&amp;#039;^poll[1-5]firstweek$&amp;#039;) or k:match(&amp;#039;^poll[1-5]lastweek$&amp;#039;) &lt;br /&gt;
					or k:match(&amp;#039;^poll[1-5]title$&amp;#039;) or k:match(&amp;#039;^poll[1-5]_final$&amp;#039;) or k == &amp;#039;title&amp;#039; or k == &amp;#039;nocat&amp;#039;&lt;br /&gt;
					or k:match(&amp;#039;^wk1?%d$&amp;#039;) or k:match(&amp;#039;^wk2[01]&amp;#039;) then&lt;br /&gt;
					-- valid&lt;br /&gt;
				elseif k:match(&amp;#039;^poll[1-5]_1?%d$&amp;#039;) or k:match(&amp;#039;^poll[1-5]_2[01]$&amp;#039;) then&lt;br /&gt;
					-- valid&lt;br /&gt;
					local i = mw.ustring.gsub(k, &amp;#039;^poll([1-5])_%d+$&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
					local j = mw.ustring.gsub(k, &amp;#039;^poll[1-5]_(%d+)$&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
					local maxweeks = tonumber(args[&amp;#039;poll&amp;#039; .. i .. &amp;#039;lastweek&amp;#039;]) or 20&lt;br /&gt;
					if tonumber(j) &amp;gt; maxweeks then&lt;br /&gt;
						table.insert(tracking, &amp;#039;[[Category:Pages using ranking movements with poll after last week|&amp;#039; .. i .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					-- invalid&lt;br /&gt;
					local vlen = mw.ustring.len(k)&lt;br /&gt;
					k = mw.ustring.sub(k, 1, (vlen &amp;lt; 25) and vlen or 25) &lt;br /&gt;
					k = mw.ustring.gsub(k, &amp;#039;[^%w\-_ ]&amp;#039;, &amp;#039;?&amp;#039;)&lt;br /&gt;
					table.insert(tracking, &amp;#039;[[Category:Pages using ranking movements with unknown parameters|&amp;#039; .. k .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
					table.insert(preview, &amp;#039;&amp;quot;&amp;#039; .. k .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	local maxpolls = 5&lt;br /&gt;
	-- Compute the maximum number of columns&lt;br /&gt;
	local minweeks = 20&lt;br /&gt;
	local maxweeks = 0&lt;br /&gt;
	for k = 1,maxpolls do&lt;br /&gt;
		local n = tonumber(args[&amp;#039;poll&amp;#039; .. k .. &amp;#039;lastweek&amp;#039;]) or (args[&amp;#039;poll&amp;#039; .. k .. &amp;#039;title&amp;#039;] and 20 or 0)&lt;br /&gt;
		maxweeks = (n &amp;gt; maxweeks) and n or maxweeks&lt;br /&gt;
		local n = tonumber(args[&amp;#039;poll&amp;#039; .. k .. &amp;#039;firstweek&amp;#039;]) or (args[&amp;#039;poll&amp;#039; .. k .. &amp;#039;title&amp;#039;] and 0 or 20)&lt;br /&gt;
		minweeks = (n &amp;lt; minweeks) and n or minweeks&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start table&lt;br /&gt;
	local root = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wikitable ranking-movements&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Table caption title&lt;br /&gt;
	local caption = root:tag(&amp;#039;caption&amp;#039;):wikitext(args[&amp;#039;title&amp;#039;] or labels[&amp;#039;title&amp;#039;])&lt;br /&gt;
&lt;br /&gt;
	-- Week header row&lt;br /&gt;
	local row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	row:tag(&amp;#039;th&amp;#039;) -- Blank space in corner&lt;br /&gt;
	row:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;colspan&amp;#039;, maxweeks - minweeks + 1):wikitext(labels[&amp;#039;week&amp;#039;])&lt;br /&gt;
&lt;br /&gt;
	-- Poll header row&lt;br /&gt;
	row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
		:wikitext(labels[&amp;#039;poll&amp;#039;])&lt;br /&gt;
	for k = minweeks,maxweeks do&lt;br /&gt;
		local text = args[&amp;#039;wk&amp;#039; .. k] or k&lt;br /&gt;
		if (k == 0) then&lt;br /&gt;
			text = args[&amp;#039;wk&amp;#039; .. k] or labels[&amp;#039;pre&amp;#039;]&lt;br /&gt;
		elseif (k == maxweeks) then&lt;br /&gt;
			text = args[&amp;#039;wk&amp;#039; .. k] or labels[&amp;#039;final&amp;#039;]&lt;br /&gt;
		end&lt;br /&gt;
		row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:wikitext(text)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Poll data rows&lt;br /&gt;
	for i = 1,maxpolls do&lt;br /&gt;
		local ptitle = args[&amp;#039;poll&amp;#039; .. i .. &amp;#039;title&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local pfirstweek = tonumber(args[&amp;#039;poll&amp;#039; .. i .. &amp;#039;firstweek&amp;#039;]) or 0&lt;br /&gt;
		local plastweek = tonumber(args[&amp;#039;poll&amp;#039; .. i .. &amp;#039;lastweek&amp;#039;]) or 20&lt;br /&gt;
		if ptitle ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			row = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
				:wikitext(ptitle)&lt;br /&gt;
			-- Before the first poll&lt;br /&gt;
			if pfirstweek &amp;gt; minweeks then&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;colspan&amp;#039;, pfirstweek - minweeks)&lt;br /&gt;
					:css(&amp;#039;background&amp;#039;, colors[&amp;#039;not released&amp;#039;])&lt;br /&gt;
					:wikitext(labels[&amp;#039;not released&amp;#039;])&lt;br /&gt;
			end&lt;br /&gt;
			-- Results&lt;br /&gt;
			local lastweek = &amp;#039;first week&amp;#039;&lt;br /&gt;
			for k = pfirstweek,plastweek do&lt;br /&gt;
				local rank = args[&amp;#039;poll&amp;#039; .. i .. &amp;#039;_&amp;#039; .. k]&lt;br /&gt;
				if rank then&lt;br /&gt;
					rank = mw.ustring.gsub(rank, &amp;#039;^&amp;amp;[MNmn][Dd][Aa][Ss][Hh];&amp;#039;, &amp;#039;—&amp;#039;)&lt;br /&gt;
					rank = mw.ustring.gsub(rank, &amp;#039;^[–%-]&amp;#039;, &amp;#039;—&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
				local thisweek = get_rank(rank)&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;background&amp;#039;, get_color(lastweek, thisweek))&lt;br /&gt;
					:wikitext(format_cell_text(rank))&lt;br /&gt;
				lastweek = thisweek&lt;br /&gt;
			end&lt;br /&gt;
			-- After the last poll&lt;br /&gt;
			if plastweek &amp;lt; maxweeks then&lt;br /&gt;
				rank = args[&amp;#039;poll&amp;#039; .. i .. &amp;#039;_final&amp;#039;]&lt;br /&gt;
				local colspan = (maxweeks - plastweek) - (rank and 1 or 0)&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;colspan&amp;#039;, (colspan &amp;gt; 1) and colspan or nil)&lt;br /&gt;
					:css(&amp;#039;background&amp;#039;, colors[&amp;#039;not released&amp;#039;])&lt;br /&gt;
					:wikitext(labels[&amp;#039;not released&amp;#039;])&lt;br /&gt;
				if rank and colspan &amp;gt; 0 then&lt;br /&gt;
					rank = mw.ustring.gsub(rank, &amp;#039;^&amp;amp;[MNmn][Dd][Aa][Ss][Hh];&amp;#039;, &amp;#039;—&amp;#039;)&lt;br /&gt;
					rank = mw.ustring.gsub(rank, &amp;#039;^[–%-]&amp;#039;, &amp;#039;—&amp;#039;)&lt;br /&gt;
					local thisweek = get_rank(rank)&lt;br /&gt;
					row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;background&amp;#039;, get_color(lastweek, thisweek))&lt;br /&gt;
						:wikitext(format_cell_text(rank))&lt;br /&gt;
				end				&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Add legend&lt;br /&gt;
	local line1, line2 = &amp;#039;&amp;#039;, &amp;#039;&amp;#039;&lt;br /&gt;
	if legend[&amp;#039;+&amp;#039;] or legend[&amp;#039;-&amp;#039;] then&lt;br /&gt;
		for k,v in ipairs({&amp;#039;+&amp;#039;, &amp;#039;-&amp;#039;}) do&lt;br /&gt;
			line1 = line1 .. &amp;#039; &amp;lt;span style=&amp;quot;color:&amp;#039; .. colors[v] .. &amp;#039;&amp;quot;&amp;gt;██&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			line1 = line1 .. &amp;#039; &amp;#039; .. labels[v]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k,v in ipairs({&amp;#039;—&amp;#039;, &amp;#039;RV&amp;#039;, &amp;#039;т&amp;#039;, &amp;#039;( )&amp;#039;}) do&lt;br /&gt;
		if legend[v] then line2 = line2  .. &amp;#039; &amp;#039; .. v .. &amp;#039; = &amp;#039; .. labels[v] end&lt;br /&gt;
	end&lt;br /&gt;
	if line1 ~= &amp;#039;&amp;#039; or line2 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		caption:wikitext(&amp;#039;&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;\&amp;#039;\&amp;#039;\&amp;#039;&amp;#039; .. labels[&amp;#039;legend&amp;#039;] .. &amp;#039;:\&amp;#039;\&amp;#039;\&amp;#039;&amp;#039; .. line1)&lt;br /&gt;
		if line1 ~= &amp;#039;&amp;#039; and line2 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			caption:wikitext(&amp;#039;&amp;lt;br /&amp;gt;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		caption:wikitext(line2 .. &amp;#039;&amp;lt;/small&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	checkargs(args)&lt;br /&gt;
&lt;br /&gt;
	local trackstr = (#tracking &amp;gt; 0) and table.concat(tracking, &amp;#039;&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	if #preview &amp;gt; 0 then&lt;br /&gt;
		trackstr = require(&amp;#039;Module:If preview&amp;#039;)._warning({&lt;br /&gt;
			&amp;#039;Unknown parameters &amp;#039; .. table.concat(preview, &amp;#039;; &amp;#039;) .. &amp;#039;.&amp;#039;&lt;br /&gt;
		}) .. trackstr&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return frame:extensionTag{ name = &amp;#039;templatestyles&amp;#039;, args = { src = templatestyles} } &lt;br /&gt;
		.. tostring(root) .. trackstr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Frietjes</name></author>
	</entry>
</feed>