Jump to content

Module:WikiProject assessment progression/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Rename param to clarify separation
calculateProjectTotal calling countCategoryArticles directly so it doesn't need to rely on having the project running total passed to it
Line 1: Line 1:
require('Module:No globals')
require('Module:No globals')


local classes = {
local assessedClasses = {
'List','Stub','Start','C','B',
'List','Stub','Start','C','B',
'GA','A','FA','FL','FM',
'GA','A','FA','FL','FM',
Line 36: Line 36:
end
end


local function calculateProjectTotal(progressCount, project)
local function calculateProjectTotal(project)
return progressCount + categoryCount('Unassessed', project)
return countCategoryArticles(assessedClasses, project) + categoryCount('Unassessed', project)
end
end


Line 47: Line 47:
function p._main(args)
function p._main(args)
local project = args['project']
local project = args['project']
local classCount = countCategoryArticles(classes, project)
local classCount = countCategoryArticles(assessedClasses, project)
local total = calculateProjectTotal(classCount, project)
local total = calculateProjectTotal(project)
if total == 0 then
if total == 0 then
return errorMessage('Error: project not found for project name "'..project..'"')
return errorMessage('Error: project not found for project name "'..project..'"')

Revision as of 18:37, 6 December 2020

require('Module:No globals')

local assessedClasses = {
	'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 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

function p.main(frame)
	local args = getArgs(frame)
	return p._main(args)
end

function p._main(args)
	local project = args['project']
	local classCount = countCategoryArticles(assessedClasses, 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