Module:WikiProject assessment progression/sandbox
Appearance
| This is the module sandbox page for Module:WikiProject assessment progression (diff). See also the companion subpage for test cases (run). |
| This module depends on the following other modules: |
| This module is rated as beta. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected. |
This module calculates the proportion of articles in a given WikiProject that have been assessed for quality ratings (i.e. any articles that are not tagged as "Unassessed"), and returns this as a simple number. It is used by {{WikiProject assessment progression}} to populate the value for a progress bar that updates automatically based on category memberships.
Usage
[edit]{{#invoke:WikiProject assessment progression|main}}
When invoked by a template that supplies a parameter called "project", it will use that parameter as a WikiProject name for class-rating categories, and return the percentage of articles in those categories that are not listed as "Unassessed". This value is a number (with one decimal place) returned as a string.
See also
[edit]require('strict')
local classes = {
'List','Stub','Start','C','B',
'GA','A','FA','FL','FM',
'Book','Category','Disambig','File',
'Portal','Project','Redirect','Template',
}
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function categoryCount(category, project)
local success, count = pcall(function()
return mw.site.stats.pagesInCategory(
string.format('%s %s articles', category, project),
'pages'
)
end)
if success then return count end
mw.log('Error retreiving category')
return 0
end
-- rounding to first decimal, from http://lua-users.org/wiki/SimpleRound
local function round(num)
return math.floor(num * 10 + 0.5) / 10
end
local function percentComplete(sum, total)
if total == 0 then return '0' end
return tostring(round(100 * sum / total))
end
local function countCategoryArticles(classesToCount, project)
local classCount = 0
for _, class in ipairs(classesToCount) do
classCount = classCount + categoryCount(class..'-Class', project)
end
return classCount
end
local function calculateProjectTotal(project)
return countCategoryArticles(classes, project) + categoryCount('Unassessed', project)
end
local function arg_or_default(args, from_arg, default)
if args[from_arg] and args[from_arg] ~= '' then
return args[from_arg]
else
return default
end
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
local project = arg_or_default(args, "project", nil)
mw.addWarning('No project defined for [[Template:WikiProject assessment progression]]')
if not project then return 0 end
local classCount = countCategoryArticles(classes, project)
local total = calculateProjectTotal(project)
return percentComplete(classCount, total)
end
return p