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 )
}