<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://source.islamical.org/index.php?action=history&amp;feed=atom&amp;title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86%3AProgress_bar</id>
	<title>پودمان:Progress bar - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://source.islamical.org/index.php?action=history&amp;feed=atom&amp;title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86%3AProgress_bar"/>
	<link rel="alternate" type="text/html" href="https://source.islamical.org/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Progress_bar&amp;action=history"/>
	<updated>2026-11-09T17:49:55Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://source.islamical.org/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Progress_bar&amp;diff=244&amp;oldid=prev</id>
		<title>Mojtabakd: ایجاد پودمان</title>
		<link rel="alternate" type="text/html" href="https://source.islamical.org/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Progress_bar&amp;diff=244&amp;oldid=prev"/>
		<updated>2026-11-04T20:46:13Z</updated>

		<summary type="html">&lt;p&gt;ایجاد پودمان&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {} --p stands for package&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local make_style_string = require(&amp;#039;Module:Optional style&amp;#039;).make_style_string&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local error_message = require(&amp;#039;Module:Error&amp;#039;)[&amp;#039;error&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Construct a progress bar&lt;br /&gt;
]=]&lt;br /&gt;
function p._progress_bar(args)&lt;br /&gt;
	-- args&lt;br /&gt;
	local statuses = {&lt;br /&gt;
		[&amp;#039;total&amp;#039;] = args.total or 0,&lt;br /&gt;
		[&amp;#039;validated&amp;#039;] = args.validated or 0,&lt;br /&gt;
		[&amp;#039;proofread&amp;#039;] = args.proofread or 0,&lt;br /&gt;
		[&amp;#039;problematic&amp;#039;] = args.problematic or 0,&lt;br /&gt;
		[&amp;#039;not_proofread&amp;#039;] = args.not_proofread or args[&amp;#039;not proofread&amp;#039;] or args[&amp;#039;not-proofread&amp;#039;] or 0,&lt;br /&gt;
		[&amp;#039;notext&amp;#039;] = args.notext or 0&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(statuses) do&lt;br /&gt;
		if v and not tonumber(v) then&lt;br /&gt;
			return error_message({[&amp;#039;message&amp;#039;] = &amp;#039;Expression error: &amp;#039; .. k .. &amp;#039; = &amp;#039; .. v .. &amp;#039; is not a number.&amp;#039;})&lt;br /&gt;
		end&lt;br /&gt;
		statuses[k] = tonumber(v) or 0&lt;br /&gt;
		if statuses[k] &amp;lt; 0 then&lt;br /&gt;
			return error_message({[&amp;#039;message&amp;#039;] = &amp;#039;Expression error: &amp;#039; .. k .. &amp;#039; = &amp;#039; .. statuses[k] .. &amp;#039; &amp;lt; 0.&amp;#039;})&lt;br /&gt;
		end&lt;br /&gt;
		if statuses[k] &amp;gt; statuses.total then&lt;br /&gt;
			return error_message({[&amp;#039;message&amp;#039;] = &amp;#039;Expression error: &amp;#039; .. k .. &amp;#039; = &amp;#039; .. statuses[k] .. &amp;#039; &amp;gt; total = &amp;#039; .. statuses.total .. &amp;#039;.&amp;#039;})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if statuses.total == 0 then&lt;br /&gt;
		return error_message({[&amp;#039;message&amp;#039;] = &amp;#039;Expression error: total is 0.&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local status_sum = statuses.validated + statuses.proofread + statuses.not_proofread + statuses.problematic + statuses.notext&lt;br /&gt;
	if status_sum &amp;gt; statuses.total then&lt;br /&gt;
		return error_message({[&amp;#039;message&amp;#039;] = &amp;#039;Expression error: page sum = &amp;#039; .. status_sum .. &amp;#039; &amp;gt; total = &amp;#039; .. statuses.total .. &amp;#039;.&amp;#039;})&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.existing_only or &amp;#039;no&amp;#039;) then&lt;br /&gt;
		statuses.total = status_sum&lt;br /&gt;
		statuses.missing = 0&lt;br /&gt;
	else&lt;br /&gt;
		statuses.missing = statuses.total - status_sum&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- status info&lt;br /&gt;
	local status_info = {&lt;br /&gt;
		{[&amp;#039;n&amp;#039;] = statuses.validated, [&amp;#039;id&amp;#039;] = &amp;#039;q4&amp;#039;},&lt;br /&gt;
		{[&amp;#039;n&amp;#039;] = statuses.proofread, [&amp;#039;id&amp;#039;] = &amp;#039;q3&amp;#039;},&lt;br /&gt;
		{[&amp;#039;n&amp;#039;] = statuses.problematic, [&amp;#039;id&amp;#039;] = &amp;#039;q2&amp;#039;},&lt;br /&gt;
		{[&amp;#039;n&amp;#039;] = statuses.not_proofread, [&amp;#039;id&amp;#039;] = &amp;#039;q1&amp;#039;},&lt;br /&gt;
		{[&amp;#039;n&amp;#039;] = statuses.notext, [&amp;#039;id&amp;#039;] = &amp;#039;q0&amp;#039;},&lt;br /&gt;
		{[&amp;#039;n&amp;#039;] = statuses.missing, [&amp;#039;id&amp;#039;] = &amp;#039;missing&amp;#039;}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	-- construct table params&lt;br /&gt;
	local title = &amp;quot;title = &amp;#039;&amp;quot; .. statuses.validated .. &amp;quot; برگهٔ هم‌سنجی‌شده، &amp;quot; .. statuses.proofread .. &amp;quot; برگهٔ نمونه‌خوانی‌شده، &amp;quot; .. statuses.problematic .. &amp;quot; برگهٔ مشکل‌دار ، &amp;quot; .. statuses.not_proofread .. &amp;quot; برگهٔ نمونه‌خوانی‌نشده، و &amp;quot; .. statuses.notext .. &amp;quot; برگهٔ بدون متن (&amp;quot; .. statuses.total .. &amp;quot; برگه در فهرست)&amp;#039;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local data_table = {&amp;quot;data-total=&amp;#039;&amp;quot; .. statuses.total .. &amp;quot;&amp;#039;&amp;quot;}&lt;br /&gt;
	for k, v in pairs(status_info) do&lt;br /&gt;
		table.insert(data_table, &amp;quot;data-&amp;quot; .. v[&amp;#039;id&amp;#039;] .. &amp;quot;=&amp;#039;&amp;quot; .. v[&amp;#039;n&amp;#039;] .. &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	local datas = table.concat(data_table, &amp;quot; &amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local style = make_style_string({[&amp;#039;height&amp;#039;] = args.height, [&amp;#039;max-width&amp;#039;] = args.width})&lt;br /&gt;
	&lt;br /&gt;
	-- construct table rows&lt;br /&gt;
	local row_table = {}&lt;br /&gt;
	for k, v in pairs(status_info) do&lt;br /&gt;
		if v[&amp;#039;n&amp;#039;] &amp;gt; 0 then&lt;br /&gt;
			table.insert(row_table, &amp;quot;&amp;lt;td class=&amp;#039;wst-progress-bar-&amp;quot; .. v[&amp;#039;id&amp;#039;] .. &amp;quot;&amp;#039; style=&amp;#039;width:&amp;quot; .. 100 * v[&amp;#039;n&amp;#039;] / statuses.total .. &amp;quot;%;&amp;#039;&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local rows = table.concat(row_table)&lt;br /&gt;
	&lt;br /&gt;
	return &amp;quot;&amp;lt;table class=&amp;#039;wst-progress-bar&amp;#039; &amp;quot; .. title .. &amp;quot; &amp;quot; .. datas .. &amp;quot; &amp;quot; .. style .. &amp;quot;&amp;gt;&amp;quot; .. &amp;quot;&amp;lt;tr&amp;gt;&amp;quot; .. rows .. &amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
For calling from template&lt;br /&gt;
]=]&lt;br /&gt;
function p.progress_bar(frame)&lt;br /&gt;
	return p._progress_bar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Mojtabakd</name></author>
	</entry>
</feed>