<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARFX_table</id>
	<title>Module:RFX table - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARFX_table"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:RFX_table&amp;action=history"/>
	<updated>2026-06-07T05:06:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:RFX_table&amp;diff=144557&amp;oldid=prev</id>
		<title>imported&gt;Mr. Stradivarius: create with code from Module:RFX report</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:RFX_table&amp;diff=144557&amp;oldid=prev"/>
		<updated>2013-07-26T15:25:34Z</updated>

		<summary type="html">&lt;p&gt;create with code from &lt;a href=&quot;/research/Module:RFX_report&quot; title=&quot;Module:RFX report&quot;&gt;Module:RFX report&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module is a replacement for the RfX report bot.&lt;br /&gt;
&lt;br /&gt;
local rfx = require( &amp;#039;Module:Rfx&amp;#039; )&lt;br /&gt;
local colours = mw.loadData( &amp;#039;Module:RFX report/colour&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function makeRow( rfxObject )&lt;br /&gt;
    if not ( type( rfxObject ) == &amp;#039;table&amp;#039; and rfxObject.getTitleObject and rfxObject.getSupportUsers ) then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    local style = &amp;#039;&amp;#039;&lt;br /&gt;
    local styleInline = &amp;#039;&amp;#039;&lt;br /&gt;
    local status = rfxObject:getStatus()&lt;br /&gt;
    if status == &amp;#039;pending closure&amp;#039; then&lt;br /&gt;
        style = &amp;#039; style=&amp;quot;background: #f8cdc6;&amp;quot; |&amp;#039;&lt;br /&gt;
        styleInline = &amp;#039; background: #f8cdc6;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    local page = rfxObject:getTitleObject().prefixedText&lt;br /&gt;
    local user = rfxObject.user or rfxObject:getTitleObject().subpageText&lt;br /&gt;
    local supports = rfxObject.supports&lt;br /&gt;
    local opposes = rfxObject.opposes&lt;br /&gt;
    local neutrals = rfxObject.neutrals&lt;br /&gt;
    local percent = rfxObject.percent&lt;br /&gt;
    local colour&lt;br /&gt;
    if percent then&lt;br /&gt;
        colour = colours[ rfxObject.type ][ percent ]&lt;br /&gt;
    end&lt;br /&gt;
    colour = colour or &amp;#039;&amp;#039;&lt;br /&gt;
    local votes&lt;br /&gt;
    if supports and opposes and neutrals and percent then&lt;br /&gt;
        votes = mw.ustring.format( [==[&lt;br /&gt;
        &lt;br /&gt;
| style=&amp;quot;text-align: right;%s&amp;quot; | [[%s#Support|%d]]&lt;br /&gt;
| style=&amp;quot;text-align: right;%s&amp;quot; | [[%s#Oppose|%d]]&lt;br /&gt;
| style=&amp;quot;text-align: right;%s&amp;quot; | [[%s#Neutral|%d]]&lt;br /&gt;
| style=&amp;quot;text-align: right; background: #%s;&amp;quot; | %d]==],&lt;br /&gt;
            styleInline, page, supports,&lt;br /&gt;
            styleInline, page, opposes,&lt;br /&gt;
            styleInline, page, neutrals,&lt;br /&gt;
            colour, percent&lt;br /&gt;
        )&lt;br /&gt;
    else&lt;br /&gt;
        votes = &amp;#039;\n| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background: #f8cdc6;&amp;quot; | Error parsing votes&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    if status then&lt;br /&gt;
        status = mw.language.getContentLanguage():ucfirst( status )&lt;br /&gt;
        if status == &amp;#039;Pending closure&amp;#039; then&lt;br /&gt;
            status = &amp;#039;Pending closure...&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        status = mw.ustring.format( &amp;#039;\n| %s %s&amp;#039;, style, status )&lt;br /&gt;
    else&lt;br /&gt;
        status = &amp;#039;\n| style=&amp;quot;background: #f8cdc6;&amp;quot; | Error getting status&amp;#039;&lt;br /&gt;
    end &lt;br /&gt;
    local endTime = rfxObject.endTime&lt;br /&gt;
    local secondsLeft = rfxObject:getSecondsLeft()&lt;br /&gt;
    local timeLeft = rfxObject:getTimeLeft()&lt;br /&gt;
    local time&lt;br /&gt;
    if endTime and timeLeft then&lt;br /&gt;
        time = mw.ustring.format( &amp;#039;\n| %s %s\n| %s %s&amp;#039;, style, endTime, style, timeLeft )&lt;br /&gt;
    else&lt;br /&gt;
        time = &amp;#039;\n| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #f8cdc6;&amp;quot; | Error parsing end time&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    local dupes = rfxObject:dupesExist()&lt;br /&gt;
    if dupes then&lt;br /&gt;
        dupes = &amp;quot;&amp;#039;&amp;#039;&amp;#039;yes&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
    elseif dupes == false then&lt;br /&gt;
        dupes = &amp;#039;no&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        dupes = &amp;#039;--&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    local report = rfxObject:getReport()&lt;br /&gt;
    if report then&lt;br /&gt;
        report = mw.ustring.format( &amp;#039;\n|%s [%s report]&amp;#039;, style, tostring( report ) )&lt;br /&gt;
    else&lt;br /&gt;
        report = &amp;#039;\n| style=&amp;quot;background: #f8cdc6;&amp;quot; | Report not found&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    return mw.ustring.format(&lt;br /&gt;
        &amp;#039;\n|-\n|%s [[%s|%s]]%s%s%s\n| style=&amp;quot;text-align: center;%s&amp;quot; | %s%s&amp;#039;,&lt;br /&gt;
        style, page, user, votes, status, time, styleInline, dupes, report&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeHeading( rfxType )&lt;br /&gt;
    if type( rfxType ) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    return mw.ustring.format(&lt;br /&gt;
        &amp;#039;\n|-\n! %s candidate !! S !! O !! N !! S%% !! Status !! Ending (UTC) !! Time left !! Dupes? !! Report&amp;#039;,&lt;br /&gt;
        rfxType&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRfxes( args )&lt;br /&gt;
    if type( args ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    local nums, ret = {}, {}&lt;br /&gt;
    for k, v in pairs( args ) do&lt;br /&gt;
        if type( k ) == &amp;#039;number&amp;#039; and k &amp;gt;= 1 and math.floor( k ) == k and k ~= math.huge then&lt;br /&gt;
            table.insert( nums, k )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.sort( nums )&lt;br /&gt;
    for i, v in ipairs( nums ) do&lt;br /&gt;
        ret[ i ] = args[ v ]&lt;br /&gt;
    end&lt;br /&gt;
    return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeReportRows( args )&lt;br /&gt;
    local rfxes = getRfxes( args )&lt;br /&gt;
    if not rfxes then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    -- Get RfX objects and separate RfAs and RfBs.&lt;br /&gt;
    local rfas = {}&lt;br /&gt;
    local rfbs = {}&lt;br /&gt;
    for i, rfxPage in ipairs( rfxes ) do&lt;br /&gt;
        local rfxObject = rfx.new( rfxPage )&lt;br /&gt;
        if rfxObject then&lt;br /&gt;
            if rfxObject.type == &amp;#039;rfa&amp;#039; then&lt;br /&gt;
                table.insert( rfas, rfxObject )&lt;br /&gt;
            elseif rfxObject.type == &amp;#039;rfb&amp;#039; then&lt;br /&gt;
                table.insert( rfbs, rfxObject )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local ret = {}&lt;br /&gt;
    if #rfas &amp;gt; 0 then&lt;br /&gt;
        table.insert( ret, makeHeading( &amp;#039;RfA&amp;#039; ) )&lt;br /&gt;
        for i, rfaObject in ipairs( rfas ) do&lt;br /&gt;
            table.insert( ret, makeRow( rfaObject ) )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #rfbs &amp;gt; 0 then&lt;br /&gt;
        table.insert( ret, makeHeading( &amp;#039;RfB&amp;#039; ) )&lt;br /&gt;
        for i, rfbObject in ipairs( rfbs ) do&lt;br /&gt;
            table.insert( ret, makeRow( rfbObject ) )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat( ret )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeReport( args )&lt;br /&gt;
    local purgeLink = mw.title.getCurrentTitle():fullUrl( &amp;#039;action=purge&amp;#039; )&lt;br /&gt;
    local header = mw.ustring.format(&lt;br /&gt;
        &amp;#039;\n|-\n! colspan=&amp;quot;10&amp;quot; style=&amp;quot;text-align: center;&amp;quot; | Requests for [[Wikipedia:Requests for adminship|adminship]] and [[Wikipedia:Requests for bureaucratship|bureaucratship]]&amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;float: right;&amp;quot;&amp;gt;&amp;lt;small&amp;gt;[%s update]&amp;lt;/small&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
        purgeLink&lt;br /&gt;
    )&lt;br /&gt;
    local rows = makeReportRows( args ) or &amp;#039;&amp;#039;&lt;br /&gt;
    if rows == &amp;#039;&amp;#039; then&lt;br /&gt;
        rows = &amp;#039;\n|-\n| colspan=&amp;quot;10&amp;quot; | No current discussions. &amp;lt;small&amp;gt;Recent RfAs: ([[Wikipedia:Successful requests for adminship|successful]], [[Wikipedia:Unsuccessful adminship candidacies (Chronological)|unsuccessful]]) Recent RfBs: ([[Wikipedia:Successful bureaucratship candidacies|successful]], [[Wikipedia:Unsuccessful bureaucratship candidacies|unsuccessful]])&amp;lt;/small&amp;gt;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    local style = args.style&lt;br /&gt;
    if not style then&lt;br /&gt;
        local float = args.float or args.align or &amp;#039;right&amp;#039;&lt;br /&gt;
        local clear = args.clear or &amp;#039;left&amp;#039;&lt;br /&gt;
        style = mw.ustring.format(&lt;br /&gt;
            &amp;#039;style=&amp;quot;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;&amp;quot;&amp;#039;,&lt;br /&gt;
            clear, float&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    return mw.ustring.format( &amp;#039;\n{| class=&amp;quot;wikitable&amp;quot; %s%s%s\n|-\n|}&amp;#039;, style, header, rows )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main( frame )&lt;br /&gt;
    -- If called via #invoke, use the args passed into the invoking&lt;br /&gt;
    -- template, or the args passed to #invoke if any exist. Otherwise&lt;br /&gt;
    -- assume args are being passed directly in from the debug console&lt;br /&gt;
    -- or from another Lua module.&lt;br /&gt;
    local origArgs&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        origArgs = frame:getParent().args&lt;br /&gt;
        for k, v in pairs( frame.args ) do&lt;br /&gt;
            origArgs = frame.args&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        origArgs = frame&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim whitespace and remove blank arguments.&lt;br /&gt;
    local args = {}&lt;br /&gt;
    for k, v in pairs( origArgs ) do&lt;br /&gt;
        v = mw.text.trim( v )&lt;br /&gt;
        if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            args[k] = v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return makeReport( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Mr. Stradivarius</name></author>
	</entry>
</feed>