<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.stiles.casa/index.php?action=history&amp;feed=atom&amp;title=Module%3APortal_maintenance_status</id>
	<title>Module:Portal maintenance status - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stiles.casa/index.php?action=history&amp;feed=atom&amp;title=Module%3APortal_maintenance_status"/>
	<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:Portal_maintenance_status&amp;action=history"/>
	<updated>2026-05-06T19:59:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://wiki.stiles.casa/index.php?title=Module:Portal_maintenance_status&amp;diff=5677&amp;oldid=prev</id>
		<title>Maxwells: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:Portal_maintenance_status&amp;diff=5677&amp;oldid=prev"/>
		<updated>2022-06-11T21:01:04Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&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;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:01, 11 June 2022&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key wikidb:diff::1.12:old-5676:rev-5677 --&gt;
&lt;/table&gt;</summary>
		<author><name>Maxwells</name></author>
	</entry>
	<entry>
		<id>https://wiki.stiles.casa/index.php?title=Module:Portal_maintenance_status&amp;diff=5676&amp;oldid=prev</id>
		<title>en&gt;Ymblanter: Protected &quot;Module:Portal maintenance status&quot;: High-risk Lua module: request at SW:RFPP ([Edit=Require autoconfirmed or confirmed access] (indefinite) [Move=Require autoconfirmed or confirmed access] (indefinite))</title>
		<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:Portal_maintenance_status&amp;diff=5676&amp;oldid=prev"/>
		<updated>2018-12-23T16:46:20Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/view/Module:Portal_maintenance_status&quot; title=&quot;Module:Portal maintenance status&quot;&gt;Module:Portal maintenance status&lt;/a&gt;&amp;quot;: &lt;a href=&quot;/index.php?title=Stiles_Wiki:High-risk_templates&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Stiles Wiki:High-risk templates (page does not exist)&quot;&gt;High-risk Lua module&lt;/a&gt;: request at &lt;a href=&quot;/index.php?title=Stiles_Wiki:RFPP&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Stiles Wiki:RFPP (page does not exist)&quot;&gt;SW:RFPP&lt;/a&gt; ([Edit=Require autoconfirmed or confirmed access] (indefinite) [Move=Require autoconfirmed or confirmed access] (indefinite))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function cleanupArgs(argsTable)&lt;br /&gt;
	local cleanArgs = {}&lt;br /&gt;
	for key, val in pairs(argsTable) do&lt;br /&gt;
		if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			val = val:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
			if val ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				cleanArgs[key] = val&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			cleanArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return cleanArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local content = {}&lt;br /&gt;
&lt;br /&gt;
function makeTemplatePattern(template)&lt;br /&gt;
	local first = string.sub(template, 1, 1)&lt;br /&gt;
	local rest = string.sub(template, 2)&lt;br /&gt;
	local pattern = mw.ustring.format(&amp;#039;%s[%s%s]%s%s&amp;#039;, &amp;#039;%{%{%s*&amp;#039;, mw.ustring.upper(first), mw.ustring.lower(first), rest, &amp;#039;%s*|?[^%}]*%}%}&amp;#039;)&lt;br /&gt;
	return pattern&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeParameterPattern(parameter)&lt;br /&gt;
	return mw.ustring.format(&amp;#039;%s%s%s%s&amp;#039;, &amp;#039;|%s*&amp;#039;, parameter, &amp;#039;%s*=%s*&amp;#039;, &amp;#039;([^|%}]*)&amp;#039;, &amp;#039;%s*[|%}]&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getMatchingTemplateWikitext(content, template, leadOnly)&lt;br /&gt;
	if leadOnly then&lt;br /&gt;
		content = mw.ustring.gsub(content, &amp;quot;%c%s*==.*&amp;quot;,&amp;quot;&amp;quot;) -- remove first ==Heading== and everything after it&lt;br /&gt;
	end&lt;br /&gt;
	for templateWikitext in mw.ustring.gmatch(content, &amp;#039;%b{}&amp;#039;) do&lt;br /&gt;
		local isCorrectTemplate = mw.ustring.match(templateWikitext, makeTemplatePattern(template))&lt;br /&gt;
		if isCorrectTemplate then&lt;br /&gt;
			return templateWikitext&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getSubjectPageContent(contentNamespaceNumber)&lt;br /&gt;
	local namespace = mw.site.namespaces[contentNamespaceNumber] [&amp;quot;name&amp;quot;]&lt;br /&gt;
	local talkTitle = mw.title.getCurrentTitle()&lt;br /&gt;
	if talkTitle.namespace ~= contentNamespaceNumber + 1 then&lt;br /&gt;
		return error(&amp;#039;Wrong namespace&amp;#039;, 0)&lt;br /&gt;
	end&lt;br /&gt;
	local subjectTitle = mw.title.new(namespace .. &amp;quot;:&amp;quot; .. talkTitle.text)&lt;br /&gt;
	return subjectTitle:getContent()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- historical function&lt;br /&gt;
--   Looks for {{Historical}} on a Stiles.casa Wiki_talk: page&amp;#039;s related project page.&lt;br /&gt;
--   Returns &amp;#039;yes&amp;#039; if found or &amp;#039;&amp;#039; (empty string) if not found, or an error if used in the wrong namespace.&lt;br /&gt;
p.historical = function(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local args = cleanupArgs(frame.args)&lt;br /&gt;
	local demo = args.demo and true or false&lt;br /&gt;
	local content&lt;br /&gt;
	if demo then&lt;br /&gt;
		local demoText = mw.ustring.gsub(args.demo, &amp;#039;%{%{%!%}%}&amp;#039;, &amp;#039;|&amp;#039;)&lt;br /&gt;
		content = &amp;#039;{{&amp;#039; .. demoText .. &amp;#039;}}&amp;#039;&lt;br /&gt;
		if args.demo2 then&lt;br /&gt;
			local demo2Text = mw.ustring.gsub(args.demo2, &amp;#039;%{%{%!%}%}&amp;#039;, &amp;#039;|&amp;#039;)&lt;br /&gt;
			content= portalContent  .. &amp;#039;{{&amp;#039; .. demo2Text .. &amp;#039;}}&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		content = getSubjectPageContent(4)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	content = mw.ustring.gsub(content, &amp;quot;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;quot;,&amp;quot;&amp;quot;) -- remove HTML comments&lt;br /&gt;
	content = mw.ustring.gsub(content, &amp;quot;%c%s*==.*&amp;quot;,&amp;quot;&amp;quot;) -- remove first ==Heading== and everything after it&lt;br /&gt;
	content = mw.ustring.gsub(content, &amp;quot;&amp;lt;noinclude&amp;gt;.-&amp;lt;/noinclude&amp;gt;&amp;quot;, &amp;quot;&amp;quot;) -- remove noinclude bits&lt;br /&gt;
&lt;br /&gt;
	local isHistorical = mw.ustring.match(content, makeTemplatePattern(&amp;#039;Historical&amp;#039;)) and true or false&lt;br /&gt;
	return isHistorical and &amp;#039;yes&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- featured function&lt;br /&gt;
--   Looks for {{Featured portal}} on a Portal_talk: page&amp;#039;s related portal page.&lt;br /&gt;
--   Returns &amp;#039;yes&amp;#039; if found or &amp;#039;&amp;#039; (empty string) if not found, or an error if used in the wrong namespace.&lt;br /&gt;
p.featured = function(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local args = cleanupArgs(frame.args)&lt;br /&gt;
	local demo = args.demo and true or false&lt;br /&gt;
	local content&lt;br /&gt;
	if demo then&lt;br /&gt;
		local demoText = mw.ustring.gsub(args.demo, &amp;#039;%{%{%!%}%}&amp;#039;, &amp;#039;|&amp;#039;)&lt;br /&gt;
		content = &amp;#039;{{&amp;#039; .. demoText .. &amp;#039;}}&amp;#039;&lt;br /&gt;
		if args.demo2 then&lt;br /&gt;
			local demo2Text = mw.ustring.gsub(args.demo2, &amp;#039;%{%{%!%}%}&amp;#039;, &amp;#039;|&amp;#039;)&lt;br /&gt;
			content= portalContent  .. &amp;#039;{{&amp;#039; .. demo2Text .. &amp;#039;}}&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		content = getSubjectPageContent(100)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	content = mw.ustring.gsub(content, &amp;quot;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;quot;,&amp;quot;&amp;quot;) -- remove HTML comments&lt;br /&gt;
	content = mw.ustring.gsub(content, &amp;quot;&amp;lt;noinclude&amp;gt;.-&amp;lt;/noinclude&amp;gt;&amp;quot;, &amp;quot;&amp;quot;) -- remove noinclude bits&lt;br /&gt;
&lt;br /&gt;
	local isFeatured = mw.ustring.match(content, makeTemplatePattern(&amp;#039;Featured portal&amp;#039;)) and true or false&lt;br /&gt;
	return isFeatured and &amp;#039;yes&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- main function&lt;br /&gt;
--   Looks for {{Portal maintenance status}} (or earlier deprecated templates) on a Portal_talk: page&amp;#039;s related portal page.&lt;br /&gt;
--   Returns an appropriate message string if found or &amp;#039;&amp;#039; (empty string) if not found, or an error if used in the wrong namespace.&lt;br /&gt;
p.main = function(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local args = cleanupArgs(frame.args)&lt;br /&gt;
	local demo = args.demo and true or false&lt;br /&gt;
	local portalContent&lt;br /&gt;
	if demo then&lt;br /&gt;
		local demoText = mw.ustring.gsub(args.demo, &amp;#039;%{%{%!%}%}&amp;#039;, &amp;#039;|&amp;#039;)&lt;br /&gt;
		portalContent = &amp;#039;{{&amp;#039; .. demoText .. &amp;#039;}}&amp;#039;&lt;br /&gt;
		if args.demo2 then&lt;br /&gt;
			local demo2Text = mw.ustring.gsub(args.demo2, &amp;#039;%{%{%!%}%}&amp;#039;, &amp;#039;|&amp;#039;)&lt;br /&gt;
			portalContent = portalContent  .. &amp;#039;{{&amp;#039; .. demo2Text .. &amp;#039;}}&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		portalContent = getSubjectPageContent(100)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local status = getMatchingTemplateWikitext(portalContent, &amp;#039;Portal maintenance status&amp;#039;) or getMatchingTemplateWikitext(portalContent, &amp;#039;Portal flag&amp;#039;)&lt;br /&gt;
	if not status then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local output = mw.ustring.sub(status, 0, -3) .. &amp;#039;|embed=yes}}&amp;#039; &lt;br /&gt;
	return frame:preprocess(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>en&gt;Ymblanter</name></author>
	</entry>
</feed>