<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ASportsRankings</id>
	<title>Module:SportsRankings - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ASportsRankings"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:SportsRankings&amp;action=history"/>
	<updated>2026-04-05T10:30:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the-democratika.com/wiki/index.php?title=Module:SportsRankings&amp;diff=7908&amp;oldid=prev</id>
		<title>&gt;Frietjes: fix for pages showing up in Wikipedia:Database reports/Transclusions of non-existent templates by adding an optional table for translating missing three letter flag codes (if the table isn&#039;t specified, nothing new happens).  another option would be to do a proper &quot;if exist&quot; on the country data file, but that is too expensive?  anyway, this fix has been tested in the sandbox with Module:SportsRankings/data/World Football Elo Ratings but please revert if this breaks something ...</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:SportsRankings&amp;diff=7908&amp;oldid=prev"/>
		<updated>2023-08-03T16:08:11Z</updated>

		<summary type="html">&lt;p&gt;fix for pages showing up in &lt;a href=&quot;https://en.wikipedia.org/wiki/Database_reports/Transclusions_of_non-existent_templates&quot; class=&quot;extiw&quot; title=&quot;wikipedia:Database reports/Transclusions of non-existent templates&quot;&gt;Wikipedia:Database reports/Transclusions of non-existent templates&lt;/a&gt; by adding an optional table for translating missing three letter flag codes (if the table isn&amp;#039;t specified, nothing new happens).  another option would be to do a proper &amp;quot;if exist&amp;quot; on the country data file, but that is too expensive?  anyway, this fix has been tested in the sandbox with &lt;a href=&quot;/wiki/index.php?title=Module:SportsRankings/data/World_Football_Elo_Ratings&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module:SportsRankings/data/World Football Elo Ratings (page does not exist)&quot;&gt;Module:SportsRankings/data/World Football Elo Ratings&lt;/a&gt; but please revert if this breaks something ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local p = {} &lt;br /&gt;
&lt;br /&gt;
local error_msg = &amp;#039;&amp;lt;span style=\&amp;quot;font-size:100%\&amp;quot; class=\&amp;quot;error\&amp;quot;&amp;gt;&amp;lt;code style=\&amp;quot;color:inherit; border:inherit; padding:inherit;\&amp;quot;&amp;gt;&amp;amp;#124;_template=&amp;lt;/code&amp;gt; missing or empty&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
-- data for various rankings held in module subpages, e.g. &amp;quot;Module:SportsRankings/data/FIFA World Rankings&amp;quot;&lt;br /&gt;
local data = {}      --[[ parameters containing data help in three tables&lt;br /&gt;
						data.source = {}     -- parameters for using in cite web (title, url, website)&lt;br /&gt;
						data.updated = {}    -- date of latest update (month, day, year)&lt;br /&gt;
						data.rankings = {}   -- the rankings list (country code, ranking, movement)&lt;br /&gt;
					    data.alias = {}      -- alias list (country code, country name [=key])&lt;br /&gt;
					    &lt;br /&gt;
					--]]&lt;br /&gt;
&lt;br /&gt;
local  templateArgs = {} -- contains arguments from template involking module&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function getArgs(frame)&lt;br /&gt;
	local parents = mw.getCurrentFrame():getParent()&lt;br /&gt;
		&lt;br /&gt;
	for k,v in pairs(parents.args) do&lt;br /&gt;
		--check content&lt;br /&gt;
		if v and v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			templateArgs[k]=v --parents.args[k]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k,v in pairs(frame.args) do&lt;br /&gt;
		--check content&lt;br /&gt;
		if v and v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
			templateArgs[k]=v --parents.args[k]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- allow empty caption to blank default&lt;br /&gt;
	if parents.args[&amp;#039;caption&amp;#039;] then templateArgs[&amp;#039;caption&amp;#039;] = parents.args[&amp;#039;caption&amp;#039;] end&lt;br /&gt;
	if frame.args[&amp;#039;caption&amp;#039;] then templateArgs[&amp;#039;caption&amp;#039;] = frame.args[&amp;#039;caption&amp;#039;] end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function loadData(frame)&lt;br /&gt;
    &lt;br /&gt;
    local source = frame.args[1] -- source of rankings e.g. FIFA World Rankings&lt;br /&gt;
    data = require(&amp;#039;Module:SportsRankings/data/&amp;#039;.. source);&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getDate(option)&lt;br /&gt;
   &lt;br /&gt;
   local dateTable = data.updated         -- there must be date table (data.updated)&lt;br /&gt;
                                          -- TODO add a warning and/or category&lt;br /&gt;
   if option == &amp;quot;LAST&amp;quot; then &lt;br /&gt;
   		local lastDateTable = data.previous &lt;br /&gt;
   		if lastDateTable then             -- there might not be a previous data table (data.previous)&lt;br /&gt;
   			dateTable = lastDateTable&lt;br /&gt;
	   else &lt;br /&gt;
	   		return &amp;quot;No previous date available (data.updated missing)&amp;quot;&lt;br /&gt;
       end&lt;br /&gt;
   end&lt;br /&gt;
   &lt;br /&gt;
   if templateArgs[&amp;#039;mdy&amp;#039;] and templateArgs[&amp;#039;mdy&amp;#039;] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
   	   return dateTable[&amp;#039;month&amp;#039;] .. &amp;quot; &amp;quot; .. dateTable[&amp;#039;day&amp;#039;] .. &amp;quot;, &amp;quot; .. dateTable[&amp;#039;year&amp;#039;]&lt;br /&gt;
   else&lt;br /&gt;
   	   return dateTable[&amp;#039;day&amp;#039;] .. &amp;quot; &amp;quot; .. dateTable[&amp;#039;month&amp;#039;] .. &amp;quot; &amp;quot; .. dateTable[&amp;#039;year&amp;#039;]&lt;br /&gt;
   end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addCiteWeb(frame)  -- use cite web template&lt;br /&gt;
	&lt;br /&gt;
	return frame:expandTemplate{ title = &amp;#039;cite web&amp;#039; , args = {&lt;br /&gt;
    		url = data.source[&amp;#039;url&amp;#039;],            --&amp;quot;https://www.fifa.com/fifa-world-ranking/ranking-table/men/index.html&amp;quot;, &lt;br /&gt;
			title = data.source[&amp;#039;title&amp;#039;],        -- &amp;quot;The FIFA/Coca-Cola World Ranking&amp;quot;,&lt;br /&gt;
			website = data.source[&amp;#039;website&amp;#039;],    --&amp;quot;FIFA&amp;quot;,&lt;br /&gt;
			[&amp;#039;date&amp;#039;] = getDate(),&lt;br /&gt;
			[&amp;#039;access-date&amp;#039;] = getDate()&lt;br /&gt;
			}}&lt;br /&gt;
end&lt;br /&gt;
local function addReference(frame)&lt;br /&gt;
	&lt;br /&gt;
	local text = &amp;quot;&amp;quot;&lt;br /&gt;
	if data.source[&amp;#039;text&amp;#039;] then text = data.source[&amp;#039;text&amp;#039;] end&lt;br /&gt;
	&lt;br /&gt;
	return frame:expandTemplate{ title = &amp;#039;refn&amp;#039; , args = {&lt;br /&gt;
		name=frame.args[1],                                 --ranking used, e.g. &amp;quot;FIFA World Rankings&amp;quot;,&lt;br /&gt;
	    text .. addCiteWeb(frame)&lt;br /&gt;
	}}&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ the main function returning ranking for one country&lt;br /&gt;
      - takes three-letter country code or name of country as parameters&lt;br /&gt;
      - displays as rank | movement |date&lt;br /&gt;
]]&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	&lt;br /&gt;
    getArgs(frame) -- returns args table having checked for content&lt;br /&gt;
    loadData(frame)&lt;br /&gt;
    local outputString = &amp;quot;&amp;quot;&lt;br /&gt;
    local validCode = false&lt;br /&gt;
    local country = templateArgs[2] -- country name or county code passed as parameter&lt;br /&gt;
    local rank, move&lt;br /&gt;
    &lt;br /&gt;
    if string.len( country) ==  3 then -- if we have a three letter country code &lt;br /&gt;
	    for _,u in pairs(data.alias) do  -- run through alias list { 3-letter code, country name }&lt;br /&gt;
	    	if u[1]==country then        -- if code = passed parameter&lt;br /&gt;
	       		country = u[2]           -- set country name as key for ranking table&lt;br /&gt;
	       		validCode = true&lt;br /&gt;
	       		break&lt;br /&gt;
	       	end&lt;br /&gt;
	    end    &lt;br /&gt;
	    -- if no match of code to country name, set category&lt;br /&gt;
	    if not validCode then&lt;br /&gt;
	    	outputString=&amp;quot;[[Category:Pages using SportsRankings with unknown parameters]]&amp;quot; .. outputString&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    for _,v in pairs(data.rankings) do&lt;br /&gt;
    	if v[1]==country then &lt;br /&gt;
       		rank = v[2]    -- get rank&lt;br /&gt;
       		move = v[3]    -- get move from last ranking&lt;br /&gt;
       		break&lt;br /&gt;
       	end&lt;br /&gt;
    end&lt;br /&gt;
    if not rank then -- no ranking found (do we want a tracking for no rank found?)&lt;br /&gt;
    	rank = &amp;#039;NR&amp;#039; &lt;br /&gt;
	    --outputString=&amp;quot;[[Category:Pages using SportsRankings with unknown parameters]]&amp;quot; .. outputString&lt;br /&gt;
        --outputString=&amp;quot;[[Category:Pages using SportsRankings with no ranking]]&amp;quot; .. outputString&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if rank ~= &amp;#039;NR&amp;#039; then&lt;br /&gt;
		outputString = outputString .. &amp;#039; &amp;#039; .. rank .. &amp;#039; &amp;#039;&lt;br /&gt;
		if move &amp;lt; 0 and math.abs( move ) == math.abs( rank ) then -- new teams in ranking: move = -ranking&lt;br /&gt;
			outputString = outputString .. frame:expandTemplate{ title = &amp;#039;new entry&amp;#039; } &lt;br /&gt;
	    elseif move == 0 then                                    -- if no change in ranking&lt;br /&gt;
	    	outputString = outputString .. frame:expandTemplate{ title = &amp;#039;steady&amp;#039; } &lt;br /&gt;
	    elseif move &amp;lt; 0 then                                 --  if ranking down&lt;br /&gt;
	    	outputString = outputString .. frame:expandTemplate{ title = &amp;#039;decrease&amp;#039; } &lt;br /&gt;
	    	if move ~= -1000 then outputString = outputString .. &amp;#039; &amp;#039; .. math.abs(move) end&lt;br /&gt;
	    elseif move &amp;gt; 0 then                                 -- if ranking up&lt;br /&gt;
	    	outputString = outputString .. frame:expandTemplate{ title = &amp;#039;increase&amp;#039; } &lt;br /&gt;
	    	if move ~= 1000 then outputString = outputString .. &amp;#039; &amp;#039; .. move end&lt;br /&gt;
	    end	&lt;br /&gt;
    else&lt;br /&gt;
    	outputString = outputString .. frame:expandTemplate{ title = &amp;#039;Abbr&amp;#039;, args = { &amp;quot;NR&amp;quot;, &amp;quot;Not ranked&amp;quot;}  }&lt;br /&gt;
    	--	{{Abbr|NR|Not ranked}} &lt;br /&gt;
	end&lt;br /&gt;
	outputString = outputString .. &amp;#039; (&amp;#039; .. getDate() .. &amp;#039;)&amp;#039;&lt;br /&gt;
	outputString = outputString .. addReference(frame)&lt;br /&gt;
    &lt;br /&gt;
    return outputString&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[  outputs a table of the rankings &lt;br /&gt;
        called by list() or list2() &lt;br /&gt;
        positional parameters - |ranking|first|last the ranking to use, fist and last in table&lt;br /&gt;
        other parameters: |style=               -- CSS styling&lt;br /&gt;
                          |headerN= footerN=    -- displays header and footer rows with additional information&lt;br /&gt;
                          |caption=             -- value of caption to display&lt;br /&gt;
                                                -- by default it generates a caption&lt;br /&gt;
                                                -- this can be suppressed with empty |caption=&lt;br /&gt;
]]&lt;br /&gt;
local function table(frame, ranking, first,last)&lt;br /&gt;
&lt;br /&gt;
    local styleString = &amp;quot;&amp;quot;&lt;br /&gt;
    if templateArgs[&amp;#039;style&amp;#039;] and templateArgs[&amp;#039;style&amp;#039;] ~= &amp;quot;&amp;quot; then styleString = templateArgs[&amp;#039;style&amp;#039;] end&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    local sublist2 = { &amp;quot;ENG&amp;quot;, &amp;quot;SCO&amp;quot;, &amp;quot;WAL&amp;quot;, &amp;quot;IRE&amp;quot;, &amp;quot;NIR&amp;quot;, &amp;quot;FRA&amp;quot;, &amp;quot;England&amp;quot;, &amp;quot;France&amp;quot;, &amp;quot;Germany&amp;quot; }&lt;br /&gt;
    local sublist3 = { &amp;quot;AFG&amp;quot;,&amp;quot;AUS&amp;quot;,&amp;quot;BAN&amp;quot;,&amp;quot;BHR&amp;quot;,&amp;quot;BHU&amp;quot;,&amp;quot;BRU&amp;quot;,&amp;quot;CAM&amp;quot;,&amp;quot;CHN&amp;quot;,&amp;quot;GUM&amp;quot;,&amp;quot;HKG&amp;quot;,&amp;quot;IDN&amp;quot;,&amp;quot;IND&amp;quot;,&amp;quot;IRN&amp;quot;,&amp;quot;IRQ&amp;quot;,&amp;quot;JOR&amp;quot;,&lt;br /&gt;
    	              &amp;quot;JPN&amp;quot;,&amp;quot;KGZ&amp;quot;,&amp;quot;KOR&amp;quot;,&amp;quot;KSA&amp;quot;,&amp;quot;KUW&amp;quot;,&amp;quot;LAO&amp;quot;,&amp;quot;LIB&amp;quot;,&amp;quot;MAC&amp;quot;,&amp;quot;MAS&amp;quot;,&amp;quot;MDV&amp;quot;,&amp;quot;MNG&amp;quot;,&amp;quot;MYA&amp;quot;,&amp;quot;NEP&amp;quot;,&amp;quot;OMA&amp;quot;,&amp;quot;PAK&amp;quot;,&lt;br /&gt;
    	              &amp;quot;PHI&amp;quot;,&amp;quot;PLE&amp;quot;,&amp;quot;PRK&amp;quot;,&amp;quot;QAT&amp;quot;,&amp;quot;SIN&amp;quot;,&amp;quot;SRI&amp;quot;,&amp;quot;SYR&amp;quot;,&amp;quot;THA&amp;quot;,&amp;quot;TJK&amp;quot;,&amp;quot;TKM&amp;quot;,&amp;quot;TLS&amp;quot;,&amp;quot;TPE&amp;quot;,&amp;quot;UAE&amp;quot;,&amp;quot;UZB&amp;quot;,&amp;quot;VIE&amp;quot;,&lt;br /&gt;
    	              &amp;quot;YEM&amp;quot; }&lt;br /&gt;
    local lastRank = 0&lt;br /&gt;
    local selectCount = 0&lt;br /&gt;
    local selectData = nil&lt;br /&gt;
    local selectList = nil&lt;br /&gt;
    if templateArgs[&amp;#039;select&amp;#039;] then &lt;br /&gt;
    	if data.confederation[templateArgs[&amp;#039;select&amp;#039;]] then&lt;br /&gt;
	    	selectList = templateArgs[&amp;#039;select&amp;#039;]&lt;br /&gt;
	    	selectData = data.confederation[selectList]&lt;br /&gt;
	    	selectCount = 1&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- column header customisation&lt;br /&gt;
    local rankHeader = templateArgs[&amp;#039;rank_header&amp;#039;] or &amp;quot;Rank&amp;quot;&lt;br /&gt;
    local selectionHeader = templateArgs[&amp;#039;selection_header&amp;#039;] or selectList or &amp;quot;Rank&amp;quot;&lt;br /&gt;
    local teamHeader = templateArgs[&amp;#039;team_header&amp;#039;] or &amp;quot;Team&amp;quot;&lt;br /&gt;
    local pointsHeader = templateArgs[&amp;#039;points_header&amp;#039;] or &amp;quot;Points&amp;quot;&lt;br /&gt;
    local changeHeader = templateArgs[&amp;#039;change_header&amp;#039;] or &amp;quot;Change&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    --start table&lt;br /&gt;
    local outputString = &amp;#039;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center;&amp;#039; .. styleString .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    -- add default or custom caption&lt;br /&gt;
    local caption = ranking .. &amp;#039; as of &amp;#039; .. getDate() .. &amp;#039;.&amp;#039;&lt;br /&gt;
    if templateArgs[&amp;#039;caption&amp;#039;] and templateArgs[&amp;#039;caption&amp;#039;]  ~= &amp;quot;&amp;quot; then &lt;br /&gt;
    	caption = templateArgs[&amp;#039;caption&amp;#039;] &lt;br /&gt;
    	caption = p.replaceKeywords(caption)&lt;br /&gt;
    end&lt;br /&gt;
    if not (templateArgs[&amp;#039;caption&amp;#039;] and templateArgs[&amp;#039;caption&amp;#039;]  == &amp;quot;&amp;quot;) then &lt;br /&gt;
		outputString = outputString ..	&amp;#039;\n|+&amp;#039; .. caption .. addReference(frame)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- add header rows (logo, date of update etc)&lt;br /&gt;
    local count = 0&lt;br /&gt;
    local header = {}&lt;br /&gt;
    local tableWidth = 4&lt;br /&gt;
    if selectList then tableWidth = 5 end&lt;br /&gt;
    while count &amp;lt; 5 do&lt;br /&gt;
    	count = count + 1&lt;br /&gt;
	    if templateArgs[&amp;#039;header&amp;#039;..count] then&lt;br /&gt;
	    	header[count] = templateArgs[&amp;#039;header&amp;#039;..count] &lt;br /&gt;
	    	header[count] = p.replaceKeywords( header[count])&lt;br /&gt;
	    	outputString = outputString ..	&amp;#039;\n|-\n| colspan=&amp;quot;&amp;#039;.. tableWidth .. &amp;#039;&amp;quot; |&amp;#039; .. header[count]&lt;br /&gt;
	    end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- add the add part of the table&lt;br /&gt;
    local optionalColumn = &amp;quot;&amp;quot;&lt;br /&gt;
    if selectList then&lt;br /&gt;
    	optionalColumn = &amp;#039;\n!&amp;#039; .. selectionHeader &lt;br /&gt;
    end&lt;br /&gt;
   	outputString = outputString .. &amp;#039;\n|-&amp;#039; .. optionalColumn&lt;br /&gt;
    	                        .. &amp;#039;\n!&amp;#039; .. rankHeader .. &amp;#039;\n!&amp;#039; .. changeHeader &lt;br /&gt;
    	                        .. &amp;#039;\n!&amp;#039; .. teamHeader .. &amp;#039;\n!&amp;#039; .. pointsHeader&lt;br /&gt;
   &lt;br /&gt;
    local change,code = &amp;#039;&amp;#039;, &amp;#039;&amp;#039;&lt;br /&gt;
    --while i&amp;lt;last do &lt;br /&gt;
    for k,v in pairs(data.rankings) do&lt;br /&gt;
	   --v[2] = tonumber(v[2])&lt;br /&gt;
	   if v[2] &amp;gt;= first and v[2] &amp;lt;= last then &lt;br /&gt;
&lt;br /&gt;
		   for _,u in pairs(data.alias) do  -- get country code from name&lt;br /&gt;
		    	if u[2]==v[1] then &lt;br /&gt;
		       		code = u[1]    -- if alias (country code) then use country name as key&lt;br /&gt;
		       		break&lt;br /&gt;
		       	end&lt;br /&gt;
		    end   &lt;br /&gt;
	   	   &lt;br /&gt;
	   	    local continue = true&lt;br /&gt;
	   	    if selectList then                 -- select from list&lt;br /&gt;
	   	   	    continue = false &lt;br /&gt;
	   			for _,u in pairs(selectData) do&lt;br /&gt;
	   				if u == v[1] or u == code then &lt;br /&gt;
	   					continue = true &lt;br /&gt;
	   					break&lt;br /&gt;
	   				end&lt;br /&gt;
	   			end&lt;br /&gt;
	   	    end&lt;br /&gt;
		&lt;br /&gt;
			if continue ==true  then &lt;br /&gt;
	   	   &lt;br /&gt;
			   local rowString = &amp;#039;\n|-&amp;#039;&lt;br /&gt;
			   if selectList then &lt;br /&gt;
			   	    local selectRank = selectCount&lt;br /&gt;
			   	    if v[2]==lastRank then selectRank = selectCount -1 end -- only handles two at same rank&lt;br /&gt;
					rowString = rowString ..  &amp;#039;\n|&amp;#039; .. selectRank &lt;br /&gt;
					selectCount = selectCount + 1&lt;br /&gt;
			   end&lt;br /&gt;
			   rowString = rowString .. &amp;#039;\n|&amp;#039; .. v[2]  -- rank&lt;br /&gt;
			   lastRank = v[2]&lt;br /&gt;
			   &lt;br /&gt;
			   local move = v[3]&lt;br /&gt;
			   if move &amp;lt; 0 and math.abs( move ) == math.abs( v[2] ) then -- new teams in ranking: move = -ranking&lt;br /&gt;
					change = frame:expandTemplate{ title = &amp;#039;new entry&amp;#039; } &lt;br /&gt;
			   elseif move == 0 then                                    -- if no change in ranking&lt;br /&gt;
			    	change = frame:expandTemplate{ title = &amp;#039;steady&amp;#039; } &lt;br /&gt;
			    elseif move &amp;lt; 0 then                                 --  if ranking down&lt;br /&gt;
			    	change = frame:expandTemplate{ title = &amp;#039;decrease&amp;#039; } .. &amp;#039; &amp;#039; .. math.abs(move)&lt;br /&gt;
			    elseif move &amp;gt; 0 then                                 -- if ranking up&lt;br /&gt;
			    	change = frame:expandTemplate{ title = &amp;#039;increase&amp;#039; } .. &amp;#039; &amp;#039; .. move&lt;br /&gt;
			    end	&lt;br /&gt;
			   rowString = rowString .. &amp;#039;||&amp;#039; .. change&lt;br /&gt;
			   &lt;br /&gt;
	--[[		   for _,u in pairs(data.alias) do&lt;br /&gt;
			    	if u[2]==v[1] then &lt;br /&gt;
			       		code = u[1]    -- if alias (country code) then use country name as key&lt;br /&gt;
			       		break&lt;br /&gt;
			       	end&lt;br /&gt;
			    end   &lt;br /&gt;
	]]		   &lt;br /&gt;
			   --TODO reorganise the following with better logic&lt;br /&gt;
			   --[[ template to display flag icon and team link (e.g. fb, fbw, bk, ih)&lt;br /&gt;
			       e.g.  &amp;quot;FIFA World Rankings&amp;quot; = &amp;#039;fb&amp;#039;, &amp;quot;FIFA Women&amp;#039;s World Rankings&amp;quot; &amp;#039;fbw&amp;#039;,&lt;br /&gt;
			             &amp;quot;FIBA World Rankings&amp;quot; = &amp;#039;bk&amp;#039;, &amp;quot;IIHF World Ranking&amp;quot;  = &amp;#039;ih&amp;#039;  &lt;br /&gt;
			       tries with country code, then if error, tried with country name]]&lt;br /&gt;
			   local countryTemplate = data.templates[&amp;#039;flagged_team_link&amp;#039;] &lt;br /&gt;
			   local flagVariant = &amp;quot;&amp;quot;&lt;br /&gt;
               if data.templates.flagvar and data.templates.flagvar[code] then&lt;br /&gt;
            		flagVariant = data.templates.flagvar[code] &lt;br /&gt;
               end&lt;br /&gt;
               local flagCode = code&lt;br /&gt;
               if data.templates.flag_codes then&lt;br /&gt;
               		flagCode = data.templates.flag_codes[code] or code&lt;br /&gt;
               end&lt;br /&gt;
			   local countryIconString = frame:expandTemplate{ title = countryTemplate, args = {flagCode, flagVariant} }    -- country&lt;br /&gt;
&lt;br /&gt;
	 		   local _,test =  string.gsub( countryIconString, &amp;quot;Template:Country data&amp;quot;, &amp;quot;&amp;quot;) -- page does not exist&lt;br /&gt;
	 		   if test == 1 then -- if error try country name&lt;br /&gt;
	 		   	  countryIconString = frame:expandTemplate{ title = countryTemplate, args = {v[1]} }&lt;br /&gt;
	 		   	  --countryIconString = &amp;quot;testing&amp;quot;&lt;br /&gt;
	 		   else &lt;br /&gt;
	 		   	 -- countryIconString = &amp;quot;exists&amp;quot;&lt;br /&gt;
	 		   end&lt;br /&gt;
	 		   	  &lt;br /&gt;
	 		   rowString = rowString .. &amp;#039;\n|style=&amp;quot;text-align:left&amp;quot;|&amp;#039; .. countryIconString&lt;br /&gt;
			   &lt;br /&gt;
			   local points = &amp;quot;&amp;quot;&lt;br /&gt;
			   if v[4] then points = v[4] end&lt;br /&gt;
			   rowString = rowString ..  &amp;#039;||&amp;#039; .. points       -- country for now, later points&lt;br /&gt;
			   outputString = outputString .. rowString&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    -- add footer rows&lt;br /&gt;
    count = 0&lt;br /&gt;
    local footer = {}&lt;br /&gt;
    while count &amp;lt; 5 do&lt;br /&gt;
    	count = count + 1&lt;br /&gt;
	    if templateArgs[&amp;#039;footer&amp;#039;..count] then&lt;br /&gt;
	    	footer[count] = templateArgs[&amp;#039;footer&amp;#039;..count] &lt;br /&gt;
	    	footer[count] = p.replaceKeywords(footer[count])&lt;br /&gt;
	    	outputString = outputString ..	&amp;#039;\n|-\n| colspan=&amp;quot;&amp;#039;.. tableWidth .. &amp;#039;&amp;quot; |&amp;#039; .. footer[count]&lt;br /&gt;
	    end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    outputString = outputString .. &amp;quot;\n|}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return outputString&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.replaceKeywords(keyword)&lt;br /&gt;
	keyword =  string.gsub( keyword, &amp;quot;INSERT_UPDATE_DATE&amp;quot;, getDate())&lt;br /&gt;
    keyword =  string.gsub( keyword, &amp;quot;INSERT_LAST_DATE&amp;quot;, getDate(&amp;quot;LAST&amp;quot;))&lt;br /&gt;
	if string.find(keyword, &amp;quot;INSERT_REFERENCE&amp;quot;) then&lt;br /&gt;
		keyword =  string.gsub( keyword, &amp;quot;INSERT_REFERENCE&amp;quot;, addReference(mw.getCurrentFrame()))&lt;br /&gt;
	end&lt;br /&gt;
    return keyword&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ create a table of rankings&lt;br /&gt;
       parameters:  |ranking=        -- ranking to display (e.g. FIFA World Rankings)&lt;br /&gt;
                    |first= |last=   -- first and last ranking to display (defaults 1-10)&lt;br /&gt;
]]&lt;br /&gt;
function p.list(frame)&lt;br /&gt;
&lt;br /&gt;
    getArgs(frame) -- returns args table having checked for content&lt;br /&gt;
    loadData(frame)	&lt;br /&gt;
    local ranking = frame.args[1]&lt;br /&gt;
    &lt;br /&gt;
    local first = tonumber(frame.args[&amp;#039;2&amp;#039;]) or 1&lt;br /&gt;
    local last = tonumber(frame.args[&amp;#039;3&amp;#039;]) or 10&lt;br /&gt;
    &lt;br /&gt;
    return table(frame, ranking, first, last)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ create a particla table of rankings above and below a country &lt;br /&gt;
       parameters:  |ranking |country |span     &lt;br /&gt;
                                              -- ranking - the ranking to display (e.g. FIFA World Rankings)&lt;br /&gt;
                                              -- country - country table is centred around&lt;br /&gt;
                                              -- span=   - rows to display above and below country&lt;br /&gt;
]]&lt;br /&gt;
function p.list2(frame)&lt;br /&gt;
&lt;br /&gt;
    getArgs(frame) -- returns args table having checked for content&lt;br /&gt;
    loadData(frame)	&lt;br /&gt;
    local ranking = frame.args[1]&lt;br /&gt;
    local first, last = 1,10&lt;br /&gt;
    local country = frame.args[2]           -- name or code of country to center table around&lt;br /&gt;
    local span = frame.args[3] or 2         -- number of rows to display above and below country (default:2)&lt;br /&gt;
    &lt;br /&gt;
    if string.len(country) == 3 then        -- if three letter country code&lt;br /&gt;
    		for _,u in pairs(data.alias) do&lt;br /&gt;
		    	if u[1]==country then &lt;br /&gt;
		       		country = u[2]          -- if country code then use country name &lt;br /&gt;
		       		break&lt;br /&gt;
		       	end&lt;br /&gt;
		    end   &lt;br /&gt;
    end&lt;br /&gt;
    for k,v in pairs(data.rankings) do      -- find position of country in rankings&lt;br /&gt;
       if v[1] == country then&lt;br /&gt;
       	  first = v[2]-span&lt;br /&gt;
       	  last = v[2]+span&lt;br /&gt;
       end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return table(frame, ranking, first, last)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;Frietjes</name></author>
	</entry>
</feed>