Jump to content

Module:WikiProject assessment progression/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m Pass class args into table
Set classes only if class arg is present, else default to all classes
Line 38: Line 38:
local function calculateProjectTotal(project)
local function calculateProjectTotal(project)
return countCategoryArticles(assessedClasses, project) + categoryCount('Unassessed', 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
end


Line 47: Line 57:
function p._main(args)
function p._main(args)
local project = args['project']
local project = args['project']
local classes = {args['class']} or assessedClasses
local classes = setClasses(args)
local classCount = countCategoryArticles(classes, project)
local classCount = countCategoryArticles(classes, project)
local total = calculateProjectTotal(project)
local total = calculateProjectTotal(project)

Revision as of 21:01, 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

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