<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ADartsRankings</id>
	<title>Module:DartsRankings - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ADartsRankings"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:DartsRankings&amp;action=history"/>
	<updated>2026-06-14T13:54:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:DartsRankings&amp;diff=471461&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:DartsRankings&amp;diff=471461&amp;oldid=prev"/>
		<updated>2021-07-15T21:15:33Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require('Module:No globals');&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local p = {} &lt;br /&gt;
&lt;br /&gt;
local error_msg = '&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;';&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 = {}      -- player list (player, country code [=key], wiki link, proper display)&lt;br /&gt;
					    &lt;br /&gt;
					--]]&lt;br /&gt;
local tcats= ''&lt;br /&gt;
local tcatsp=''&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['caption'] then templateArgs['caption'] = parents.args['caption'] 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. PDC Rankings&lt;br /&gt;
    data = require('Module:DartsRankings/data/'.. source);&lt;br /&gt;
    if templateArgs['org'] then&lt;br /&gt;
    	data = require('Module:DartsRankings/data/' .. templateArgs['org'] .. ' Rankings');&lt;br /&gt;
    end&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['mdy'] and templateArgs['mdy'] ~= &amp;quot;&amp;quot; then&lt;br /&gt;
   	   return dateTable['month'] .. &amp;quot; &amp;quot; .. dateTable['day'] .. &amp;quot;, &amp;quot; .. dateTable['year']&lt;br /&gt;
   else&lt;br /&gt;
   	   return dateTable['day'] .. &amp;quot; &amp;quot; .. dateTable['month'] .. &amp;quot; &amp;quot; .. dateTable['year']&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 = 'cite web' , args = {&lt;br /&gt;
    		url = data.source['url'],            --&amp;quot;https://www.fifa.com/fifa-world-ranking/ranking-table/men/index.html&amp;quot;, &lt;br /&gt;
			title = data.source['title'],        -- &amp;quot;The FIFA/Coca-Cola World Ranking&amp;quot;,&lt;br /&gt;
			website = data.source['website'],    --&amp;quot;FIFA&amp;quot;,&lt;br /&gt;
			['date'] = getDate(),&lt;br /&gt;
			['access-date'] = 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['text'] then text = data.source['text'] end&lt;br /&gt;
	&lt;br /&gt;
	return frame:expandTemplate{ title = 'refn' , args = {&lt;br /&gt;
		name=frame.args[1],                   --ranking used, e.g. &amp;quot;PDC 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;
local function noAc(str)&lt;br /&gt;
  local tableAccents = {}&lt;br /&gt;
    tableAccents[&amp;quot;À&amp;quot;] = &amp;quot;A&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Á&amp;quot;] = &amp;quot;A&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Â&amp;quot;] = &amp;quot;A&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ã&amp;quot;] = &amp;quot;A&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ä&amp;quot;] = &amp;quot;A&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Å&amp;quot;] = &amp;quot;A&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Æ&amp;quot;] = &amp;quot;AE&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ç&amp;quot;] = &amp;quot;C&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;È&amp;quot;] = &amp;quot;E&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;É&amp;quot;] = &amp;quot;E&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ê&amp;quot;] = &amp;quot;E&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ë&amp;quot;] = &amp;quot;E&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ì&amp;quot;] = &amp;quot;I&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Í&amp;quot;] = &amp;quot;I&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Î&amp;quot;] = &amp;quot;I&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ï&amp;quot;] = &amp;quot;I&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ð&amp;quot;] = &amp;quot;D&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ñ&amp;quot;] = &amp;quot;N&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ò&amp;quot;] = &amp;quot;O&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ó&amp;quot;] = &amp;quot;O&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ô&amp;quot;] = &amp;quot;O&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Õ&amp;quot;] = &amp;quot;O&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ö&amp;quot;] = &amp;quot;O&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ø&amp;quot;] = &amp;quot;O&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ù&amp;quot;] = &amp;quot;U&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ú&amp;quot;] = &amp;quot;U&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Û&amp;quot;] = &amp;quot;U&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ü&amp;quot;] = &amp;quot;U&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Ý&amp;quot;] = &amp;quot;Y&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;Þ&amp;quot;] = &amp;quot;P&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ß&amp;quot;] = &amp;quot;s&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;à&amp;quot;] = &amp;quot;a&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;á&amp;quot;] = &amp;quot;a&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;â&amp;quot;] = &amp;quot;a&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ã&amp;quot;] = &amp;quot;a&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ä&amp;quot;] = &amp;quot;a&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;å&amp;quot;] = &amp;quot;a&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;æ&amp;quot;] = &amp;quot;ae&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ç&amp;quot;] = &amp;quot;c&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;č&amp;quot;] = &amp;quot;c&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ć&amp;quot;] = &amp;quot;c&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;è&amp;quot;] = &amp;quot;e&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;é&amp;quot;] = &amp;quot;e&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ê&amp;quot;] = &amp;quot;e&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ë&amp;quot;] = &amp;quot;e&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ì&amp;quot;] = &amp;quot;i&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;í&amp;quot;] = &amp;quot;i&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;î&amp;quot;] = &amp;quot;i&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ï&amp;quot;] = &amp;quot;i&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ł&amp;quot;] = &amp;quot;l&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ð&amp;quot;] = &amp;quot;eth&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ñ&amp;quot;] = &amp;quot;n&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ò&amp;quot;] = &amp;quot;o&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ó&amp;quot;] = &amp;quot;o&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ô&amp;quot;] = &amp;quot;o&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;õ&amp;quot;] = &amp;quot;o&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ö&amp;quot;] = &amp;quot;o&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ø&amp;quot;] = &amp;quot;o&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ù&amp;quot;] = &amp;quot;u&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ú&amp;quot;] = &amp;quot;u&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;û&amp;quot;] = &amp;quot;u&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ü&amp;quot;] = &amp;quot;u&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ý&amp;quot;] = &amp;quot;y&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;þ&amp;quot;] = &amp;quot;p&amp;quot;&lt;br /&gt;
    tableAccents[&amp;quot;ÿ&amp;quot;] = &amp;quot;y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  local normalisedString = ''&lt;br /&gt;
&lt;br /&gt;
  local normalisedString = str: gsub(&amp;quot;[%z\1-\127\194-\244][\128-\191]*&amp;quot;, tableAccents)&lt;br /&gt;
&lt;br /&gt;
  return normalisedString&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function nameEqual(str1, str2)&lt;br /&gt;
	return string.lower(noAc(str1)):gsub( &amp;quot;%W&amp;quot;, &amp;quot;&amp;quot;)==string.lower(noAc(str2)):gsub( &amp;quot;%W&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.dates(frame)&lt;br /&gt;
	getArgs(frame) -- returns args table having checked for content&lt;br /&gt;
    loadData(frame)&lt;br /&gt;
       &lt;br /&gt;
--	if templateArgs[1]==1 then&lt;br /&gt;
		return getDate(templateArgs[2])&lt;br /&gt;
--	else&lt;br /&gt;
--		return getDate()&lt;br /&gt;
--	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function flagPlayer(frame, player, side)&lt;br /&gt;
&lt;br /&gt;
    local outputString = &amp;quot;&amp;quot;&lt;br /&gt;
    local flag, link = '', ''&lt;br /&gt;
    if player and player ~= '' then link = '[[' .. player .. ']]'&lt;br /&gt;
		tcatsp='[[Category:Pages using DartsRankings with missing player data|' .. player .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
	for _,u in pairs(data.alias) do  -- get country code from name&lt;br /&gt;
		if nameEqual(u[1], player) then &lt;br /&gt;
			tcatsp=''&lt;br /&gt;
	    local nlink = &amp;quot;&amp;quot;&lt;br /&gt;
		if u[5] == 0 then nlink = 1 end&lt;br /&gt;
		if templateArgs['nolink'] == '1' then nlink = 1 end&lt;br /&gt;
		if templateArgs['nolink'] == '0' then nlink = &amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
		   if u[6] and u[6]~=&amp;quot;&amp;quot; then&lt;br /&gt;
				link = frame:expandTemplate{title= 'sortname', args ={ u[3], u[4] , dab = u[6] , nolink = nlink } }&lt;br /&gt;
		   else&lt;br /&gt;
				link = frame:expandTemplate{title= 'sortname', args ={ u[3], u[4], nolink = nlink } }&lt;br /&gt;
		   end &lt;br /&gt;
			   &lt;br /&gt;
		   	flag= u[2] -- Flag string from libarary&lt;br /&gt;
		   	if templateArgs['flag'] then&lt;br /&gt;
		   		flag = templateArgs['flag']&lt;br /&gt;
		   	end&lt;br /&gt;
		   	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if side == 'right' then &lt;br /&gt;
		outputString = link .. frame:expandTemplate{title= 'flagg', args ={ 'csxr', flag}}&lt;br /&gt;
	elseif side == 'none' then&lt;br /&gt;
		outputString = link&lt;br /&gt;
	else &lt;br /&gt;
		outputString = frame:expandTemplate{title= 'flagg', args ={ 'csx', flag}} .. link&lt;br /&gt;
	end&lt;br /&gt;
	tcats = tcats .. tcatsp&lt;br /&gt;
    return outputString .. tcats&lt;br /&gt;
    &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.playerLink(frame)&lt;br /&gt;
    getArgs(frame) -- returns args table having checked for content&lt;br /&gt;
    loadData(frame)&lt;br /&gt;
	return flagPlayer(frame, frame.args[2], 'left')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.playerLinkRight(frame)&lt;br /&gt;
    getArgs(frame) -- returns args table having checked for content&lt;br /&gt;
    loadData(frame)&lt;br /&gt;
	return flagPlayer(frame, frame.args[2], 'right')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.playerLinkNoFlag(frame)&lt;br /&gt;
    getArgs(frame) -- returns args table having checked for content&lt;br /&gt;
    loadData(frame)&lt;br /&gt;
	return flagPlayer(frame, frame.args[2], 'none')&lt;br /&gt;
end&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 player = templateArgs[2] -- player name passed as parameter&lt;br /&gt;
    local rank, move&lt;br /&gt;
    &lt;br /&gt;
	    for _,u in pairs(data.alias) do  -- run through the list &lt;br /&gt;
	    	if nameEqual(u[1], player) then        -- if code = passed parameter&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;
&lt;br /&gt;
    for _,v in pairs(data.rankings) do&lt;br /&gt;
    	if nameEqual(v[1], player) then &lt;br /&gt;
       		rank = v[2]    -- get rank&lt;br /&gt;
       		break&lt;br /&gt;
       	end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if rank then -- no ranking found&lt;br /&gt;
&lt;br /&gt;
	    for _,v in pairs(data.rankingsold) do&lt;br /&gt;
	    	if nameEqual(v[1], player) then &lt;br /&gt;
	       		move = v[2] - rank    -- get move from last ranking&lt;br /&gt;
	       		break	&lt;br /&gt;
	       	else&lt;br /&gt;
	       		move = 0 - rank&lt;br /&gt;
	       	end&lt;br /&gt;
	    end&lt;br /&gt;
	else&lt;br /&gt;
    	rank = 'NR' &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	local changeString = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if rank ~= 'NR' then&lt;br /&gt;
		outputString = rank&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;
			changeString = frame:expandTemplate{ title = 'new entry' } &lt;br /&gt;
	    elseif move == 0 then                                    -- if no change in ranking&lt;br /&gt;
	    	changeString = frame:expandTemplate{ title = 'steady' } &lt;br /&gt;
	    elseif move &amp;lt; 0 then                                 --  if ranking down&lt;br /&gt;
	    	changeString = frame:expandTemplate{ title = 'decrease' } .. ' ' .. math.abs(move)&lt;br /&gt;
	    elseif move &amp;gt; 0 then                                 -- if ranking up&lt;br /&gt;
	    	changeString = frame:expandTemplate{ title = 'increase' } .. ' ' .. move&lt;br /&gt;
	    end	&lt;br /&gt;
	    if not templateArgs['nochange'] or templateArgs['nochange'] == &amp;quot;&amp;quot; then&lt;br /&gt;
	    	outputString = outputString .. ' ' .. changeString&lt;br /&gt;
	    end&lt;br /&gt;
    else&lt;br /&gt;
    	outputString = outputString .. frame:expandTemplate{ title = 'Abbr', 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;
&lt;br /&gt;
	if not templateArgs['nodate'] or templateArgs['nodate'] == &amp;quot;&amp;quot; then&lt;br /&gt;
		outputString = outputString .. ' &amp;lt;small&amp;gt;(' .. getDate() .. ')&amp;lt;/small&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	if templateArgs['par'] and templateArgs['par'] ~= '' then&lt;br /&gt;
		outputString = '(' .. outputString .. ')'&lt;br /&gt;
	end&lt;br /&gt;
	if not templateArgs['noref'] or templateArgs['noref'] == &amp;quot;&amp;quot; then&lt;br /&gt;
		outputString = outputString .. addReference(frame)&lt;br /&gt;
	end&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['style'] and templateArgs['style'] ~= &amp;quot;&amp;quot; then styleString = templateArgs['style'] end&lt;br /&gt;
    &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;
&lt;br /&gt;
    &lt;br /&gt;
    -- column header customisation&lt;br /&gt;
    local rankHeader = templateArgs['rank_header'] or &amp;quot;Rank&amp;quot;&lt;br /&gt;
    local selectionHeader = templateArgs['selection_header'] or selectList or &amp;quot;Rank&amp;quot;&lt;br /&gt;
    local teamHeader = templateArgs['team_header'] or &amp;quot;Player&amp;quot;&lt;br /&gt;
    local pointsHeader = templateArgs['points_header'] or &amp;quot;Earnings&amp;quot;&lt;br /&gt;
    local changeHeader = templateArgs['change_header'] or &amp;quot;Change&amp;quot;&lt;br /&gt;
    local noChange = templateArgs['change_col'] or 1&lt;br /&gt;
    &lt;br /&gt;
    --start table&lt;br /&gt;
    local outputString = '{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center;' .. styleString .. '&amp;quot;'&lt;br /&gt;
    &lt;br /&gt;
    local tabletitle = data.labels['title']&lt;br /&gt;
    -- add default or custom caption&lt;br /&gt;
    local caption = tabletitle .. ' as of ' .. getDate() .. '.'&lt;br /&gt;
    if templateArgs['caption'] and templateArgs['caption']  ~= &amp;quot;&amp;quot; then &lt;br /&gt;
    	caption = templateArgs['caption'] &lt;br /&gt;
    	caption = p.replaceKeywords(caption)&lt;br /&gt;
    end&lt;br /&gt;
	outputString = outputString ..	'\n|+' .. caption .. addReference(frame)&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['header'..count] then&lt;br /&gt;
	    	header[count] = templateArgs['header'..count] &lt;br /&gt;
	    	header[count] = p.replaceKeywords( header[count])&lt;br /&gt;
	    	outputString = outputString ..	'\n|-\n| colspan=&amp;quot;'.. tableWidth .. '&amp;quot; |' .. 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 = '\n!' .. selectionHeader &lt;br /&gt;
    end&lt;br /&gt;
   	outputString = outputString .. '\n|-' .. optionalColumn&lt;br /&gt;
    	                        .. '\n!' .. rankHeader &lt;br /&gt;
    	                        if noChange == 1 then&lt;br /&gt;
    	                        	outputString = outputString .. '\n!' .. changeHeader &lt;br /&gt;
    	                        end&lt;br /&gt;
    	outputString = outputString  .. '\n!' .. teamHeader .. '\n!' .. pointsHeader&lt;br /&gt;
   &lt;br /&gt;
    local change,player,plink = '', '', ''&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;
			plink = flagPlayer(frame, v[1], 'left')&lt;br /&gt;
			&lt;br /&gt;
	   	    local continue = true&lt;br /&gt;
		&lt;br /&gt;
			if continue ==true  then &lt;br /&gt;
	   	   &lt;br /&gt;
			   local rowString = '\n|-'&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 ..  '\n|' .. selectRank &lt;br /&gt;
					selectCount = selectCount + 1&lt;br /&gt;
			   end&lt;br /&gt;
			   rowString = rowString .. '\n|' .. v[2]  -- rank&lt;br /&gt;
			   lastRank = v[2]&lt;br /&gt;
			   &lt;br /&gt;
				local move = nil&lt;br /&gt;
				&lt;br /&gt;
				for _,w in pairs(data.rankingsold) do&lt;br /&gt;
			    	if nameEqual(w[1], v[1]) then &lt;br /&gt;
			       		move = w[2] - lastRank    -- get move from last ranking&lt;br /&gt;
			       		break	&lt;br /&gt;
			       	else&lt;br /&gt;
			       		move = 0 - lastRank&lt;br /&gt;
			       	end&lt;br /&gt;
				end&lt;br /&gt;
			    &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 = 'new entry' } &lt;br /&gt;
			   elseif move == 0 then                                    -- if no change in ranking&lt;br /&gt;
			    	change = frame:expandTemplate{ title = 'steady' } &lt;br /&gt;
			    elseif move &amp;lt; 0 then                                 --  if ranking down&lt;br /&gt;
			    	change = frame:expandTemplate{ title = 'decrease' } .. ' ' .. math.abs(move)&lt;br /&gt;
			    elseif move &amp;gt; 0 then                                 -- if ranking up&lt;br /&gt;
			    	change = frame:expandTemplate{ title = 'increase' } .. ' ' .. move&lt;br /&gt;
			    end	&lt;br /&gt;
			   if noChange == 1 then&lt;br /&gt;
&lt;br /&gt;
				rowString = rowString .. '||' .. change&lt;br /&gt;
			   end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	 		   rowString = rowString .. '\n|style=&amp;quot;text-align:left&amp;quot;|' .. plink&lt;br /&gt;
			   &lt;br /&gt;
			   local points = &amp;quot;&amp;quot;&lt;br /&gt;
			   if v[3] then points = v[3] end&lt;br /&gt;
			   rowString = rowString ..  '||' .. 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['footer'..count] then&lt;br /&gt;
	    	footer[count] = templateArgs['footer'..count] &lt;br /&gt;
	    	footer[count] = p.replaceKeywords(footer[count])&lt;br /&gt;
	    	outputString = outputString ..	'\n|-\n| colspan=&amp;quot;'.. tableWidth .. '&amp;quot; |' .. footer[count]&lt;br /&gt;
	    end&lt;br /&gt;
    end&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;
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;
      keyword =  string.gsub( keyword, &amp;quot;INSERT_REFERENCE&amp;quot;, addReference(mw.getCurrentFrame()))&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;
    local first, last = 1,10&lt;br /&gt;
    first = tonumber(frame.args['2'])&lt;br /&gt;
    last = tonumber(frame.args['3'])&lt;br /&gt;
    &lt;br /&gt;
    return table(frame, ranking, first, last)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function navlist(frame, ranking, first,last)&lt;br /&gt;
&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;
    &lt;br /&gt;
    --start list&lt;br /&gt;
    local outputString = '&amp;lt;ol start=&amp;quot;' .. first .. '&amp;quot;&amp;gt;'&lt;br /&gt;
   &lt;br /&gt;
    local change,player,plink = '', '', ''&lt;br /&gt;
    for k,v in pairs(data.rankings) do&lt;br /&gt;
	   if v[2] &amp;gt;= first and v[2] &amp;lt;= last then &lt;br /&gt;
			plink = flagPlayer(frame, v[1], 'left')&lt;br /&gt;
			local rowString = '&amp;lt;li&amp;gt;'  -- rank&lt;br /&gt;
			lastRank = v[2]&lt;br /&gt;
 			 rowString = rowString .. plink&lt;br /&gt;
&lt;br /&gt;
	    if not templateArgs['nochange'] or templateArgs['nochange'] == &amp;quot;&amp;quot; then&lt;br /&gt;
	   &lt;br /&gt;
			local move = nil&lt;br /&gt;
			for _,w in pairs(data.rankingsold) do&lt;br /&gt;
		    	if nameEqual(w[1], v[1]) then &lt;br /&gt;
		       		move = w[2] - lastRank    -- get move from last ranking&lt;br /&gt;
		       		break	&lt;br /&gt;
		       	else&lt;br /&gt;
		       		move = 0 - lastRank&lt;br /&gt;
		       	end&lt;br /&gt;
			end&lt;br /&gt;
			&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 = 'new entry' } &lt;br /&gt;
		   elseif move == 0 then                                    -- if no change in ranking&lt;br /&gt;
		    	change = frame:expandTemplate{ title = 'steady' } &lt;br /&gt;
		    elseif move &amp;lt; 0 then                                 --  if ranking down&lt;br /&gt;
		    	change = frame:expandTemplate{ title = 'decrease' }&lt;br /&gt;
		    elseif move &amp;gt; 0 then                                 -- if ranking up&lt;br /&gt;
		    	change = frame:expandTemplate{ title = 'increase' }&lt;br /&gt;
		    end	&lt;br /&gt;
		   rowString = rowString .. ' ' .. change .. '&amp;lt;/li&amp;gt;'&lt;br /&gt;
		end	   		&lt;br /&gt;
	   &lt;br /&gt;
	   outputString = outputString .. '\n'.. rowString&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	outputString = outputString .. '&amp;lt;/ol&amp;gt;'&lt;br /&gt;
	&lt;br /&gt;
    return outputString&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Returns text list for players first,last for PDC top 20 navbox&lt;br /&gt;
function p.nav(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;
    first = tonumber(frame.args['2'])&lt;br /&gt;
    last = tonumber(frame.args['3'])&lt;br /&gt;
    &lt;br /&gt;
    return navlist(frame, ranking, first, last)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>