<?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%3A%D8%B3%D8%B1%D8%B5%D9%81%D8%AD%D9%87</id>
	<title>پودمان:سرصفحه - تاریخچهٔ نسخه‌ها</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%3A%D8%B3%D8%B1%D8%B5%D9%81%D8%AD%D9%87"/>
	<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:%D8%B3%D8%B1%D8%B5%D9%81%D8%AD%D9%87&amp;action=history"/>
	<updated>2026-11-09T18:36:38Z</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:%D8%B3%D8%B1%D8%B5%D9%81%D8%AD%D9%87&amp;diff=129&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:%D8%B3%D8%B1%D8%B5%D9%81%D8%AD%D9%87&amp;diff=129&amp;oldid=prev"/>
		<updated>2026-11-04T00:53:37Z</updated>

		<summary type="html">&lt;p&gt;حذف فضای نام ناموجود&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fa&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;→ نسخهٔ قدیمی‌تر&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;نسخهٔ ۴ نوامبر ۲۰۲۶، ساعت ۰۰:۵۳&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l202&quot;&gt;خط ۲۰۲:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;خط ۲۰۲:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- translation header categories&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	-- translation header categories&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local isMainPage = ((current_title:inNamespaces(0&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, 114&lt;/del&gt;) and not current_title.isSubpage) or args[&#039;testing&#039;])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local isMainPage = ((current_title:inNamespaces(0) and not current_title.isSubpage) or args[&#039;testing&#039;])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if not args[&amp;#039;nocat&amp;#039;] and isMainPage then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if not args[&amp;#039;nocat&amp;#039;] and isMainPage then&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key sourcewiki:diff:1.41:old-113:rev-129:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Mojtabakd</name></author>
	</entry>
	<entry>
		<id>https://source.islamical.org/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:%D8%B3%D8%B1%D8%B5%D9%81%D8%AD%D9%87&amp;diff=113&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:%D8%B3%D8%B1%D8%B5%D9%81%D8%AD%D9%87&amp;diff=113&amp;oldid=prev"/>
		<updated>2026-11-03T23:43:32Z</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;--[=[&lt;br /&gt;
This is a module to implement logic for [[Template:Header]] and [[Template:Translation header]]&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
- centuries are defined as starting on XX01, but WS categorizes them as starting on XX00&lt;br /&gt;
-- check whether that&amp;#039;s a considered policy choice&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&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 yesno = require(&amp;#039;پودمان:Yesno&amp;#039;)&lt;br /&gt;
local getArgs = require(&amp;#039;پودمان:Arguments&amp;#039;).getArgs&lt;br /&gt;
local TableTools = require(&amp;#039;پودمان:TableTools&amp;#039;)&lt;br /&gt;
local parent_links = require(&amp;#039;پودمان:Auto parents&amp;#039;)._parent_links&lt;br /&gt;
&lt;br /&gt;
local construct_header = require(&amp;#039;پودمان:Header structure&amp;#039;).construct_header&lt;br /&gt;
local headerAttribution = require(&amp;#039;پودمان:Header/attribution&amp;#039;)&lt;br /&gt;
local headerLang = require(&amp;#039;پودمان:Header/lang&amp;#039;)&lt;br /&gt;
local construct_defaultsort = require(&amp;#039;پودمان:Header/sort&amp;#039;)._construct_defaultsort&lt;br /&gt;
local construct_year = require(&amp;#039;پودمان:Header/year&amp;#039;).construct_year&lt;br /&gt;
&lt;br /&gt;
local current_title = mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Wrap stylesheet in noexport div&lt;br /&gt;
]=]&lt;br /&gt;
local function get_noexport_stylesheet(template)&lt;br /&gt;
	return tostring(mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;ws-noexport&amp;#039;):wikitext(mw.getCurrentFrame():extensionTag(&amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src = template .. &amp;#039;/styles.css&amp;#039;})))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Get badge if any&lt;br /&gt;
]=]&lt;br /&gt;
local function badge()&lt;br /&gt;
	return require(&amp;#039;پودمان:Edition&amp;#039;).badge({args = {category = &amp;#039;1&amp;#039;, indicator = &amp;#039;1&amp;#039;}})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Detect explicit formatting in fields like &amp;#039;section&amp;#039; and &amp;#039;title&amp;#039;&lt;br /&gt;
]=]&lt;br /&gt;
local function explicit_formatting(str)&lt;br /&gt;
	return str and (string.match(str, &amp;quot;\&amp;#039;\&amp;#039;\&amp;#039;?&amp;quot;) or string.match(str, &amp;#039;&amp;lt;%s*/?%s*[iIbB]%s*&amp;gt;&amp;#039;))&lt;br /&gt;
	-- add more cases here or come up with a less silly way to do things&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function check_non_existent_author_pages(args, categories, checkArgs)&lt;br /&gt;
	-- check for cases that aren&amp;#039;t supposed to produce a valid link&lt;br /&gt;
&lt;br /&gt;
	local param = checkArgs.param&lt;br /&gt;
	local tracking_cat = checkArgs.tracking_cat or &amp;#039;آثار با صفحهٔ پدیدآورندهٔ ناموجود&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if not param or not args[param] or yesno(args[param .. &amp;#039;-nolink&amp;#039;]) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lower_arg = string.lower(args[param])&lt;br /&gt;
	local attr_data = headerAttribution.attr_data[param] or headerAttribution.attr_data[string.gsub(param, &amp;#039;section%-&amp;#039;, &amp;#039;&amp;#039;)]&lt;br /&gt;
	if attr_data and attr_data[&amp;#039;special_cases&amp;#039;] and attr_data[&amp;#039;special_cases&amp;#039;][lower_arg] then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- check if page exists&lt;br /&gt;
	local target = mw.title.makeTitle(&amp;#039;پدیدآورنده&amp;#039;, args[param])&lt;br /&gt;
	-- expensive function!&lt;br /&gt;
	if not target or not target.exists then&lt;br /&gt;
		table.insert(categories, tracking_cat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function construct_categories(args, argsWithBlanks)&lt;br /&gt;
	local categories = {}&lt;br /&gt;
&lt;br /&gt;
	-- categorize subpages&lt;br /&gt;
	local title = current_title&lt;br /&gt;
	local parent_exists = false&lt;br /&gt;
	while title.isSubpage and not parent_exists do&lt;br /&gt;
		title = mw.title.new(title.baseText, title.nsText)&lt;br /&gt;
		parent_exists = title.exists&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if parent_exists and title:inNamespaces(0) then&lt;br /&gt;
		table.insert(categories, &amp;#039;زیرصفحه‌ها&amp;#039;)&lt;br /&gt;
	elseif parent_exists then&lt;br /&gt;
		table.insert(categories, &amp;#039;زیرصفحه‌های &amp;#039; .. title.nsText)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- add categories from the categories parameter&lt;br /&gt;
	local manual_categories = (args.categories and mw.text.split(args.categories, &amp;#039;%s*/%s*&amp;#039;, false)) or {}&lt;br /&gt;
	local using_cat = false&lt;br /&gt;
	for i, category in ipairs(manual_categories) do&lt;br /&gt;
		local cat = mw.text.trim(category)&lt;br /&gt;
		if cat ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			table.insert(categories, cat)&lt;br /&gt;
			using_cat = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if using_cat then&lt;br /&gt;
		table.insert(categories, &amp;#039;آثار دارای پارامتر رده‌ها&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local known_override_types = {&lt;br /&gt;
		[&amp;#039;default&amp;#039;] = &amp;#039;نوع مشارکت‌کننده&amp;#039;,&lt;br /&gt;
		[&amp;#039;author&amp;#039;] = &amp;#039;پدیدآورنده&amp;#039;,&lt;br /&gt;
		[&amp;#039;translator&amp;#039;] = &amp;#039;مترجم&amp;#039;,&lt;br /&gt;
		[&amp;#039;section-author&amp;#039;] = &amp;#039;مشارکت‌کننده&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	for k, v in pairs(argsWithBlanks) do&lt;br /&gt;
		-- Check for numerical parameters (which shouldn&amp;#039;t be used)&lt;br /&gt;
		if type(k) == &amp;#039;number&amp;#039; then&lt;br /&gt;
			table.insert(categories, &amp;#039;سرصفحه‌های دارای آرگومان‌های عددی&amp;#039;)&lt;br /&gt;
		-- Check for &amp;#039;override-&amp;#039; parameters&lt;br /&gt;
		elseif string.match(k, &amp;#039;^override%-&amp;#039;) then&lt;br /&gt;
			local contrib_type = string.gsub(k, &amp;#039;^override%-&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
			contrib_type = string.gsub(contrib_type, &amp;#039;%d*$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
			table.insert(categories, &amp;#039;صفحه‌های دارای جایگزین &amp;#039; .. (known_override_types[contrib_type] or known_override_types[&amp;#039;default&amp;#039;]))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- check contributor parameters&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;#039;section-author&amp;#039;] then&lt;br /&gt;
		table.insert(categories, &amp;#039;صفحه‌های دارای مشارکت‌کننده&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local editor = args[&amp;#039;override-editor&amp;#039;] or args[&amp;#039;editor&amp;#039;]&lt;br /&gt;
	if editor and not args[&amp;#039;nocat&amp;#039;] then&lt;br /&gt;
		editor = string.lower(editor)&lt;br /&gt;
		-- Persian equivalents of the English values above are also recognised&lt;br /&gt;
		if editor == &amp;#039;unknown&amp;#039; or editor == &amp;#039;?&amp;#039; or editor == &amp;#039;ناشناس&amp;#039; or editor == &amp;#039;؟&amp;#039; or editor == &amp;#039;نامشخص&amp;#039; then&lt;br /&gt;
			table.insert(categories, &amp;#039;آثار با ویراستار ناشناس&amp;#039;)&lt;br /&gt;
		elseif editor == &amp;#039;not mentioned&amp;#039; or editor == &amp;#039;ذکر نشده&amp;#039; or editor == &amp;#039;ذکرنشده&amp;#039; then&lt;br /&gt;
			table.insert(categories, &amp;#039;آثار با ویراستار ذکرنشده&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local translator = args[&amp;#039;override-translator&amp;#039;] or args[&amp;#039;translator&amp;#039;]&lt;br /&gt;
	if translator and not args[&amp;#039;nocat&amp;#039;] then&lt;br /&gt;
		translator = string.lower(translator)&lt;br /&gt;
		table.insert(categories, &amp;#039;صفحه‌های دارای مترجم&amp;#039;)&lt;br /&gt;
		if translator == &amp;#039;unknown&amp;#039; or translator == &amp;#039;not mentioned&amp;#039; or translator == &amp;#039;?&amp;#039; or translator == &amp;#039;ناشناس&amp;#039; or translator == &amp;#039;ذکر نشده&amp;#039; or translator == &amp;#039;ذکرنشده&amp;#039; or translator == &amp;#039;؟&amp;#039; then&lt;br /&gt;
			table.insert(categories, &amp;#039;ترجمه‌های بدون اطلاعات مترجم&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local author = args[&amp;#039;override-author&amp;#039;] or args[&amp;#039;author&amp;#039;]&lt;br /&gt;
	if author and (string.lower(author) == &amp;#039;unknown&amp;#039; or author == &amp;#039;ناشناس&amp;#039;) and not args[&amp;#039;nocat&amp;#039;] then&lt;br /&gt;
		if args.template_name == &amp;#039;سرصفحه ترجمه&amp;#039; then&lt;br /&gt;
			table.insert(categories, &amp;#039;ترجمه‌های آثار ناشناس&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(categories, &amp;#039;متون ناشناس&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- check for non-existent contributor pages&lt;br /&gt;
	if current_title:inNamespaces(0, 0) or args.testing then&lt;br /&gt;
		local params_to_check = {&lt;br /&gt;
			{param = &amp;#039;author&amp;#039;},&lt;br /&gt;
			{param = &amp;#039;editor&amp;#039;},&lt;br /&gt;
			{param = &amp;#039;translator&amp;#039;},&lt;br /&gt;
			{param = &amp;#039;composer&amp;#039;, tracking_cat = &amp;#039;آثار با صفحهٔ آهنگساز ناموجود&amp;#039;},&lt;br /&gt;
			{param = &amp;#039;illustrator&amp;#039;, tracking_cat = &amp;#039;آثار با صفحهٔ تصویرگر ناموجود&amp;#039;}&lt;br /&gt;
		}&lt;br /&gt;
		for k, v in pairs(params_to_check) do&lt;br /&gt;
			check_non_existent_author_pages(args, categories, v)&lt;br /&gt;
			check_non_existent_author_pages(args, categories, {param = &amp;#039;section-&amp;#039; .. v.param, tracking_cat = v.tracking_cat})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;#039;shortcut&amp;#039;] then&lt;br /&gt;
		if current_title:inNamespaces(0) then&lt;br /&gt;
			table.insert(categories, &amp;#039;صفحه‌های فضای نام اصلی دارای میان‌بر&amp;#039;)&lt;br /&gt;
		elseif current_title:inNamespaces(114) then&lt;br /&gt;
			table.insert(categories, &amp;#039;صفحه‌های فضای نام ترجمه دارای میان‌بر&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;#039;noyear&amp;#039;] then&lt;br /&gt;
		table.insert(categories, &amp;#039;صفحه‌های دارای پارامتر noyear&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;#039;noyearcat&amp;#039;] then&lt;br /&gt;
		table.insert(categories, &amp;#039;صفحه‌های دارای پارامتر noyearcat&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;#039;nolanguagecat&amp;#039;] then&lt;br /&gt;
		table.insert(categories, &amp;#039;صفحه‌های دارای پارامتر nolanguagecat&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;#039;cover&amp;#039;] then&lt;br /&gt;
		table.insert(categories, &amp;#039;صفحه‌های دارای جلد در خروجی&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- sanity/maintenance checks on various parameters&lt;br /&gt;
&lt;br /&gt;
	-- allow-explicit-formatting parameter suppresses this check&lt;br /&gt;
	-- used by, for example, [[Template:Versions]]&lt;br /&gt;
	if not args[&amp;#039;allow-explicit-formatting&amp;#039;] and (explicit_formatting(args[&amp;#039;title&amp;#039;]) or explicit_formatting(args[&amp;#039;section&amp;#039;])) then&lt;br /&gt;
		table.insert(categories, &amp;#039;صفحه‌های دارای قالب‌بندی صریح در پارامترهای سرصفحه&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- translation header categories&lt;br /&gt;
	local isMainPage = ((current_title:inNamespaces(0, 114) and not current_title.isSubpage) or args[&amp;#039;testing&amp;#039;])&lt;br /&gt;
&lt;br /&gt;
	if not args[&amp;#039;nocat&amp;#039;] and isMainPage then&lt;br /&gt;
		local cat_works_start = &amp;#039;آثار نوشته‌شده به زبان&amp;#039;&lt;br /&gt;
		local cat_translations_start = &amp;#039;ترجمه‌ها&amp;#039;&lt;br /&gt;
&lt;br /&gt;
		if args.is_translation then&lt;br /&gt;
			cat_works_start = &amp;#039;ترجمه‌های ویکی‌نبشته از آثاری به زبان&amp;#039;&lt;br /&gt;
			cat_translations_start = &amp;#039;ترجمه‌های ویکی‌نبشته&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not args[&amp;#039;nolanguagecat&amp;#039;] then&lt;br /&gt;
			if args[&amp;#039;languages&amp;#039;] then&lt;br /&gt;
				for i, lang in ipairs(args[&amp;#039;languages&amp;#039;]) do&lt;br /&gt;
					table.insert(categories, headerLang.language_category_name(cat_works_start, lang, args.is_translation))&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if args[&amp;#039;interwiki-prefix&amp;#039;] then&lt;br /&gt;
				local iw_prefix_parts = mw.text.split(args[&amp;#039;interwiki-prefix&amp;#039;], &amp;#039;:&amp;#039;, true)&lt;br /&gt;
				table.insert(categories, headerLang.language_category_name(cat_works_start, iw_prefix_parts[1], args.is_translation))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not args[&amp;#039;languages&amp;#039;] and args[&amp;#039;language-required&amp;#039;] then&lt;br /&gt;
			table.insert(categories, cat_translations_start .. &amp;#039; بدون زبان اصلی&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.template_name == &amp;#039;سرصفحه ترجمه&amp;#039; and not args.original then&lt;br /&gt;
			table.insert(categories, &amp;#039;ترجمه‌های ویکی‌نبشته بدون منبع اصلی&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- detect inappropriate template use&lt;br /&gt;
	--[=[&lt;br /&gt;
	if (args[&amp;#039;template-name&amp;#039;] ~= &amp;#039;Translation header&amp;#039; and translator and string.lower(translator) == &amp;#039;wikisource&amp;#039;)&lt;br /&gt;
		or (current_title:inNamespaces(114) and args[&amp;#039;template-name&amp;#039;] ~= &amp;#039;Translation header&amp;#039;) then&lt;br /&gt;
		-- tracking category for pages that should be using translation header?&lt;br /&gt;
	end&lt;br /&gt;
	if current_title:inNamespaces(0) and args[&amp;#039;template-name&amp;#039;] == &amp;#039;Translation header&amp;#039; then&lt;br /&gt;
		-- tracking category for translation header in mainspace?&lt;br /&gt;
	end&lt;br /&gt;
	]=]&lt;br /&gt;
&lt;br /&gt;
	categories = TableTools.removeDuplicates(categories)&lt;br /&gt;
&lt;br /&gt;
	local category_links = {}&lt;br /&gt;
	for k, v in pairs(categories) do&lt;br /&gt;
		table.insert(category_links, &amp;#039;[[رده:&amp;#039; .. v .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local category_link_text = table.concat(category_links)&lt;br /&gt;
	if args.testing then&lt;br /&gt;
		category_link_text = mw.text.nowiki(category_link_text) .. category_link_text&lt;br /&gt;
	end&lt;br /&gt;
	return category_link_text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
For debugging&lt;br /&gt;
]=]&lt;br /&gt;
--[=[&lt;br /&gt;
function p.construct_categories(args)&lt;br /&gt;
	return construct_categories(args, args)&lt;br /&gt;
end&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Assemble the title&lt;br /&gt;
]=]&lt;br /&gt;
local function header_title(args)&lt;br /&gt;
	local title = args.title or &amp;#039;&amp;#039;&lt;br /&gt;
	local titleSpan = tostring(mw.html.create(&amp;#039;span&amp;#039;):addClass(&amp;#039;wst-header-title-text&amp;#039;):wikitext(title))&lt;br /&gt;
&lt;br /&gt;
	local year = construct_year(args)&lt;br /&gt;
	local attr = headerAttribution.construct_attributions(args)&lt;br /&gt;
	local section = headerAttribution.construct_section(args)&lt;br /&gt;
&lt;br /&gt;
	if attr ~= &amp;#039;&amp;#039; and title ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		attr = tostring(mw.html.create(&amp;#039;br&amp;#039;):addClass(&amp;#039;wst-header-title-break&amp;#039;)) .. attr&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat({titleSpan, year, attr, section})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
[[Template:Header]]&lt;br /&gt;
]=]&lt;br /&gt;
function p._header(args, argsWithBlanks)&lt;br /&gt;
	argsWithBlanks = argsWithBlanks or args&lt;br /&gt;
&lt;br /&gt;
	-- aliases&lt;br /&gt;
	local dup_cat&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
&lt;br /&gt;
	local aliases = {&lt;br /&gt;
		[&amp;#039;section-author&amp;#039;] = &amp;#039;contributor&amp;#039;,&lt;br /&gt;
		[&amp;#039;section-translator&amp;#039;] = &amp;#039;contributing%-translator&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local newkey = string.lower(string.gsub(string.gsub(tostring(k), &amp;#039;_&amp;#039;, &amp;#039;-&amp;#039;), &amp;#039; &amp;#039;, &amp;#039;-&amp;#039;))&lt;br /&gt;
		for arg, alias in pairs(aliases) do&lt;br /&gt;
			newkey = string.gsub(newkey, alias, arg)&lt;br /&gt;
		end&lt;br /&gt;
		if newkey ~= tostring(k) then&lt;br /&gt;
			if argsWithBlanks[newkey] then&lt;br /&gt;
				dup_cat = &amp;#039;صفحه‌های دارای آرگومان‌های تکراری در فراخوانی الگو&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			if not args[newkey] then&lt;br /&gt;
				newArgs[newkey] = newArgs[newkey] or v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if newkey == &amp;#039;testing&amp;#039; or newkey == &amp;#039;nocat&amp;#039; or newkey == &amp;#039;nolanguagecat&amp;#039; or newkey == &amp;#039;language-required&amp;#039; or string.match(newkey, &amp;#039;%-nolink$&amp;#039;) then&lt;br /&gt;
			newArgs[newkey] = newArgs[newkey] or yesno(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(newArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
		argsWithBlanks[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	if dup_cat then&lt;br /&gt;
		table.insert(categories, dup_cat)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	args.sortkey = args.defaultsort or args.sortkey&lt;br /&gt;
&lt;br /&gt;
	-- default values&lt;br /&gt;
	args.template_name = args.template_name or &amp;#039;سرصفحه&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if args.testing == nil then&lt;br /&gt;
		args.testing = current_title.fullText == &amp;#039;الگو:سرصفحه/testcases&amp;#039; or current_title.fullText == &amp;#039;الگو:سرصفحه ترجمه/testcases&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- noyearcat has different behavior for nil and false&lt;br /&gt;
	args.noyearcat = args.noyearcat or args.nocat == true or nil&lt;br /&gt;
&lt;br /&gt;
	local language_res = headerLang.get_languages(args)&lt;br /&gt;
	args.languages = language_res.languages&lt;br /&gt;
	args.language_name = language_res.language_name&lt;br /&gt;
&lt;br /&gt;
	local section_language_res = headerLang.get_languages(args, &amp;#039;section&amp;#039;)&lt;br /&gt;
	args.section_languages = section_language_res.languages&lt;br /&gt;
	args.section_language_name = section_language_res.language_name&lt;br /&gt;
&lt;br /&gt;
	if not args[&amp;#039;interwiki-prefix&amp;#039;] and args[&amp;#039;languages&amp;#039;] then&lt;br /&gt;
		if #(args[&amp;#039;languages&amp;#039;]) &amp;gt; 1 then&lt;br /&gt;
			args[&amp;#039;interwiki-prefix&amp;#039;] = &amp;#039;mul&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			args[&amp;#039;interwiki-prefix&amp;#039;] = args[&amp;#039;languages&amp;#039;][1]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args[&amp;#039;interwiki-prefix&amp;#039;] then&lt;br /&gt;
		args[&amp;#039;interwiki-prefix&amp;#039;] = headerLang[&amp;#039;interwiki_prefixes&amp;#039;][args[&amp;#039;interwiki-prefix&amp;#039;]] or args[&amp;#039;interwiki-prefix&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- add values to argsWithBlanks&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if not argsWithBlanks[k] then&lt;br /&gt;
			argsWithBlanks[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- default values for title and section (allow override by setting to blank)&lt;br /&gt;
	if not argsWithBlanks[&amp;#039;title&amp;#039;] then&lt;br /&gt;
		args[&amp;#039;title&amp;#039;] = parent_links({})&lt;br /&gt;
		argsWithBlanks[&amp;#039;title&amp;#039;] = args[&amp;#039;title&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
	if not argsWithBlanks[&amp;#039;section&amp;#039;] and current_title.isSubpage then&lt;br /&gt;
		args[&amp;#039;section&amp;#039;] = current_title.subpageText&lt;br /&gt;
		argsWithBlanks[&amp;#039;section&amp;#039;] = args[&amp;#039;section&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- header args&lt;br /&gt;
&lt;br /&gt;
	args.pre_container = badge()&lt;br /&gt;
	args.header_class = &amp;#039;wst-header ws-header ws-noexport noprint dynlayout-exempt &amp;#039; .. (args.header_class or &amp;#039;&amp;#039;)&lt;br /&gt;
	args.main_class = &amp;#039;headertemplate&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- title&lt;br /&gt;
	args.main_title = header_title(args)&lt;br /&gt;
&lt;br /&gt;
	-- FIXME: just use Wikidata instead of interwiki links?&lt;br /&gt;
	local interwiki = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.template_name == &amp;#039;سرصفحه ترجمه&amp;#039; and args[&amp;#039;interwiki-prefix&amp;#039;] then&lt;br /&gt;
		interwiki = tostring(mw.html.create(&amp;#039;span&amp;#039;):addClass(&amp;#039;interwiki-info&amp;#039;):attr(&amp;#039;id&amp;#039;, args[&amp;#039;interwiki-prefix&amp;#039;]):attr(&amp;#039;title&amp;#039;, &amp;#039;(اصلی)&amp;#039;))&lt;br /&gt;
		if args.original then&lt;br /&gt;
			-- general interwiki link&lt;br /&gt;
			interwiki = interwiki .. &amp;#039;[[&amp;#039; .. args[&amp;#039;interwiki-prefix&amp;#039;] .. &amp;#039;:&amp;#039; .. args.original .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- set defaultsort tracking categories&lt;br /&gt;
	args.equalsortcat = &amp;#039;[[رده:&amp;#039; .. &amp;#039;سرصفحه‌های دارای DefaultSort برابر با عنوان صفحه&amp;#039; .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	args.diffsortcat = &amp;#039;[[رده:&amp;#039; .. &amp;#039;سرصفحه‌های اعمال‌کنندهٔ کلید DefaultSort&amp;#039; .. &amp;#039;]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	args.post_notes = table.concat({&lt;br /&gt;
		headerAttribution.construct_microformat(args),&lt;br /&gt;
		construct_categories(args, argsWithBlanks),&lt;br /&gt;
		construct_defaultsort(args),&lt;br /&gt;
		interwiki&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Check if page has copyvio div that needs closing&lt;br /&gt;
	local copyvio_close = &amp;#039;&amp;#039;&lt;br /&gt;
	local page_content = mw.title.getCurrentTitle():getContent()&lt;br /&gt;
	if page_content and&lt;br /&gt;
	   page_content:find(&amp;#039;&amp;lt;div id=&amp;quot;copyvio&amp;quot;&amp;#039;, 1, true) and&lt;br /&gt;
	   not page_content:find(&amp;#039;{{copyvio/e}}&amp;#039;, 1, true) and&lt;br /&gt;
	   not page_content:find(&amp;#039;{{cv/e}}&amp;#039;, 1, true) then&lt;br /&gt;
	    copyvio_close = &amp;#039;{{copyvio/e}}&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return get_noexport_stylesheet(&amp;#039;header&amp;#039;) .. construct_header(args) .. copyvio_close&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.header(frame)&lt;br /&gt;
	return p._header(&lt;br /&gt;
		getArgs(frame),&lt;br /&gt;
		getArgs(frame, {removeBlanks = false})&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
[[Template:Translation header]]&lt;br /&gt;
]=]&lt;br /&gt;
function p._translation_header(args, argsWithBlanks)&lt;br /&gt;
	argsWithBlanks = argsWithBlanks or args&lt;br /&gt;
&lt;br /&gt;
	args.header_class = &amp;#039;wst-translation-header&amp;#039;&lt;br /&gt;
	args.template_name = &amp;#039;سرصفحه ترجمه&amp;#039;&lt;br /&gt;
	args.is_translation = true&lt;br /&gt;
	args.notes_class = &amp;#039;header-notes&amp;#039;&lt;br /&gt;
	args[&amp;#039;language-required&amp;#039;] = true&lt;br /&gt;
&lt;br /&gt;
	return get_noexport_stylesheet(&amp;#039;سرصفحه ترجمه&amp;#039;) .. p._header(args, argsWithBlanks)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.translation_header(frame)&lt;br /&gt;
	return p._translation_header(&lt;br /&gt;
		getArgs(frame),&lt;br /&gt;
		getArgs(frame, {removeBlanks = false})&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Mojtabakd</name></author>
	</entry>
</feed>