Jump to content

Module:STikiLeaderboard: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
more comments
update this to get all data fields from the table
Line 1: Line 1:
p = {}

-- Get the raw leaderboard content.
-- Get the raw leaderboard content.
local leaderboard = mw.title.new('Wikipedia:STiki/leaderboard')
local lb = mw.title.new('Wikipedia:STiki/leaderboard')
local leaderboardText
local lbtext
if leaderboard then
if lb then
leaderboardText = leaderboard:getContent()
lbtext = lb:getContent() or error('Could not find the leaderboard text')
end
end


-- Get the rank and uses for a given username.
-- Get a specific data value for a given username.
local function findLeaderboardVals(username)
local function findLeaderboardData(dfield, username)
local r = {}
-- Filter out nil values, trim whitespace, and capitalise first letter.
r.rank, r.uses, r.vand, r.agf, r.queue, r.first, r.last, r.avg, r.yest, r.last30 = mw.ustring.match(
username = mw.getContentLanguage():ucfirst(mw.text.trim(username or ''))
lbtext,
-- 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
'\n| align=center | (%d+) || align=left | %[%[User:' .. username .. '|' .. username
.. '%]%] %(%[%[User_Talk:' .. username .. '|talk%]%] | %[%[Special:Contributions/'
.. '%]%] %(%[%[User_Talk:' .. username .. '|talk%]%] | %[%[Special:Contributions/'
.. username .. '|contribs%]%]%) || align=right | (%d+) ||'
.. 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 rank, uses
return r[dfield]
end
end


-- Get the username from #invoke and return the rank using findLeaderboardVals().
-- Get the username from #invoke and return the rank using findLeaderboardVals().
function p.rank(frame)
local function makeWrapper(dfield)
local username = frame.args[1]
return function (frame)
-- Get username, filter bad input, trim whitespace, and capitalise first letter.
local rank, uses = findLeaderboardVals(username)
local username = frame.args[1] or ''
return rank
username = mw.getContentLanguage():ucfirst(mw.text.trim(username))
end
if username == '' then

error('No username specified')
-- Get the username from #invoke and return the uses using findLeaderboardVals().
end
function p.uses(frame)
local username = frame.args[1]
local rank, uses = findLeaderboardVals(username)
return findLeaderboardData(dfield, username)
return uses
end
end
end


return p
return {
rank = makeWrapper('rank'),
uses = makeWrapper('uses'),
vand = makeWrapper('vand'),
agf = makeWrapper('agf'),
queue = makeWrapper('queue'),
first = makeWrapper('first'),
last = makeWrapper('last'),
avg = makeWrapper('avg'),
yest = makeWrapper('yest'),
last30 = makeWrapper('last30'),
}

Revision as of 06:44, 11 June 2013

-- Get the raw leaderboard content.
local lb = mw.title.new('Wikipedia:STiki/leaderboard')
local lbtext
if lb then
    lbtext = lb:getContent() or error('Could not find the leaderboard text')
end

-- Get a specific data value for a given username.
local function findLeaderboardData(dfield, username)
    local r = {}
    r.rank, r.uses, r.vand, r.agf, r.queue, r.first, r.last, r.avg, r.yest, r.last30 = mw.ustring.match(
        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 r[dfield]
end

-- Get the username from #invoke and return the rank using findLeaderboardVals().
local function makeWrapper(dfield)
    return function (frame)
        -- Get username, filter bad input, trim whitespace, and capitalise first letter.
        local username = frame.args[1] or ''
        username = mw.getContentLanguage():ucfirst(mw.text.trim(username))
        if username == '' then
            error('No username specified')
        end
        
        return findLeaderboardData(dfield, username)
    end
end

return {
    rank   = makeWrapper('rank'),
    uses   = makeWrapper('uses'),
    vand   = makeWrapper('vand'),
    agf    = makeWrapper('agf'),
    queue  = makeWrapper('queue'),
    first  = makeWrapper('first'),
    last   = makeWrapper('last'),
    avg    = makeWrapper('avg'),
    yest   = makeWrapper('yest'),
    last30 = makeWrapper('last30'),
}