Module:Articles by class
Appearance
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | 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 module implements Template:Articles by Quality and Template:Articles by Importance, and will in the future implement Template:Articles by Quality and Importance. Please refer to the documentation of those templates.
require('strict')
local p = {}
local classes = {'FA', 'A', 'GA', 'B', 'C', 'Start', 'Stub', 'FL', 'AL', 'BL', 'CL', 'List', 'SIA', 'Future', 'Category', 'Disambig', 'Draft', 'FM', 'File', 'Needed', 'Portal', 'Project', 'Redirect', 'Template', 'User', 'NA'}
p.main = function(frame)
local args = require('Module:Arguments').getArgs(frame)
local title = args.page and mw.title.new(page) or mw.title.getCurrentTitle()
local class, topic, typ = title.text:match('^(%a+)-Class ([%a%s]+) (%a+)$')
if not class then -- try to match unassessed category
class, topic, typ = title.text:match('^(Unassessed) ([%a%s]+) (%a+)$')
end
local add_category = function(cat, sort)
local link = '[[Category:' .. cat .. (sort and ('|' .. sort) or '') .. ']]'
table.insert(cats, link)
end
if args.class and args.class~=class or args.topic and args.topic~=topic then
add_category('WikiProject assessment categories needing attention')
topic = topic or args.topic
class = class or args.class
end
local out, exist, cats = '', {}, {}
if title.namespace==14 then
out = frame:expandTemplate{title='Possibly empty category'}
end
local add_category = function(cat, sort)
local link = '[[Category:' .. cat .. (sort and ('|' .. sort)) .. ']]'
table.insert(cats, link)
end
local cat_in_use = function(cat)
local title = mw.title.new('Category:' .. cat)
return title.exists or mw.site.stats.pagesInCategory(cat, 'pages')>0
end
for _, class in ipairs(classes) do
if cat_in_use(class .. '-Class' .. ' ' .. topic .. ' pages') then
exist[class] = 'pages'
elseif cat_in_use(class .. '-Class' .. ' ' .. topic .. ' articles') then
exist[class] = 'articles'
else
exist[class] = false
end
end
local class_template = function(class, page)
return frame:expandTemplate{
title = 'class',
args = {
[1] = class,
topic = topic,
category = topic .. ' ' .. page,
bold = 'no'
}
}
end
local header_row = mw.html.create('tr')
for _, class in ipairs(classes) do
if exist[class] then
header_row:node(class_template(class, exist[class]))
end
end
if args.custom1 then
header_row:node(class_template(args.custom1, 'articles'))
end
if args.custom2 then
header_row:node(class_template(args.custom2, 'articles'))
end
header_row:node(class_template('Unassessed', 'articles'))
local pages_in_cat = function(cat)
local pages = mw.site.stats.pagesInCategory(cat, 'pages')
local col = mw.html.create('td')
:attr('align', 'right')
:wikitext(mw.language.getContentLanguage():formatNum(pages))
return col
end
local second_row = mw.html.create('tr')
for _, class in ipairs(classes) do
if exist[class] then
second_row:node(pages_in_cat(class .. '-Class' .. ' ' .. topic .. ' ' .. exist[class]))
end
end
if args.custom1 then
second_row:node(pages_in_cat(args.custom1 .. '-Class' .. ' ' .. topic .. ' articles'))
end
if args.custom2 then
second_row:node(pages_in_cat(args.custom2 .. '-Class' .. ' ' .. topic .. ' articles'))
end
second_row:node(pages_in_cat('Unassessed ' .. topic .. ' articles'))
local tab = mw.html.create('table')
:addClass('toccolours'):addClass('nomobile')
:css('table-layout', 'fixed')
:css('margin', '1em auto')
:node(header_row)
:node(second_row)
if class and class~='' and class~='nocat' then
add_category(args.parent or (topic .. ' articles by quality'), class)
add_category(class .. (class=='Unassessed' and '' or '-Class') .. ' ' .. typ, args.sort or topic)
end
return out .. tostring(tab) .. table.concat(cats)
end
return p