-- This module is a replacement for {{Administrators' noticeboard navbox}}
-- and {{Administrators' noticeboard navbox all}}.
local archiveList = require( 'Module:Archive list' )
-- A table of the archives to display.
local archives = {
an = {
header = "[[Wikipedia:Administrators' noticeboard|Administrators']]",
link = "[[Wikipedia:Administrators' noticeboard/Archives|archives]]",
root = "Wikipedia:Administrators' noticeboard",
prefix = "Archive"
},
ani = {
header = "[[Wikipedia:Administrators' noticeboard/Incidents|Incidents]]",
link = "[[Wikipedia:Administrators' noticeboard/IncidentArchives|archives]]",
root = "Wikipedia:Administrators' noticeboard",
prefix = "IncidentArchive"
},
ew = {
header = "[[Wikipedia:Administrators' noticeboard/Edit warring|Edit-warring/3RR]]",
link = "[[Wikipedia:Administrators' noticeboard/3RRArchives|archives]]",
root = "Wikipedia:Administrators' noticeboard",
prefix = "3RRArchive"
},
ae = {
header = "[[Wikipedia:Arbitration/Requests/Enforcement|Arbitration enforcement]]",
link = "[[Wikipedia:Arbitration/Requests/Enforcement/Archive|archives]]",
root = "Wikipedia:Arbitration/Requests/Enforcement",
prefix = "Archive"
},
csn = {
header = 'Community sanction archives',
link = nil,
root = "Wikipedia:Administrators' noticeboard/Community sanction",
prefix = "Archive"
}
}
-- 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 = '\n| '
funcArgs.linesep = '\n|-\n| '
return mw.ustring.format(
'|-\n| %s',
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 )
local t = {}
for board, archive in pairs( archives ) do
local funcArgs = {}
funcArgs.root = archive.root
funcArgs.prefix = archive.prefix
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 inputbox(builder, has_search)
if has_search ~= 'yes' then return '' end
builder:tag('div')
:css('white-space', 'nowrap')
:wikitext(mw.getCurrentFrame():extensionTag{ name = 'inputbox' , args = {
bgcolor = 'transparent',
['type'] = 'fulltext',
prefix = "Wikipedia:Administrators' noticeboard",
['break'] = 'yes',
width = '32',
searchbuttonlabel = 'Search',
placeholder = 'Search noticeboards archives'
}})
end
-- Build the wikitable using mw.ustring.format.
local function buildWikitable( args )
local links = getLinksTable( args.all )
local frame = mw.getCurrentFrame()
-- The following are defined here for convenience, as they recur frequently
-- in the wikitable.
local openSpan = '<span style="font-size: smaller;">'
local closeSpan = '</span>'
local searchLink = "[[Template:Administrators' noticeboard archives/Search|search]]"
if args.csn == 'yes' then
-- build the csn div
end
local noindex = '__NOINDEX__'
local function other_links(builder)
builder = builder:tag('div')
:addClass('an-archives-header')
:wikitext('Other links')
:done()
:tag('ul')
-- padding: 0.125em 0; on hlist in navbox
:addClass('hlist')
:tag('li')
:wikitext("[[Wikipedia talk:Administrators' noticeboard|Talk]]")
:tag('li')
:wikitext('[[Wikipedia:Sockpuppet investigations|Sockpuppet investigations]]')
:tag('li')
:wikitext('[[Wikipedia:Sockpuppet investigations|Sockpuppet investigations]]')
:done()
:done()
end
local templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = "Module:Administrators' noticeboard archives/styles.css" }
}
local builder = mw.html.create('div')
:addClass('an-archives')
:addClass('noprint')
:tag('div')
:addClass('an-archives-caption')
:wikitext('Noticeboard archives')
:done()
for board, link_table in pairs(links) do
builder = builder:tag('div')
:addClass('an-archives-header')
:wikitext(archives.board.header)
:tag('span')
:css('font-size', 'smaller')
:wikitext(archives[board].archives)
end
return
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 )
}