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',

}



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 argsfrom_arg and argsfrom_arg ~= '' then

		return argsfrom_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