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 = title.text:match('^(%a+)-Class (%a+) %a+$')
if args.topic then -- override topic
topic = args.topic
end
local out, exist, cats = '', {}, {}
if title.namespace==14 then
out = frame:expandTemplate{title='Possibly empty category'}
end
local add_category = function(cat)
table.append(cats, '[[Category:' .. cat)
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
header_row:node(class_template('Unassessed', 'articles'))
local pages_in_cat = function(cat)
local pages = mw.site.stats.pagesInCategory(cat, 'pages')
return mw.language.getContentLanguage():formatNum(pages)
end
local second_row = mw.html.create('tr')
for _, class in ipairs(classes) do
if exist[class] then
local col = mw.html.create('td')
:attr('align', 'right')
:wikitext(pages_in_cat(class .. '-Class' .. ' ' .. topic .. ' ' .. exist[class]))
second_row:node(col)
end
end
local unassessed_col = mw.html.create('td')
:attr('align', 'right')
:wikitext(pages_in_cat('Unassessed ' .. topic .. ' articles'))
second_row:node(unassessed_col)
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'))
end
return out .. tostring(tab) .. table.concat(cats)
end
return p