Module:ATP rankings
Yi palo
Documentation for this module may be created at Module:ATP rankings/doc
local mDisambiguation = require('Module:Disambiguation')
local mRedirect = require('Module:Redirect')
local function getData( ranking )
if ranking == "singles" then
return mw.loadJsonData( "Module:ATP rankings/data/singles.json" )
end
end
local function formatName( nameIn )
local name = nameIn
local comma = mw.ustring.find( name, ", " )
if comma == nil then
return name
end
name = mw.ustring.sub( name, comma + 2, mw.ustring.len( name ) ) .. " " .. mw.ustring.sub( name, 1, comma - 1 )
local title = mw.title.new( name )
if not title.exists then
return name
end
local dabNames = mw.loadData('Module:ATP rankings/data/disambiguation')
if dabNames.maleDab[name] then
if dabNames.maleDab[name] == "x" then
return name
else
return "[[" .. dabNames.maleDab[name] .. "|" .. name .. "]]"
end
end
local content = title:getContent()
if not mDisambiguation.isDisambiguation( content ) and not mDisambiguation.isDisambiguation(mRedirect.luaMain(content)) then
return "[[" .. name .. "]]"
end
local defaultDisambig = mw.title.new( name .. ' (tennis)' )
if defaultDisambig.exists then
return "[[" .. defaultDisambig.fullText .. "|" .. name .. "]]"
end
return "[[" .. name .. "]]" .. "[[Category:ATP rankings call with disambiguated page title]]"
end
local p = {}
function p.createNavbox( frame )
local ranking = frame.args[1]
local country = frame.args[2]
local nationality = frame.args[3]
local data = getData( ranking )
local templateParams = {}
local lang = mw.getContentLanguage()
local countryDataCur = assert( data["current"]["per-country"][country], "Invalid country code '" .. country .. "' specified for Module:ATP rankings" )
local countryDataPrev = data["previous"]["per-country"][country]
local flagicon = frame:expandTemplate{ title = "Flagicon", args = { country } }
templateParams["name"] = "Top " .. nationality .. " male " .. ranking .. " tennis players"
templateParams["title"] = "[[Association of Tennis Professionals]] " .. flagicon .. " Top " .. nationality .. " male " .. ranking .. " tennis players"
templateParams["above"] = "''As of " .. data["current"]["as-of"] .. "''"
templateParams["state"] = frame:getParent().args["state"] or "autocollapse"
templateParams["listclass"] = "hlist"
templateParams["list1"] = ""
local lastRankings = {}
for i, entry in ipairs( countryDataPrev ) do
lastRankings[entry["name"]] = entry["rank"]
end
local listKey = "list1"
for i, entry in ipairs( countryDataCur ) do
if i == 6 then
templateParams["list2"] = ""
listKey = "list2"
elseif i == 11 then
break
end
local changeDirection = "increase"
local changeAmount = ""
if lastRankings[entry["name"]] == nil then
-- do nothing
elseif lastRankings[entry["name"]] == entry["rank"] then
changeDirection = "steady"
elseif lastRankings[entry["name"]] >= entry["rank"] then
-- decrease in value means in increase in ranking
changeDirection = "increase"
changeAmount = lastRankings[entry["name"]] - entry["rank"]
else
changeDirection = "decrease"
changeAmount = entry["rank"] - lastRankings[entry["name"]]
end
changeDirection = frame:expandTemplate{ title = changeDirection }
local tied = ""
if entry["tied"] then
tied = "T"
end
templateParams[listKey] = templateParams[listKey] .. "* " .. i .. ". " .. formatName( entry["name"] ) .. " (" .. tied .. lang:formatNum(entry["rank"]) .. " " .. changeDirection .. changeAmount .. ")\n"
end
return frame:expandTemplate{ title = "Navbox", args = templateParams }
end
return p