Module:Administrators' noticeboard archives/sandbox: Difference between revisions
Appearance
Content deleted Content added
make the line separator the empty string |
ws, doesn't work |
||
Line 8: | Line 8: | ||
funcArgs.sep = '</li><li>' |
funcArgs.sep = '</li><li>' |
||
funcArgs.links = 20 |
funcArgs.links = 20 |
||
funcArgs. |
funcArgs.linesep = ' ' -- hacking around the wrapper to remove lineseparators |
||
return mw.ustring.format( |
return mw.ustring.format( |
||
'<ol class="an-archives-list"><li>%s</li></ol>', |
'<ol class="an-archives-list"><li>%s</li></ol>', |
Revision as of 19:55, 20 August 2024
![]() | This is the module sandbox page for Module:Administrators' noticeboard archives (diff). |
![]() | 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 is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
![]() | This module depends on the following other modules: |
![]() | This Lua module is used on approximately 2,100 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module generates a box of archive links for the various administrators' noticeboards. It implements {{administrators' noticeboard archives}} and {{administrators' noticeboard archives all}}. The module updates the archive links automatically as new archives are created.
The module lists archives for the following noticeboards:
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 )
}