Modul:Index progress

require('strict')

--[=[
This is a module to extract data from the ProofreadPage Lua API and feed it into a progress bar
]=]
local p = {} --p stands for package

local getArgs = require('Module:Arguments').getArgs
local proofreadPage = require('mw.ext.proofreadPage')
local yesno = require('Module:Yesno')
local error_message = require('Module:Error')['error']
local progress_bar = require('Module:Progress bar')._progress_bar
local progress_pie_chart = require('Module:Progress pie chart')._progress_pie_chart

--[=[
Map ProofreadPage Lua index progress to progress_bar
]=]

function p.bar(frame)
	local args = getArgs(frame)
	
	if not args or not args[1] then
		return error_message({'[[Module:Index progress]] error: no index provided'})
	end
	
	local idx = args[1]:gsub('^Index:', '')
	
	local index = proofreadPage.newIndex(idx)
	if not index then
		return error_message({'[[Module:Index progress]] error: index not found'})
	end
	
	local barArgs = {
		['total'] = index.pageCount,
		['notext'] = index:pagesWithLevel(0),
		['not_proofread'] = index:pagesWithLevel(1),
		['problematic'] = index:pagesWithLevel(2),
		['proofread'] = index:pagesWithLevel(3),
		['validated'] = index:pagesWithLevel(4),
		['height'] = args.height,
		['width'] = args.width,
		['existing_only'] = args.existing_only
	}
	
	return progress_bar(barArgs)
end

--[=[
Map ProofreadPage Lua index progress to progress_pie_chart and return the expanded template
]=]

function p.pie(frame)
	local args = getArgs(frame)
	
	if not args or not args[1] then
		return error_message({'[[Module:Index progress]] error: no index provided'})
	end
	
	local idx = args[1]:gsub('^Index:', '')
	
	local index = proofreadPage.newIndex(idx)
	if not index then
		return error_message({'[[Module:Index progress]] error: index not found'})
	end
	
	local pieArgs = {
		['total'] = index.pageCount,
		['notext'] = index:pagesWithLevel(0),
		['not_proofread'] = index:pagesWithLevel(1),
		['problematic'] = index:pagesWithLevel(2),
		['proofread'] = index:pagesWithLevel(3),
		['validated'] = index:pagesWithLevel(4),
		['existing_only'] = args.existing_only,
		['no_legend'] = args.no_legend,
		['size'] = args.size
	}
	return progress_pie_chart(pieArgs)
end

return p