Module:STikiLeaderboard: Difference between revisions
Appearance
Content deleted Content added
fix bug for usernames containing magic characters |
avoid defining ten different output functions by using a metatable; and use string.match rather than mw.ustring.match as it works for this pattern, and it is faster |
||
Line 7: | Line 7: | ||
username = username:gsub('%p', '%%%0') |
username = username:gsub('%p', '%%%0') |
||
local r = {} |
local r = {} |
||
r.rank, r.uses, r.vand, r.agf, r.queue, r.first, r.last, r.avg, r.yest, r.last30 = |
r.rank, r.uses, r.vand, r.agf, r.queue, r.first, r.last, r.avg, r.yest, r.last30 = string.match( |
||
lbtext, |
lbtext, |
||
'\n| align=center | (%d+) || align=left | %[%[User:' .. username .. '|' .. username |
'\n| align=center | (%d+) || align=left | %[%[User:' .. username .. '|' .. username |
||
Line 19: | Line 19: | ||
end |
end |
||
-- Expose the data values to wikitext |
|||
-- Get the username from #invoke and return the rank using findLeaderboardData(). |
|||
return setmetatable({}, { |
|||
local function makeWrapper(dfield) |
|||
__index = function (t, key) |
|||
return function (frame) |
|||
-- Get username, filter bad input, trim whitespace, and capitalise first letter. |
|||
local username = frame.args[1] or '' |
local username = frame.args[1] or '' |
||
username = mw.getContentLanguage():ucfirst(mw.text.trim(username)) |
username = mw.getContentLanguage():ucfirst(mw.text.trim(username)) |
||
if username == '' then |
if username == '' then |
||
error('No username specified') |
error('No username specified') |
||
end |
|||
⚫ | |||
end |
end |
||
⚫ | |||
end |
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'), |
|||
⚫ |
Revision as of 23:46, 23 December 2015
![]() | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
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}}
|
|
{{#invoke:STikiLeaderboard|uses|West.andrew.g}}
|
|
{{#invoke:STikiLeaderboard|queue|Fraggle81}}
|
|
{{#invoke:STikiLeaderboard|first|Widr}}
|
-- 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 = string.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
-- Expose the data values to wikitext
return setmetatable({}, {
__index = function (t, key)
return function (frame)
local username = frame.args[1] or ''
username = mw.getContentLanguage():ucfirst(mw.text.trim(username))
if username == '' then
error('No username specified')
end
return findLeaderboardData(key, username)
end
end
})