<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://thedartswiki.donthurry.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://thedartswiki.donthurry.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ADartsRankings"/>
	<link rel="alternate" type="text/html" href="https://thedartswiki.donthurry.com/index.php?title=Module:DartsRankings&amp;action=history"/>
	<updated>2026-09-01T12:40:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://thedartswiki.donthurry.com/index.php?title=Module:DartsRankings&amp;diff=530&amp;oldid=prev</id>
		<title>TheDartsWikiSysop: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://thedartswiki.donthurry.com/index.php?title=Module:DartsRankings&amp;diff=530&amp;oldid=prev"/>
		<updated>2023-04-25T19:51:51Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:51, 25 April 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>TheDartsWikiSysop</name></author>
	</entry>
	<entry>
		<id>https://thedartswiki.donthurry.com/index.php?title=Module:DartsRankings&amp;diff=529&amp;oldid=prev</id>
		<title>thedartswiki&gt;WOSlinker: use require('strict') instead of require('Module:No globals')</title>
		<link rel="alternate" type="text/html" href="https://thedartswiki.donthurry.com/index.php?title=Module:DartsRankings&amp;diff=529&amp;oldid=prev"/>
		<updated>2022-10-21T19:49:05Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require('strict');&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;
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;
    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;
    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;
    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;
&lt;br /&gt;
local function addReference(frame)&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;
end&lt;br /&gt;
&lt;br /&gt;
local function noAc(str)&lt;br /&gt;
    local tableAccents = {&lt;br /&gt;
        [&amp;quot;À&amp;quot;] = &amp;quot;A&amp;quot;,&lt;br /&gt;
        [&amp;quot;Á&amp;quot;] = &amp;quot;A&amp;quot;,&lt;br /&gt;
        [&amp;quot;Â&amp;quot;] = &amp;quot;A&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ã&amp;quot;] = &amp;quot;A&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ä&amp;quot;] = &amp;quot;A&amp;quot;,&lt;br /&gt;
        [&amp;quot;Å&amp;quot;] = &amp;quot;A&amp;quot;,&lt;br /&gt;
        [&amp;quot;Æ&amp;quot;] = &amp;quot;AE&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ç&amp;quot;] = &amp;quot;C&amp;quot;,&lt;br /&gt;
        [&amp;quot;È&amp;quot;] = &amp;quot;E&amp;quot;,&lt;br /&gt;
        [&amp;quot;É&amp;quot;] = &amp;quot;E&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ê&amp;quot;] = &amp;quot;E&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ë&amp;quot;] = &amp;quot;E&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ì&amp;quot;] = &amp;quot;I&amp;quot;,&lt;br /&gt;
        [&amp;quot;Í&amp;quot;] = &amp;quot;I&amp;quot;,&lt;br /&gt;
        [&amp;quot;Î&amp;quot;] = &amp;quot;I&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ï&amp;quot;] = &amp;quot;I&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ð&amp;quot;] = &amp;quot;D&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ñ&amp;quot;] = &amp;quot;N&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ò&amp;quot;] = &amp;quot;O&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ó&amp;quot;] = &amp;quot;O&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ô&amp;quot;] = &amp;quot;O&amp;quot;,&lt;br /&gt;
        [&amp;quot;Õ&amp;quot;] = &amp;quot;O&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ö&amp;quot;] = &amp;quot;O&amp;quot;,&lt;br /&gt;
        [&amp;quot;ő&amp;quot;] = &amp;quot;O&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ø&amp;quot;] = &amp;quot;O&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ù&amp;quot;] = &amp;quot;U&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ú&amp;quot;] = &amp;quot;U&amp;quot;,&lt;br /&gt;
        [&amp;quot;Û&amp;quot;] = &amp;quot;U&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ü&amp;quot;] = &amp;quot;U&amp;quot;,&lt;br /&gt;
        [&amp;quot;Ý&amp;quot;] = &amp;quot;Y&amp;quot;,&lt;br /&gt;
        [&amp;quot;Þ&amp;quot;] = &amp;quot;P&amp;quot;,&lt;br /&gt;
        [&amp;quot;ß&amp;quot;] = &amp;quot;s&amp;quot;,&lt;br /&gt;
        [&amp;quot;à&amp;quot;] = &amp;quot;a&amp;quot;,&lt;br /&gt;
        [&amp;quot;á&amp;quot;] = &amp;quot;a&amp;quot;,&lt;br /&gt;
        [&amp;quot;â&amp;quot;] = &amp;quot;a&amp;quot;,&lt;br /&gt;
        [&amp;quot;ã&amp;quot;] = &amp;quot;a&amp;quot;,&lt;br /&gt;
        [&amp;quot;ä&amp;quot;] = &amp;quot;a&amp;quot;,&lt;br /&gt;
        [&amp;quot;å&amp;quot;] = &amp;quot;a&amp;quot;,&lt;br /&gt;
        [&amp;quot;æ&amp;quot;] = &amp;quot;ae&amp;quot;,&lt;br /&gt;
        [&amp;quot;ç&amp;quot;] = &amp;quot;c&amp;quot;,&lt;br /&gt;
        [&amp;quot;č&amp;quot;] = &amp;quot;c&amp;quot;,&lt;br /&gt;
        [&amp;quot;ć&amp;quot;] = &amp;quot;c&amp;quot;,&lt;br /&gt;
        [&amp;quot;è&amp;quot;] = &amp;quot;e&amp;quot;,&lt;br /&gt;
        [&amp;quot;é&amp;quot;] = &amp;quot;e&amp;quot;,&lt;br /&gt;
        [&amp;quot;ê&amp;quot;] = &amp;quot;e&amp;quot;,&lt;br /&gt;
        [&amp;quot;ë&amp;quot;] = &amp;quot;e&amp;quot;,&lt;br /&gt;
        [&amp;quot;ì&amp;quot;] = &amp;quot;i&amp;quot;,&lt;br /&gt;
        [&amp;quot;í&amp;quot;] = &amp;quot;i&amp;quot;,&lt;br /&gt;
        [&amp;quot;î&amp;quot;] = &amp;quot;i&amp;quot;,&lt;br /&gt;
        [&amp;quot;ï&amp;quot;] = &amp;quot;i&amp;quot;,&lt;br /&gt;
        [&amp;quot;ł&amp;quot;] = &amp;quot;l&amp;quot;,&lt;br /&gt;
        [&amp;quot;ð&amp;quot;] = &amp;quot;eth&amp;quot;,&lt;br /&gt;
        [&amp;quot;ñ&amp;quot;] = &amp;quot;n&amp;quot;,&lt;br /&gt;
        [&amp;quot;ò&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;ó&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;ô&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;õ&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;ö&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;ø&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;ù&amp;quot;] = &amp;quot;u&amp;quot;,&lt;br /&gt;
        [&amp;quot;ú&amp;quot;] = &amp;quot;u&amp;quot;,&lt;br /&gt;
        [&amp;quot;û&amp;quot;] = &amp;quot;u&amp;quot;,&lt;br /&gt;
        [&amp;quot;ü&amp;quot;] = &amp;quot;u&amp;quot;,&lt;br /&gt;
        [&amp;quot;ý&amp;quot;] = &amp;quot;y&amp;quot;,&lt;br /&gt;
        [&amp;quot;þ&amp;quot;] = &amp;quot;p&amp;quot;,&lt;br /&gt;
        [&amp;quot;ÿ&amp;quot;] = &amp;quot;y&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return str:gsub(&amp;quot;[%z\1-\127\194-\244][\128-\191]*&amp;quot;, tableAccents)&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;
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;
    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 templateArgs['surname'] =='1' then&lt;br /&gt;
            	if nlink == 1 then&lt;br /&gt;
            		link = u[4]&lt;br /&gt;
                elseif u[6] and u[6]~=&amp;quot;&amp;quot; then&lt;br /&gt;
                    link = '[[' .. u[3] .. ' ' .. u[4] .. ' (' ..u[6] .. ')' .. '|' .. u[4] ..']]'&lt;br /&gt;
                else&lt;br /&gt;
                    link = '[[' .. u[3] .. ' ' ..  u[4] .. '|' .. u[4] ..']]'&lt;br /&gt;
                end&lt;br /&gt;
            elseif templateArgs['surname'] then&lt;br /&gt;
        		if nlink == 1 then&lt;br /&gt;
            		link = templateArgs['surname']&lt;br /&gt;
                elseif u[6] and u[6]~=&amp;quot;&amp;quot; then&lt;br /&gt;
                    link = '[[' .. u[3] .. ' ' .. u[4] .. ' (' ..u[6] .. ')' .. '|' .. templateArgs['surname'] ..']]'&lt;br /&gt;
                else&lt;br /&gt;
                    link = '[[' .. u[3] .. ' ' .. u[4] .. '|' .. templateArgs['surname'] ..']]'&lt;br /&gt;
                end&lt;br /&gt;
            else&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;
            end&lt;br /&gt;
            flag= u[2] -- Flag string from libarary&lt;br /&gt;
        end&lt;br /&gt;
        if templateArgs['flag'] then&lt;br /&gt;
            flag = templateArgs['flag']&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if side == 'right' then&lt;br /&gt;
        outputString = link .. require('Module:Flagg').luaMain(frame, {'csxr', flag})&lt;br /&gt;
    elseif side == 'none' then&lt;br /&gt;
        outputString = link&lt;br /&gt;
    else&lt;br /&gt;
        outputString = require('Module:Flagg').luaMain(frame, {'csx', flag}) .. link&lt;br /&gt;
    end&lt;br /&gt;
    tcats = tcats .. tcatsp&lt;br /&gt;
    return outputString .. tcats&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;
    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 .. ' (' .. getDate() .. ')'&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;
end&lt;br /&gt;
&lt;br /&gt;
function p.rankOnly(frame)&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 ='NR'&lt;br /&gt;
    local 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;
    return rank&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 .. '\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;
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;
    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;
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;
    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;
return p&lt;/div&gt;</summary>
		<author><name>thedartswiki&gt;WOSlinker</name></author>
	</entry>
</feed>