Module:STikiLeaderboard

From blackwiki
Revision as of 23:35, 23 December 2015 by blackwiki>Mr. Stradivarius (fix bug for usernames containing magic characters)
Jump to navigation Jump to search

This module displays statistics about a given editor's use of the STiki anti-vandalism tool. It reads the information from Wikipedia:STiki/leaderboard.

Usage

{{#invoke:STikiLeaderboard|<!-- code -->|<!--username-->}}
Leaderboard data field Code
Rank rank
Uses uses
Percentage of edits tagged as vandalism vand
Percentage of edits reverted while assuming good faith agf
Favourite queue queue
First use first
Last use last
Average daily edits avg
Uses yesterday yest
Uses in the last 30 days last30

Examples

Input Output
{{#invoke:STikiLeaderboard|rank|West.andrew.g}} Lua error at line 3: Could not find the leaderboard text.
{{#invoke:STikiLeaderboard|uses|West.andrew.g}} Lua error at line 3: Could not find the leaderboard text.
{{#invoke:STikiLeaderboard|queue|Fraggle81}} Lua error at line 3: Could not find the leaderboard text.
{{#invoke:STikiLeaderboard|first|Widr}} Lua error at line 3: Could not find the leaderboard text.

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

-- Get a specific data value for a given username.
local function findLeaderboardData(dfield, username)
	username = username:gsub('%p', '%%%0')
    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 findLeaderboardData().
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'),
}