Jump to content

Module:WikiProject assessment progression/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
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 assessedClasses = {
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

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