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 depends on the following other modules:
local archiveList = require( 'Module:Archive list' )
-- Gets wikitable rows filled with archive links, using [[Module:Archive list]].
local function getLinks( funcArgs )
if type( funcArgs ) ~= 'table' then
error( 'Invalid input to getLinks', 2 )
end
funcArgs.sep = '</li><li>'
funcArgs.links = 20
funcArgs.linesep = ' ' -- hacking around the wrapper to remove lineseparators
return mw.ustring.format(
'<ol class="an-archives-list"><li>%s</li></ol>',
archiveList.main( funcArgs )
)
end
-- Returns a Lua table with value being a list of archive links for one of the
-- noticeboards listed in the archives table at the top of the module.
local function getLinksTable( all )
-- A table of the archives to display.
local archives = {
an = {
root = "Wikipedia:Administrators' noticeboard",
prefix = "Archive"
},
ani = {
root = "Wikipedia:Administrators' noticeboard",
prefix = "IncidentArchive"
},
['3rr'] = {
root = "Wikipedia:Administrators' noticeboard",
prefix = "3RRArchive"
},
ae = {
root = "Wikipedia:Arbitration/Requests/Enforcement",
prefix = "Archive"
},
csn = {
root = "Wikipedia:Administrators' noticeboard/Community sanction",
prefix = "Archive"
}
}
local t = {}
for board, archive in pairs( archives ) do
local funcArgs = archive
if not all then
local archiveMax = archiveList.count( funcArgs )
if type( archiveMax ) == 'number' and archiveMax >= 0 then
funcArgs.max = math.floor( archiveMax )
local start = funcArgs.max -19
if start < 1 then
start = 1
end
funcArgs.start = start
end
end
t[board] = getLinks( funcArgs )
end
return t
end
local function group (main_page, search, list)
local ret = mw.html.create('li')
ret:tag('div')
:addClass('an-archives-header')
:wikitext(main_page .. " ")
:tag('span')
:wikitext(search)
:done()
:done()
ret:wikitext(list)
:allDone()
return ret
end
-- Build the wikitable using mw.ustring.format.
local function buildWikitable( args )
local t = getLinksTable( args.all )
local frame = mw.getCurrentFrame()
local lists = {
group(
"[[Wikipedia:Administrators' noticeboard|Administrators']]",
"([[Wikipedia:Administrators' noticeboard/Archives|archives]], [[Template:Administrators' noticeboard archives/Search|search]])",
t.an
),
group(
"[[Wikipedia:Administrators' noticeboard/Incidents|Incidents]]",
"([[Wikipedia:Administrators' noticeboard/IncidentArchives|archives]], [[Template:Administrators' noticeboard archives/Search|search]])",
t.ani
),
group(
"[[Wikipedia:Administrators' noticeboard/Edit warring|Edit-warring/3RR]]",
"([[Wikipedia:Administrators' noticeboard/3RRArchives|archives]], [[Template:Administrators' noticeboard archives/Search|search]])",
t['3rr']
),
group(
"[[Wikipedia:Arbitration/Requests/Enforcement|Arbitration enforcement]]",
"([[Wikipedia:Arbitration/Requests/Enforcement/Archive|archives]])",
t.ae
)
}
-- optional since these haven't been used in a while
if args.csn == 'yes' then
table.insert(lists, group(
"Community sanction archives",
"([[Template:Administrators\' noticeboard archives/Search|search]])",
t.csn
))
end
local other_links = mw.html.create('li')
other_links:tag('div')
:addClass('an-archives-header')
:wikitext('Other links')
:done()
:wikitext(require('Module:List').horizontal({
"[[Wikipedia talk:Administrators' noticeboard|Talk]]",
'[[Wikipedia:Sockpuppet investigations|Sockpuppet investigations]]',
'[[:Category:Administrative backlog|Backlog]]'
}))
:allDone()
table.insert(lists, other_links)
local list = mw.html.create('ul')
for _, group in ipairs(lists) do
list:node(group)
end
list:allDone()
local box = mw.html.create('div')
box:addClass('an-archives')
:tag('div')
:addClass('an-archives-caption')
:wikitext('Noticeboard archives')
:done()
:node(list)
if args.search == 'yes' then
box:tag('div')
:addClass('an-archives-search')
:wikitext(frame:preprocess(
[==[
<inputbox>
bgcolor=transparent
type=fulltext
prefix=Wikipedia:Administrators' noticeboard
break=no
width=32
searchbuttonlabel=Search
placeholder=Search noticeboards archives
</inputbox>]==]
))
end
box:allDone()
return frame:extensionTag {
name = 'templatestyles', args = { src = 'Module:Administrators\' noticeboard archives/styles.css' }
} .. '__NOINDEX__' .. tostring(box)
end
function makeWrapper( all )
return function( frame )
-- If we are being called from #invoke, get the args from #invoke
-- if they exist, or else get the arguments passed to the parent
-- frame. Otherwise, assume the arguments are being passed directly
-- in from another module or from the debug console.
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
for k, v in pairs( frame.args ) do
origArgs = frame.args
break
end
else
origArgs = frame
end
-- Ignore blank values for parameters.
local args = {}
for k, v in pairs( origArgs ) do
if v ~= '' then
args[k] = v
end
end
-- Find whether we are getting all the links or just the
-- last 20 links.
args.all = all
return buildWikitable( args )
end
end
return {
compact = makeWrapper(),
all = makeWrapper( true )
}