<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://the.satanic.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ADemo</id>
	<title>Module:Demo - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the.satanic.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ADemo"/>
	<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:Demo&amp;action=history"/>
	<updated>2026-04-20T01:23:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Module:Demo&amp;diff=11074&amp;oldid=prev</id>
		<title>WikiGOD at 05:55, 2 May 2021</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:Demo&amp;diff=11074&amp;oldid=prev"/>
		<updated>2021-05-02T05:55:57Z</updated>

		<summary type="html">&lt;p&gt;&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 05:55, 2 May 2021&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-l4&quot;&gt;Line 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&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;-- &amp;lt;/pre&amp;gt;&amp;lt;nowiki&amp;gt;&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;-- &amp;lt;/pre&amp;gt;&amp;lt;nowiki&amp;gt;&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;div&gt;local p = {}&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;local p = {}&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 getArgs = require(&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dev&lt;/del&gt;:Arguments&quot;).getArgs&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 getArgs = require(&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;:Arguments&quot;).getArgs&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 frameTools = require(&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dev&lt;/del&gt;:FrameTools&quot;)&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 frameTools = require(&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;:FrameTools&quot;)&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;--creates a frame object that cannot access any of the parent&amp;#039;s args&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;--creates a frame object that cannot access any of the parent&amp;#039;s args&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key zzegtzyr_mw19226-mwjf_:diff:1.41:old-10892:rev-11074:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiGOD</name></author>
	</entry>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Module:Demo&amp;diff=10892&amp;oldid=prev</id>
		<title>WikiGOD: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:Demo&amp;diff=10892&amp;oldid=prev"/>
		<updated>2021-04-30T02:23:52Z</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 02:23, 30 April 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key zzegtzyr_mw19226-mwjf_:diff:1.41:old-10891:rev-10892 --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiGOD</name></author>
	</entry>
	<entry>
		<id>https://the.satanic.wiki/index.php?title=Module:Demo&amp;diff=10891&amp;oldid=prev</id>
		<title>Mediawiki&gt;Cqm at 14:26, 19 January 2016</title>
		<link rel="alternate" type="text/html" href="https://the.satanic.wiki/index.php?title=Module:Demo&amp;diff=10891&amp;oldid=prev"/>
		<updated>2016-01-19T14:26:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- &amp;lt;pre&amp;gt; Description - Shows a demo of a wikitext&lt;br /&gt;
-- Syntax : {{#invoke:demo|&amp;lt;nowiki&amp;gt;wikitext&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
-- Note nowiki tag is necessary!&lt;br /&gt;
-- &amp;lt;/pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
local getArgs = require(&amp;quot;Dev:Arguments&amp;quot;).getArgs&lt;br /&gt;
local frameTools = require(&amp;quot;Dev:FrameTools&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
--creates a frame object that cannot access any of the parent&amp;#039;s args&lt;br /&gt;
--unless a table containing a list keys of not to inherit is provided&lt;br /&gt;
function disinherit(frame, onlyTheseKeys)&lt;br /&gt;
	local parent = frame:getParent() or frame&lt;br /&gt;
	local tmpFrame = frameTools.makePseudoFrame(parent)&lt;br /&gt;
	local orphan = tmpFrame:newChild{}&lt;br /&gt;
-- 	local orphan = parent:newChild{}&lt;br /&gt;
&lt;br /&gt;
	orphan.getParent = parent.getParent --returns nil&lt;br /&gt;
	orphan.args = {}&lt;br /&gt;
	if onlyTheseKeys then&lt;br /&gt;
		local family = {parent, frame}&lt;br /&gt;
		for f = 1, 2 do&lt;br /&gt;
			for k, v in pairs(family[f] and family[f].args or {}) do&lt;br /&gt;
				orphan.args[k] = orphan.args[k] or v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		parent.args = mw.clone(orphan.args)&lt;br /&gt;
		setmetatable(orphan.args, nil)&lt;br /&gt;
		for _, k in ipairs(onlyTheseKeys) do&lt;br /&gt;
			rawset(orphan.args, k, nil)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return orphan, parent&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Creates a table and shows the results&lt;br /&gt;
function formatTable(source,output)&lt;br /&gt;
    local hTable = mw.html.create(&amp;quot;table&amp;quot;):css(&amp;quot;width&amp;quot;,&amp;quot;100%&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    hTable:addClass(&amp;quot;wikitable&amp;quot;)&lt;br /&gt;
        :tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;th&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;Code&amp;quot;):done()&lt;br /&gt;
            :tag(&amp;quot;th&amp;quot;)&lt;br /&gt;
                :wikitext(&amp;quot;Output&amp;quot;):done()&lt;br /&gt;
    hTable:tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
            :tag(&amp;quot;td&amp;quot;)&lt;br /&gt;
                :wikitext(source):done()&lt;br /&gt;
            :tag(&amp;quot;td&amp;quot;)&lt;br /&gt;
                :wikitext(output):done()&lt;br /&gt;
    return hTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.get(frame, arg, passArgs)&lt;br /&gt;
	local orphan, frame = disinherit(frame, passArgs and {arg or 1})&lt;br /&gt;
	local code, noWiki, preserve = frame.args[arg or 1] or &amp;#039;&amp;#039;&lt;br /&gt;
	if code:match&amp;#039;nowiki&amp;#039; then&lt;br /&gt;
		local placeholder, preserve = (&amp;#039;6&amp;#039;):char(), {}&lt;br /&gt;
		code = mw.text.unstrip (code)&lt;br /&gt;
		noWiki = code:gsub(&amp;#039;%%&amp;#039;, placeholder):gsub(&amp;#039;&amp;amp;lt;&amp;#039;, &amp;#039;&amp;lt;&amp;#039;):gsub(&amp;#039;&amp;amp;gt;&amp;#039;, &amp;#039;&amp;gt;&amp;#039;)&lt;br /&gt;
		for k in noWiki:gmatch(&amp;#039;&amp;amp;.-;&amp;#039;) do&lt;br /&gt;
			if not preserve[k] then&lt;br /&gt;
				preserve[k] = true&lt;br /&gt;
				table.insert(preserve, (k:gsub(&amp;#039;&amp;amp;&amp;#039;, &amp;#039;&amp;amp;amp;&amp;#039;)))&lt;br /&gt;
				noWiki = noWiki:gsub(&amp;#039;(&amp;amp;.-;)&amp;#039;, &amp;#039;%%%s&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		noWiki = mw.text.nowiki(noWiki):format(unpack(preserve)):gsub(placeholder, &amp;#039;%%&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return {&lt;br /&gt;
		source = noWiki or code,&lt;br /&gt;
		output = orphan:preprocess(code):gsub(frame.args.demo_kill_categories and &amp;#039;%[%[Category.-%]%]&amp;#039; or &amp;#039;&amp;#039;, &amp;#039;&amp;#039;),&lt;br /&gt;
		frame = frame&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, demoTable)&lt;br /&gt;
	local show = demoTable or p.get(frame)&lt;br /&gt;
	local args = show.frame.args&lt;br /&gt;
	args.br = tonumber(args.br or 1) and (&amp;#039;&amp;lt;br&amp;gt;&amp;#039;):rep(args.br or 1) or args.br or &amp;#039;&amp;#039;&lt;br /&gt;
	if  getArgs(frame).table then&lt;br /&gt;
	   -- local code = mw.text.unstripNoWiki(show.source)&lt;br /&gt;
	    &lt;br /&gt;
    	return formatTable(show.source, show.output)&lt;br /&gt;
	elseif show[args.result_arg] then&lt;br /&gt;
		return show[args.result_arg]&lt;br /&gt;
	end&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;pre%s&amp;gt;%s&amp;lt;/pre&amp;gt;%s%s&amp;#039;, args.style and string.format(&amp;quot; style=&amp;#039;%s&amp;#039;&amp;quot;, args.style) or &amp;#039;&amp;#039;, show.source, args.br, show.output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--passing of args into other module without preprocessing&lt;br /&gt;
function p.module(frame)&lt;br /&gt;
	local orphan, frame = disinherit(frame, {&lt;br /&gt;
		&amp;#039;demo_template&amp;#039;,&lt;br /&gt;
		&amp;#039;demo_module&amp;#039;,&lt;br /&gt;
		&amp;#039;demo_module_func&amp;#039;,&lt;br /&gt;
		&amp;#039;demo_main&amp;#039;,&lt;br /&gt;
		&amp;#039;demo_br&amp;#039;,&lt;br /&gt;
		&amp;#039;demo_result_arg&amp;#039;,&lt;br /&gt;
		&amp;#039;demo_kill_categories&amp;#039;&lt;br /&gt;
	})&lt;br /&gt;
	local template = frame.args.demo_template and &amp;#039;Template:&amp;#039;..frame.args.demo_template&lt;br /&gt;
	local demoFunc = frame.args.demo_module_func or &amp;#039;main\n&amp;#039;&lt;br /&gt;
	local demoModule = require(&amp;#039;Module:&amp;#039; .. frame.args.demo_module)[demoFunc:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)]&lt;br /&gt;
	frame.args.br, frame.args.result_arg = frame.args.demo_br, frame.args.demo_result_arg&lt;br /&gt;
	if demoModule then&lt;br /&gt;
		local named = {insert = function(self, ...) table.insert(self, ...) return self end}&lt;br /&gt;
		local source = {insert = named.insert, &amp;#039;{{&amp;#039;, frame.args.demo_template or frame.args.demo_module, &amp;#039;\n&amp;#039;}&lt;br /&gt;
		if not template then&lt;br /&gt;
			source:insert(2, &amp;#039;#invoke:&amp;#039;):insert(4, &amp;#039;|&amp;#039;):insert(5, demoFunc)&lt;br /&gt;
		end&lt;br /&gt;
		local insertNamed = #source + 1&lt;br /&gt;
		for k, v in pairs(orphan.args) do&lt;br /&gt;
			local nan, insert = type(k) ~= &amp;#039;number&amp;#039;, {v}&lt;br /&gt;
			local target = nan and named or source&lt;br /&gt;
			target:insert&amp;#039;|&amp;#039;&lt;br /&gt;
			if nan then&lt;br /&gt;
				target:insert(k):insert&amp;#039;=&amp;#039;:insert&amp;#039;\n&amp;#039;&lt;br /&gt;
				table.insert(insert, 1, #target)&lt;br /&gt;
			end&lt;br /&gt;
			target:insert(unpack(insert))&lt;br /&gt;
			local nowiki = v:match(&amp;#039;nowiki&amp;#039;)&lt;br /&gt;
			if nowiki or v:match(&amp;#039;{{.-}}&amp;#039;) then&lt;br /&gt;
				orphan.args[k] = frame:preprocess(nowiki and mw.text.unstripNoWiki(v) or v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		source:insert&amp;#039;}}&amp;#039;&lt;br /&gt;
		table.insert(source, insertNamed, table.concat(named))&lt;br /&gt;
		return p.main(orphan, {&lt;br /&gt;
			source = mw.text.encode(table.concat(source), &amp;quot;&amp;lt;&amp;gt;&amp;#039;|=~&amp;quot;),&lt;br /&gt;
			output = tostring(demoModule(orphan)):gsub(frame.args.demo_kill_categories and &amp;#039;%[%[Category.-%]%]&amp;#039; or &amp;#039;&amp;#039;, &amp;#039;&amp;#039;),&lt;br /&gt;
			frame = frame&lt;br /&gt;
		})&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;ERROR: Invalid module function: &amp;quot;..demoFunc&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Mediawiki&gt;Cqm</name></author>
	</entry>
</feed>