Module:Current RfX: Difference between revisions
add an rfx function to get open rfx objects |
add "Header" as an exception |
||
Line 20: | Line 20: | ||
-- which are always transcluded there. |
-- which are always transcluded there. |
||
local rfxNames = {} |
local rfxNames = {} |
||
local exceptions = { ['Front matter'] = true, [' |
local exceptions = { |
||
['Front matter'] = true, |
|||
['Header'] = true, |
|||
['bureaucratship'] = true |
|||
} |
|||
local pattern = '{{[ _]*([wW]ikipedia:[rR]equests for %w+/([^{}]-))[ _]*}}' |
local pattern = '{{[ _]*([wW]ikipedia:[rR]equests for %w+/([^{}]-))[ _]*}}' |
||
for rfxPage, rfxSubpage in mw.ustring.gmatch(rfaText, pattern) do |
for rfxPage, rfxSubpage in mw.ustring.gmatch(rfaText, pattern) do |
Revision as of 06:31, 22 May 2014
This module returns information about currently open requests for adminship and requests for bureaucratship (RfX). It has two functions, rfxNames
, which returns a table containing the page names of currently open RfX, and rfx
, which returns a table of rfx objects created using Module:Rfx.
Usage
First, load the module.
local currentRfx = require('Module:Current RfX')
Then, choose the function that you wish to use. The functions are outlined in the subsections below.
For the purpose of explanation, in the examples below we will assume that there are currently two users running for adminship, Example and Example2. We will also assume that there is currently one user running for bureaucratship, Example3.
RfxNames
currentRfx.rfxnames()
This returns an array containing the page names of all current requests for adminship and bureaucratship. They are sorted by the order they appear on Wikipedia:Requests for adminship, and requests for adminship (RfAs) and requests for bureaucratship (RfBs) are treated identically. For the example users, the table returned would be as follows:
{
'Wikipedia:Requests for adminship/Example',
'Wikipedia:Requests for adminship/Example2',
'Wikipedia:Requests for bureaucratship/Example3'
}
Rfx
currentRfx.rfx()
This returns a table containing two arrays, rfa
and rfb
; rfa
contains rfx objects for currently open RfAs, and rfb
contains rfx objects for currently open RfBs. In the case that there are multiple RfAs or multiple RfBs they will appear in the same order as they do on Wikipedia:Requests for adminship. For a description of rfx objects and what they can do, please see Module:Rfx. For the example users, the table returned would be as follows:
{
rfa = {
-- Example's rfx object,
-- Example2's rfx object
},
rfb = {
-- Example3's rfx object
}
}
-- This module gets information about RfXes (requests for adminship and requests for bureaucratship)
-- that are currently open. It can return a list of page names or a list of rfx objects found using
-- [[Module:Rfx]].
local rfx = require('Module:Rfx')
local p = {}
function p.rfxNames()
local success, rfa = pcall(mw.title.new, 'Wikipedia:Requests for adminship')
if not (success and 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 rfxNames = {}
local exceptions = {
['Front matter'] = true,
['Header'] = true,
['bureaucratship'] = true
}
local pattern = '{{[ _]*([wW]ikipedia:[rR]equests for %w+/([^{}]-))[ _]*}}'
for rfxPage, rfxSubpage in mw.ustring.gmatch(rfaText, pattern) do
if not exceptions[rfxSubpage] then
rfxNames[#rfxNames + 1] = rfxPage
end
end
return rfxNames
end
function p.rfx()
local rfa, rfb = {}, {}
local rfxNames = p.rfxNames()
for i, rfxName in ipairs(rfxNames) do
local rfxObj = rfx.new(rfxName)
if rfxObj then
local rfxType = rfxObj.type
if rfxType == 'rfa' then
rfa[#rfa + 1] = rfxObj
elseif rfxType == 'rfb' then
rfb[#rfb + 1] = rfxObj
end
end
end
return {rfa = rfa, rfb = rfb}
end
return p