Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a22cda9d1900a8fe

Jump to content

Module:WikiProject assessment progression

From Wikipedia, the free encyclopedia

require('strict')

local classes = {
	'List','Stub','Start','C','B',
	'GA','A','FA','FL','FM',
	'Book','Category','Disambig','File',
	'Portal','Project','Redirect','Template', 'Unassessed'
}

local p = {}
local getArgs = require('Module:Arguments').getArgs

local function categoryCount(category, project)
	local success, count = pcall(function()
		return mw.site.stats.pagesInCategory(
			string.format('%s %s articles', category, project),
			'pages'
		)
	end)

	if success then return count end

    mw.log('Error retreiving category')
	return 0
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)
	if total == 0 then return '0' end
	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 class = arg_or_default(args, "class", nil)

	mw.addWarning('No project defined for [[Template:WikiProject assessment progression]]')
	if not project then return 0 end

	if not class then
		local classCount = countCategoryArticles(classes, project)
		local total = calculateProjectTotal(project)
		return percentComplete(classCount, total)
	else
		local classCount = categoryCount(class..'-Class', project)
		local total = calculateProjectTotal(project)
		return percentComplete(classCount, total)
	end
end

return p