Module:STikiLeaderboard: Difference between revisions

Content deleted Content added
cosmetic tweaks
fix leaderboard module title
 
(10 intermediate revisions by 4 users not shown)
Line 1:
p = {}
 
-- Get the raw leaderboard content.
local leaderboardlb = mw.title.new('Wikipedia:STiki/leaderboardLeaderboard')
local lbtext = (lb and lb:getContent()) or error('Could not find the leaderboard text')
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 ''))
if username == '' then
return error('No username specified')
end
if not leaderboardText then
error('Could not find the leaderboard text')
end
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 thea rankspecific anddata usesvalue for a given username.
-- Get the username from #invoke and return the uses using findLeaderboardVals().
local function p.usesfindLeaderboardData(framedfield, username)
username local= username:gsub('%p', = frame.args[1]'%%%0')
local r = {}
local rank, uses = findLeaderboardVals(username)
r.rank, r.uses, r.vand, r.agf, r.queue, r.first, r.last, r.avg, r.yest, r.last30 = string.match(
return uses
lbtext,
'\n| align=center | (%d+) || align=left | %[%[User:' .. username .. '|' .. username ..
.. '%]%] %(%[%[User_Talk:' .. username .. '|talk%]%] | %[%[Special:Contributions/' ..
.. username .. '|contribs%]%]%) || align=right | (%d+) || align=right | ([%d%.]+)%% ' ..
'|| align=right | ([%d%.]+)%% || align=center | (%S+) || align=right ' ..
'| {{ntsh|%d+}} (%d+) days ago || align=right | {{ntsh|%d+}} (%d+) days ago || align=right ' ..
'| {{ntsh|[%d%.]+}} ([%d%.]+) edits || align=right | (%d+) || align=right | (%d+)'
)
return pr[dfield]
end
 
-- Expose the data values to wikitext
return p
return setmetatable({}, {
__index = function (t, key)
return function p.rank(frame)
local username = frame.args[1] or ''
username = mw.getContentLanguage():ucfirst(mw.text.trim(username or ''))
if username == '' then
return error('No username specified')
end
return findLeaderboardData(key, username)
end
end
})