<?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%3AHeader_structure</id>
	<title>پودمان:Header structure - تاریخچهٔ نسخه‌ها</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%3AHeader_structure"/>
	<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:Header_structure&amp;action=history"/>
	<updated>2026-11-10T00:09:44Z</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:Header_structure&amp;diff=118&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:Header_structure&amp;diff=118&amp;oldid=prev"/>
		<updated>2026-11-04T00:41:14Z</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 header templates&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 getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local plain_sister = require(&amp;#039;Module:Plain sister&amp;#039;)._plain_sister&lt;br /&gt;
&lt;br /&gt;
-- return true if any value in list is not nil or empty in args&lt;br /&gt;
-- (nil means not present; empty string is not nil)&lt;br /&gt;
local function has_any_arg(args, list)&lt;br /&gt;
	for k, v in pairs(list) do&lt;br /&gt;
		if args[v] ~= nil then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Construct the main block&lt;br /&gt;
]=]&lt;br /&gt;
local function construct_main_block(args, prefix)&lt;br /&gt;
	-- header and tracking categories&lt;br /&gt;
	local main_div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wst-header-mainblock&amp;#039;)&lt;br /&gt;
		:addClass(prefix .. &amp;#039;-mainblock&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- If an extra main class was provided, add it&lt;br /&gt;
	-- TODO: Is this used? Is it needed?&lt;br /&gt;
	if args.main_class ~= nil and args.main_class ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		main_div:addClass(args.main_class)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- &amp;quot;Previous&amp;quot; field&lt;br /&gt;
	local prev_div = main_div:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wst-header-back&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;searchaux&amp;#039;)&lt;br /&gt;
		:addClass(prefix .. &amp;#039;-back&amp;#039;)&lt;br /&gt;
	:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;wst-header-back-arrow&amp;#039;):wikitext(&amp;#039;►&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
	:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;wst-header-back-link&amp;#039;):wikitext(args[&amp;#039;previous&amp;#039;])&lt;br /&gt;
		:done()&lt;br /&gt;
	if args[&amp;#039;previous&amp;#039;] == nil or args[&amp;#039;previous&amp;#039;] == &amp;quot;&amp;quot; then&lt;br /&gt;
		prev_div:addClass(&amp;#039;wst-header-nav-empty&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Image cell (local)&lt;br /&gt;
	if args.image and args.image ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local image_div = main_div:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;wst-header-image&amp;#039;)&lt;br /&gt;
			:addClass(prefix .. &amp;#039;-image&amp;#039;)&lt;br /&gt;
			:wikitext(args.image)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- The central cell&lt;br /&gt;
	local center_div = main_div:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wst-header-central-cell&amp;#039;)&lt;br /&gt;
		:addClass(prefix .. &amp;#039;-central-cell&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- Special case to manage exceptional formatting in disambiguation-like&lt;br /&gt;
	-- pages; not otherwise documented&lt;br /&gt;
	local pretitle = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.pretitle then&lt;br /&gt;
		local br = &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;&lt;br /&gt;
		if not args.main_title or args.main_title == &amp;#039;&amp;#039; then&lt;br /&gt;
			br = &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		center_div:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;wst-header-pretitle&amp;#039;)&lt;br /&gt;
			:wikitext(args.pretitle .. br)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	center_div:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wst-header-title&amp;#039;)&lt;br /&gt;
		:addClass(prefix .. &amp;#039;-title&amp;#039;)&lt;br /&gt;
		:wikitext(args.main_title or &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- &amp;quot;Next&amp;quot; field&lt;br /&gt;
	local next_div = main_div:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wst-header-forward&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;searchaux&amp;#039;)&lt;br /&gt;
		:addClass(prefix .. &amp;#039;-forward&amp;#039;)&lt;br /&gt;
	:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;wst-header-forward-link&amp;#039;):wikitext(args[&amp;#039;next&amp;#039;])&lt;br /&gt;
		:done()&lt;br /&gt;
	:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;wst-header-forward-arrow&amp;#039;):wikitext(&amp;#039;◄&amp;#039;)&lt;br /&gt;
		:done()&lt;br /&gt;
	if args[&amp;#039;next&amp;#039;] == nil or args[&amp;#039;next&amp;#039;] == &amp;quot;&amp;quot; then&lt;br /&gt;
		next_div:addClass(&amp;#039;wst-header-nav-empty&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(main_div)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Construct the notes block&lt;br /&gt;
]=]&lt;br /&gt;
local function construct_notes_block(args, prefix)&lt;br /&gt;
	local main_div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wst-header-notes&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;header_notes&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;searchaux&amp;#039;)&lt;br /&gt;
		:addClass(prefix .. &amp;#039;-notes&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- If an extra main class was provided, add it&lt;br /&gt;
	-- TODO: Is this used? Is it needed?&lt;br /&gt;
	if args.notes_class ~= nil and args.notes_class ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		main_div:addClass(args.notes_class)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Left-floated content has to come first, or it may float below the sisters.&lt;br /&gt;
	local notes_left_content = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.notes_left_content then&lt;br /&gt;
		local notes_left_content_div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;wst-header-left&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;header_notes_left_content&amp;#039;)&lt;br /&gt;
			:addClass(prefix .. &amp;#039;-left&amp;#039;)&lt;br /&gt;
			:wikitext(args.notes_left_content)&lt;br /&gt;
		notes_left_content = tostring(notes_left_content_div)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local shortcut = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.shortcut then&lt;br /&gt;
		shortcut = mw.getCurrentFrame():expandTemplate {&lt;br /&gt;
			title = &amp;#039;shortcut&amp;#039;,&lt;br /&gt;
			args = {args.shortcut}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local notes_content = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.notes then&lt;br /&gt;
		args.notes = mw.getCurrentFrame():preprocess(args.notes)&lt;br /&gt;
		-- linebreaks are so notes get paragraph formatting&lt;br /&gt;
		local notes_content_div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;wst-header-content&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;header_notes_content&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;wst-header-notes-content&amp;#039;)&lt;br /&gt;
			:addClass(prefix .. &amp;#039;-notes-content&amp;#039;)&lt;br /&gt;
			:wikitext(&amp;#039;\n&amp;#039; .. args.notes .. &amp;#039;\n&amp;#039;)&lt;br /&gt;
		notes_content = tostring(notes_content_div)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sister = plain_sister(args)&lt;br /&gt;
	&lt;br /&gt;
	if not sister and not args.notes and not args.notes_left_content then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring(main_div:wikitext(notes_left_content .. (sister or &amp;#039;&amp;#039;) .. shortcut .. notes_content))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Construct header&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
function p.construct_header(args)&lt;br /&gt;
	-- Make sure the main identifying class for the client template is set&lt;br /&gt;
	local prefix = &amp;quot;wst-unknown&amp;quot;&lt;br /&gt;
	if args.template ~= nil and args.template ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		prefix = &amp;quot;wst-&amp;quot; .. args.template&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local headerContainer = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;quot;ws-header&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;wst-header-structure&amp;quot;)&lt;br /&gt;
		:addClass(prefix)&lt;br /&gt;
&lt;br /&gt;
	-- header_class from client modules, class from individual uses&lt;br /&gt;
	if args.header_class then&lt;br /&gt;
		headerContainer:addClass(args.header_class)&lt;br /&gt;
	end&lt;br /&gt;
	if args.class then&lt;br /&gt;
		headerContainer:addClass(args.class)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	headerContainer:wikitext(table.concat({&lt;br /&gt;
		(args.pre_main or &amp;#039;&amp;#039;),&lt;br /&gt;
		construct_main_block(args, prefix),&lt;br /&gt;
		construct_notes_block(args, prefix),&lt;br /&gt;
		(args.post_notes or &amp;#039;&amp;#039;)&lt;br /&gt;
	}))&lt;br /&gt;
	&lt;br /&gt;
	local stylesheet = mw.getCurrentFrame():extensionTag(&amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src = &amp;#039;Header structure/styles.css&amp;#039;})&lt;br /&gt;
	&lt;br /&gt;
	return stylesheet .. (args.pre_container or &amp;#039;&amp;#039;) .. tostring(headerContainer)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.header_structure(frame)&lt;br /&gt;
	return p.construct_header(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>