Module:ATP rankings

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 ) -- Check, in order, the existence of: --		- Page is on override list --		- Page with (tennis) disambiguator exists --		- Page exists -- If page exists, flag as a dab, otherwise return an unlinked name local overrides = mw.loadJsonData( "Module:ATP rankings/data/overrides.json" ) if overrides[name] and overrides[name]["article"] then if overrides[name]["article"] == "x" then return name else return "" .. name .. "" end end

local title = mw.title.new( name ) local defaultDisambig = mw.title.new( name .. ' (tennis)' ) if defaultDisambig.exists then return "" .. name .. "" end

if title.exists then local content = title:getContent if not mDisambiguation.isDisambiguation( content ) and not mDisambiguation.isDisambiguation(mRedirect.luaMain(content)) then return "" .. name .. "" end return "" .. name .. "" .. ""	end return name 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 male singles tennis players by country" 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