Module:Progress bar

require('strict')

local p = {} --p stands for package

local getArgs = require('Module:Arguments').getArgs local make_style_string = require('Module:Optional style').make_style_string local yesno = require('Module:Yesno') local error_message = require('Module:Error')['error']

--[=[ Construct a progress bar ]=] function p._progress_bar(args) -- args local statuses = { ['total'] = args.total or 0, ['validated'] = args.validated or 0, ['proofread'] = args.proofread or 0, ['problematic'] = args.problematic or 0, ['not_proofread'] = args.not_proofread or args['not proofread'] or args['not-proofread'] or 0, ['notext'] = args.notext or 0 }	for k, v in pairs(statuses) do		if v and not tonumber(v) then return error_message({['message'] = 'Expression error: ' .. k .. ' = ' .. v .. ' is not a number.'}) end statuses[k] = tonumber(v) or 0 if statuses[k] < 0 then return error_message({['message'] = 'Expression error: ' .. k .. ' = ' .. statuses[k] .. ' < 0.'}) end if statuses[k] > statuses.total then return error_message({['message'] = 'Expression error: ' .. k .. ' = ' .. statuses[k] .. ' > total = ' .. statuses.total .. '.'}) end end if statuses.total == 0 then return error_message({['message'] = 'Expression error: total is 0.'}) end local status_sum = statuses.validated + statuses.proofread + statuses.not_proofread + statuses.problematic + statuses.notext if status_sum > statuses.total then return error_message({['message'] = 'Expression error: page sum = ' .. status_sum .. ' > total = ' .. statuses.total .. '.'}) end if yesno(args.existing_only or 'no') then statuses.total = status_sum statuses.missing = 0 else statuses.missing = statuses.total - status_sum end -- status info local status_info = { {['n'] = statuses.validated, ['id'] = 'q4'}, {['n'] = statuses.proofread, ['id'] = 'q3'}, {['n'] = statuses.problematic, ['id'] = 'q2'}, {['n'] = statuses.not_proofread, ['id'] = 'q1'}, {['n'] = statuses.notext, ['id'] = 'q0'}, {['n'] = statuses.missing, ['id'] = 'missing'} }	-- construct table params local title = "title = '" .. statuses.validated .. " validated pages, " .. statuses.proofread .. " only proofread pages, " .. statuses.problematic .. " problematic pages, " .. statuses.not_proofread .. " not proofread pages, and " .. statuses.notext .. " pages without text (" .. statuses.total .. " pages in index)'" local data_table = {"data-total='" .. statuses.total .. "'"}	for k, v in pairs(status_info) do table.insert(data_table, "data-" .. v['id'] .. "='" .. v['n'] .. "'") end local datas = table.concat(data_table, " ") local style = make_style_string({['height'] = args.height, ['max-width'] = args.width}) -- construct table rows local row_table = {} for k, v in pairs(status_info) do		if v['n'] > 0 then table.insert(row_table, " ") end end local rows = table.concat(row_table) return " " end

--[=[ For calling from template ]=] function p.progress_bar(frame) return p._progress_bar(getArgs(frame)) end

return p