Module:WikiProject assessment progression/sandbox: Difference between revisions
Appearance
Content deleted Content added
Set classes only if class arg is present, else default to all classes |
Construct assessedClasses from quality and project classes Tag: Reverted |
||
Line 1: | Line 1: | ||
require('Module:No globals') |
require('Module:No globals') |
||
local |
local qualityClasses = { |
||
'List','Stub','Start','C','B', |
'List','Stub','Start','C','B', |
||
'GA','A','FA','FL','FM', |
'GA','A','FA','FL','FM', |
||
} |
|||
local projectClasses = { |
|||
'Book','Category','Disambig','File', |
'Book','Category','Disambig','File', |
||
'Portal','Project','Redirect','Template', |
'Portal','Project','Redirect','Template', |
||
} |
} |
||
local assessedClasses = qualityClasses + projectClasses |
|||
local p = {} |
local p = {} |
Revision as of 21:41, 6 December 2020
![]() | This is the module sandbox page for Module:WikiProject assessment progression (diff). See also the companion subpage for test cases (run). |
![]() | 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 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
{{#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
require('Module:No globals')
local qualityClasses = {
'List','Stub','Start','C','B',
'GA','A','FA','FL','FM',
}
local projectClasses = {
'Book','Category','Disambig','File',
'Portal','Project','Redirect','Template',
}
local assessedClasses = qualityClasses + projectClasses
local p = {}
local getArgs = require('Module:Arguments').getArgs
local errorMessage = require('Module:Error')
local function categoryCount(category, project)
return mw.site.stats.pagesInCategory(
string.format('%s %s articles', category, project),
'pages'
)
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)
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(assessedClasses, project) + categoryCount('Unassessed', project)
end
local function setClasses(args)
local classes = {}
if args['class'] then
classes = {args['class']}
else
classes = assessedClasses
end
return classes
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
local project = args['project']
local classes = setClasses(args)
local classCount = countCategoryArticles(classes, project)
local total = calculateProjectTotal(project)
if total == 0 then
return errorMessage('Error: project not found for project name "'..project..'"')
else
return percentComplete(classCount, total)
end
end
return p