p = {}
-- Get the raw leaderboard content.
local leaderboard = mw.title.new('Wikipedia:STiki/leaderboard')
local leaderboardText
if leaderboard then
leaderboardText = leaderboard:getContent()
end
-- Get the rank and uses for a given username.
local function findLeaderboardVals(username)
-- Filter out nil values, trim whitespace, and capitalise first letter.
username = mw.getContentLanguage():ucfirst(mw.text.trim(username or ''))
-- Throw errors for bad input.
if username == '' then
error('No username specified')
end
if not leaderboardText then
error('Could not find the leaderboard text')
end
-- Get the rank and uses from the leaderboard text.
local rank, uses = mw.ustring.match(
leaderboardText,
'\n| align=center | (%d+) || align=left | %[%[User:' .. username .. '|' .. username
.. '%]%] %(%[%[User_Talk:' .. username .. '|talk%]%] | %[%[Special:Contributions/'
.. username .. '|contribs%]%]%) || align=right | (%d+) ||'
)
return rank, uses
end
-- Get the username from #invoke and return the rank using findLeaderboardVals().
function p.rank(frame)
local username = frame.args[1]
local rank, uses = findLeaderboardVals(username)
return rank
end
-- Get the username from #invoke and return the uses using findLeaderboardVals().
function p.uses(frame)
local username = frame.args[1]
local rank, uses = findLeaderboardVals(username)
return uses
end
return p