Open main menu
Home
Random
Donate
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:RFX report
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
-- This module is a replacement for the RfX report bot. local rfx = require( 'Module:Rfx' ) local colours = mw.loadData( 'Module:RFX report/colour' ) local p = {} local function getTableLength(tbl) local length = 0 for _ in pairs(tbl) do length = length + 1 end return length end local function getRfxes() -- Get the title object for [[Wikipedia:Requests for adminship]]. local noError, rfa = pcall( mw.title.new, 'Wikipedia:Requests for adminship' ) if not noError or ( noError and not rfa ) then return nil end local rfaText = rfa:getContent() if not rfaText then return nil end -- Return a table with a list of pages transcluded from -- [[Wikipedia:Requests for adminship]], minus the exceptions -- which are always transcluded there. local t = {} local exceptions = { 'Front matter', 'Header', 'bureaucratship' } for rfxPage, rfxSubpage in mw.ustring.gmatch( rfaText, '{{[ _]*([wW]ikipedia:[rR]equests for %w+/([^{}]-))[ _]*}}' ) do local isException = false for _, v in ipairs( exceptions ) do if rfxSubpage == v then isException = true end end if not isException then table.insert( t, rfxPage ) end end return t end local function makeRow( rfxObject ) if not ( type( rfxObject ) == 'table' and rfxObject.getTitleObject and rfxObject.getSupportUsers ) then return nil end local style = '' local styleInline = '' local status = rfxObject:getStatus() if status == 'pending closure' then style = ' style="background: #f8cdc6;" |' styleInline = ' background: #f8cdc6;' end local page = rfxObject:getTitleObject().prefixedText local user = rfxObject.user or rfxObject:getTitleObject().subpageText local supports = rfxObject.supports local opposes = rfxObject.opposes local neutrals = rfxObject.neutrals local percent = rfxObject.percent local colour if percent then colour = colours[ rfxObject.type ][ percent ] end colour = colour or '' local votes if supports and opposes and neutrals and percent then votes = mw.ustring.format( [==[ | style="text-align: right;%s" | [[%s#Support|%d]] | style="text-align: right;%s" | [[%s#Oppose|%d]] | style="text-align: right;%s" | [[%s#Neutral|%d]] | style="text-align: right; background: #%s;" | %d]==], styleInline, page, supports, styleInline, page, opposes, styleInline, page, neutrals, colour, percent ) else votes = '\n| colspan="4" style="background: #f8cdc6;" | Error parsing votes' end if status then status = mw.language.getContentLanguage():ucfirst( status ) if status == 'Pending closure' then status = 'Pending closure...' end status = mw.ustring.format( '\n| %s %s', style, status ) else status = '\n| style="background: #f8cdc6;" | Error getting status' end local endTime = rfxObject.endTime local secondsLeft = rfxObject:getSecondsLeft() local timeLeft = rfxObject:getTimeLeft() local time if endTime and timeLeft then time = mw.ustring.format( '\n| %s %s\n| %s %s', style, endTime, style, timeLeft ) else time = '\n| colspan="2" style="background: #f8cdc6;" | Error parsing end time' end local dupes = rfxObject:dupesExist() if dupes then dupes = "'''yes'''" elseif dupes == false then dupes = 'no' else dupes = '--' end local report = rfxObject:getReport() if report then report = mw.ustring.format( '\n|%s [%s report]', style, tostring( report ) ) else report = '\n| style="background: #f8cdc6;" | Report not found' end return mw.ustring.format( '\n|-\n|%s [[%s|%s]]%s%s%s\n| style="text-align: center;%s" | %s%s', style, page, user, votes, status, time, styleInline, dupes, report ) end local function makeHeading( rfxType ) local frame = mw.getCurrentFrame() local rfxCaps if rfxType == 'rfa' then rfxCaps = 'RfA' elseif rfxType == 'rfb' then rfxCaps = 'RfB' else return nil end return mw.ustring.format( '\n|-\n! %s candidate !! <abbr title="Support">S</abbr> !! <abbr title="Oppose">O</abbr> !! <abbr title="Neutral">N</abbr> !! <abbr title="%% Support">S %%</abbr> !! Status !! Ending (UTC) !! Time left !! <abbr title="Has duplicate votes?">Dups?</abbr> !! Report', rfxCaps ) end local function getRfasRfbsSeparate() local rfxes = getRfxes() if not rfxes then return nil end -- Get RfX objects and separate RfAs and RfBs. local rfas = {} local rfbs = {} for i, rfxPage in ipairs( rfxes ) do local rfxObject = rfx.new( rfxPage ) if rfxObject then if rfxObject.type == 'rfa' then table.insert( rfas, rfxObject ) elseif rfxObject.type == 'rfb' then table.insert( rfbs, rfxObject ) end end end return rfas, rfbs end local function makeReportRows() local rfas, rfbs = getRfasRfbsSeparate() local ret = {} if #rfas > 0 then table.insert( ret, makeHeading( 'rfa' ) ) for i, rfaObject in ipairs( rfas ) do table.insert( ret, makeRow( rfaObject ) ) end end if #rfbs > 0 then table.insert( ret, makeHeading( 'rfb' ) ) for i, rfbObject in ipairs( rfbs ) do table.insert( ret, makeRow( rfbObject ) ) end end return table.concat( ret ) end local function makeReport( args ) local purgeLink = mw.title.getCurrentTitle():fullUrl( 'action=purge' ) local header = mw.ustring.format( '\n|+ Requests for [[Wikipedia:Requests for adminship|adminship]] and [[Wikipedia:Requests for bureaucratship|bureaucratship]]<span class="plainlinks" style="float: right;"><small>[%s update]</small></span>', purgeLink ) local rows = makeReportRows() or '' if rows == '' then rows = '\n|-\n| colspan="10" | No current discussions. <small>[[WP:Requests for adminship by year|Recent RfAs]], recent RfBs: ([[Wikipedia:Successful bureaucratship candidacies|successful]], [[Wikipedia:Unsuccessful bureaucratship candidacies|unsuccessful]])</small>' end local style = args.style if not style then local float = args.float or args.align or 'right' local clear = args.clear or 'left' style = mw.ustring.format( 'style="white-space:wrap; clear: %s; margin-top: 0em; margin-bottom: .5em; float: %s; padding: .5em 0em 0em 1.4em; background: #ffffff; border-collapse: collapse; border-spacing: 0;"', clear, float ) end return mw.ustring.format( '\n{| class="wikitable" %s%s%s\n|-\n|}', style, header, rows ) end function p.countRfas() local rfas, rfbs = getRfasRfbsSeparate() return getTableLength(rfas) end function p.main( frame ) -- Process the arguments. local args if frame == mw.getCurrentFrame() then args = frame:getParent().args for k, v in pairs( frame.args ) do args = frame.args break end else args = frame end return makeReport( args ) end return p
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Lua
(
edit
)
Template:RFX report
(
edit
)
Template:Sandbox other
(
edit
)
Template:Tl
(
edit
)
Module:RFX report/doc
(
edit
)
Module:String
(
edit
)