Module:WikiProject assessment progression

MyWikiBiz, Author Your Legacy — Friday November 15, 2024
Revision as of 07:59, 16 July 2021 by Zoran (talk | contribs) (Pywikibot 6.4.0)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Template:Module rating 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 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)
	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(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)
	local classCount = countCategoryArticles(classes, project)
	local total = calculateProjectTotal(project)
	return percentComplete(classCount, total)
end

return p