<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://base.transformap.co/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Michael</id>
		<title>TransforMap Base - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://base.transformap.co/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Michael"/>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/wiki/Special:Contributions/Michael"/>
		<updated>2026-04-04T12:33:22Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.0-rc.1</generator>

	<entry>
		<id>https://base.transformap.co/index.php?title=Item_talk:Q19&amp;diff=4400</id>
		<title>Item talk:Q19</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Item_talk:Q19&amp;diff=4400"/>
				<updated>2017-03-15T10:00:43Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;== Name:de gendern? ==  Ist der Deutsche gegenderte Name wirklich dein Ernst? Haben jetzt auch Organisationen schon ein Geschlecht? -- ~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Name:de gendern? ==&lt;br /&gt;
&lt;br /&gt;
Ist der Deutsche gegenderte Name wirklich dein Ernst? Haben jetzt auch Organisationen schon ein Geschlecht? -- [[User:Michael|Michael]] ([[User talk:Michael|talk]]) 10:00, 15 March 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Main_Page&amp;diff=4201</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Main_Page&amp;diff=4201"/>
				<updated>2017-03-08T08:06:52Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Protected &amp;quot;Main Page&amp;quot; ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Welcome to the TransforMap Base =&lt;br /&gt;
&lt;br /&gt;
''The Base'' is where the collective intelligence of users, collectives and networks around TransforMap converge to provide meaning over their data. Here everyone can contribute to the building up of ontologies of the transformation, by providing associations between terms, concepts and geographical data, which any other users can add to and contribute further. This will allow anyone to [https://discourse.transformap.co/t/leave-it-to-the-user-collectively-shaping-taxonomies-to-express-plurality-of-narratives/1030 collectively represent geographical information, while providing relevant meanings to it].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
If you are new here, you may want to check the current [https://base.transformap.co/wiki/Special:AllPages?from=&amp;amp;to=&amp;amp;namespace=120 taxonomy items], as well as the existing [[Special:ListProperties|properties]], which help to map the different taxonomies into senseful ontologies.&lt;br /&gt;
&lt;br /&gt;
See the [[HowtoAddTaxonomy|How To add a new Taxonomy]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
As a [[Special:UserLogin|registered user]] you can add new taxonomy items and properties.&lt;br /&gt;
&lt;br /&gt;
You may also contribute to the global community efforts by translating the existing entries into your own language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''The Base'' uses the [http://wikidata.org Wikidata] software stack. For more information, or if you want to join the technical discussion, check this [https://discourse.transformap.co/t/federated-wikibase/867 Transformap community thread on federated Wikibase].&lt;br /&gt;
[[File:{{#setmainimage:RedNeuralNetworks.jpg}}|900px|thumb|center|alt= Neural networks]]&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Item:Q151&amp;diff=3873</id>
		<title>Item:Q151</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Item:Q151&amp;diff=3873"/>
				<updated>2017-03-03T13:20:07Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: /* wbsetclaim-create:2||1 */ Property:P4: Item:Q150&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Item:Q151&amp;diff=3872</id>
		<title>Item:Q151</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Item:Q151&amp;diff=3872"/>
				<updated>2017-03-03T13:17:13Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: /* wbremoveclaims-remove:1| */ Property:P4: Item:Q150&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Item:Q151&amp;diff=3871</id>
		<title>Item:Q151</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Item:Q151&amp;diff=3871"/>
				<updated>2017-03-03T13:16:32Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: /* wbremoveclaims-remove:1| */ Property:P8: Item:Q4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Item:Q151&amp;diff=3870</id>
		<title>Item:Q151</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Item:Q151&amp;diff=3870"/>
				<updated>2017-03-03T13:16:03Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: /* wbsetclaim-create:2||1 */ Property:P8: Item:Q150&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3714</id>
		<title>SSEDAS Taxonomy</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3714"/>
				<updated>2016-12-10T17:00:18Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
In its version 1.2 it is built upon a 3-tiered structure:&lt;br /&gt;
&lt;br /&gt;
== Main categories ==&lt;br /&gt;
&lt;br /&gt;
* {{Q|Q10}}, {{Q|10}}, Label: &amp;quot;{{Label|Q10}}&amp;quot;&lt;br /&gt;
* [[Item:Q10]]&lt;br /&gt;
&lt;br /&gt;
== Sub-Categories ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Type of Initiatives ==&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3713</id>
		<title>SSEDAS Taxonomy</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3713"/>
				<updated>2016-12-10T16:19:04Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
In its version 1.2 it is built upon a 3-tiered structure:&lt;br /&gt;
&lt;br /&gt;
== Main categories ==&lt;br /&gt;
&lt;br /&gt;
* {{Q|Q10}}, {{Q|10}}, Label: &amp;quot;{{Label|Item:Q10}}&amp;quot;&lt;br /&gt;
* [[Item:Q10]]&lt;br /&gt;
&lt;br /&gt;
== Sub-Categories ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Type of Initiatives ==&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3711</id>
		<title>SSEDAS Taxonomy</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3711"/>
				<updated>2016-12-10T12:25:40Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: /* Main categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
In its version 1.2 it is built upon a 3-tiered structure:&lt;br /&gt;
&lt;br /&gt;
== Main categories ==&lt;br /&gt;
&lt;br /&gt;
* {{Q|Q10}}, {{Q|10}}, Label: &amp;quot;{{Label|Q10}}&amp;quot;&lt;br /&gt;
* [[Item:Q10]]&lt;br /&gt;
&lt;br /&gt;
== Sub-Categories ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Type of Initiatives ==&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3710</id>
		<title>SSEDAS Taxonomy</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3710"/>
				<updated>2016-12-10T12:25:17Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: /* Main categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
In its version 1.2 it is built upon a 3-tiered structure:&lt;br /&gt;
&lt;br /&gt;
== Main categories ==&lt;br /&gt;
&lt;br /&gt;
* {{Q|Q10}}, {{Q|10}}, {{label|Q10}}&lt;br /&gt;
* [[Item:Q10]]&lt;br /&gt;
&lt;br /&gt;
== Sub-Categories ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Type of Initiatives ==&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Q&amp;diff=3709</id>
		<title>Template:Q</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Q&amp;diff=3709"/>
				<updated>2016-12-10T12:21:00Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifeq: {{str left|{{{1|}}}|1}} | Q  &lt;br /&gt;
 | [[{{{1|}}}|{{label|{{{1|}}}}} &amp;lt;small&amp;gt;{{int:parentheses|{{{1|}}}}}&amp;lt;/small&amp;gt;]]&lt;br /&gt;
 | [[Item:Q{{{1|}}}|{{label|Q{{{1|}}}}} &amp;lt;small&amp;gt;{{int:parentheses|Q{{{1|}}}}}&amp;lt;/small&amp;gt;]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;fr&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;item&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;fr&amp;quot;: &amp;quot;l'item à afficher&amp;quot;,&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;the item to show&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Displays an item label in user language and a link to its wikipage&amp;quot;,&lt;br /&gt;
		&amp;quot;fr&amp;quot;: &amp;quot;Affiche le le label et un lien vers la page d'un item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Q&amp;diff=3708</id>
		<title>Template:Q</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Q&amp;diff=3708"/>
				<updated>2016-12-10T12:18:24Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifeq: {{str left|{{{1|}}}|1}} | Q  &lt;br /&gt;
 | [[{{{1|}}}|{{label|{{{1|}}}}} &amp;lt;small&amp;gt;{{int:parentheses|{{{1|}}}}}&amp;lt;/small&amp;gt;]]&lt;br /&gt;
 | [[Item:Q{{{1|}}}|{{label|Item:Q{{{1|}}}}} &amp;lt;small&amp;gt;{{int:parentheses|Q{{{1|}}}}}&amp;lt;/small&amp;gt;]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;fr&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;item&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;fr&amp;quot;: &amp;quot;l'item à afficher&amp;quot;,&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;the item to show&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Displays an item label in user language and a link to its wikipage&amp;quot;,&lt;br /&gt;
		&amp;quot;fr&amp;quot;: &amp;quot;Affiche le le label et un lien vers la page d'un item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3707</id>
		<title>SSEDAS Taxonomy</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3707"/>
				<updated>2016-12-10T12:17:44Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: /* Main categories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
In its version 1.2 it is built upon a 3-tiered structure:&lt;br /&gt;
&lt;br /&gt;
== Main categories ==&lt;br /&gt;
&lt;br /&gt;
* {{Q|Q10}}, {{Q|10}}&lt;br /&gt;
* [[Item:Q10]]&lt;br /&gt;
&lt;br /&gt;
== Sub-Categories ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Type of Initiatives ==&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Q&amp;diff=3706</id>
		<title>Template:Q</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Q&amp;diff=3706"/>
				<updated>2016-12-10T12:17:33Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifeq: {{str left|{{{1|}}}|1}} | Q  &lt;br /&gt;
 | [[{{{1|}}}|{{label|{{{1|}}}}} &amp;lt;small&amp;gt;{{int:parentheses|{{{1|}}}}}&amp;lt;/small&amp;gt;]]&lt;br /&gt;
 | [[Item:Q{{{1|}}}|{{label|Q{{{1|}}}}} &amp;lt;small&amp;gt;{{int:parentheses|Q{{{1|}}}}}&amp;lt;/small&amp;gt;]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: {&lt;br /&gt;
				&amp;quot;fr&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;item&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;description&amp;quot;: {&lt;br /&gt;
				&amp;quot;fr&amp;quot;: &amp;quot;l'item à afficher&amp;quot;,&lt;br /&gt;
				&amp;quot;en&amp;quot;: &amp;quot;the item to show&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;description&amp;quot;: {&lt;br /&gt;
		&amp;quot;en&amp;quot;: &amp;quot;Displays an item label in user language and a link to its wikipage&amp;quot;,&lt;br /&gt;
		&amp;quot;fr&amp;quot;: &amp;quot;Affiche le le label et un lien vers la page d'un item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Doc&amp;diff=3705</id>
		<title>Template:Doc</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Doc&amp;diff=3705"/>
				<updated>2016-12-10T11:22:15Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Redirected page to Template:Documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Template:Documentation]]&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Tlx&amp;diff=3704</id>
		<title>Template:Tlx</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Tlx&amp;diff=3704"/>
				<updated>2016-12-10T11:19:03Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{Tlx}}}&amp;lt;!-- --&amp;gt;{{#if:{{{2|}}}|&amp;amp;#124;{{{2}}}}}&amp;lt;!-- --&amp;gt;{{#if:{{{3|}}}|&amp;amp;#124;{{{3}}}}}&amp;lt;!-- --&amp;gt;{{#...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{[[{{#if:{{{SISTER|}}}|{{{SISTER}}}Template|{{ns:Template}}}}:{{{1|Tlx}}}|{{{1|Tlx}}}]]&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{2|}}}|&amp;amp;#124;{{{2}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{3|}}}|&amp;amp;#124;{{{3}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{4|}}}|&amp;amp;#124;{{{4}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{5|}}}|&amp;amp;#124;{{{5}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{6|}}}|&amp;amp;#124;{{{6}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{7|}}}|&amp;amp;#124;{{{7}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{8|}}}|&amp;amp;#124;''...''}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Main_other&amp;diff=3703</id>
		<title>Template:Main other</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Main_other&amp;diff=3703"/>
				<updated>2016-12-10T11:18:09Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{#switch:   &amp;lt;!--If no or empty &amp;quot;demospace&amp;quot; parameter then detect namespace--&amp;gt;   {{#if:{{{demospace|}}}    | {{lc: {{{demospace}}} }}    &amp;lt;!--Use lower case &amp;quot;demospace&amp;quot;--&amp;gt;   |...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch:&lt;br /&gt;
  &amp;lt;!--If no or empty &amp;quot;demospace&amp;quot; parameter then detect namespace--&amp;gt;&lt;br /&gt;
  {{#if:{{{demospace|}}} &lt;br /&gt;
  | {{lc: {{{demospace}}} }}    &amp;lt;!--Use lower case &amp;quot;demospace&amp;quot;--&amp;gt;&lt;br /&gt;
  | {{#ifeq:{{NAMESPACE}}|{{ns:0}}&lt;br /&gt;
    | main&lt;br /&gt;
    | other&lt;br /&gt;
    }} &lt;br /&gt;
  }}&lt;br /&gt;
| main     = {{{1|}}}&lt;br /&gt;
| other&lt;br /&gt;
| #default = {{{2|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation}}&lt;br /&gt;
[[Category:Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Q/doc&amp;diff=3702</id>
		<title>Template:Q/doc</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Q/doc&amp;diff=3702"/>
				<updated>2016-12-10T11:03:20Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{Documentation subpage}} &amp;lt;!-- Categories and interwikis go at the bottom of this page. --&amp;gt;  == Usage == This is used to get an automatically localized link to an item.  For e...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation subpage}}&lt;br /&gt;
&amp;lt;!-- Categories and interwikis go at the bottom of this page. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
This is used to get an automatically localized link to an item.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{Q|1}}&amp;lt;/nowiki&amp;gt; or &amp;lt;nowiki&amp;gt;{{Q|Q1}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
produces:&lt;br /&gt;
&lt;br /&gt;
{{Q|1}} or {{Q|Q1}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Template:Property]] (aliased {{tl|P}})&lt;br /&gt;
* [[Template:Claim]] (aliased {{tl|C}})&lt;br /&gt;
* [[Template:Label]]&lt;br /&gt;
* [[Template:Statement]] (aliased {{tl|St}})&lt;br /&gt;
* [[Template:Q']] variant which deals with non items parameters (as strings)&lt;br /&gt;
* [[Template:Q+]] includes description&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Categories and interwikis go here: --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3670</id>
		<title>SSEDAS Taxonomy</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=SSEDAS_Taxonomy&amp;diff=3670"/>
				<updated>2016-12-09T09:35:06Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
In its version 1.2 it is built upon a 3-tiered structure:&lt;br /&gt;
&lt;br /&gt;
== Main categories ==&lt;br /&gt;
&lt;br /&gt;
* {{Q|Q10}}&lt;br /&gt;
&lt;br /&gt;
== Sub-Categories ==&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
== Type of Initiatives ==&lt;br /&gt;
&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:I18n/wikidata&amp;diff=3669</id>
		<title>Module:I18n/wikidata</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:I18n/wikidata&amp;diff=3669"/>
				<updated>2016-12-09T09:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;return { 	[&amp;quot;trackingcat&amp;quot;] = &amp;quot;Page using data from Wikidata&amp;quot;, -- DON'T TRANSLATE  -- SPECIAL VALUES 	[&amp;quot;novalue&amp;quot;] = { 		ar = &amp;quot;غير قابل للتطبيق&amp;quot;, 		bn = &amp;quot;প্র...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	[&amp;quot;trackingcat&amp;quot;] = &amp;quot;Page using data from Wikidata&amp;quot;, -- DON'T TRANSLATE&lt;br /&gt;
&lt;br /&gt;
-- SPECIAL VALUES&lt;br /&gt;
	[&amp;quot;novalue&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;غير قابل للتطبيق&amp;quot;,&lt;br /&gt;
		bn = &amp;quot;প্রযোজ্য নয়&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;no aplicable&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;nelze použít&amp;quot;,&lt;br /&gt;
		en = &amp;quot;not applicable&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;pas applicable&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;неприменливо&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;niet van toepassing&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;não aplicável&amp;quot;,&lt;br /&gt;
		['zh-hans'] = &amp;quot;不适用&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;somevalue&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;غير معروف&amp;quot;,&lt;br /&gt;
		bn = &amp;quot;অজানা&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;desconegut&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;neznámé&amp;quot;,&lt;br /&gt;
		en = &amp;quot;unknown&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;inconnu&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;непознато&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;onbekend&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;desconhecido&amp;quot;,&lt;br /&gt;
		['zh-hans'] = &amp;quot;未知&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
-- MISSING DATA&lt;br /&gt;
	[&amp;quot;no-label&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;بدون تسمية&amp;quot;,&lt;br /&gt;
		bn = &amp;quot;লেভেল নেই&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;sense etiqueta&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;bez štítku&amp;quot;,&lt;br /&gt;
		en = &amp;quot;no label&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;pas de libellé&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;без натпис&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;geen label&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;sem rótulo&amp;quot;,&lt;br /&gt;
		['zh-hans'] = &amp;quot;无标签&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;no description&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;بدون وصف&amp;quot;,&lt;br /&gt;
		bn = &amp;quot;বিবরণ নেই&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;sense descripció&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;bez popisu&amp;quot;,&lt;br /&gt;
		en = &amp;quot;no description&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;pas de description&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;без опис&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;geen omschrijving&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;sem descrição&amp;quot;,&lt;br /&gt;
		['zh-hans'] = &amp;quot;无描述&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
-- ERRORS &lt;br /&gt;
	[&amp;quot;property-param-not-provided&amp;quot;] = { -- MERGE WITH qualifier-param-not-provided&lt;br /&gt;
		ar = &amp;quot;وسائط الخاصية غير موجودة&amp;quot;,&lt;br /&gt;
		bn = &amp;quot;'property' প্যারামিটার অনুপস্থিত&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;falta el paràmetre 'propietat'&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;chybí parametr „property“&amp;quot;,&lt;br /&gt;
		en = &amp;quot;'property' parameter missing&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;paramètre 'property' manquant&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;недостасува параметарот за својство ('property')&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;parameter 'property' ontbreekt&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;parâmetro 'property' em falta&amp;quot;,&lt;br /&gt;
		['zh-hans'] = &amp;quot;属性（'property'）参数丢失&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;qualifier-param-not-provided&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;وسائط التصفيات غير موجودة&amp;quot;,&lt;br /&gt;
		bn = &amp;quot;'qualifier' প্যারামিটার অনুপস্থিত&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;falta el paràmetre 'qualificador'&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;chybí parametr „qualifier“&amp;quot;,&lt;br /&gt;
		en = &amp;quot;'qualifier' parameter missing&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;paramètre 'qualifier' manquant&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;недостасува параметарот за определница ('qualifier')&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;parameter 'qualifier' ontbreekt&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;parâmetro 'qualificador' em falta&amp;quot;,&lt;br /&gt;
		['zh-hans'] = &amp;quot;限定符（'qualifier'）参数丢失&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;entity-not-found&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;الكيان غير موجود&amp;quot;,&lt;br /&gt;
		bn = &amp;quot;সত্তা পাওয়া যায়নি&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;entitat no trobada&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;entita nenalezena&amp;quot;,&lt;br /&gt;
		en = &amp;quot;entity not found&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;entité non trouvée&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;единицата не е пронајдена&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;entiteit niet gevonden&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;entidade não encontrada&amp;quot;,&lt;br /&gt;
		['zh-hans'] = &amp;quot;找不到实体&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;unknown-claim-type&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;نوع الإدعاء غير معروف&amp;quot;,&lt;br /&gt;
		en = &amp;quot;tipus d'afirmació desconeguda&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;neznámý typ tvrzení&amp;quot;,&lt;br /&gt;
		en = &amp;quot;unknown claim type&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;type d'affirmation inconnu&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;непознат тип на тврдење&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;onbekend type claim&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;tipo de afirmação desconhecida&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;unknown-snak-typeg&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;نوع الكلام غير معروف&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;neznámý typ snaku&amp;quot;,&lt;br /&gt;
		en = &amp;quot;unknown snak type&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;type de snak inconnu&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;непознат тип на спојница&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;onbekend snaktype&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;tipo de conector (''snak'') desconhecido&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;unknown-datavalue-type&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;نوع قيم البيانات غير معروف.&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;tipus de valor de dades desconegut.&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;neznámý typ datové hodnoty&amp;quot;,&lt;br /&gt;
		en = &amp;quot;unknown datavalue type.&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;type de donnée inconnu.&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;непознат тип на податочна вредност.&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;onbekend type gegevenswaarde.&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;tipo de dado desconhecido.&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;unknown-entity-type&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;نوع الإدخال غير معروف&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;tipus d'entitat desconegut&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;neznámý typ entity&amp;quot;,&lt;br /&gt;
		en = &amp;quot;unknown entity type&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;type d'entité inconnu&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;непознат тип на единица&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;onbekend type entiteit&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;tipo de entidade desconhecida&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;invalid-id&amp;quot;] = {&lt;br /&gt;
		ar = &amp;quot;المُعرف غير صحيح&amp;quot;,&lt;br /&gt;
		ca = &amp;quot;ID invàlida&amp;quot;,&lt;br /&gt;
		cs = &amp;quot;neplatné ID&amp;quot;,&lt;br /&gt;
		en = &amp;quot;invalid ID&amp;quot;,&lt;br /&gt;
		fr = &amp;quot;identifiant inconnu&amp;quot;,&lt;br /&gt;
		mk = &amp;quot;неважечка назнака&amp;quot;,&lt;br /&gt;
		nl = &amp;quot;onbekend identificatienummer&amp;quot;,&lt;br /&gt;
		['pt-br'] = &amp;quot;identificador inválido&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:I18n/linguistic&amp;diff=3668</id>
		<title>Module:I18n/linguistic</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:I18n/linguistic&amp;diff=3668"/>
				<updated>2016-12-09T09:30:51Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;return { 	-- message corresponds to the translatewiki message (in some cases: no accurate and needs to be overridden by another text 	 and_conj = { -- in some languages the tr...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	-- message corresponds to the translatewiki message (in some cases: no accurate and needs to be overridden by another text&lt;br /&gt;
	 and_conj = { -- in some languages the translatewiki message is not quite right&lt;br /&gt;
		bn = 'এবং',&lt;br /&gt;
		pl =  ' i',&lt;br /&gt;
		mk = ' и',&lt;br /&gt;
		no = ' og',&lt;br /&gt;
		zh = '和',&lt;br /&gt;
		[&amp;quot;zh-hans&amp;quot;] = '和',&lt;br /&gt;
		[&amp;quot;zh-hant&amp;quot;] = '和',&lt;br /&gt;
		[&amp;quot;zh-cn&amp;quot;] = '和',&lt;br /&gt;
		[&amp;quot;zh-tw&amp;quot;] = '和',&lt;br /&gt;
		message = &amp;quot;and&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	 or_conj = {&lt;br /&gt;
		ar = 'أو',&lt;br /&gt;
		bn = ' অথবা',&lt;br /&gt;
		ca = ' o',&lt;br /&gt;
		cs = ' nebo',&lt;br /&gt;
		da = ' eller',&lt;br /&gt;
		de = ' oder',&lt;br /&gt;
		el = ' ή',&lt;br /&gt;
		en = ' or',&lt;br /&gt;
		eo = ' aŭ',&lt;br /&gt;
		et = ' või',&lt;br /&gt;
		fa = 'یا ',&lt;br /&gt;
		fi = ' tai',&lt;br /&gt;
		fr = ' ou',&lt;br /&gt;
		gl = ' ou',&lt;br /&gt;
		he = ' או',&lt;br /&gt;
		hu = ' vagy',&lt;br /&gt;
		it = ' o',&lt;br /&gt;
		ja = 'または',&lt;br /&gt;
		mk = ' или',&lt;br /&gt;
		ml = ' അഥവാ',&lt;br /&gt;
		nds = ' oder',&lt;br /&gt;
		ne	= ' अथवा', &lt;br /&gt;
		nl = ' of',&lt;br /&gt;
		nn = ' eller',&lt;br /&gt;
		no = ' eller',&lt;br /&gt;
		['os'] = ' ó',&lt;br /&gt;
		pl = ' lub',&lt;br /&gt;
		pt = ' ou',&lt;br /&gt;
		['pt-br'] = ' ou',&lt;br /&gt;
		ru = ' или',&lt;br /&gt;
		sl = ' ali',&lt;br /&gt;
		sv = ' eller',&lt;br /&gt;
		tg = ' ё',&lt;br /&gt;
		th = ' หรือ',&lt;br /&gt;
		tr = ' ve',&lt;br /&gt;
		zh = ' 或',&lt;br /&gt;
	},&lt;br /&gt;
	colon = { -- Please expand using Commons:Template:Colon&lt;br /&gt;
		ar = '&amp;amp;#58;&amp;amp;#32;',&lt;br /&gt;
		en = '&amp;amp;#58;&amp;amp;#32;',&lt;br /&gt;
		fr = '&amp;amp;#32;&amp;amp;#58;&amp;amp;#32;',&lt;br /&gt;
		mk = '&amp;amp;#58;&amp;amp;#32;',&lt;br /&gt;
	},&lt;br /&gt;
	comma = {&lt;br /&gt;
		message = &amp;quot;comma-separator&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	citation_comma = {&lt;br /&gt;
		zh = '，',  -- in Chinese the commas used in citation aren't '、'&lt;br /&gt;
		[&amp;quot;zh-hans&amp;quot;] = '，',&lt;br /&gt;
		[&amp;quot;zh-hant&amp;quot;] = '，',&lt;br /&gt;
		[&amp;quot;zh-cn&amp;quot;] = '，',&lt;br /&gt;
		[&amp;quot;zh-tw&amp;quot;] = '，',&lt;br /&gt;
		message = &amp;quot;comma-separator&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	full_stop = { -- to expand see Commons:Template:Full stop&lt;br /&gt;
	 	ar = '.&amp;amp;#32;',&lt;br /&gt;
	 	bn = '।&amp;amp;#32;',&lt;br /&gt;
	 	en = '.&amp;amp;#32;',&lt;br /&gt;
	 	mk = '.&amp;amp;#32;',&lt;br /&gt;
	},&lt;br /&gt;
	word_separator = {&lt;br /&gt;
		message = 'Word-separator',&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Fallback&amp;diff=3667</id>
		<title>Module:Fallback</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Fallback&amp;diff=3667"/>
				<updated>2016-12-09T09:29:40Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;local p = {}  function p.fblist(lang) -- list the full fallback chain from a language to en 	local fbtable = mw.language.getFallbacksFor(lang) 	table.insert(fbtable, 1, lang)...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.fblist(lang) -- list the full fallback chain from a language to en&lt;br /&gt;
	local fbtable = mw.language.getFallbacksFor(lang)&lt;br /&gt;
	table.insert(fbtable, 1, lang)&lt;br /&gt;
	table.insert(fbtable, 'message')&lt;br /&gt;
	table.insert(fbtable, 'default')&lt;br /&gt;
	return fbtable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._langSwitch(args, lang) -- args: table of translations&lt;br /&gt;
	-- Return error if there is not default and no English version&lt;br /&gt;
	-- otherwise returns the message in the most appropriate, plus the lang code as a second value&lt;br /&gt;
	if not args.en and not args.default and not args.message and args.nocat ~= '1' then&lt;br /&gt;
		return error(&amp;quot;langSwitch error: no default&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	-- get language (either stated one or user's default language)&lt;br /&gt;
	if not lang then&lt;br /&gt;
		return '&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;LangSwitch Error: no lang&amp;lt;/strong&amp;gt;' -- must become proper error&lt;br /&gt;
	end&lt;br /&gt;
	-- get the list of acceptable language (lang + those in lang's fallback chain) and check their content&lt;br /&gt;
	for i, j in ipairs(p.fblist(lang)) do&lt;br /&gt;
		if args[j] then&lt;br /&gt;
			if args[j] == '~' then return nil, j end&lt;br /&gt;
			if j == 'message' then return tostring(mw.message.new(args[j]):inLanguage(lang)) end -- if this is an interface message&lt;br /&gt;
			if args[j] ~= '' then return args[j], j end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.langSwitch(frame) -- version to be used from wikitext&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	-- if no expected args provided than check parent template/module args&lt;br /&gt;
	if not args.en and not args.default and not args.nocat then&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local lang&lt;br /&gt;
	if args.lang and args.lang ~= '' then&lt;br /&gt;
		lang = args.lang&lt;br /&gt;
		args.lang = nil&lt;br /&gt;
	else -- get user's chosen language&lt;br /&gt;
		lang = frame:preprocess( &amp;quot;{{int:lang}}&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	local str, language = p._langSwitch(args, lang)&lt;br /&gt;
	return str -- get the first value of the langSwitch, (the text) not the second (the language)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.fallbackpage(base, lang, formatting)&lt;br /&gt;
	local languages = p.fblist(lang)&lt;br /&gt;
	for i, lng in ipairs(languages) do&lt;br /&gt;
		if mw.title.new(base .. '/' .. lng).exists then&lt;br /&gt;
			if formatting == 'table' then&lt;br /&gt;
				return {base .. '/' .. lng, lng} -- returns name of the page + name of the language&lt;br /&gt;
			else&lt;br /&gt;
				return base .. '/' .. lng -- returns only the page&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return base&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.autotranslate(frame) -- logic for [[template:Autotranslate]]&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	if not args.lang or args.lang == '' then&lt;br /&gt;
		args.lang = frame:preprocess( &amp;quot;{{int:lang}}&amp;quot; )           -- get user's chosen language&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- find base page&lt;br /&gt;
	local base = args.base&lt;br /&gt;
	if not base or base == '' then&lt;br /&gt;
		return '&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Base page not provided for autotranslate&amp;lt;/strong&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	if string.sub(base, 2, 9) ~= 'emplate:' then&lt;br /&gt;
		base = 'Template:' .. base   -- base provided without 'Template:' part&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- find base template language subpage&lt;br /&gt;
	local page = p.fallbackpage(base, args.lang) --&lt;br /&gt;
	if (not page and base ~= args.base) then&lt;br /&gt;
		-- try the original args.base string. This case is only needed if base is not in template namespace&lt;br /&gt;
		page = p.fallbackpage(args.base, args.lang)&lt;br /&gt;
	end&lt;br /&gt;
	if not page then&lt;br /&gt;
		return string.format('&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;no fallback page found for autotranslate (base=[[%s]], lang=%s)&amp;lt;/strong&amp;gt;', args.base, args.lang)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- repack args in a standard table&lt;br /&gt;
	local newargs = {}&lt;br /&gt;
	for field, value in pairs(args) do&lt;br /&gt;
		if field ~= 'base' then&lt;br /&gt;
			newargs[field] = value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Transclude {{page |....}} with template arguments the same as the ones passed to {{autotranslate}} template.&lt;br /&gt;
	return frame:expandTemplate{ title = page, args = newargs }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.translate(page, key, lang) --translate data stored in a module&lt;br /&gt;
	if type(page) == 'string' then -- if the requested translation table is not yet loaded&lt;br /&gt;
		page = require('Module:' .. page)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local val&lt;br /&gt;
	if page[key] then&lt;br /&gt;
		val = page[key]&lt;br /&gt;
	elseif page.keys and page.keys[key] then-- key 'keys&amp;quot; is an index of all keys, including redirects, see [[Module:i18n/datatype]]&lt;br /&gt;
		val = page.keys[key]&lt;br /&gt;
	end&lt;br /&gt;
	if not val then&lt;br /&gt;
		return '&amp;lt;' .. key .. '&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	return p._langSwitch(val, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.translatelua(frame)&lt;br /&gt;
	local lang = frame.args.lang&lt;br /&gt;
	local page = require('Module:' .. mw.text.trim(frame.args[1])) -- page should only contain a simple of translations&lt;br /&gt;
	if not lang or mw.text.trim(lang) == '' then&lt;br /&gt;
		lang = frame:preprocess( &amp;quot;{{int:lang}}&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	if frame.args[2] then&lt;br /&gt;
		page = page[mw.text.trim(frame.args[2])]&lt;br /&gt;
	end&lt;br /&gt;
	return p._langSwitch(page, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.runTests()&lt;br /&gt;
	local toFallbackTest = require('Module:Fallback/tests/fallbacks')&lt;br /&gt;
	local result = true&lt;br /&gt;
&lt;br /&gt;
	mw.log('Testing fallback chains')&lt;br /&gt;
	for i, t in ipairs(toFallbackTest) do&lt;br /&gt;
		local fbtbl = table.concat(p.fblist(t.initial), ', ')&lt;br /&gt;
		local expected = table.concat(t.expected, ', ')&lt;br /&gt;
		local ret = (fbtbl == expected)&lt;br /&gt;
		mw.log(i, ret and 'passed' or 'FAILED', t.initial, (not ret) and ('FAILED\nis &amp;gt;&amp;gt;' .. fbtbl .. '&amp;lt;&amp;lt;\nbut should be &amp;gt;&amp;gt;' .. expected .. '&amp;lt;&amp;lt;\n') or '')&lt;br /&gt;
		result = result and ret&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showTemplateArguments(frame)&lt;br /&gt;
-- list all input arguments of the template that calls &amp;quot;{{#invoke:Fallback|showTemplateArguments}}&amp;quot;&lt;br /&gt;
	local str = ''&lt;br /&gt;
	for name, value in pairs( frame:getParent().args ) do&lt;br /&gt;
		if str == '' then&lt;br /&gt;
			str = string.format('%s=%s', name, value)          -- argument #1&lt;br /&gt;
		else&lt;br /&gt;
			str = string.format('%s, %s=%s', str, name, value) -- the rest&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Linguistic&amp;diff=3666</id>
		<title>Module:Linguistic</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Linguistic&amp;diff=3666"/>
				<updated>2016-12-09T09:28:46Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;-- some simple internationalization that can be called by other modules  local p = {} local f = require('Module:Fallback') local i18n = mw.loadData('Module:I18n/linguistic')...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- some simple internationalization that can be called by other modules&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local f = require('Module:Fallback')&lt;br /&gt;
local i18n = mw.loadData('Module:I18n/linguistic')&lt;br /&gt;
&lt;br /&gt;
local function getText(msg, lang)&lt;br /&gt;
	return f._langSwitch(i18n[msg], lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'&lt;br /&gt;
&lt;br /&gt;
local function wordor(lang)&lt;br /&gt;
	return getText('or_conj', lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function comma(lang)&lt;br /&gt;
	return getText(&amp;quot;comma&amp;quot;, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function citation_comma(lang)&lt;br /&gt;
	return getText(&amp;quot;citation_comma&amp;quot;, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.fullstop(lang)&lt;br /&gt;
	return getText(&amp;quot;full_stop&amp;quot;, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.colon(lang)&lt;br /&gt;
	return getText(&amp;quot;colon&amp;quot;, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wordand(lang)&lt;br /&gt;
	return getText(&amp;quot;and_conj&amp;quot;, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wordsep(lang) -- default separator between words&lt;br /&gt;
	return getText(&amp;quot;word_separator&amp;quot;, lang)&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
local function isin(str, pattern)&lt;br /&gt;
	return str and pattern and mw.ustring.find(str, pattern, 1, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function langisin(str, lang)&lt;br /&gt;
	return isin(str, lang .. ' ') -- space is necessary to avoid false positives like zh in zh-hans&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function processgender(str)&lt;br /&gt;
	local t = {	&lt;br /&gt;
		f = 'feminine',&lt;br /&gt;
		fem = 'feminine',&lt;br /&gt;
		feminine = 'feminine',&lt;br /&gt;
		m = 'masculine',&lt;br /&gt;
		masc = 'masculine',&lt;br /&gt;
		masculine = 'masculine',&lt;br /&gt;
		n = 'neutral',&lt;br /&gt;
		neutral = 'neutral',&lt;br /&gt;
	}&lt;br /&gt;
	return t[str] or 'masculine'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function processnumber(str)&lt;br /&gt;
	if str == 'p' or str == 'plural' then&lt;br /&gt;
		return 'plural'&lt;br /&gt;
	else&lt;br /&gt;
		return 'singular'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.vowelfirst(str)&lt;br /&gt;
	return str and isin(vowels, str[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.inparentheses(str, lang)&lt;br /&gt;
	--todo: define language with exotic parentheses&lt;br /&gt;
	if str == '' then&lt;br /&gt;
		return str&lt;br /&gt;
	else&lt;br /&gt;
		return ' (' .. str .. ')'&lt;br /&gt;
		-- needs internationalization.&lt;br /&gt;
		-- Needs leading space in English because as some languages do not use it, it is part of the formatting&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.of(word, lang, raw, gender, number, determiner) -- rough translation of &amp;quot;of&amp;quot; in various languages&lt;br /&gt;
-- note that the cases when on &amp;quot;of&amp;quot; is employed varies a lot among languages, so it is more prudent to call this from lang specific function only&lt;br /&gt;
	if not raw then&lt;br /&gt;
		raw = word&lt;br /&gt;
	end&lt;br /&gt;
	gender = processgender(gender)&lt;br /&gt;
	number = processnumber(number)&lt;br /&gt;
	-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -&amp;gt; 'italie'&lt;br /&gt;
	-- any way to automate this ?&lt;br /&gt;
	&lt;br /&gt;
	-- todo: ca to replace Template:Of/ca&lt;br /&gt;
	&lt;br /&gt;
	if lang == 'fr' then&lt;br /&gt;
		if number == 'plural' then&lt;br /&gt;
			return 'des ' .. word&lt;br /&gt;
		elseif p.vowelfirst(raw) then&lt;br /&gt;
			return 'de l\'' .. word&lt;br /&gt;
		elseif gender == 'feminine' then&lt;br /&gt;
			return 'de la ' .. word&lt;br /&gt;
		elseif derterminer then&lt;br /&gt;
			return 'du ' .. word&lt;br /&gt;
		else&lt;br /&gt;
			return 'de ' .. word&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	return raw&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.noungroup(noun, adj, lang)&lt;br /&gt;
	if not noun or noun == '' then&lt;br /&gt;
		return nil -- not '' so that it is not counted as a string by mw.listToText&lt;br /&gt;
	end&lt;br /&gt;
	if not adj or adj == '' then&lt;br /&gt;
		return noun&lt;br /&gt;
	end&lt;br /&gt;
	-- adjective before the noun&lt;br /&gt;
	if langisin('cs de de-at de-ch en en-ca en-gb pl sk zh zh-cn zh-hans zh-hant zh-my zh-sg zh-tw ', lang) then&lt;br /&gt;
		return adj .. wordsep(lang) .. noun&lt;br /&gt;
	-- adjective after the noun&lt;br /&gt;
	elseif langisin('fr fr-ca es it') then&lt;br /&gt;
		return noun .. wordsep(lang) .. adj&lt;br /&gt;
	else&lt;br /&gt;
		return noun .. p.inparentheses(adj, lang)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.conj(args, lang, conjtype)&lt;br /&gt;
	if not args then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local newargs = {}&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
		if type(j) ~= 'nil' then&lt;br /&gt;
			table.insert(newargs, j)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	args = newargs&lt;br /&gt;
	if #args == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if conjtype == 'comma' then&lt;br /&gt;
		return mw.text.listToText(args, comma(lang), comma(lang))&lt;br /&gt;
	elseif conjtype == 'citation_comma' then&lt;br /&gt;
		return mw.text.listToText(args, citation_comma(lang), citation_comma(lang))&lt;br /&gt;
	elseif conjtype == 'or' then&lt;br /&gt;
		return mw.text.listToText(args, comma(lang), wordor(lang) .. wordsep(lang))&lt;br /&gt;
	elseif conjtype == 'explicit or' then -- adds &amp;quot;or&amp;quot; betwen all words when the context can be confusing&lt;br /&gt;
		return mw.text.listToText(args, wordor(lang) .. wordsep(lang), wordor(lang) .. wordsep(lang))&lt;br /&gt;
	elseif conjtype then&lt;br /&gt;
		return mw.text.listToText(args, conjtype, conjtype)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.text.listToText(args, comma(lang), wordand(lang) .. wordsep(lang))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Wikidata&amp;diff=3665</id>
		<title>Module:Wikidata</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Wikidata&amp;diff=3665"/>
				<updated>2016-12-09T09:27:32Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua  local p = {}  local linguistic = re...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local linguistic = require('Module:Linguistic')&lt;br /&gt;
--local formatDate = require('Module:Complex date') only loaded when needed to save memory in large pages like Wikidata:List of properties/all&lt;br /&gt;
local fb = require('Module:Fallback')&lt;br /&gt;
local i18nmessages = mw.loadData('Module:i18n/wikidata')&lt;br /&gt;
&lt;br /&gt;
-- Wiki-specific parameters&lt;br /&gt;
local defaultlang = mw.getCurrentFrame():preprocess(&amp;quot;{{int:lang}}&amp;quot;)&lt;br /&gt;
local defaultlink = 'wikidata'&lt;br /&gt;
&lt;br /&gt;
local function i18n(str, lang)&lt;br /&gt;
	local message = i18nmessages[str]&lt;br /&gt;
	if type(message) == 'string' then&lt;br /&gt;
		return message&lt;br /&gt;
	end&lt;br /&gt;
	return fb._langSwitch(message, lang or defaultlang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatError( key, text )&lt;br /&gt;
	return error(i18n(key) .. (text or ''))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addTrackingCat(prop, cat)&lt;br /&gt;
	if not prop and not cat then&lt;br /&gt;
		return error(&amp;quot;no property provided&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if not cat then&lt;br /&gt;
		cat = i18nmessages.trackingcat .. '/' .. string.upper(prop)&lt;br /&gt;
	end&lt;br /&gt;
	return '[[Category:' .. cat .. ']]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeBlanks(args)&lt;br /&gt;
	for i, j in pairs(args) do -- does not work ??&lt;br /&gt;
		if (j == '') or (j == '-') then args[i] = nil end&lt;br /&gt;
	end&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatTheUnknown() -- voir si on peut accorder/adapter l'usage de &amp;quot;inconnu&amp;quot;&lt;br /&gt;
	return i18n('somevalue')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isSpecial(snak)&lt;br /&gt;
	return snak.snaktype ~= 'value'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sameValue(snak, target)&lt;br /&gt;
	return not isSpecial(snak) and p.getRawvalue(snak) == target&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function showLang(statement, str) -- TODO (not yet in proper format)&lt;br /&gt;
	--adds a lang indication at the start of the string, based on data in statement&lt;br /&gt;
	local mainsnak = statement.mainsnak&lt;br /&gt;
	if isSpecial(mainsnak) then&lt;br /&gt;
		return str&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local langlist = {}&lt;br /&gt;
	if mainsnak.datavalue.type == 'monolingualtext' then&lt;br /&gt;
		langlist = {mainsnak.datavalue.value.language}&lt;br /&gt;
	elseif statement.qualifiers and statement.qualifiers.P407 then&lt;br /&gt;
		local convertlangcode = mw.loadData('Module:Dictionary/lang codes')&lt;br /&gt;
		for i, j in pairs( statement.qualifiers.P407 ) do&lt;br /&gt;
			if not isSpecial(j) then&lt;br /&gt;
				local val = convertlangcode[j.datavalue.value['numeric-id']]&lt;br /&gt;
				table.insert(langlist, val)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #langlist == 0 then&lt;br /&gt;
		return str&lt;br /&gt;
	else&lt;br /&gt;
		return '('.. table.concat(langlist) .. ')' .. str&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getEntity( val )&lt;br /&gt;
	if type(val) == 'table' then&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
	return mw.wikibase.getEntityObject(val)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- DATE FUNCTIONS&lt;br /&gt;
local function splitTimestamp(timestamp, calendar)&lt;br /&gt;
	local pattern = &amp;quot;(%W)(%d+)%-(%d+)%-(%d+)&amp;quot;&lt;br /&gt;
	local era, year, month, day = timestamp:match(pattern)&lt;br /&gt;
&lt;br /&gt;
	if calendar == 'julian' then&lt;br /&gt;
	--todo  year, month, day = formatdate.gregorianToJulian( era .. year, month, day )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return {day = day, month = month, year = year, era = era, timestamp = timestamp, type = 'dateobject'}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rangeObject(begin, ending)&lt;br /&gt;
	local timestamp&lt;br /&gt;
	if begin then&lt;br /&gt;
		timestamp = begin.timestamp&lt;br /&gt;
	elseif ending then&lt;br /&gt;
		timestamp = ending.timestamp&lt;br /&gt;
	end&lt;br /&gt;
	return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dateObject(orig, params) -- transforme un snak en un nouvel objet utilisable par Module:Date complexe&lt;br /&gt;
	if not params then&lt;br /&gt;
		params = {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local newobj = splitTimestamp(orig.time, orig.calendar) -- initalise l'object en mettant la valeur des dates&lt;br /&gt;
&lt;br /&gt;
	newobj.precision = params.precision or orig.precision&lt;br /&gt;
	newobj.type = 'dateobject'&lt;br /&gt;
	return newobj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatDatepoint(obj, params) -- TO IMPROVE&lt;br /&gt;
	if not obj then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local formatDate = require('Module:Complex date')&lt;br /&gt;
	local lang = params.lang or defaultlang&lt;br /&gt;
	local precision = math.min(obj.precision, params.precision or 15) -- if we don't want to show the value to its full detail&lt;br /&gt;
	if precision &amp;gt;= 11 then&lt;br /&gt;
		return formatDate.complex_date{args={date1 = obj.year .. '-' .. obj.month .. '-' .. obj.day, lang= lang}}&lt;br /&gt;
	elseif precision == 10 then&lt;br /&gt;
		return formatDate.complex_date{args={date1 = obj.year .. '-' .. obj.month, lang= lang}}&lt;br /&gt;
	elseif precision == 9 then&lt;br /&gt;
		return formatDate.complex_date{args={date1 = tostring(obj.year), lang= lang}}&lt;br /&gt;
	elseif precision == 8 then&lt;br /&gt;
		return formatDate.complex_date{args={date1 = string.sub(tostring(obj.year), 1, 3) .. '0', lang = lang, precision = 'decade'}}&lt;br /&gt;
	elseif precision == 7 then&lt;br /&gt;
		return formatDate.complex_date{args={date1 = string.sub(tostring(obj.year + 100), 1, 2), lang = lang, precision = 'century'}}&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatDaterange(obj, params) --TODO&lt;br /&gt;
	local begin = formatDatepoint(obj.begin, params) or ''&lt;br /&gt;
	local ending = formatDatepoint(obj.ending, params) or ''&lt;br /&gt;
	return begin .. '-' .. ending&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function objectToText(obj, params)&lt;br /&gt;
	if obj.type == 'dateobject' then&lt;br /&gt;
		return formatDatepoint(obj, params)&lt;br /&gt;
	elseif obj.type == 'rangeobject' then&lt;br /&gt;
		return formatDaterange(obj, params)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tableToText(values, params) -- takes a list of already formatted values and make them a text&lt;br /&gt;
	if not values then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return linguistic.conj(values, params.lang or defaultlang, params.conjtype)--linguistic.conj( values, params.lang, params.conjtype )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDate(obj)&lt;br /&gt;
--[[&lt;br /&gt;
returns an object containing a timestamp for easy sorting, and other data&lt;br /&gt;
	possible types of object:&lt;br /&gt;
		dateobject&lt;br /&gt;
			{timestamp = string, year = number, month = number, day = number, calendar = string}&lt;br /&gt;
		rangeobject&lt;br /&gt;
			{timestamp = string, begin = dateobject, ending = dateobject}&lt;br /&gt;
]]--&lt;br /&gt;
	if not obj then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if type(obj) == 'string' then&lt;br /&gt;
		obj = p.getEntity(obj)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- if obj is a statement with date, get it&lt;br /&gt;
	if obj.mainsnak and not isSpecial(obj.mainsnak) and obj.mainsnak.datatype == 'time' then&lt;br /&gt;
		return dateObject(obj.mainsnak.datavalue.value.time)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- else preload relevant data&lt;br /&gt;
	local qualifs = obj.qualifiers -- when obj is a statement, look in qualifiers&lt;br /&gt;
	local claims = obj.claims -- when obj is an item, look in claims&lt;br /&gt;
&lt;br /&gt;
	local pointprop = {'P585', 'P571'} -- dates corresponding to a punctual fact&lt;br /&gt;
	local beginprop = {'P580', 'P569'} -- start date, birth date == start of a date range&lt;br /&gt;
	local endingprop = {'P582', 'P570'}&lt;br /&gt;
&lt;br /&gt;
	local function getval(prop)&lt;br /&gt;
		local val&lt;br /&gt;
		if claims and claims[prop] and not isSpecial(claims[prop][1].mainsnak) then&lt;br /&gt;
			val = claims[prop][1].mainsnak.datavalue.value&lt;br /&gt;
		elseif qualifs and qualifs[prop] and not isSpecial(qualifs[prop][1]) then&lt;br /&gt;
			val = qualifs[prop][1].datavalue.value&lt;br /&gt;
		end&lt;br /&gt;
		if val then&lt;br /&gt;
			return dateObject(val)&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i, prop in pairs(pointprop) do&lt;br /&gt;
		local val = getval(prop)&lt;br /&gt;
		if val then return val end&lt;br /&gt;
	end&lt;br /&gt;
	--if no date has not been found, look for startdate or enddate&lt;br /&gt;
	local begin, ending&lt;br /&gt;
	for i, prop in pairs(beginprop) do&lt;br /&gt;
		begin = getval(prop)&lt;br /&gt;
		if begin then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, prop in pairs(endingprop) do&lt;br /&gt;
		ending = getval(prop)&lt;br /&gt;
		if ending then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if begin or ending then&lt;br /&gt;
		return rangeObject(begin, ending)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getFormattedDate(statement, params)&lt;br /&gt;
	local datetable = p.getDate(statement)&lt;br /&gt;
	if not datetable then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return objectToText(datetable, params)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasTargetValue(claim, target)&lt;br /&gt;
	if target == nil then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return sameValue(claim.mainsnak, target)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasRank(claim, target)&lt;br /&gt;
	if target == 'valid' then&lt;br /&gt;
		return hasRank(claim, 'preferred') or hasRank(claim, 'normal')&lt;br /&gt;
	else&lt;br /&gt;
		return claim.rank == target&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function bestRanked(claims)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local preferred, normal = {}, {}&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		if j.rank == 'preferred' then&lt;br /&gt;
			table.insert(preferred, j)&lt;br /&gt;
		elseif j.rank == 'normal' then&lt;br /&gt;
			table.insert(normal, j)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #preferred &amp;gt; 0 then&lt;br /&gt;
		return preferred&lt;br /&gt;
	else&lt;br /&gt;
		return normal&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasQualifier(claim, qualifier, qualifiervalues)&lt;br /&gt;
	if not qualifier then -- si aucun qualificatif est demandé, ça passe&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	qualifier = string.upper(qualifier)&lt;br /&gt;
	if not claim.qualifiers or not claim.qualifiers[qualifier] then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if type(qualifiervalues) == 'string' then&lt;br /&gt;
		qualifiervalues = mw.text.split(qualifiervalues, ',')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (not qualifiervalues) or (qualifiervalues == {}) then&lt;br /&gt;
		return true -- si aucune valeur spécifique n'est exigée&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i, j in pairs(claim.qualifiers[qualifier]) do&lt;br /&gt;
		for k, l in pairs(qualifiervalues) do&lt;br /&gt;
			if p.getRawvalue(j) == l then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
local function hasSource(statement, source, sourceproperty)&lt;br /&gt;
	if not statement.references then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	sourceproperty = string.upper(sourceproperty or 'P248')&lt;br /&gt;
	local sourcevalue = string.upper(source or '')&lt;br /&gt;
	for i, ref in pairs(statement.references) do&lt;br /&gt;
		for prop, content in pairs(ref.snaks) do&lt;br /&gt;
			if prop == sourceproperty then&lt;br /&gt;
				if sourcevalue == '' then&lt;br /&gt;
					return true&lt;br /&gt;
				else&lt;br /&gt;
					for j, k in pairs(content) do&lt;br /&gt;
						if p.getRawvalue(k) == source then&lt;br /&gt;
							return true&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hasDate(statement)&lt;br /&gt;
	if not statement.qualifiers then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local dateprops = {'P580', 'P585', 'P582'}&lt;br /&gt;
	for i, prop in pairs(dateprops) do&lt;br /&gt;
		if statement.qualifiers[prop] 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;
local function isInLanguage(snak, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?&lt;br /&gt;
	return not isSpecial(snak) and snak.datavalue.type == 'monolingualtext' and snak.datavalue.value.language == lang&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function numval(claims, numval) -- retourn les numval premières valeurs de la table claims&lt;br /&gt;
	local numval = tonumber(numval) or 0 -- raise an error if numval is not a positive integer ?&lt;br /&gt;
	if #claims &amp;lt;= numval then&lt;br /&gt;
		return claims&lt;br /&gt;
	end&lt;br /&gt;
	local newclaims = {}&lt;br /&gt;
	while #newclaims &amp;lt; numval do&lt;br /&gt;
		table.insert(newclaims, claims[#newclaims + 1])&lt;br /&gt;
	end&lt;br /&gt;
	return newclaims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.comparedate(a, b) -- returns true if a is earlier than B or if a has a date but not b&lt;br /&gt;
	if a and b then&lt;br /&gt;
		return a.timestamp &amp;lt; b.timestamp&lt;br /&gt;
	elseif a then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.chronosort(objs, inverted)&lt;br /&gt;
	table.sort(objs, function(a, b)&lt;br /&gt;
		local timeA = p.getDate(a)&lt;br /&gt;
		local timeB = p.getDate(b)&lt;br /&gt;
		if inverted then&lt;br /&gt;
			return p.comparedate(timeB, timeA)&lt;br /&gt;
		else&lt;br /&gt;
			return p.comparedate(timeA, timeB)&lt;br /&gt;
		end&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
	return objs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sortclaims(claims, sorttype)&lt;br /&gt;
	if type(sorttype) == 'function' then&lt;br /&gt;
		table.sort(claims, sorttype)&lt;br /&gt;
	elseif sorttype == 'chronological' then&lt;br /&gt;
		return p.chronosort(claims)&lt;br /&gt;
	elseif sorttype == 'inverted' then&lt;br /&gt;
		return p.chronosort(claims, true)&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getRawvalue(snak)&lt;br /&gt;
	return p.getDatavalue(snak, {displayformat = 'raw'})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showentity(entity, lang)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if type(entity) == 'string' then&lt;br /&gt;
		entity = p.getEntity(entity)&lt;br /&gt;
	end&lt;br /&gt;
	if not entity or not entity.type then&lt;br /&gt;
		return formatError('entity-not-found')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local label = p._getLabel(entity, lang)&lt;br /&gt;
	local id = entity.id&lt;br /&gt;
	local link = id&lt;br /&gt;
	if entity.type == 'property' then&lt;br /&gt;
		link = 'Property:' .. link&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return '[[' .. link .. '|' .. label .. ']] &amp;lt;small&amp;gt;(' .. id .. ')&amp;lt;/small&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDatavalue(snak, params)&lt;br /&gt;
	if isSpecial(snak) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not params then&lt;br /&gt;
		params = {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local displayformat = params.displayformat&lt;br /&gt;
	local datatype = snak.datavalue.type&lt;br /&gt;
	local value = snak.datavalue.value&lt;br /&gt;
&lt;br /&gt;
	if datatype == 'wikibase-entityid' then&lt;br /&gt;
		if type(displayformat) == 'function' then&lt;br /&gt;
			return displayformat(snak, params)&lt;br /&gt;
		end&lt;br /&gt;
		local prefix = 'Q'&lt;br /&gt;
		if snak.datavalue.value[&amp;quot;entity-type&amp;quot;] == 'property' then&lt;br /&gt;
			prefix = 'P'&lt;br /&gt;
		end&lt;br /&gt;
		local id = prefix .. tostring(value['numeric-id'])&lt;br /&gt;
		if displayformat == 'raw' then&lt;br /&gt;
			return id&lt;br /&gt;
		elseif displayformat == 'wikidatastyle' then&lt;br /&gt;
			return p.showentity(id, params.lang)&lt;br /&gt;
		else&lt;br /&gt;
			return p.formatEntity(id, params)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'string' then&lt;br /&gt;
		local showntext = params.showntext&lt;br /&gt;
		if displayformat == 'weblink' then&lt;br /&gt;
			if showntext then&lt;br /&gt;
				return '[' .. value .. ' ' .. showntext .. ']'&lt;br /&gt;
			else&lt;br /&gt;
				return value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if snak.datatype == 'math' and displayformat ~= 'raw' then&lt;br /&gt;
			value = mw.getCurrentFrame():extensionTag('math', value)&lt;br /&gt;
		end&lt;br /&gt;
		if params.urlpattern then&lt;br /&gt;
			showntext = mw.text.nowiki(showntext or value)&lt;br /&gt;
			value = mw.ustring.gsub(value, '%%', '%%%%') -- escape '%'&lt;br /&gt;
			value = '[' .. mw.ustring.gsub(mw.ustring.gsub(params.urlpattern, '$1', value), ' ', '%%20') .. ' ' .. showntext .. ']'&lt;br /&gt;
		end&lt;br /&gt;
		return value&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z&lt;br /&gt;
		if displayformat == 'raw' then&lt;br /&gt;
			return value.time&lt;br /&gt;
		else&lt;br /&gt;
			return objectToText(dateObject(value), params)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'globecoordinate' then&lt;br /&gt;
		-- retourne une table avec clés latitude, longitude, précision et globe à formater par un autre module (à changer ?)&lt;br /&gt;
		if displayformat == 'latitude' then&lt;br /&gt;
			return value.latitude&lt;br /&gt;
		elseif displayformat == 'longitude' then&lt;br /&gt;
			return value.longitude&lt;br /&gt;
		elseif displayformat == 'qualifier' then&lt;br /&gt;
			local coord = require 'Module:Coordinates'&lt;br /&gt;
			value.globe = require('Module:Wikidata/Globes')[value.globe]&lt;br /&gt;
			value.precision = nil&lt;br /&gt;
			return coord._coord(value)&lt;br /&gt;
		else&lt;br /&gt;
			value.globe = require('Module:Wikidata/Globes')[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack&lt;br /&gt;
			return value -- note : les coordonnées Wikidata peuvent être utilisée depuis Module:Coordinates. Faut-il aussi autoriser à appeler Module:Coordiantes ici ?&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif datatype == 'quantity' then -- todo : gérer les paramètre précision&lt;br /&gt;
		if displayformat == 'raw' then&lt;br /&gt;
			return tonumber(value.amount)&lt;br /&gt;
		else&lt;br /&gt;
			local formatNum = require 'Module:Formatnum'&lt;br /&gt;
			local number = formatNum.formatNum(value.amount, params.lang)&lt;br /&gt;
			local unit = mw.ustring.match(value.unit, '(Q%d+)')&lt;br /&gt;
			if unit then&lt;br /&gt;
				number = number .. '&amp;amp;nbsp;' .. p.formatEntity(unit, params)&lt;br /&gt;
			end&lt;br /&gt;
			return number&lt;br /&gt;
		end&lt;br /&gt;
	elseif datatype == 'monolingualtext' then&lt;br /&gt;
		return '&amp;lt;span lang=&amp;quot;' .. value.language .. '&amp;quot;&amp;gt;' .. value.text .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
	else&lt;br /&gt;
		return formatError( 'unknown-datavalue-type', datatype )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getMultipleClaims(args)&lt;br /&gt;
	local newargs = args&lt;br /&gt;
	local claims = {}&lt;br /&gt;
	for i, j in pairs(args.property) do&lt;br /&gt;
		newargs.property = j&lt;br /&gt;
		local newclaims = p.getClaims(args)&lt;br /&gt;
		if newclaims then&lt;br /&gt;
			for k, l in pairs(newclaims) do&lt;br /&gt;
				table.insert(claims, l)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args&lt;br /&gt;
	args = removeBlanks(args)&lt;br /&gt;
	if not args.property then&lt;br /&gt;
		return formatError( 'property-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	if type(args.property) == 'table' then&lt;br /&gt;
		return getMultipleClaims(args)&lt;br /&gt;
	end&lt;br /&gt;
	--Get entity&lt;br /&gt;
	if args.item then -- synonyms&lt;br /&gt;
		args.entity = args.item&lt;br /&gt;
	end&lt;br /&gt;
	local entity = args.entity&lt;br /&gt;
	if type(entity) ~= 'table' then&lt;br /&gt;
		entity = p.getEntity(entity)&lt;br /&gt;
	end&lt;br /&gt;
	local property = string.upper(args.property)&lt;br /&gt;
	if not entity or not entity.claims or not entity.claims[property] then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.rank then&lt;br /&gt;
		args.rank = 'best'&lt;br /&gt;
	end&lt;br /&gt;
	local claims = {}&lt;br /&gt;
-- ~= '' lorsque le paramètre est écrit mais laissé blanc dans une fonction frame&lt;br /&gt;
	for i, statement in pairs(entity.claims[property]) do&lt;br /&gt;
		if&lt;br /&gt;
			(&lt;br /&gt;
			not args.excludespecial&lt;br /&gt;
			or&lt;br /&gt;
			not (isSpecial(statement.mainsnak))&lt;br /&gt;
		)&lt;br /&gt;
		and&lt;br /&gt;
		(&lt;br /&gt;
			not args.targetvalue&lt;br /&gt;
			or&lt;br /&gt;
			hasTargetValue(statement, args.targetvalue)&lt;br /&gt;
		)&lt;br /&gt;
		and&lt;br /&gt;
		(&lt;br /&gt;
			not args.qualifier&lt;br /&gt;
			or&lt;br /&gt;
			hasQualifier(statement, args.qualifier, args.qualifiervalues or args.qualifiervalue)&lt;br /&gt;
		)&lt;br /&gt;
		and&lt;br /&gt;
		(&lt;br /&gt;
			not args.withsource or args.withsource == '-'&lt;br /&gt;
			or&lt;br /&gt;
			hasSource(statement, args.withsource, args.sourceproperty)&lt;br /&gt;
		)&lt;br /&gt;
		and&lt;br /&gt;
		(&lt;br /&gt;
			not args.isinlanguage&lt;br /&gt;
			or&lt;br /&gt;
			isInLanguage(statement.mainsnak, args.isinlanguage)&lt;br /&gt;
		)&lt;br /&gt;
		and&lt;br /&gt;
		(&lt;br /&gt;
			args.rank == 'best' -- rank == best est traité à a fin&lt;br /&gt;
			or&lt;br /&gt;
			hasRank(statement, args.rank)&lt;br /&gt;
		)&lt;br /&gt;
		then&lt;br /&gt;
			table.insert(claims, statement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #claims == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if args.rank == 'best' then&lt;br /&gt;
		claims = bestRanked(claims)&lt;br /&gt;
	end&lt;br /&gt;
	if args.sorttype then&lt;br /&gt;
		claims = p.sortclaims(claims, args.sorttype)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.numval then&lt;br /&gt;
		return numval(claims, args.numval)&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatClaimList(claims, args)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		claims[i] = p.formatStatement(j, args)&lt;br /&gt;
	end&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.stringTable(args) -- like getClaims, but get a list of string rather than a list of snaks, for easier manipulation&lt;br /&gt;
	local claims = p.getClaims(args)&lt;br /&gt;
	return p.formatClaimList(claims, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getQualifiers(statement, qualifs, params)&lt;br /&gt;
	if not statement.qualifiers then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for i, j in pairs(qualifs) do&lt;br /&gt;
		j = string.upper(j)&lt;br /&gt;
		if statement.qualifiers[j] then&lt;br /&gt;
			local inserted = false&lt;br /&gt;
			if statement.qualifiers[j][1].datatype == 'monolingualtext' then&lt;br /&gt;
				local in_preferred_lang&lt;br /&gt;
				for _, language in pairs(fb.fblist(params.lang or defaultlang)) do&lt;br /&gt;
					for _, snak in pairs(statement.qualifiers[j]) do&lt;br /&gt;
						if isInLanguage(snak, language) then&lt;br /&gt;
							in_preferred_lang = snak&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if in_preferred_lang then&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if in_preferred_lang then&lt;br /&gt;
					table.insert(vals, in_preferred_lang)&lt;br /&gt;
					inserted = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not inserted then&lt;br /&gt;
				for _, snak in pairs(statement.qualifiers[j]) do&lt;br /&gt;
					table.insert(vals, snak)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #vals == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return vals&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getFormattedQualifiers(statement, qualifs, params)&lt;br /&gt;
	if not params then params = {} end&lt;br /&gt;
	local qualiftable = getQualifiers(statement, qualifs, params)&lt;br /&gt;
	if not qualiftable then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i, j in pairs(qualiftable) do&lt;br /&gt;
		local params = params&lt;br /&gt;
		if j.datatype == 'globe-coordinate' then&lt;br /&gt;
			params.displayformat = 'qualifier'&lt;br /&gt;
		end&lt;br /&gt;
		qualiftable[i] = p.formatSnak(j, params)&lt;br /&gt;
	end&lt;br /&gt;
	return linguistic.conj(qualiftable, params.lang or defaultlang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatement( statement, args )&lt;br /&gt;
	if not statement.type or statement.type ~= 'statement' then&lt;br /&gt;
		return formatError( 'unknown-claim-type', statement.type )&lt;br /&gt;
	end&lt;br /&gt;
	if not args then args = {} end&lt;br /&gt;
	local lang = args.lang or defaultlang&lt;br /&gt;
	local str = p.formatSnak( statement.mainsnak, args )&lt;br /&gt;
	if args.showlang == true then&lt;br /&gt;
		str = showLang(statement, str)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local qualifs = args.showqualifiers&lt;br /&gt;
	if qualifs then&lt;br /&gt;
		if type(qualifs) == 'string' then&lt;br /&gt;
			qualifs = mw.text.split(qualifs, ',')&lt;br /&gt;
		end&lt;br /&gt;
		local foundvalues = p.getFormattedQualifiers(statement, qualifs, args)&lt;br /&gt;
		if foundvalues then&lt;br /&gt;
			if args.delimiter then&lt;br /&gt;
				str = str .. args.delimiter .. foundvalues&lt;br /&gt;
			else&lt;br /&gt;
				str = str .. linguistic.inparentheses(foundvalues, lang)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.showdate then -- when &amp;quot;showdate and p.chronosort are both set, date retrieval is performed twice&lt;br /&gt;
		local timedata = p.getDate(statement)&lt;br /&gt;
		if timedata then&lt;br /&gt;
			local formatteddate = objectToText(timedata, args)&lt;br /&gt;
			formatteddate = linguistic.inparentheses(formatteddate, lang)&lt;br /&gt;
			str = str .. '&amp;lt;small&amp;gt;' .. formatteddate ..'&amp;lt;/small&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.showsource and statement.references then&lt;br /&gt;
		local cite = require 'Module:Cite'&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		local sourcestring = ''&lt;br /&gt;
		for i, ref in pairs(statement.references) do&lt;br /&gt;
			if ref.snaks.P248 then&lt;br /&gt;
				for j, source in pairs(ref.snaks.P248) do&lt;br /&gt;
					if not isSpecial(source) then&lt;br /&gt;
						local page&lt;br /&gt;
						if ref.snaks.P304 and not isSpecial(ref.snaks.P304[1]) then&lt;br /&gt;
							page = ref.snaks.P304[1].datavalue.value&lt;br /&gt;
						end&lt;br /&gt;
						local s = cite.citeitem('Q' .. source.datavalue.value['numeric-id'], lang, page)&lt;br /&gt;
						s = frame:extensionTag( 'ref', s )&lt;br /&gt;
						sourcestring = sourcestring .. s&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			elseif ref.snaks.P854 and not isSpecial(ref.snaks.P854[1]) then&lt;br /&gt;
				s = frame:extensionTag( 'ref', p.getDatavalue(ref.snaks.P854[1]) )&lt;br /&gt;
				sourcestring = sourcestring .. s&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		str = str .. sourcestring&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSnak(snak, params)&lt;br /&gt;
	--local params = params or {} pour faciliter l'appel depuis d'autres modules&lt;br /&gt;
	if snak.snaktype == 'value' then&lt;br /&gt;
		return p.getDatavalue(snak, params)&lt;br /&gt;
	elseif snak.snaktype == 'somevalue' then&lt;br /&gt;
		return formatTheUnknown()&lt;br /&gt;
	elseif snak.snaktype == 'novalue' then&lt;br /&gt;
		return i18n('novalue') --todo&lt;br /&gt;
	else&lt;br /&gt;
		return formatError( 'unknown-snak-type', snak.snaktype )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function defaultLabel(entity, lang, displayformat) -- label when no label is available&lt;br /&gt;
	if entity and displayformat == 'id' then&lt;br /&gt;
		return entity.id&lt;br /&gt;
	end&lt;br /&gt;
	return i18n('no-label', lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getLabel(entity, lang, default)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if type(entity) ~= 'table' then&lt;br /&gt;
		entity = p.getEntity(entity)&lt;br /&gt;
	end&lt;br /&gt;
	if entity and entity.labels then&lt;br /&gt;
		for i, lg in pairs(fb.fblist(lang or defaultlang)) do&lt;br /&gt;
			if entity.labels[lg] then&lt;br /&gt;
				return entity.labels[lg].value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return defaultLabel(entity, lang, default)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getDescription(entity, lang)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return i18n('no description')&lt;br /&gt;
	end&lt;br /&gt;
	if type(entity) ~= 'table' then&lt;br /&gt;
		entity = p.getEntity(entity)&lt;br /&gt;
	end&lt;br /&gt;
	local descriptions = entity.descriptions&lt;br /&gt;
	if not descriptions then&lt;br /&gt;
		return i18n('no description')&lt;br /&gt;
	end&lt;br /&gt;
	if descriptions[lang] then&lt;br /&gt;
		return descriptions[lang].value&lt;br /&gt;
	end&lt;br /&gt;
	local langlist = fb.fblist(lang or defaultlang) -- list of fallback languages if no label in the desired language&lt;br /&gt;
	for i, lg in pairs(langlist) do&lt;br /&gt;
		if descriptions[lg] then&lt;br /&gt;
			return descriptions[lg].value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return i18n('no description')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wikipediaLink(entity, lang)&lt;br /&gt;
	local link = entity:getSitelink(lang .. 'wiki')&lt;br /&gt;
	if link then&lt;br /&gt;
		return ':' .. lang .. ':' .. link&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getLink(entity, typelink, lang)&lt;br /&gt;
	if not typelink or typelink == '-' then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if not lang then&lt;br /&gt;
		lang = defaultlang&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if typelink == 'wikidata' then&lt;br /&gt;
		if entity.type == 'property' then&lt;br /&gt;
			return 'd:P:' .. entity.id&lt;br /&gt;
		else&lt;br /&gt;
			return 'd:' .. entity.id&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif typelink == 'wikipedia' then&lt;br /&gt;
		return wikipediaLink(entity, lang)&lt;br /&gt;
&lt;br /&gt;
	elseif typelink == 'anywikipedia' then&lt;br /&gt;
		local fallbacklist = fb.fblist(lang)&lt;br /&gt;
		for i, lg in pairs(fallbacklist) do&lt;br /&gt;
			link = wikipediaLink(entity, lg)&lt;br /&gt;
			if link then return link end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formattedLabel(label, entity, args)&lt;br /&gt;
	if not args then args = {} end&lt;br /&gt;
	local link = getLink(entity, args.link, args.lang)&lt;br /&gt;
	if not link then&lt;br /&gt;
		link = getLink(entity, defaultlink, args.lang)&lt;br /&gt;
	end&lt;br /&gt;
	if not link then&lt;br /&gt;
		return label&lt;br /&gt;
	else&lt;br /&gt;
		return '[[' .. link .. '|' .. label .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.getmainid(claim)&lt;br /&gt;
	if claim and not isSpecial(claim.mainsnak) then&lt;br /&gt;
		return 'Q' .. claim.mainsnak.datavalue.value['numeric-id']&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatEntity( entity, args )&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if not args then args = {} end&lt;br /&gt;
	if type(entity) == 'string' then&lt;br /&gt;
		entity = p.getEntity(entity)&lt;br /&gt;
	end&lt;br /&gt;
	local label = p._getLabel(entity, args.lang)&lt;br /&gt;
	if not label then&lt;br /&gt;
		label = entity.id&lt;br /&gt;
	end&lt;br /&gt;
	return formattedLabel(label, entity, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getLabel(frame) -- simple for simple templates like {{Q|}}}&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local entity = args.entity&lt;br /&gt;
	local lang = args.lang&lt;br /&gt;
	if lang == '' then&lt;br /&gt;
		lang = defaultlang&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if string.sub(entity, 1, 10) == 'Property:P' then&lt;br /&gt;
		entity = string.sub(entity, 10)&lt;br /&gt;
	elseif (string.sub(entity, 1, 1) ~= 'P' and string.sub(entity, 1, 1) ~= 'Q') or (not tonumber(string.sub(entity, 2))) then&lt;br /&gt;
		return i18n('invalid-id')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.link or args.link == '' then -- by default: no link&lt;br /&gt;
		args.link = '-'&lt;br /&gt;
	end&lt;br /&gt;
	if args.link == '-' then&lt;br /&gt;
		return p._getLabel(entity, lang) or i18n('invalid-id')&lt;br /&gt;
	else&lt;br /&gt;
		return p.formatEntity(entity, args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatStatements( args )--Format statements and concat them cleanly&lt;br /&gt;
	if args.value == '-' then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	--If a value is already set, use it&lt;br /&gt;
	if args.value and args.value ~= '' then&lt;br /&gt;
		return args.value&lt;br /&gt;
	end&lt;br /&gt;
	local valuetable = p.stringTable(args)&lt;br /&gt;
	return tableToText(valuetable, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.showQualifier( args )&lt;br /&gt;
	local qualifs = args.qualifiers or args.qualifier&lt;br /&gt;
	if type(qualifs) == 'string' then&lt;br /&gt;
		qualifs = mw.text.split(qualifs, ',')&lt;br /&gt;
	end&lt;br /&gt;
	if not qualifs then&lt;br /&gt;
		return formatError( 'property-param-not-provided' )&lt;br /&gt;
	end&lt;br /&gt;
	local claims = p.getClaims(args)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local str = ''&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		local new = p.getFormattedQualifiers(j, qualifs, args) or ''&lt;br /&gt;
		str = str .. new&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatAndCat(args)&lt;br /&gt;
	local val = p._formatStatements(args)&lt;br /&gt;
	if val then&lt;br /&gt;
		return val .. addTrackingCat(args.property)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTheDate(args)&lt;br /&gt;
	local claims = p.getClaims(args)&lt;br /&gt;
	if not claims then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local formattedvalues = {}&lt;br /&gt;
	for i, j in pairs(claims) do&lt;br /&gt;
		table.insert(formattedvalues, p.getFormattedDate(j))&lt;br /&gt;
	end&lt;br /&gt;
	local val = linguistic.conj(formattedvalues)&lt;br /&gt;
	if val and args.addcat == true then&lt;br /&gt;
		return val .. addTrackingCat(args.property)&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
---FONCTIONS depuis le FRAME&lt;br /&gt;
function p.getaDate(frame)&lt;br /&gt;
	return p.getTheDate(frame.args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getQualifier(frame)&lt;br /&gt;
	return p.showQualifier(frame.args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDescription(frame) -- simple for simple templates like {{Q|}}}&lt;br /&gt;
	local entity = frame.args.entity&lt;br /&gt;
	local lang = frame.args.lang&lt;br /&gt;
&lt;br /&gt;
	return p._getDescription(entity, lang) or i18n('invalid-id')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatements( args )&lt;br /&gt;
	return p._formatStatements( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatStatementsE(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?)&lt;br /&gt;
		for k, v in pairs(frame.args) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		args = frame&lt;br /&gt;
	end&lt;br /&gt;
	return p._formatStatements( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatAndCat(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?)&lt;br /&gt;
		for k, v in pairs(frame.args) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		args = frame&lt;br /&gt;
	end&lt;br /&gt;
	return p._formatAndCat( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getEntityFromId(id)&lt;br /&gt;
	return p.getEntity(id)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Message_box/configuration&amp;diff=3664</id>
		<title>Module:Message box/configuration</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Message_box/configuration&amp;diff=3664"/>
				<updated>2016-12-09T09:19:51Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;local ambox = { 	types = { 		speedy = { 			class = 'ambox-speedy', 			image = 'Ambox speedy deletion.png' 		}, 		delete = { 			class = 'ambox-delete', 			image = 'Ambox deleti...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local ambox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'ambox-speedy',&lt;br /&gt;
			image = 'Ambox speedy deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'ambox-delete',&lt;br /&gt;
			image = 'Ambox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'ambox-content',&lt;br /&gt;
			image = 'Ambox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'ambox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'ambox-move',&lt;br /&gt;
			image = 'Ambox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'ambox-protection',&lt;br /&gt;
			image = 'Ambox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'ambox-notice',&lt;br /&gt;
			image = 'Ambox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default                     = 'notice',&lt;br /&gt;
	allowBlankParams            = {'talk', 'sect', 'date', 'issue', 'fix', 'subst'},&lt;br /&gt;
	allowSmall                  = true,&lt;br /&gt;
	smallParam                  = 'left',&lt;br /&gt;
	smallClass                  = 'mbox-small-left',&lt;br /&gt;
	substCheck                  = true,&lt;br /&gt;
	classes                     = {'metadata', 'plainlinks', 'ambox'},&lt;br /&gt;
	imageEmptyCell              = true,&lt;br /&gt;
	imageCheckBlank             = true,&lt;br /&gt;
	imageSmallSize              = '20x20px',&lt;br /&gt;
	imageCellDiv                = true,&lt;br /&gt;
	useCollapsibleTextFields    = true,&lt;br /&gt;
	imageRightNone              = true,&lt;br /&gt;
	sectionDefault              = 'article',&lt;br /&gt;
	allowMainspaceCategories    = true,&lt;br /&gt;
	templateCategory            = 'Article message templates',&lt;br /&gt;
        templateCategoryRequireName = true,&lt;br /&gt;
	templateErrorCategory       = 'Article message templates with missing parameters',&lt;br /&gt;
	templateErrorParamsToCheck  = {'issue', 'fix', 'subst'}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local cmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'cmbox-speedy',&lt;br /&gt;
			image = 'Cmbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'cmbox-delete',&lt;br /&gt;
			image = 'Cmbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'cmbox-content',&lt;br /&gt;
			image = 'Cmbox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'cmbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'cmbox-move',&lt;br /&gt;
			image = 'Cmbox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'cmbox-protection',&lt;br /&gt;
			image = 'Cmbox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'cmbox-notice',&lt;br /&gt;
			image = 'Cmbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'plainlinks', 'cmbox'},&lt;br /&gt;
	imageEmptyCell       = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local fmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = 'fmbox-warning',&lt;br /&gt;
			image = 'Cmbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		editnotice = {&lt;br /&gt;
			class = 'fmbox-editnotice',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		},&lt;br /&gt;
		system = {&lt;br /&gt;
			class = 'fmbox-system',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'system',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	allowId                = true,&lt;br /&gt;
	classes              = {'plainlinks', 'fmbox'},&lt;br /&gt;
	imageEmptyCell       = false,&lt;br /&gt;
	imageRightNone       = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local imbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'imbox-speedy',&lt;br /&gt;
			image = 'Imbox speedy deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'imbox-delete',&lt;br /&gt;
			image = 'Imbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'imbox-content',&lt;br /&gt;
			image = 'Imbox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'imbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'imbox-move',&lt;br /&gt;
			image = 'Imbox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'imbox-protection',&lt;br /&gt;
			image = 'Imbox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = 'imbox-license',&lt;br /&gt;
			image = 'Imbox license.png'&lt;br /&gt;
		},&lt;br /&gt;
		featured = {&lt;br /&gt;
			class = 'imbox-featured',&lt;br /&gt;
			image = 'Imbox featured.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'imbox-notice',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'imbox'},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	below                = true,&lt;br /&gt;
	templateCategory     = 'File message boxes'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local ombox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'ombox-speedy',&lt;br /&gt;
			image = 'Imbox speedy deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'ombox-delete',&lt;br /&gt;
			image = 'Imbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'ombox-content',&lt;br /&gt;
			image = 'Imbox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'ombox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'ombox-move',&lt;br /&gt;
			image = 'Imbox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'ombox-protection',&lt;br /&gt;
			image = 'Imbox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'ombox-notice',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'plainlinks', 'ombox'},&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageRightNone       = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local tmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'tmbox-speedy',&lt;br /&gt;
			image = 'Imbox speedy deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'tmbox-delete',&lt;br /&gt;
			image = 'Imbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'tmbox-content',&lt;br /&gt;
			image = 'Imbox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'tmbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg '&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'tmbox-move',&lt;br /&gt;
			image = 'Imbox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'tmbox-protection',&lt;br /&gt;
			image = 'Imbox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'tmbox-notice',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'plainlinks', 'tmbox'},&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageRightNone       = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageEmptyCellStyle  = true,&lt;br /&gt;
	templateCategory     = 'Talk message boxes'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	ambox = ambox,&lt;br /&gt;
	cmbox = cmbox,&lt;br /&gt;
	fmbox = fmbox,&lt;br /&gt;
	imbox = imbox,&lt;br /&gt;
	ombox = ombox,&lt;br /&gt;
	tmbox = tmbox&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Arguments&amp;diff=3663</id>
		<title>Module:Arguments</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Arguments&amp;diff=3663"/>
				<updated>2016-12-09T09:14:06Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;-- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require('libraryUtil')&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don't have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		val = val:match('^%s*(.-)%s*$')&lt;br /&gt;
		if val == '' then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		return val:match('^%s*(.-)%s*$')&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		if val:find('%S') then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType('getArgs', 1, frame, 'table', true)&lt;br /&gt;
	checkType('getArgs', 2, options, 'table', true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame's availability. If we weren't&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == 'table' and type(frame.getParent) == 'function' then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame's title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub('/sandbox$', '')&lt;br /&gt;
				local found = false&lt;br /&gt;
				if type(options.wrappers) == 'table' then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if v == title then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				elseif options.wrappers == title then&lt;br /&gt;
					found = true&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn't set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.	&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don't have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= 'function' then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option 'valueFunc'&amp;quot;&lt;br /&gt;
					.. '(function expected, got '&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. ')',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(iterator, tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table using the specified iterator. If a value is already&lt;br /&gt;
		-- present it is not overwritten; tables listed earlier have precedence.&lt;br /&gt;
		-- We are also memoizing nil values, but those values can be&lt;br /&gt;
		-- overwritten.&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in iterator(t) do&lt;br /&gt;
				if metaArgs[key] == nil then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = true&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal == nil then&lt;br /&gt;
				nilArgs[key] = true&lt;br /&gt;
			else&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				'could not write to argument table key &amp;quot;'&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. '&amp;quot;; the table is read-only',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				'could not write to argument table key &amp;quot;'&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. '&amp;quot;; overwriting existing arguments is not permitted',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn't looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = true&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(pairs, argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
			metatable.doneIpairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return pairs(metaArgs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function ()&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		if not metatable.doneIpairs then&lt;br /&gt;
			mergeArgs(ipairs, argTables)&lt;br /&gt;
			metatable.doneIpairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return ipairs(metaArgs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Yesno&amp;diff=3662</id>
		<title>Template:Yesno</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Yesno&amp;diff=3662"/>
				<updated>2016-12-09T09:13:18Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#switch: {{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;lc: {{{1|¬}}} }}  |no  |n  |0        = {{{no|&amp;lt;!-- null --&amp;gt;}}}  |         = {{{blank|{{{...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#switch: {{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;lc: {{{1|¬}}} }}&lt;br /&gt;
 |no&lt;br /&gt;
 |n&lt;br /&gt;
 |0        = {{{no|&amp;lt;!-- null --&amp;gt;}}}&lt;br /&gt;
 |         = {{{blank|{{{no|&amp;lt;!-- null --&amp;gt;}}}}}}&lt;br /&gt;
 |¬        = {{{¬|}}}&lt;br /&gt;
 |yes&lt;br /&gt;
 |y&lt;br /&gt;
 |1        = {{{yes|yes}}}&lt;br /&gt;
 |#default = {{{def|{{{yes|yes}}}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Yesno&amp;diff=3661</id>
		<title>Module:Yesno</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Yesno&amp;diff=3661"/>
				<updated>2016-12-09T09:12:48Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;-- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default)     val = type(va...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to the template {{yesno}}.&lt;br /&gt;
return function (val, default)&lt;br /&gt;
    val = type(val) == 'string' and mw.ustring.lower(val) or val -- put in lower case&lt;br /&gt;
    if val == nil then&lt;br /&gt;
        return nil&lt;br /&gt;
    elseif val == false or val == 'no' or val == 'n' or val == 'false' or tonumber(val) == 0 then&lt;br /&gt;
        return false&lt;br /&gt;
    elseif val == true or val == 'yes' or val == 'y' or val == 'true' or tonumber(val) == 1 then&lt;br /&gt;
        return true&lt;br /&gt;
    else&lt;br /&gt;
        return default&lt;br /&gt;
    end&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Namespace_detect&amp;diff=3660</id>
		<title>Template:Namespace detect</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Namespace_detect&amp;diff=3660"/>
				<updated>2016-12-09T09:11:43Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{#invoke:Namespace detect|main}}&amp;lt;noinclude&amp;gt;  {{documentation}} &amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt; &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Namespace detect|main}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Namespace_detect&amp;diff=3659</id>
		<title>Module:Namespace detect</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Namespace_detect&amp;diff=3659"/>
				<updated>2016-12-09T09:10:53Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;---------------------------------------------------------------------------------------------------- --...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                                                                                --&lt;br /&gt;
--                                           NAMESPACE DETECT                                     --&lt;br /&gt;
--                                                                                                --&lt;br /&gt;
--      This module implements the {{namespace detect}} template in Lua, with a few               --&lt;br /&gt;
--      improvements: all namespaces and all namespace aliases are supported, and namespace       --&lt;br /&gt;
--      names are detected automatically for the local wiki. The module can also use the          --&lt;br /&gt;
--      corresponding subject namespace value if it is used on a talk page. Parameter names       --&lt;br /&gt;
--      can be configured for different wikis by altering the values in the &amp;quot;cfg&amp;quot; table.          --&lt;br /&gt;
--                                                                                                --&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                          Configuration data                                    --&lt;br /&gt;
--      Language-specific parameter names can be set here.                                        --&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {}&lt;br /&gt;
&lt;br /&gt;
-- This parameter displays content for the main namespace:&lt;br /&gt;
cfg.main = 'main'&lt;br /&gt;
&lt;br /&gt;
-- This parameter displays in talk namespaces:&lt;br /&gt;
cfg.talk = 'talk'&lt;br /&gt;
&lt;br /&gt;
-- This parameter displays content for &amp;quot;other&amp;quot; namespaces (namespaces for which&lt;br /&gt;
-- parameters have not been specified, or for when cfg.demospace is set to cfg.other):&lt;br /&gt;
cfg.other = 'other'&lt;br /&gt;
&lt;br /&gt;
-- This parameter makes talk pages behave as though they are the corresponding subject namespace.&lt;br /&gt;
-- Note that this parameter is used with [[Module:Yesno]]. Edit that module to change&lt;br /&gt;
-- the default values of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc.&lt;br /&gt;
cfg.subjectns = 'subjectns'&lt;br /&gt;
&lt;br /&gt;
-- This parameter sets a demonstration namespace:&lt;br /&gt;
cfg.demospace = 'demospace'&lt;br /&gt;
&lt;br /&gt;
-- This parameter sets a specific page to compare:&lt;br /&gt;
cfg.page = 'page'&lt;br /&gt;
&lt;br /&gt;
-- The header for the namespace column in the wikitable containing the list of possible subject-space parameters.&lt;br /&gt;
cfg.wikitableNamespaceHeader = 'Namespace'&lt;br /&gt;
&lt;br /&gt;
-- The header for the wikitable containing the list of possible subject-space parameters.&lt;br /&gt;
cfg.wikitableAliasesHeader = 'Aliases'&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                       End configuration data                                   --&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.getPageObject(page)&lt;br /&gt;
	-- Get the page object, passing the function through pcall in case we are over the expensive function count limit.&lt;br /&gt;
	if page then&lt;br /&gt;
		local noError, pageObject = pcall(mw.title.new, page)&lt;br /&gt;
		if not noError then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return pageObject&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getParamMappings()&lt;br /&gt;
	--[[ Returns a table of how parameter names map to namespace names. The keys are the actual namespace &lt;br /&gt;
	  names, in lower case, and the values are the possible parameter names for that namespace, also in&lt;br /&gt;
	  lower case. The table entries are structured like this:&lt;br /&gt;
		{&lt;br /&gt;
			[''] = {'main'},&lt;br /&gt;
			['wikipedia'] = {'wikipedia', 'project', 'wp'},&lt;br /&gt;
			...&lt;br /&gt;
		}&lt;br /&gt;
	]] &lt;br /&gt;
	local mappings = {}&lt;br /&gt;
	mappings[mw.ustring.lower(mw.site.namespaces[0].name)] = {cfg.main}&lt;br /&gt;
	mappings[cfg.talk] = {cfg.talk}&lt;br /&gt;
	for nsid, ns in pairs(mw.site.subjectNamespaces) do&lt;br /&gt;
		if nsid ~= 0 then -- Exclude main namespace.&lt;br /&gt;
			local nsname = mw.ustring.lower(ns.name)&lt;br /&gt;
			local canonicalName = mw.ustring.lower(ns.canonicalName)&lt;br /&gt;
			mappings[nsname] = {nsname}&lt;br /&gt;
			if canonicalName ~= nsname then&lt;br /&gt;
				table.insert(mappings[nsname], canonicalName)&lt;br /&gt;
			end&lt;br /&gt;
			for _, alias in ipairs(ns.aliases) do&lt;br /&gt;
				table.insert(mappings[nsname], mw.ustring.lower(alias))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mappings&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getNamespace(args)&lt;br /&gt;
	-- Gets the namespace name from the page object.&lt;br /&gt;
	local page = args[cfg.page]&lt;br /&gt;
	local demospace = args[cfg.demospace]&lt;br /&gt;
	local subjectns = args[cfg.subjectns]&lt;br /&gt;
	local ret&lt;br /&gt;
	if demospace then&lt;br /&gt;
		-- Handle &amp;quot;demospace = main&amp;quot; properly.&lt;br /&gt;
		if mw.ustring.lower(demospace) == cfg.main then&lt;br /&gt;
			ret = mw.site.namespaces[0].name&lt;br /&gt;
		else&lt;br /&gt;
			ret = demospace&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local pageObject = p.getPageObject(page)&lt;br /&gt;
		if pageObject then&lt;br /&gt;
			if pageObject.isTalkPage then&lt;br /&gt;
				-- If cfg.subjectns is set, get the subject namespace, otherwise use cfg.talk.&lt;br /&gt;
				if yesno(subjectns) then&lt;br /&gt;
					ret = mw.site.namespaces[pageObject.namespace].subject.name&lt;br /&gt;
				else&lt;br /&gt;
					ret = cfg.talk&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				ret = pageObject.nsText&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return nil -- return nil if the page object doesn't exist.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = mw.ustring.gsub(ret, '_', ' ')&lt;br /&gt;
	return mw.ustring.lower(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	-- Get the namespace to compare the parameters to, and the parameter mapping table.&lt;br /&gt;
	local namespace = getNamespace(args)&lt;br /&gt;
	local mappings = p.getParamMappings()&lt;br /&gt;
	-- Check for any matches in the namespace arguments. The order we check them doesn't matter,&lt;br /&gt;
	-- as there can only be one match.&lt;br /&gt;
	for ns, params in pairs(mappings) do&lt;br /&gt;
		if ns == namespace then&lt;br /&gt;
			-- Check all aliases for matches. The default local namespace is checked first, as&lt;br /&gt;
			-- {{namespace detect}} checked these before alias names.&lt;br /&gt;
			for _, param in ipairs(params) do&lt;br /&gt;
				if args[param] ~= nil then&lt;br /&gt;
					return args[param]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- If there were no matches, return parameters for other namespaces. This happens if there&lt;br /&gt;
	-- was no text specified for the namespace that was detected or if the demospace parameter&lt;br /&gt;
	-- is not a valid namespace. Note that the parameter for the detected namespace must be&lt;br /&gt;
	-- completely absent for this to happen, not merely blank.&lt;br /&gt;
	if args[cfg.other] ~= nil then&lt;br /&gt;
		return args[cfg.other]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	-- If called via #invoke, use the args passed into the invoking template, or the args&lt;br /&gt;
	-- passed to #invoke if any exist. Otherwise assume args are being passed directly in.&lt;br /&gt;
	local origArgs&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		origArgs = frame:getParent().args&lt;br /&gt;
		for k, v in pairs(frame.args) do&lt;br /&gt;
			origArgs = frame.args&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		origArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
	-- Trim whitespace and remove blank arguments for demospace and page parameters.&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		if type(v) == 'string' then&lt;br /&gt;
			v = mw.text.trim(v) -- Trim whitespace.&lt;br /&gt;
		end&lt;br /&gt;
		if k == cfg.demospace or k == cfg.page then&lt;br /&gt;
			if v ~= '' then&lt;br /&gt;
				args[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.table(frame)&lt;br /&gt;
	--[[ Create a wikitable of all subject namespace parameters, for documentation purposes. The talk &lt;br /&gt;
	  parameter is optional, in case it needs to be excluded in the documentation.&lt;br /&gt;
	]]&lt;br /&gt;
	local useTalk = type(frame) == 'table' and type(frame.args) == 'table' and frame.args.talk == 'yes' -- Whether to use the talk parameter.&lt;br /&gt;
	local mappings = p.getParamMappings()&lt;br /&gt;
	-- Start the wikitable.&lt;br /&gt;
	local ret = '{| class=&amp;quot;wikitable&amp;quot;'&lt;br /&gt;
		.. '\n|-'&lt;br /&gt;
		.. '\n! ' .. cfg.wikitableNamespaceHeader&lt;br /&gt;
		.. '\n! ' .. cfg.wikitableAliasesHeader&lt;br /&gt;
	&lt;br /&gt;
	-- Generate the row for the main namespace, as we want this to be first in the list.&lt;br /&gt;
	ret = ret .. '\n|-'&lt;br /&gt;
		.. '\n| &amp;lt;code&amp;gt;' .. cfg.main .. '&amp;lt;/code&amp;gt;'&lt;br /&gt;
		.. '\n|'&lt;br /&gt;
	if useTalk then&lt;br /&gt;
		ret = ret .. '\n|-'&lt;br /&gt;
			.. '\n| &amp;lt;code&amp;gt;' .. cfg.talk .. '&amp;lt;/code&amp;gt;'&lt;br /&gt;
			.. '\n|'&lt;br /&gt;
	end&lt;br /&gt;
	-- Enclose all parameter names in &amp;lt;code&amp;gt; tags.&lt;br /&gt;
	for ns, params in pairs(mappings) do&lt;br /&gt;
		if ns ~= mw.site.namespaces[0].name then&lt;br /&gt;
			for i, param in ipairs(params) do&lt;br /&gt;
				mappings[ns][i] = '&amp;lt;code&amp;gt;' .. param .. '&amp;lt;/code&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Generate the other wikitable rows.&lt;br /&gt;
	for ns, params in pairs(mappings) do&lt;br /&gt;
		if ns ~= mw.site.namespaces[0].name then -- Ignore the main namespace.&lt;br /&gt;
			ret = ret .. '\n|-'&lt;br /&gt;
				.. '\n| ' .. params[1]&lt;br /&gt;
				.. '\n| ' .. table.concat(params, ', ', 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- End the wikitable.&lt;br /&gt;
	ret = ret .. '\n|-'&lt;br /&gt;
		.. '\n|}'&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Category_handler&amp;diff=3658</id>
		<title>Template:Category handler</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Category_handler&amp;diff=3658"/>
				<updated>2016-12-09T09:09:48Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{#invoke:Category handler|main}}&amp;lt;noinclude&amp;gt; {{documentation}} &amp;lt;!-- Add categories to the /doc subpage, and interwikis to Wikidata. --&amp;gt; &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Category handler|main}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage, and interwikis to Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Category_handler&amp;diff=3657</id>
		<title>Module:Category handler</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Category_handler&amp;diff=3657"/>
				<updated>2016-12-09T09:07:56Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;---------------------------------------------------------------------------------------------------------- --...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----------------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                                                                                      --&lt;br /&gt;
--                                          CATEGORY HANDLER                                            --&lt;br /&gt;
--                                                                                                      --&lt;br /&gt;
--      This module implements the {{category handler}} template in Lua, with a few improvements: all   --&lt;br /&gt;
--      namespaces and all namespace aliases are supported, and namespace names are detected            --&lt;br /&gt;
--      automatically for the local wiki. This module requires [[Module:Namespace detect]] and          --&lt;br /&gt;
--      [[Module:Yesno]] to be available on the local wiki. It can be configured for different wikis    --&lt;br /&gt;
--      by altering the values in the &amp;quot;cfg&amp;quot; table.                                                      --&lt;br /&gt;
--                                                                                                      --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                          Configuration data                                          --&lt;br /&gt;
--                      Language-specific parameter names and values can be set here.                   --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {}&lt;br /&gt;
&lt;br /&gt;
-- The following config values set the names of parameters that suppress categorisation. They are used&lt;br /&gt;
-- with Module:Yesno, and work as follows:&lt;br /&gt;
--&lt;br /&gt;
-- cfg.nocat:&lt;br /&gt;
-- Result of yesno(args[cfg.nocat])         Effect&lt;br /&gt;
-- true                                     Categorisation is suppressed&lt;br /&gt;
-- false                                    Categorisation is allowed, and the blacklist check is skipped&lt;br /&gt;
-- nil                                      Categorisation is allowed&lt;br /&gt;
--&lt;br /&gt;
-- cfg.categories:&lt;br /&gt;
-- Result of yesno(args[cfg.categories])    Effect&lt;br /&gt;
-- true                                     Categorisation is allowed, and the blacklist check is skipped&lt;br /&gt;
-- false                                    Categorisation is suppressed&lt;br /&gt;
-- nil                                      Categorisation is allowed&lt;br /&gt;
cfg.nocat = 'nocat'    &lt;br /&gt;
cfg.categories = 'categories'&lt;br /&gt;
&lt;br /&gt;
-- The parameter name for the legacy &amp;quot;category2&amp;quot; parameter. This skips the blacklist if set to the&lt;br /&gt;
-- cfg.category2Yes value, and suppresses categorisation if present but equal to anything other than&lt;br /&gt;
-- cfg.category2Yes or cfg.category2Negative.&lt;br /&gt;
cfg.category2 = 'category2'&lt;br /&gt;
cfg.category2Yes = 'yes'&lt;br /&gt;
cfg.category2Negative = '¬'&lt;br /&gt;
&lt;br /&gt;
-- cfg.subpage is the parameter name to specify how to behave on subpages. cfg.subpageNo is the value to&lt;br /&gt;
-- specify to not categorise on subpages; cfg.only is the value to specify to only categorise on subpages.&lt;br /&gt;
cfg.subpage = 'subpage'&lt;br /&gt;
cfg.subpageNo = 'no'&lt;br /&gt;
cfg.subpageOnly = 'only'&lt;br /&gt;
&lt;br /&gt;
-- The parameter for data to return in all namespaces.&lt;br /&gt;
cfg.all = 'all'&lt;br /&gt;
&lt;br /&gt;
-- The parameter name for data to return if no data is specified for the namespace that is detected. This&lt;br /&gt;
-- must be the same as the cfg.other parameter in [[Module:Namespace detect]].&lt;br /&gt;
cfg.other = 'other'&lt;br /&gt;
&lt;br /&gt;
-- The parameter name used to specify a page other than the current page; used for testing and&lt;br /&gt;
-- demonstration. This must be the same as the cfg.page parameter in [[Module:Namespace detect]].&lt;br /&gt;
cfg.page = 'page'&lt;br /&gt;
&lt;br /&gt;
-- The categorisation blacklist. Pages that match Lua patterns in this list will not be categorised.&lt;br /&gt;
-- (However, see the explanation of cfg.nocat, cfg.categories and cfg.category2 for some exceptions.)&lt;br /&gt;
-- If the namespace name has a space in, it must be written with an underscore, e.g. &amp;quot;Wikipedia_talk&amp;quot;.&lt;br /&gt;
-- Other parts of the title can have either underscores or spaces.&lt;br /&gt;
cfg.blacklist = {&lt;br /&gt;
    '^Main Page$', -- don't categorise the main page.&lt;br /&gt;
    &lt;br /&gt;
    -- Don't categorise the following pages or their subpages.&lt;br /&gt;
    '^Wikipedia:Cascade%-protected items$',&lt;br /&gt;
    '^Wikipedia:Cascade%-protected items/.*$',&lt;br /&gt;
    '^User:UBX$', -- The userbox &amp;quot;template&amp;quot; space.&lt;br /&gt;
    '^User:UBX/.*$',&lt;br /&gt;
    '^User_talk:UBX$',&lt;br /&gt;
    '^User_talk:UBX/.*$',&lt;br /&gt;
    &lt;br /&gt;
    -- Don't categorise subpages of these pages, but allow&lt;br /&gt;
    -- categorisation of the base page.&lt;br /&gt;
    '^Wikipedia:Template messages/.+$',&lt;br /&gt;
    &lt;br /&gt;
    '/[aA]rchive' -- Don't categorise archives.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- This is a table of namespaces to categorise by default. They should be in the format of parameter&lt;br /&gt;
-- names accepted by [[Module:Namespace detect]].&lt;br /&gt;
cfg.defaultNamespaces = {&lt;br /&gt;
    'main',&lt;br /&gt;
    'file',&lt;br /&gt;
    'help',&lt;br /&gt;
    'category'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                          End configuration data                                      --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Get dependent modules&lt;br /&gt;
local nsDetect = require('Module:Namespace detect')&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                          Local functions                                             --&lt;br /&gt;
--      The following are internal functions, which we do not want to be accessible from other modules. --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Find whether we need to return a category or not.&lt;br /&gt;
local function needsCategory(pageObject, args)&lt;br /&gt;
    -- Don't categorise if the relevant options are set.&lt;br /&gt;
    if yesno(args[cfg.nocat])&lt;br /&gt;
        or yesno(args[cfg.categories]) == false&lt;br /&gt;
        or (&lt;br /&gt;
            args[cfg.category2] &lt;br /&gt;
            and args[cfg.category2] ~= cfg.category2Yes &lt;br /&gt;
            and args[cfg.category2] ~= cfg.category2Negative&lt;br /&gt;
        )&lt;br /&gt;
    then&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    -- If there is no pageObject available, then that either means that we are over&lt;br /&gt;
    -- the expensive function limit or that the title specified was invalid. Invalid&lt;br /&gt;
    -- titles will probably only be a problem during testing, so we choose the best&lt;br /&gt;
    -- fallback for being over the expensive function limit. The fallback behaviour&lt;br /&gt;
    -- of the old template was to assume the page was not a subpage, so we will do&lt;br /&gt;
    -- the same here.&lt;br /&gt;
    if args[cfg.subpage] == cfg.subpageNo and pageObject and pageObject.isSubpage then&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    if args[cfg.subpage] == cfg.subpageOnly &lt;br /&gt;
        and (not pageObject or (pageObject and not pageObject.isSubpage))&lt;br /&gt;
    then&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Find whether we need to check the blacklist or not.&lt;br /&gt;
local function needsBlacklistCheck(args)&lt;br /&gt;
    if yesno(args[cfg.nocat]) == false&lt;br /&gt;
        or yesno(args[cfg.categories]) == true&lt;br /&gt;
        or args[cfg.category2] == cfg.category2Yes&lt;br /&gt;
    then&lt;br /&gt;
        return false&lt;br /&gt;
    else&lt;br /&gt;
        return true&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Find whether any namespace parameters have been specified.&lt;br /&gt;
-- Mappings is the table of parameter mappings taken from&lt;br /&gt;
-- [[Module:Namespace detect]].&lt;br /&gt;
local function nsParamsExist(mappings, args)&lt;br /&gt;
    if args[cfg.all] or args[cfg.other] then&lt;br /&gt;
        return true&lt;br /&gt;
    end&lt;br /&gt;
    for ns, params in pairs(mappings) do&lt;br /&gt;
        for i, param in ipairs(params) do&lt;br /&gt;
            if args[param] then&lt;br /&gt;
                return true&lt;br /&gt;
            end&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;
--                                          Global functions                                            --&lt;br /&gt;
--      The following functions are global, because we want them to be accessible from #invoke and      --&lt;br /&gt;
--      from other Lua modules.                                                                         --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Find if a string matches the blacklist. Returns the match if one is found, or nil otherwise.&lt;br /&gt;
-- Input should be a page title with a namespace prefix, e.g. &amp;quot;Wikipedia talk:Articles for deletion&amp;quot;.&lt;br /&gt;
function p.matchesBlacklist(page)&lt;br /&gt;
    if type(page) ~= 'string' then return end&lt;br /&gt;
    for i, pattern in ipairs(cfg.blacklist) do&lt;br /&gt;
        local match = mw.ustring.match(page, pattern)&lt;br /&gt;
        if match then&lt;br /&gt;
            return match&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- The main structure of the module. Checks whether we need to categorise,&lt;br /&gt;
-- and then passes the relevant arguments to [[Module:Namespace detect]].&lt;br /&gt;
function p._main(args)&lt;br /&gt;
    -- Get the page object and argument mappings from&lt;br /&gt;
    -- [[Module:Namespace detect]], to save us from having to rewrite the&lt;br /&gt;
    -- code.&lt;br /&gt;
    local pageObject = nsDetect.getPageObject(args[cfg.page])&lt;br /&gt;
    local mappings = nsDetect.getParamMappings()&lt;br /&gt;
    &lt;br /&gt;
    if not needsCategory(pageObject, args) then return end&lt;br /&gt;
    &lt;br /&gt;
    local ret = ''&lt;br /&gt;
    -- Check blacklist if necessary.&lt;br /&gt;
    if not needsBlacklistCheck(args) or not p.matchesBlacklist(pageObject.prefixedText) then&lt;br /&gt;
        if not nsParamsExist(mappings, args) then&lt;br /&gt;
            -- No namespace parameters exist; basic usage. Pass args[1] to&lt;br /&gt;
            -- [[Module:Namespace detect]] using the default namespace&lt;br /&gt;
            -- parameters, and return the result.&lt;br /&gt;
            local ndargs = {}&lt;br /&gt;
            for _, ndarg in ipairs(cfg.defaultNamespaces) do&lt;br /&gt;
                ndargs[ndarg] = args[1]&lt;br /&gt;
            end&lt;br /&gt;
            ndargs.page = args.page&lt;br /&gt;
            ndargs.demospace = args.demospace&lt;br /&gt;
            local ndresult = nsDetect._main(ndargs)&lt;br /&gt;
            if ndresult then&lt;br /&gt;
                ret = ret .. ndresult&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            -- Namespace parameters exist; advanced usage.&lt;br /&gt;
            -- If the all parameter is specified, return it.&lt;br /&gt;
            local all = args.all&lt;br /&gt;
            if type(all) == 'string' then&lt;br /&gt;
                ret = ret .. all&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            -- Get the arguments to pass to [[Module:Namespace detect]].&lt;br /&gt;
            local ndargs = {}&lt;br /&gt;
            for ns, params in pairs(mappings) do&lt;br /&gt;
                for _, param in ipairs(params) do&lt;br /&gt;
                    ndargs[param] = args[param] or args[cfg.other] or nil&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            ndargs.other = args.other&lt;br /&gt;
            ndargs.page = args.page&lt;br /&gt;
            ndargs.demospace = args.demospace&lt;br /&gt;
            &lt;br /&gt;
            local data = nsDetect._main(ndargs)&lt;br /&gt;
            &lt;br /&gt;
            -- Work out what to return based on the result of the namespace detect call.&lt;br /&gt;
            local datanum = tonumber(data)&lt;br /&gt;
            if type(datanum) == 'number' then&lt;br /&gt;
                -- &amp;quot;data&amp;quot; is a number, so return that positional parameter.&lt;br /&gt;
                -- Remove non-positive integer values, as only positive integers&lt;br /&gt;
                -- from 1-10 were used with the old template.&lt;br /&gt;
                if datanum &amp;gt; 0 and math.floor(datanum) == datanum then&lt;br /&gt;
                    local dataArg = args[datanum]&lt;br /&gt;
                    if type(dataArg) == 'string' then&lt;br /&gt;
                        ret = ret .. dataArg&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                -- &amp;quot;data&amp;quot; is not a number, so return it as it is.&lt;br /&gt;
                if type(data) == 'string' then&lt;br /&gt;
                    ret = ret .. data&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    -- If called via #invoke, use the args passed into the invoking&lt;br /&gt;
    -- template, or the args passed to #invoke if any exist. Otherwise&lt;br /&gt;
    -- assume args are being passed directly in.&lt;br /&gt;
    local origArgs&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        origArgs = frame:getParent().args&lt;br /&gt;
        for k, v in pairs(frame.args) do&lt;br /&gt;
            origArgs = frame.args&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        origArgs = frame&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Trim whitespace and remove blank arguments for the following args:&lt;br /&gt;
    -- 1, 2, 3 etc., &amp;quot;nocat&amp;quot;, &amp;quot;categories&amp;quot;, &amp;quot;subpage&amp;quot;, and &amp;quot;page&amp;quot;.&lt;br /&gt;
    local args = {}&lt;br /&gt;
    for k, v in pairs(origArgs) do&lt;br /&gt;
        if type(v) == 'string' then&lt;br /&gt;
            v = mw.text.trim(v) -- Trim whitespace.&lt;br /&gt;
        end&lt;br /&gt;
        if type(k) == 'number'&lt;br /&gt;
            or k == cfg.nocat&lt;br /&gt;
            or k == cfg.categories&lt;br /&gt;
            or k == cfg.subpage&lt;br /&gt;
            or k == cfg.page&lt;br /&gt;
        then&lt;br /&gt;
            if v ~= '' then&lt;br /&gt;
                args[k] = v&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            args[k] = v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Lower-case &amp;quot;nocat&amp;quot;, &amp;quot;categories&amp;quot;, &amp;quot;category2&amp;quot;, and &amp;quot;subpage&amp;quot;. These&lt;br /&gt;
    -- parameters are put in lower case whenever they appear in the old&lt;br /&gt;
    -- template, so we can just do it once here and save ourselves some work.&lt;br /&gt;
    local lowercase = {cfg.nocat, cfg.categories, cfg.category2, cfg.subpage}&lt;br /&gt;
    for _, v in ipairs(lowercase) do&lt;br /&gt;
        local argVal = args[v]&lt;br /&gt;
        if type(argVal) == 'string' then&lt;br /&gt;
            args[v] = mw.ustring.lower(argVal)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:No_globals&amp;diff=3656</id>
		<title>Module:No globals</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:No_globals&amp;diff=3656"/>
				<updated>2016-12-08T19:17:06Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;-- dummy comment local mt = getmetatable(_G) or {} function mt.__index (t, k) 	if k ~= 'arg' then 		error('Tried to read nil global ' .. tostring(k), 2) 	end 	return nil end f...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- dummy comment&lt;br /&gt;
local mt = getmetatable(_G) or {}&lt;br /&gt;
function mt.__index (t, k)&lt;br /&gt;
	if k ~= 'arg' then&lt;br /&gt;
		error('Tried to read nil global ' .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
function mt.__newindex(t, k, v)&lt;br /&gt;
	if k ~= 'arg' then&lt;br /&gt;
		error('Tried to write global ' .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	rawset(t, k, v)&lt;br /&gt;
end&lt;br /&gt;
setmetatable(_G, mt)&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Message_box/doc&amp;diff=3655</id>
		<title>Module:Message box/doc</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Message_box/doc&amp;diff=3655"/>
				<updated>2016-12-08T19:12:30Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;This is a meta-module that implements the message box templates {{tl|mbox}}, {{tl|ambox}}, {{tl|cmbox}}, {{tl|fmbox}}, {{tl|imbox}}, {{tl|ombox}}, and {{tl|tmbox}}. It is inte...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a meta-module that implements the message box templates {{tl|mbox}}, {{tl|ambox}}, {{tl|cmbox}}, {{tl|fmbox}}, {{tl|imbox}}, {{tl|ombox}}, and {{tl|tmbox}}. It is intended to be used from Lua modules, and should not be used directly from wiki pages. If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
To use this module from another Lua module, first you need to load it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local messageBox = require('Module:Message box')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To create a message box, use the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; function. It takes two parameters: the first is the box type (as a string), and the second is a table containing the message box parameters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local box = messageBox.main( boxType, {&lt;br /&gt;
    param1 = param1,&lt;br /&gt;
    param2 = param2,&lt;br /&gt;
    -- More parameters...&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are seven available box types:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Box type !! Template !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mbox&amp;lt;/code&amp;gt; || {{tl|mbox}} || For message boxes to be used in multiple namespaces&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ambox&amp;lt;/code&amp;gt; || {{tl|ambox}} || For article message boxes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;cmbox&amp;lt;/code&amp;gt; || {{tl|cmbox}} || For category message boxes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fmbox&amp;lt;/code&amp;gt; || {{tl|fmbox}} || For interface message boxes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;imbox&amp;lt;/code&amp;gt; || {{tl|imbox}} || For file namespace message boxes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tmbox&amp;lt;/code&amp;gt; || {{tl|tmbox}} || For talk page message boxes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ombox&amp;lt;/code&amp;gt; || {{tl|ombox}} || For message boxes in other namespaces&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See the template page of each box type for the available parameters.&lt;br /&gt;
&lt;br /&gt;
== Usage from #invoke ==&lt;br /&gt;
&lt;br /&gt;
As well as the &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; function, this module has separate functions for each box type. They are accessed using the code &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Message box|mbox|...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Message box|ambox|...}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, etc. These will work when called from other modules, but they access code used to process arguments passed from #invoke, and so calling them will be less efficient than calling &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
&lt;br /&gt;
The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at [[Module:Message box/configuration]]. Here are the various configuration options and what they mean:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;types&amp;lt;/code&amp;gt; - a table containing data used by the type parameter of the message box. The table keys are the values that can be passed to the type parameter, and the table values are tables containing the class and the image used by that type.&lt;br /&gt;
* &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; - the type to use if no value was passed to the type parameter, or if an invalid value was specified.&lt;br /&gt;
* &amp;lt;code&amp;gt;showInvalidTypeError&amp;lt;/code&amp;gt; - whether to show an error if the value passed to the type parameter was invalid.&lt;br /&gt;
* &amp;lt;code&amp;gt;allowBlankParams&amp;lt;/code&amp;gt; - usually blank values are stripped from parameters passed to the module. However, whitespace is preserved for the parameters included in the allowBlankParams table.&lt;br /&gt;
* &amp;lt;code&amp;gt;allowId&amp;lt;/code&amp;gt; - whether it is possible to set an &amp;quot;id&amp;quot; attribute to the html table tag.&lt;br /&gt;
* &amp;lt;code&amp;gt;allowSmall&amp;lt;/code&amp;gt; - whether a small version of the message box can be produced with &amp;quot;small=yes&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;smallParam&amp;lt;/code&amp;gt; - a custom name for the small parameter. For example, if set to &amp;quot;left&amp;quot; you can produce a small message box using &amp;quot;small=left&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;smallClass&amp;lt;/code&amp;gt; - the class to use for small message boxes.&lt;br /&gt;
* &amp;lt;code&amp;gt;substCheck&amp;lt;/code&amp;gt; - whether to perform a subst check or not.&lt;br /&gt;
* &amp;lt;code&amp;gt;classes&amp;lt;/code&amp;gt; - an array of classes to use with the message box.&lt;br /&gt;
* &amp;lt;code&amp;gt;usePlainlinksParam&amp;lt;/code&amp;gt; - whether to allow &amp;quot;plainlinks=no&amp;quot; to turn off the plainlinks class.&lt;br /&gt;
* &amp;lt;code&amp;gt;imageEmptyCell&amp;lt;/code&amp;gt; - whether to use an empty {{tag|td}} cell if there is no image set. This is used to preserve spacing for message boxes with a width of less than 100% of the screen.&lt;br /&gt;
* &amp;lt;code&amp;gt;imageEmptyCellStyle&amp;lt;/code&amp;gt; - whether empty image cells should be styled.&lt;br /&gt;
* &amp;lt;code&amp;gt;imageCheckBlank&amp;lt;/code&amp;gt; - whether &amp;quot;image=blank&amp;quot; results in no image being displayed.&lt;br /&gt;
* &amp;lt;code&amp;gt;imageSmallSize&amp;lt;/code&amp;gt; - usually, images used in small message boxes are set to 30x30px. This sets a custom size.&lt;br /&gt;
* &amp;lt;code&amp;gt;imageCellDiv&amp;lt;/code&amp;gt; - whether to enclose the image in a div enforcing a maximum image size.&lt;br /&gt;
* &amp;lt;code&amp;gt;useCollapsibleTextFields&amp;lt;/code&amp;gt; - whether to use text fields that can be collapsed, i.e. &amp;quot;issue&amp;quot;, &amp;quot;fix&amp;quot;, &amp;quot;talk&amp;quot;, etc. Currently only used in ambox.&lt;br /&gt;
* &amp;lt;code&amp;gt;imageRightNone&amp;lt;/code&amp;gt; - whether imageright=none results in no image being displayed on the right-hand side of the message box.&lt;br /&gt;
* &amp;lt;code&amp;gt;sectionDefault&amp;lt;/code&amp;gt; - the default name for the &amp;quot;section&amp;quot; parameter. Depends on &amp;lt;code&amp;gt;useCollapsibleTextFields&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;allowMainspaceCategories&amp;lt;/code&amp;gt; - allow categorisation in the main namespace.&lt;br /&gt;
* &amp;lt;code&amp;gt;templateCategory&amp;lt;/code&amp;gt; - the name of a category to be placed on the template page.&lt;br /&gt;
* &amp;lt;code&amp;gt;templateCategoryRequireName&amp;lt;/code&amp;gt; - whether the &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; parameter is required to display the template category.&lt;br /&gt;
* &amp;lt;code&amp;gt;templateErrorCategory&amp;lt;/code&amp;gt; - the name of the error category to be used on the template page.&lt;br /&gt;
* &amp;lt;code&amp;gt;templateErrorParamsToCheck&amp;lt;/code&amp;gt; - an array of parameter names to check. If any are absent, the &amp;lt;code&amp;gt;templateErrorCategory&amp;lt;/code&amp;gt; is applied to the template page.&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Message_box&amp;diff=3654</id>
		<title>Module:Message box</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Message_box&amp;diff=3654"/>
				<updated>2016-12-08T19:11:51Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;-- This is a meta-module for producing message box templates, including -- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.  -- Load necessary mo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This is a meta-module for producing message box templates, including&lt;br /&gt;
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.&lt;br /&gt;
&lt;br /&gt;
-- Load necessary modules.&lt;br /&gt;
require('Module:No globals')&lt;br /&gt;
local getArgs&lt;br /&gt;
local categoryHandler = require('Module:Category handler')._main&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
-- Get a language object for formatDate and ucfirst.&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getTitleObject(...)&lt;br /&gt;
	-- Get the title object, passing the function through pcall&lt;br /&gt;
	-- in case we are over the expensive function count limit.&lt;br /&gt;
	local success, title = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
	-- Returns the union of two arrays.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for i, v in ipairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(ret)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(args, prefix)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')&lt;br /&gt;
		if num then&lt;br /&gt;
			table.insert(nums, tonumber(num))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Box class definition&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local MessageBox = {}&lt;br /&gt;
MessageBox.__index = MessageBox&lt;br /&gt;
&lt;br /&gt;
function MessageBox.new(boxType, args, cfg)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	local obj = {}&lt;br /&gt;
&lt;br /&gt;
	-- Set the title object and the namespace.&lt;br /&gt;
	obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Set the config for our box type.&lt;br /&gt;
	obj.cfg = cfg[boxType]&lt;br /&gt;
	if not obj.cfg then&lt;br /&gt;
		local ns = obj.title.namespace&lt;br /&gt;
		-- boxType is &amp;quot;mbox&amp;quot; or invalid input&lt;br /&gt;
		if ns == 0 then&lt;br /&gt;
			obj.cfg = cfg.ambox -- main namespace&lt;br /&gt;
		elseif ns == 6 then&lt;br /&gt;
			obj.cfg = cfg.imbox -- file namespace&lt;br /&gt;
		elseif ns == 14 then&lt;br /&gt;
			obj.cfg = cfg.cmbox -- category namespace&lt;br /&gt;
		else&lt;br /&gt;
			local nsTable = mw.site.namespaces[ns]&lt;br /&gt;
			if nsTable and nsTable.isTalk then&lt;br /&gt;
				obj.cfg = cfg.tmbox -- any talk namespace&lt;br /&gt;
			else&lt;br /&gt;
				obj.cfg = cfg.ombox -- other namespaces or invalid input&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the arguments, and remove all blank arguments except for the ones&lt;br /&gt;
	-- listed in cfg.allowBlankParams.&lt;br /&gt;
	do&lt;br /&gt;
		local newArgs = {}&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if v ~= '' then&lt;br /&gt;
				newArgs[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for i, param in ipairs(obj.cfg.allowBlankParams or {}) do&lt;br /&gt;
			newArgs[param] = args[param]&lt;br /&gt;
		end&lt;br /&gt;
		obj.args = newArgs&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Define internal data structure.&lt;br /&gt;
	obj.categories = {}&lt;br /&gt;
	obj.classes = {}&lt;br /&gt;
&lt;br /&gt;
	return setmetatable(obj, MessageBox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addCat(ns, cat, sort)&lt;br /&gt;
	if not cat then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if sort then&lt;br /&gt;
		cat = string.format('[[Category:%s|%s]]', cat, sort)&lt;br /&gt;
	else&lt;br /&gt;
		cat = string.format('[[Category:%s]]', cat)&lt;br /&gt;
	end&lt;br /&gt;
	self.categories[ns] = self.categories[ns] or {}&lt;br /&gt;
	table.insert(self.categories[ns], cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addClass(class)&lt;br /&gt;
	if not class then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(self.classes, class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setParameters()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Get type data.&lt;br /&gt;
	self.type = args.type&lt;br /&gt;
	local typeData = cfg.types[self.type]&lt;br /&gt;
	self.invalidTypeError = cfg.showInvalidTypeError&lt;br /&gt;
		and self.type&lt;br /&gt;
		and not typeData&lt;br /&gt;
	typeData = typeData or cfg.types[cfg.default]&lt;br /&gt;
	self.typeClass = typeData.class&lt;br /&gt;
	self.typeImage = typeData.image&lt;br /&gt;
&lt;br /&gt;
	-- Find if the box has been wrongly substituted.&lt;br /&gt;
	self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'&lt;br /&gt;
&lt;br /&gt;
	-- Find whether we are using a small message box.&lt;br /&gt;
	self.isSmall = cfg.allowSmall and (&lt;br /&gt;
		cfg.smallParam and args.small == cfg.smallParam&lt;br /&gt;
		or not cfg.smallParam and yesno(args.small)&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	-- Add attributes, classes and styles.&lt;br /&gt;
	if cfg.allowId then&lt;br /&gt;
		self.id = args.id&lt;br /&gt;
	end&lt;br /&gt;
	self:addClass(&lt;br /&gt;
		cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks'&lt;br /&gt;
	)&lt;br /&gt;
	for _, class in ipairs(cfg.classes or {}) do&lt;br /&gt;
		self:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self:addClass(cfg.smallClass or 'mbox-small')&lt;br /&gt;
	end&lt;br /&gt;
	self:addClass(self.typeClass)&lt;br /&gt;
	self:addClass(args.class)&lt;br /&gt;
	self.style = args.style&lt;br /&gt;
	self.attrs = args.attrs&lt;br /&gt;
&lt;br /&gt;
	-- Set text style.&lt;br /&gt;
	self.textstyle = args.textstyle&lt;br /&gt;
&lt;br /&gt;
	-- Find if we are on the template page or not. This functionality is only&lt;br /&gt;
	-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory&lt;br /&gt;
	-- and cfg.templateCategoryRequireName are set.&lt;br /&gt;
	self.useCollapsibleTextFields = cfg.useCollapsibleTextFields&lt;br /&gt;
	if self.useCollapsibleTextFields&lt;br /&gt;
		or cfg.templateCategory&lt;br /&gt;
		and cfg.templateCategoryRequireName&lt;br /&gt;
	then&lt;br /&gt;
		self.name = args.name&lt;br /&gt;
		if self.name then&lt;br /&gt;
			local templateName = mw.ustring.match(&lt;br /&gt;
				self.name,&lt;br /&gt;
				'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'&lt;br /&gt;
			) or self.name&lt;br /&gt;
			templateName = 'Template:' .. templateName&lt;br /&gt;
			self.templateTitle = getTitleObject(templateName)&lt;br /&gt;
		end&lt;br /&gt;
		self.isTemplatePage = self.templateTitle&lt;br /&gt;
			and mw.title.equals(self.title, self.templateTitle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Process data for collapsible text fields. At the moment these are only&lt;br /&gt;
	-- used in {{ambox}}.&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- Get the self.issue value.&lt;br /&gt;
		if self.isSmall and args.smalltext then&lt;br /&gt;
			self.issue = args.smalltext&lt;br /&gt;
		else&lt;br /&gt;
			local sect&lt;br /&gt;
			if args.sect == '' then&lt;br /&gt;
				sect = 'This ' .. (cfg.sectionDefault or 'page')&lt;br /&gt;
			elseif type(args.sect) == 'string' then&lt;br /&gt;
				sect = 'This ' .. args.sect&lt;br /&gt;
			end&lt;br /&gt;
			local issue = args.issue&lt;br /&gt;
			issue = type(issue) == 'string' and issue ~= '' and issue or nil&lt;br /&gt;
			local text = args.text&lt;br /&gt;
			text = type(text) == 'string' and text or nil&lt;br /&gt;
			local issues = {}&lt;br /&gt;
			table.insert(issues, sect)&lt;br /&gt;
			table.insert(issues, issue)&lt;br /&gt;
			table.insert(issues, text)&lt;br /&gt;
			self.issue = table.concat(issues, ' ')&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get the self.talk value.&lt;br /&gt;
		local talk = args.talk&lt;br /&gt;
		-- Show talk links on the template page or template subpages if the talk&lt;br /&gt;
		-- parameter is blank.&lt;br /&gt;
		if talk == ''&lt;br /&gt;
			and self.templateTitle&lt;br /&gt;
			and (&lt;br /&gt;
				mw.title.equals(self.templateTitle, self.title)&lt;br /&gt;
				or self.title:isSubpageOf(self.templateTitle)&lt;br /&gt;
			)&lt;br /&gt;
		then&lt;br /&gt;
			talk = '#'&lt;br /&gt;
		elseif talk == '' then&lt;br /&gt;
			talk = nil&lt;br /&gt;
		end&lt;br /&gt;
		if talk then&lt;br /&gt;
			-- If the talk value is a talk page, make a link to that page. Else&lt;br /&gt;
			-- assume that it's a section heading, and make a link to the talk&lt;br /&gt;
			-- page of the current page with that section heading.&lt;br /&gt;
			local talkTitle = getTitleObject(talk)&lt;br /&gt;
			local talkArgIsTalkPage = true&lt;br /&gt;
			if not talkTitle or not talkTitle.isTalkPage then&lt;br /&gt;
				talkArgIsTalkPage = false&lt;br /&gt;
				talkTitle = getTitleObject(&lt;br /&gt;
					self.title.text,&lt;br /&gt;
					mw.site.namespaces[self.title.namespace].talk.id&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
			if talkTitle and talkTitle.exists then&lt;br /&gt;
				local talkText = 'Relevant discussion may be found on'&lt;br /&gt;
				if talkArgIsTalkPage then&lt;br /&gt;
					talkText = string.format(&lt;br /&gt;
						'%s [[%s|%s]].',&lt;br /&gt;
						talkText,&lt;br /&gt;
						talk,&lt;br /&gt;
						talkTitle.prefixedText&lt;br /&gt;
					)&lt;br /&gt;
				else&lt;br /&gt;
					talkText = string.format(&lt;br /&gt;
						'%s the [[%s#%s|talk page]].',&lt;br /&gt;
						talkText,&lt;br /&gt;
						talkTitle.prefixedText,&lt;br /&gt;
						talk&lt;br /&gt;
					)&lt;br /&gt;
				end&lt;br /&gt;
				self.talk = talkText&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get other values.&lt;br /&gt;
		self.fix = args.fix ~= '' and args.fix or nil&lt;br /&gt;
		local date&lt;br /&gt;
		if args.date and args.date ~= '' then&lt;br /&gt;
			date = args.date&lt;br /&gt;
		elseif args.date == '' and self.isTemplatePage then&lt;br /&gt;
			date = lang:formatDate('F Y')&lt;br /&gt;
		end&lt;br /&gt;
		if date then&lt;br /&gt;
			self.date = string.format(&amp;quot; &amp;lt;small&amp;gt;''(%s)''&amp;lt;/small&amp;gt;&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
		self.info = args.info&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the non-collapsible text field. At the moment this is used by all box&lt;br /&gt;
	-- types other than ambox, and also by ambox when small=yes.&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self.text = args.smalltext or args.text&lt;br /&gt;
	else&lt;br /&gt;
		self.text = args.text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the below row.&lt;br /&gt;
	self.below = cfg.below and args.below&lt;br /&gt;
&lt;br /&gt;
	-- General image settings.&lt;br /&gt;
	self.imageCellDiv = not self.isSmall and cfg.imageCellDiv&lt;br /&gt;
	self.imageEmptyCell = cfg.imageEmptyCell&lt;br /&gt;
	if cfg.imageEmptyCellStyle then&lt;br /&gt;
		self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Left image settings.&lt;br /&gt;
	local imageLeft = self.isSmall and args.smallimage or args.image&lt;br /&gt;
	if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'&lt;br /&gt;
		or not cfg.imageCheckBlank and imageLeft ~= 'none'&lt;br /&gt;
	then&lt;br /&gt;
		self.imageLeft = imageLeft&lt;br /&gt;
		if not imageLeft then&lt;br /&gt;
			local imageSize = self.isSmall&lt;br /&gt;
				and (cfg.imageSmallSize or '30x30px')&lt;br /&gt;
				or '40x40px'&lt;br /&gt;
			self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage&lt;br /&gt;
				or 'Imbox notice.png', imageSize)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Right image settings.&lt;br /&gt;
	local imageRight = self.isSmall and args.smallimageright or args.imageright&lt;br /&gt;
	if not (cfg.imageRightNone and imageRight == 'none') then&lt;br /&gt;
		self.imageRight = imageRight&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setMainspaceCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	if not cfg.allowMainspaceCategories then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for _, prefix in ipairs{'cat', 'category', 'all'} do&lt;br /&gt;
		args[prefix .. '1'] = args[prefix]&lt;br /&gt;
		nums = union(nums, getArgNums(args, prefix))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- The following is roughly equivalent to the old {{Ambox/category}}.&lt;br /&gt;
	local date = args.date&lt;br /&gt;
	date = type(date) == 'string' and date&lt;br /&gt;
	local preposition = 'from'&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		local mainCat = args['cat' .. tostring(num)]&lt;br /&gt;
			or args['category' .. tostring(num)]&lt;br /&gt;
		local allCat = args['all' .. tostring(num)]&lt;br /&gt;
		mainCat = type(mainCat) == 'string' and mainCat&lt;br /&gt;
		allCat = type(allCat) == 'string' and allCat&lt;br /&gt;
		if mainCat and date and date ~= '' then&lt;br /&gt;
			local catTitle = string.format('%s %s %s', mainCat, preposition, date)&lt;br /&gt;
			self:addCat(0, catTitle)&lt;br /&gt;
			catTitle = getTitleObject('Category:' .. catTitle)&lt;br /&gt;
			if not catTitle or not catTitle.exists then&lt;br /&gt;
				self:addCat(0, 'Articles with invalid date parameter in template')&lt;br /&gt;
			end&lt;br /&gt;
		elseif mainCat and (not date or date == '') then&lt;br /&gt;
			self:addCat(0, mainCat)&lt;br /&gt;
		end&lt;br /&gt;
		if allCat then&lt;br /&gt;
			self:addCat(0, allCat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setTemplateCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Add template categories.&lt;br /&gt;
	if cfg.templateCategory then&lt;br /&gt;
		if cfg.templateCategoryRequireName then&lt;br /&gt;
			if self.isTemplatePage then&lt;br /&gt;
				self:addCat(10, cfg.templateCategory)&lt;br /&gt;
			end&lt;br /&gt;
		elseif not self.title.isSubpage then&lt;br /&gt;
			self:addCat(10, cfg.templateCategory)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add template error categories.&lt;br /&gt;
	if cfg.templateErrorCategory then&lt;br /&gt;
		local templateErrorCategory = cfg.templateErrorCategory&lt;br /&gt;
		local templateCat, templateSort&lt;br /&gt;
		if not self.name and not self.title.isSubpage then&lt;br /&gt;
			templateCat = templateErrorCategory&lt;br /&gt;
		elseif self.isTemplatePage then&lt;br /&gt;
			local paramsToCheck = cfg.templateErrorParamsToCheck or {}&lt;br /&gt;
			local count = 0&lt;br /&gt;
			for i, param in ipairs(paramsToCheck) do&lt;br /&gt;
				if not args[param] then&lt;br /&gt;
					count = count + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if count &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = tostring(count)&lt;br /&gt;
			end&lt;br /&gt;
			if self.categoryNums and #self.categoryNums &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = 'C'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		self:addCat(10, templateCat, templateSort)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setAllNamespaceCategories()&lt;br /&gt;
	-- Set categories for all namespaces.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText&lt;br /&gt;
		self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSubstituted then&lt;br /&gt;
		self:addCat('all', 'Pages with incorrectly substituted templates')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setCategories()&lt;br /&gt;
	if self.title.namespace == 0 then&lt;br /&gt;
		self:setMainspaceCategories()&lt;br /&gt;
	elseif self.title.namespace == 10 then&lt;br /&gt;
		self:setTemplateCategories()&lt;br /&gt;
	end&lt;br /&gt;
	self:setAllNamespaceCategories()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:renderCategories()&lt;br /&gt;
	-- Convert category tables to strings and pass them through&lt;br /&gt;
	-- [[Module:Category handler]].&lt;br /&gt;
	return categoryHandler{&lt;br /&gt;
		main = table.concat(self.categories[0] or {}),&lt;br /&gt;
		template = table.concat(self.categories[10] or {}),&lt;br /&gt;
		all = table.concat(self.categories.all or {}),&lt;br /&gt;
		nocat = self.args.nocat,&lt;br /&gt;
		page = self.args.page&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:export()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root:tag('b')&lt;br /&gt;
			:addClass('error')&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				'Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.',&lt;br /&gt;
				mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box table.&lt;br /&gt;
	local boxTable = root:tag('table')&lt;br /&gt;
	boxTable:attr('id', self.id or nil)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		boxTable:addClass(class or nil)&lt;br /&gt;
	end&lt;br /&gt;
	boxTable&lt;br /&gt;
		:cssText(self.style or nil)&lt;br /&gt;
		:attr('role', 'presentation')&lt;br /&gt;
&lt;br /&gt;
	if self.attrs then&lt;br /&gt;
		boxTable:attr(self.attrs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	local row = boxTable:tag('tr')&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = row:tag('td'):addClass('mbox-image')&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageLeftCell so that the image&lt;br /&gt;
			-- is inside it. Divs use style=&amp;quot;width: 52px;&amp;quot;, which limits the&lt;br /&gt;
			-- image width to 52px. If any images in a div are wider than that,&lt;br /&gt;
			-- they may overlap with the text or cause other display problems.&lt;br /&gt;
			imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')&lt;br /&gt;
		end&lt;br /&gt;
		imageLeftCell:wikitext(self.imageLeft or nil)&lt;br /&gt;
	elseif self.imageEmptyCell then&lt;br /&gt;
		-- Some message boxes define an empty cell if no image is specified, and&lt;br /&gt;
		-- some don't. The old template code in templates where empty cells are&lt;br /&gt;
		-- specified gives the following hint: &amp;quot;No image. Cell with some width&lt;br /&gt;
		-- or padding necessary for text cell to have 100% width.&amp;quot;&lt;br /&gt;
		row:tag('td')&lt;br /&gt;
			:addClass('mbox-empty-cell')&lt;br /&gt;
			:cssText(self.imageEmptyCellStyle or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = row:tag('td'):addClass('mbox-text')&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be&lt;br /&gt;
		-- collapsible. At the moment, only ambox uses this.&lt;br /&gt;
		textCell:cssText(self.textstyle or nil)&lt;br /&gt;
		local textCellSpan = textCell:tag('span')&lt;br /&gt;
		textCellSpan&lt;br /&gt;
			:addClass('mbox-text-span')&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if not self.isSmall then&lt;br /&gt;
			textCellSpan:tag('span')&lt;br /&gt;
				:addClass('hide-when-compact')&lt;br /&gt;
				:wikitext(self.talk and (' ' .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (' ' .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellSpan:wikitext(self.date and (' ' .. self.date) or nil)&lt;br /&gt;
		if not self.isSmall then&lt;br /&gt;
			textCellSpan&lt;br /&gt;
				:tag('span')&lt;br /&gt;
				:addClass('hide-when-compact')&lt;br /&gt;
				:wikitext(self.info and (' ' .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.text or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = row:tag('td'):addClass('mbox-imageright')&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageRightCell so that the image&lt;br /&gt;
			-- is inside it.&lt;br /&gt;
			imageRightCell = imageRightCell:tag('div'):css('width', '52px')&lt;br /&gt;
		end&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:wikitext(self.imageRight or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		boxTable:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', self.imageRight and '3' or '2')&lt;br /&gt;
				:addClass('mbox-text')&lt;br /&gt;
				:cssText(self.textstyle or nil)&lt;br /&gt;
				:wikitext(self.below or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root:tag('div')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				'This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.',&lt;br /&gt;
				self.type or ''&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root:wikitext(self:renderCategories() or nil)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p, mt = {}, {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- For testing.&lt;br /&gt;
	return {&lt;br /&gt;
		MessageBox = MessageBox&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(boxType, args, cfgTables)&lt;br /&gt;
	local box = MessageBox.new(boxType, args, cfgTables or mw.loadData('Module:Message box/configuration'))&lt;br /&gt;
	box:setParameters()&lt;br /&gt;
	box:setCategories()&lt;br /&gt;
	return box:export()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mt.__index(t, k)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		if not getArgs then&lt;br /&gt;
			getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
		end&lt;br /&gt;
		return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return setmetatable(p, mt)&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Pp-template&amp;diff=3653</id>
		<title>Template:Pp-template</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Pp-template&amp;diff=3653"/>
				<updated>2016-12-08T19:10:28Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{pp-meta |type={{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}    |semi    |autoconfir...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{pp-meta&lt;br /&gt;
|type={{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}&lt;br /&gt;
   |semi&lt;br /&gt;
   |autoconfirmed=semi&lt;br /&gt;
   |administrator&lt;br /&gt;
   |full&lt;br /&gt;
   |sysop=indef&lt;br /&gt;
   |move=move&lt;br /&gt;
   |templateeditor=template&lt;br /&gt;
   |#default=template&amp;lt;!--fallback value--&amp;gt;}}&lt;br /&gt;
|small={{{small|yes}}}&lt;br /&gt;
|right={{{right|}}}&lt;br /&gt;
|demospace={{{demospace|}}}&lt;br /&gt;
|demolevel={{#ifeq:{{PAGENAME}}/{{NAMESPACE}}|{{SUBPAGENAME}}/{{ns:Template}}|{{{demolevel|undefined}}}|{{#ifeq:{{lc:{{SUBPAGENAME}}}}|sandbox|sysop|{{{demolevel|undefined}}}}}}}&lt;br /&gt;
|expiry=&amp;lt;!--not applicable--&amp;gt;&lt;br /&gt;
|dispute=no&lt;br /&gt;
|icon-text=This {{#ifeq:{{NAMESPACE}}|{{ns:6}}|image, included in a high-risk template or message,|high-risk {{pp-meta/pagetype}} }} is permanently {{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}&lt;br /&gt;
   |semi&lt;br /&gt;
   |autoconfirmed=semi-protected from editing&lt;br /&gt;
   |move=move-protected&lt;br /&gt;
   |administrator&lt;br /&gt;
   |full&lt;br /&gt;
   |sysop&lt;br /&gt;
   |templateeditor&lt;br /&gt;
   |#default=&amp;lt;!--fallback value--&amp;gt; protected from editing}} to prevent vandalism.&lt;br /&gt;
|reason-text=This {{#switch:{{NAMESPACE}}&lt;br /&gt;
  |{{ns:image}}=image, used in one or more [[w:en:Wikipedia:High-risk templates|high-risk templates]]{{#switch:{{{demolevel|{{PROTECTIONLEVEL:edit}}}}}&lt;br /&gt;
   |semi&lt;br /&gt;
   |autoconfirmed=&lt;br /&gt;
   |administrator&lt;br /&gt;
   |full&lt;br /&gt;
   |sysop=&amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;and/or [[Special:Allmessages|system messages]],&lt;br /&gt;
   |templateeditor=&amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;and/or [[Special:Allmessages|system messages]],&lt;br /&gt;
   |#default=&amp;lt;!--fallback value--&amp;gt;}}&lt;br /&gt;
  |#default=[[w:en:Wikipedia:High-risk templates|high-risk {{pp-meta/pagetype}}]]&lt;br /&gt;
}} has been [[w:en:Wikipedia:This page is protected|{{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}&lt;br /&gt;
   |semi&lt;br /&gt;
   |autoconfirmed=semi-&lt;br /&gt;
   |move=move-&lt;br /&gt;
   |administrator&lt;br /&gt;
   |full&lt;br /&gt;
   |sysop&lt;br /&gt;
   |templateeditor&amp;lt;!--uses default--&amp;gt;&lt;br /&gt;
   |#default=&amp;lt;!--fallback value--&amp;gt;permanently&amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;}}protected]]{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop||&amp;lt;nowiki&amp;gt; &amp;lt;/nowiki&amp;gt;from editing}} to prevent [[Wikidata:Vandalism|vandalism]]. {{#switch:{{{demolevel|{{PROTECTIONLEVEL:edit}}}}}&lt;br /&gt;
   |semi&lt;br /&gt;
   |autoconfirmed=&lt;br /&gt;
   |administrator&lt;br /&gt;
   |full&lt;br /&gt;
   |sysop&lt;br /&gt;
   |templateeditor&amp;lt;!--uses default--&amp;gt;&lt;br /&gt;
   |#default={{#switch:{{NAMESPACE}}|{{ns:image}}=&amp;lt;br /&amp;gt;&amp;lt;small&amp;gt;'''Do not move this image''' to [[commons:|Wikimedia Commons]].&amp;lt;/small&amp;gt;}}}}&lt;br /&gt;
|categories={{{categories|{{#ifeq:{{NAMESPACE}}|{{ns:10}}|{{#switch:{{{demolevel|{{#ifeq:{{PROTECTIONLEVEL:edit}}-{{PROTECTIONLEVEL:move}}|-sysop|move|{{PROTECTIONLEVEL:edit}}}}}}}&lt;br /&gt;
   |semi&lt;br /&gt;
   |autoconfirmed=[[Category:Semi-protected templates|{{PAGENAME}}]]{{#ifeq:{{PROTECTIONLEVEL:move}}|sysop|[[Category:Move-protected templates|{{PAGENAME}}]]}}&lt;br /&gt;
   |move=[[Category:Move-protected templates|{{PAGENAME}}]]&lt;br /&gt;
   |administrator&lt;br /&gt;
   |full&lt;br /&gt;
   |sysop&lt;br /&gt;
   |templateeditor&amp;lt;!--uses default--&amp;gt;&lt;br /&gt;
   |#default=[[Category:Protected templates|{{PAGENAME}}]]&amp;lt;!--fallback value--&amp;gt;}}}}{{#ifeq:{{NAMESPACE}}|{{ns:6}}|[[Category:{{#switch:{{{demolevel|{{PROTECTIONLEVEL:edit}}}}}&lt;br /&gt;
   |semi&lt;br /&gt;
   |autoconfirmed=Semi-protected&lt;br /&gt;
   |administrator&lt;br /&gt;
   |full&lt;br /&gt;
   |sysop&lt;br /&gt;
   |templateeditor&amp;lt;!--uses default--&amp;gt;&lt;br /&gt;
   |#default=Protected&amp;lt;!--fallback value--&amp;gt;}} images|{{PAGENAME}}]]}}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{pp-template|categories=no}}  &amp;lt;!-- Show the small version --&amp;gt;&lt;br /&gt;
{{pp-template|small=no}}      &amp;lt;!-- Show the large version --&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Template_sandbox_notice&amp;diff=3652</id>
		<title>Template:Template sandbox notice</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Template_sandbox_notice&amp;diff=3652"/>
				<updated>2016-12-08T19:09:56Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{#ifexpr:0&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;+{{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{subpage-name|sandbox}}}}}   |1   |0  }}  |{{Template sandbox notice/text/{{#ifexist:Template:Templat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#ifexpr:0&amp;lt;noinclude&amp;gt;1&amp;lt;/noinclude&amp;gt;+{{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{subpage-name|sandbox}}}}}&lt;br /&gt;
  |1&lt;br /&gt;
  |0&lt;br /&gt;
 }}&lt;br /&gt;
 |{{Template sandbox notice/text/{{#ifexist:Template:Template sandbox notice/text/{{int:lang}}|{{int:lang}}|en}}|1={{{1|}}}}}&lt;br /&gt;
{{{notice-for-sandbox|}}}{{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{testcases-name|testcases}}}}}&lt;br /&gt;
  | &amp;lt;!-- testcases --&amp;gt;&lt;br /&gt;
  | &amp;lt;!-- not testcases --&amp;gt;{{{category|[[Category:Template sandboxes]]}}}&lt;br /&gt;
 }}&lt;br /&gt;
 | &amp;lt;!-- not sandbox --&amp;gt;{{{notice-not-sandbox|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Documentation&amp;diff=3651</id>
		<title>Template:Documentation</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Documentation&amp;diff=3651"/>
				<updated>2016-12-08T19:09:16Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  Automatically add {{template sandbox notice}} when on a /sandbox page.&lt;br /&gt;
--&amp;gt;{{#ifeq: {{SUBPAGENAME}} | sandbox&lt;br /&gt;
| &amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;{{template sandbox notice|{{{livepage|}}}}}&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
  Automatically add {{pp-template}} to protected templates.&lt;br /&gt;
--&amp;gt;{{template other&lt;br /&gt;
| {{#ifeq: {{PROTECTIONLEVEL:move}} | sysop&lt;br /&gt;
  | {{pp-template|docusage=yes}}&lt;br /&gt;
  | {{#if: {{PROTECTIONLEVEL:edit}}&lt;br /&gt;
    | {{pp-template|docusage=yes}}&lt;br /&gt;
    | &amp;lt;!--Not protected, or only semi-move-protected--&amp;gt;&lt;br /&gt;
    }}&lt;br /&gt;
  }}&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
  Start of green doc box.&lt;br /&gt;
--&amp;gt;{{documentation/start box2&lt;br /&gt;
| preload = {{{preload|}}}   &amp;lt;!--Allow custom preloads--&amp;gt;&lt;br /&gt;
| heading = {{{heading|¬}}}   &amp;lt;!--Empty but defined means no header--&amp;gt;&lt;br /&gt;
| heading-style = {{{heading-style|}}}&lt;br /&gt;
| content = {{{content|}}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Some namespaces must have the /doc, /sandbox and /testcases &lt;br /&gt;
    in talk space--&amp;gt;&lt;br /&gt;
| docspace = {{documentation/docspace}}&lt;br /&gt;
&lt;br /&gt;
| 1 = {{{1|}}}   &amp;lt;!--Other docname, if fed--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--The namespace is added in /start box2--&amp;gt;&lt;br /&gt;
| template page = {{documentation/template page}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;!-- Start content --&amp;gt;&amp;lt;!--&lt;br /&gt;
  Start load the /doc content:&lt;br /&gt;
  Note: The line breaks between this comment and the next line are necessary&lt;br /&gt;
  so  &amp;quot;=== Headings ===&amp;quot; at the start and end of docs are interpreted.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
{{#switch: {{#if:{{{content|}}}|1|0}}{{#if:{{{1|}}}|1|0}}{{#ifexist:{{{1|}}}|1|0}}{{#ifexist:{{documentation/docspace}}:{{documentation/template page}}/doc|1|0}}&lt;br /&gt;
| 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 &lt;br /&gt;
| 1111 = {{{content|}}}&lt;br /&gt;
| 0110 | 0111 = {{ {{{1}}} }}&lt;br /&gt;
| 0001 | 0011 = {{ {{documentation/docspace}}:{{documentation/template page}}/doc }}&lt;br /&gt;
| 0000 | 0100 | 0010 | 0101 = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
  End load the /doc content:&lt;br /&gt;
  Note: The line breaks between this comment and the previous line are necessary&lt;br /&gt;
  so  &amp;quot;=== Headings ===&amp;quot; at the start and end of docs are interpreted.&lt;br /&gt;
--&amp;gt;{{documentation/end box2&lt;br /&gt;
| preload = {{{preload|}}}   &amp;lt;!--Allow custom preloads--&amp;gt;&lt;br /&gt;
| content = {{{content|}}}&lt;br /&gt;
| link box = {{{link box|}}}   &amp;lt;!--So &amp;quot;link box=off&amp;quot; works--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Some namespaces must have the /doc, /sandbox and /testcases &lt;br /&gt;
    in talk space--&amp;gt;&lt;br /&gt;
| docspace = {{documentation/docspace}}&lt;br /&gt;
&lt;br /&gt;
| 1 = {{{1|}}}   &amp;lt;!--Other docname, if fed--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--The namespace is added in /end box2--&amp;gt;&lt;br /&gt;
| template page = {{documentation/template page}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
  End of green doc box&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#ifexist:{{#titleparts:{{FULLPAGENAME}}|1}}/doc&lt;br /&gt;
|&lt;br /&gt;
|[[Category:Templates without documentation]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
  Maintenance category for templates containing the documentation template&lt;br /&gt;
  but without having an associated documentation page&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Category_handler&amp;diff=3650</id>
		<title>Module:Category handler</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Category_handler&amp;diff=3650"/>
				<updated>2016-12-08T17:25:22Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;---------------------------------------------------------------------------------------------------------- --...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----------------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                                                                                      --&lt;br /&gt;
--                                          CATEGORY HANDLER                                            --&lt;br /&gt;
--                                                                                                      --&lt;br /&gt;
--      This module implements the {{category handler}} template in Lua, with a few improvements: all   --&lt;br /&gt;
--      namespaces and all namespace aliases are supported, and namespace names are detected            --&lt;br /&gt;
--      automatically for the local wiki. This module requires [[Module:Namespace detect]] and          --&lt;br /&gt;
--      [[Module:Yesno]] to be available on the local wiki. It can be configured for different wikis    --&lt;br /&gt;
--      by altering the values in the &amp;quot;cfg&amp;quot; table.                                                      --&lt;br /&gt;
--                                                                                                      --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                          Configuration data                                          --&lt;br /&gt;
--                      Language-specific parameter names and values can be set here.                   --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {}&lt;br /&gt;
&lt;br /&gt;
-- The following config values set the names of parameters that suppress categorisation. They are used&lt;br /&gt;
-- with Module:Yesno, and work as follows:&lt;br /&gt;
--&lt;br /&gt;
-- cfg.nocat:&lt;br /&gt;
-- Result of yesno(args[cfg.nocat])         Effect&lt;br /&gt;
-- true                                     Categorisation is suppressed&lt;br /&gt;
-- false                                    Categorisation is allowed, and the blacklist check is skipped&lt;br /&gt;
-- nil                                      Categorisation is allowed&lt;br /&gt;
--&lt;br /&gt;
-- cfg.categories:&lt;br /&gt;
-- Result of yesno(args[cfg.categories])    Effect&lt;br /&gt;
-- true                                     Categorisation is allowed, and the blacklist check is skipped&lt;br /&gt;
-- false                                    Categorisation is suppressed&lt;br /&gt;
-- nil                                      Categorisation is allowed&lt;br /&gt;
cfg.nocat = 'nocat'    &lt;br /&gt;
cfg.categories = 'categories'&lt;br /&gt;
&lt;br /&gt;
-- The parameter name for the legacy &amp;quot;category2&amp;quot; parameter. This skips the blacklist if set to the&lt;br /&gt;
-- cfg.category2Yes value, and suppresses categorisation if present but equal to anything other than&lt;br /&gt;
-- cfg.category2Yes or cfg.category2Negative.&lt;br /&gt;
cfg.category2 = 'category2'&lt;br /&gt;
cfg.category2Yes = 'yes'&lt;br /&gt;
cfg.category2Negative = '¬'&lt;br /&gt;
&lt;br /&gt;
-- cfg.subpage is the parameter name to specify how to behave on subpages. cfg.subpageNo is the value to&lt;br /&gt;
-- specify to not categorise on subpages; cfg.only is the value to specify to only categorise on subpages.&lt;br /&gt;
cfg.subpage = 'subpage'&lt;br /&gt;
cfg.subpageNo = 'no'&lt;br /&gt;
cfg.subpageOnly = 'only'&lt;br /&gt;
&lt;br /&gt;
-- The parameter for data to return in all namespaces.&lt;br /&gt;
cfg.all = 'all'&lt;br /&gt;
&lt;br /&gt;
-- The parameter name for data to return if no data is specified for the namespace that is detected. This&lt;br /&gt;
-- must be the same as the cfg.other parameter in [[Module:Namespace detect]].&lt;br /&gt;
cfg.other = 'other'&lt;br /&gt;
&lt;br /&gt;
-- The parameter name used to specify a page other than the current page; used for testing and&lt;br /&gt;
-- demonstration. This must be the same as the cfg.page parameter in [[Module:Namespace detect]].&lt;br /&gt;
cfg.page = 'page'&lt;br /&gt;
&lt;br /&gt;
-- The categorisation blacklist. Pages that match Lua patterns in this list will not be categorised.&lt;br /&gt;
-- (However, see the explanation of cfg.nocat, cfg.categories and cfg.category2 for some exceptions.)&lt;br /&gt;
-- If the namespace name has a space in, it must be written with an underscore, e.g. &amp;quot;Wikipedia_talk&amp;quot;.&lt;br /&gt;
-- Other parts of the title can have either underscores or spaces.&lt;br /&gt;
cfg.blacklist = {&lt;br /&gt;
    '^Main Page$', -- don't categorise the main page.&lt;br /&gt;
    &lt;br /&gt;
    -- Don't categorise the following pages or their subpages.&lt;br /&gt;
    '^Wikipedia:Cascade%-protected items$',&lt;br /&gt;
    '^Wikipedia:Cascade%-protected items/.*$',&lt;br /&gt;
    '^User:UBX$', -- The userbox &amp;quot;template&amp;quot; space.&lt;br /&gt;
    '^User:UBX/.*$',&lt;br /&gt;
    '^User_talk:UBX$',&lt;br /&gt;
    '^User_talk:UBX/.*$',&lt;br /&gt;
    &lt;br /&gt;
    -- Don't categorise subpages of these pages, but allow&lt;br /&gt;
    -- categorisation of the base page.&lt;br /&gt;
    '^Wikipedia:Template messages/.+$',&lt;br /&gt;
    &lt;br /&gt;
    '/[aA]rchive' -- Don't categorise archives.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- This is a table of namespaces to categorise by default. They should be in the format of parameter&lt;br /&gt;
-- names accepted by [[Module:Namespace detect]].&lt;br /&gt;
cfg.defaultNamespaces = {&lt;br /&gt;
    'main',&lt;br /&gt;
    'file',&lt;br /&gt;
    'help',&lt;br /&gt;
    'category'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                          End configuration data                                      --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Get dependent modules&lt;br /&gt;
local nsDetect = require('Module:Namespace detect')&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
--                                          Local functions                                             --&lt;br /&gt;
--      The following are internal functions, which we do not want to be accessible from other modules. --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Find whether we need to return a category or not.&lt;br /&gt;
local function needsCategory(pageObject, args)&lt;br /&gt;
    -- Don't categorise if the relevant options are set.&lt;br /&gt;
    if yesno(args[cfg.nocat])&lt;br /&gt;
        or yesno(args[cfg.categories]) == false&lt;br /&gt;
        or (&lt;br /&gt;
            args[cfg.category2] &lt;br /&gt;
            and args[cfg.category2] ~= cfg.category2Yes &lt;br /&gt;
            and args[cfg.category2] ~= cfg.category2Negative&lt;br /&gt;
        )&lt;br /&gt;
    then&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    -- If there is no pageObject available, then that either means that we are over&lt;br /&gt;
    -- the expensive function limit or that the title specified was invalid. Invalid&lt;br /&gt;
    -- titles will probably only be a problem during testing, so we choose the best&lt;br /&gt;
    -- fallback for being over the expensive function limit. The fallback behaviour&lt;br /&gt;
    -- of the old template was to assume the page was not a subpage, so we will do&lt;br /&gt;
    -- the same here.&lt;br /&gt;
    if args[cfg.subpage] == cfg.subpageNo and pageObject and pageObject.isSubpage then&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    if args[cfg.subpage] == cfg.subpageOnly &lt;br /&gt;
        and (not pageObject or (pageObject and not pageObject.isSubpage))&lt;br /&gt;
    then&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Find whether we need to check the blacklist or not.&lt;br /&gt;
local function needsBlacklistCheck(args)&lt;br /&gt;
    if yesno(args[cfg.nocat]) == false&lt;br /&gt;
        or yesno(args[cfg.categories]) == true&lt;br /&gt;
        or args[cfg.category2] == cfg.category2Yes&lt;br /&gt;
    then&lt;br /&gt;
        return false&lt;br /&gt;
    else&lt;br /&gt;
        return true&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Find whether any namespace parameters have been specified.&lt;br /&gt;
-- Mappings is the table of parameter mappings taken from&lt;br /&gt;
-- [[Module:Namespace detect]].&lt;br /&gt;
local function nsParamsExist(mappings, args)&lt;br /&gt;
    if args[cfg.all] or args[cfg.other] then&lt;br /&gt;
        return true&lt;br /&gt;
    end&lt;br /&gt;
    for ns, params in pairs(mappings) do&lt;br /&gt;
        for i, param in ipairs(params) do&lt;br /&gt;
            if args[param] then&lt;br /&gt;
                return true&lt;br /&gt;
            end&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;
--                                          Global functions                                            --&lt;br /&gt;
--      The following functions are global, because we want them to be accessible from #invoke and      --&lt;br /&gt;
--      from other Lua modules.                                                                         --&lt;br /&gt;
----------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Find if a string matches the blacklist. Returns the match if one is found, or nil otherwise.&lt;br /&gt;
-- Input should be a page title with a namespace prefix, e.g. &amp;quot;Wikipedia talk:Articles for deletion&amp;quot;.&lt;br /&gt;
function p.matchesBlacklist(page)&lt;br /&gt;
    if type(page) ~= 'string' then return end&lt;br /&gt;
    for i, pattern in ipairs(cfg.blacklist) do&lt;br /&gt;
        local match = mw.ustring.match(page, pattern)&lt;br /&gt;
        if match then&lt;br /&gt;
            return match&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- The main structure of the module. Checks whether we need to categorise,&lt;br /&gt;
-- and then passes the relevant arguments to [[Module:Namespace detect]].&lt;br /&gt;
function p._main(args)&lt;br /&gt;
    -- Get the page object and argument mappings from&lt;br /&gt;
    -- [[Module:Namespace detect]], to save us from having to rewrite the&lt;br /&gt;
    -- code.&lt;br /&gt;
    local pageObject = nsDetect.getPageObject(args[cfg.page])&lt;br /&gt;
    local mappings = nsDetect.getParamMappings()&lt;br /&gt;
    &lt;br /&gt;
    if not needsCategory(pageObject, args) then return end&lt;br /&gt;
    &lt;br /&gt;
    local ret = ''&lt;br /&gt;
    -- Check blacklist if necessary.&lt;br /&gt;
    if not needsBlacklistCheck(args) or not p.matchesBlacklist(pageObject.prefixedText) then&lt;br /&gt;
        if not nsParamsExist(mappings, args) then&lt;br /&gt;
            -- No namespace parameters exist; basic usage. Pass args[1] to&lt;br /&gt;
            -- [[Module:Namespace detect]] using the default namespace&lt;br /&gt;
            -- parameters, and return the result.&lt;br /&gt;
            local ndargs = {}&lt;br /&gt;
            for _, ndarg in ipairs(cfg.defaultNamespaces) do&lt;br /&gt;
                ndargs[ndarg] = args[1]&lt;br /&gt;
            end&lt;br /&gt;
            ndargs.page = args.page&lt;br /&gt;
            ndargs.demospace = args.demospace&lt;br /&gt;
            local ndresult = nsDetect._main(ndargs)&lt;br /&gt;
            if ndresult then&lt;br /&gt;
                ret = ret .. ndresult&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            -- Namespace parameters exist; advanced usage.&lt;br /&gt;
            -- If the all parameter is specified, return it.&lt;br /&gt;
            local all = args.all&lt;br /&gt;
            if type(all) == 'string' then&lt;br /&gt;
                ret = ret .. all&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            -- Get the arguments to pass to [[Module:Namespace detect]].&lt;br /&gt;
            local ndargs = {}&lt;br /&gt;
            for ns, params in pairs(mappings) do&lt;br /&gt;
                for _, param in ipairs(params) do&lt;br /&gt;
                    ndargs[param] = args[param] or args[cfg.other] or nil&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            ndargs.other = args.other&lt;br /&gt;
            ndargs.page = args.page&lt;br /&gt;
            ndargs.demospace = args.demospace&lt;br /&gt;
            &lt;br /&gt;
            local data = nsDetect._main(ndargs)&lt;br /&gt;
            &lt;br /&gt;
            -- Work out what to return based on the result of the namespace detect call.&lt;br /&gt;
            local datanum = tonumber(data)&lt;br /&gt;
            if type(datanum) == 'number' then&lt;br /&gt;
                -- &amp;quot;data&amp;quot; is a number, so return that positional parameter.&lt;br /&gt;
                -- Remove non-positive integer values, as only positive integers&lt;br /&gt;
                -- from 1-10 were used with the old template.&lt;br /&gt;
                if datanum &amp;gt; 0 and math.floor(datanum) == datanum then&lt;br /&gt;
                    local dataArg = args[datanum]&lt;br /&gt;
                    if type(dataArg) == 'string' then&lt;br /&gt;
                        ret = ret .. dataArg&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                -- &amp;quot;data&amp;quot; is not a number, so return it as it is.&lt;br /&gt;
                if type(data) == 'string' then&lt;br /&gt;
                    ret = ret .. data&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    -- If called via #invoke, use the args passed into the invoking&lt;br /&gt;
    -- template, or the args passed to #invoke if any exist. Otherwise&lt;br /&gt;
    -- assume args are being passed directly in.&lt;br /&gt;
    local origArgs&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        origArgs = frame:getParent().args&lt;br /&gt;
        for k, v in pairs(frame.args) do&lt;br /&gt;
            origArgs = frame.args&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        origArgs = frame&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Trim whitespace and remove blank arguments for the following args:&lt;br /&gt;
    -- 1, 2, 3 etc., &amp;quot;nocat&amp;quot;, &amp;quot;categories&amp;quot;, &amp;quot;subpage&amp;quot;, and &amp;quot;page&amp;quot;.&lt;br /&gt;
    local args = {}&lt;br /&gt;
    for k, v in pairs(origArgs) do&lt;br /&gt;
        if type(v) == 'string' then&lt;br /&gt;
            v = mw.text.trim(v) -- Trim whitespace.&lt;br /&gt;
        end&lt;br /&gt;
        if type(k) == 'number'&lt;br /&gt;
            or k == cfg.nocat&lt;br /&gt;
            or k == cfg.categories&lt;br /&gt;
            or k == cfg.subpage&lt;br /&gt;
            or k == cfg.page&lt;br /&gt;
        then&lt;br /&gt;
            if v ~= '' then&lt;br /&gt;
                args[k] = v&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            args[k] = v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Lower-case &amp;quot;nocat&amp;quot;, &amp;quot;categories&amp;quot;, &amp;quot;category2&amp;quot;, and &amp;quot;subpage&amp;quot;. These&lt;br /&gt;
    -- parameters are put in lower case whenever they appear in the old&lt;br /&gt;
    -- template, so we can just do it once here and save ourselves some work.&lt;br /&gt;
    local lowercase = {cfg.nocat, cfg.categories, cfg.category2, cfg.subpage}&lt;br /&gt;
    for _, v in ipairs(lowercase) do&lt;br /&gt;
        local argVal = args[v]&lt;br /&gt;
        if type(argVal) == 'string' then&lt;br /&gt;
            args[v] = mw.ustring.lower(argVal)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Documentation/template_page&amp;diff=3649</id>
		<title>Template:Documentation/template page</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Documentation/template_page&amp;diff=3649"/>
				<updated>2016-12-08T17:24:34Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{#switch: {{SUBPAGENAME}} | sandbox | testcases = {{BASEPAGENAME}} | #default = {{PAGENAME}} }}&amp;lt;noinclude&amp;gt;{{documentation|content={{LangSwitch    | bn = {{tl|documentation}}-...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch: {{SUBPAGENAME}}&lt;br /&gt;
| sandbox&lt;br /&gt;
| testcases = {{BASEPAGENAME}}&lt;br /&gt;
| #default = {{PAGENAME}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;{{documentation|content={{LangSwitch&lt;br /&gt;
   | bn = {{tl|documentation}}-এ এই উপটেমপ্লেটটি টেমপ্লেট পাতার নাম নির্ধারণ করতে ব্যবহৃত হয়।&lt;br /&gt;
   | de = Die Untervorlage von {{tl|documentation}} wird verwendet um den Namen der Vorlage zu bestimmen.&lt;br /&gt;
   | en = This subtemplate of {{tl|documentation}} is used to determine the template page name.&lt;br /&gt;
   | fa = این زیرالگوی {{tl|documentation}} برای مشخص‌کردن نام صفحهٔ الگو استفاده شده‌است.&lt;br /&gt;
   | mk = Овој потшаблон на {{tl|documentation}} служи за да го одреди името на шаблонот.&lt;br /&gt;
   | nl = Dit subsjabloon van {{tl|documentation}} wordt gebruikt om de naam van de sjabloonpagina vast te stellen.&lt;br /&gt;
   }} }}&lt;br /&gt;
[[Category:Subtemplates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Documentation/start_box2&amp;diff=3648</id>
		<title>Template:Documentation/start box2</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Documentation/start_box2&amp;diff=3648"/>
				<updated>2016-12-08T17:24:01Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{documentation/start box | preload = {{{preload|}}}   &amp;lt;!--Allow custom preloads--&amp;gt; | heading = {{{heading|¬}}}   &amp;lt;!--Empty but defined means no header--&amp;gt; | heading-style = {...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{documentation/start box&lt;br /&gt;
| preload = {{{preload|}}}   &amp;lt;!--Allow custom preloads--&amp;gt;&lt;br /&gt;
| heading = {{{heading|¬}}}   &amp;lt;!--Empty but defined means no header--&amp;gt;&lt;br /&gt;
| heading-style = {{{heading-style|}}}&lt;br /&gt;
| content = {{{content|}}}&lt;br /&gt;
&lt;br /&gt;
| docpage = &lt;br /&gt;
  {{#if: {{{1|}}}&lt;br /&gt;
  | {{{1|}}}&lt;br /&gt;
  | {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
| doc exist = &lt;br /&gt;
  {{#ifexist: &lt;br /&gt;
    {{#if: {{{1|}}}&lt;br /&gt;
    | {{{1|}}}   &amp;lt;!--Other docname fed--&amp;gt;&lt;br /&gt;
    | {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc&lt;br /&gt;
    }}&lt;br /&gt;
  | yes&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Subtemplates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Documentation/start_box&amp;diff=3647</id>
		<title>Template:Documentation/start box</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Documentation/start_box&amp;diff=3647"/>
				<updated>2016-12-08T17:23:16Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;&amp;lt;!--   Start of green doc box --&amp;gt;&amp;lt;div class=&amp;quot;template-documentation&amp;quot; style=&amp;quot;background-color:#ecfcf4; border:1px solid #aaa; padding:12px;&amp;quot;&amp;gt;&amp;lt;!--   Add the heading at the top o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  Start of green doc box&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;template-documentation&amp;quot; style=&amp;quot;background-color:#ecfcf4; border:1px solid #aaa; padding:12px;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
  Add the heading at the top of the doc box:&lt;br /&gt;
--&amp;gt;{{#ifeq: {{{heading|¬}}} | &amp;lt;!--Defined but empty--&amp;gt;&lt;br /&gt;
| &amp;lt;!--&amp;quot;heading=&amp;quot;, do nothing--&amp;gt;&lt;br /&gt;
| &amp;lt;div style=&amp;quot;padding-bottom: 3px; border-bottom: 1px solid #aaa; margin-bottom: 1ex;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;{{#if: {{{heading-style|}}}&lt;br /&gt;
  | {{{heading-style|}}}&lt;br /&gt;
  | {{#ifeq: {{SUBJECTSPACE}} | {{ns:Template}}&lt;br /&gt;
    | font-weight: bold; font-size: 125%&lt;br /&gt;
    | font-size: 150%&lt;br /&gt;
    }}&lt;br /&gt;
  }}&amp;quot;&amp;gt;{{#switch: {{{heading|¬}}}&lt;br /&gt;
  | ¬ =   &lt;br /&gt;
    &amp;lt;!--&amp;quot;heading&amp;quot; not defined in this or previous level--&amp;gt;&lt;br /&gt;
    {{#switch: {{SUBJECTSPACE}} &lt;br /&gt;
    | {{ns:Template}} = [[File:Template-info.png|50px|link=|alt=Documentation icon]] Template documentation&lt;br /&gt;
    | {{ns:Module}} = [[File:Template-info.png|50px|link=|alt=Documentation icon]] Module documentation&lt;br /&gt;
    | {{ns:File}} = Summary&lt;br /&gt;
    | #default = Documentation&lt;br /&gt;
    }}&lt;br /&gt;
  | #default = &lt;br /&gt;
    &amp;lt;!--&amp;quot;heading&amp;quot; has data or is empty but defined--&amp;gt;&lt;br /&gt;
    {{{heading|}}}&lt;br /&gt;
  }}&amp;lt;/span&amp;gt;{{&lt;br /&gt;
  #if: {{{content|}}}&lt;br /&gt;
  | &lt;br /&gt;
  | &amp;lt;!--Add the [view][edit][history][purge] or [create] links--&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;mw-editsection plainlinks&amp;quot; id=&amp;quot;doc_editlinks&amp;quot;&amp;gt;{{&lt;br /&gt;
    #if: {{{doc exist|yes}}}&lt;br /&gt;
    | &amp;amp;#91;[[{{{docpage|{{FULLPAGENAME}}/doc}}}|view]]&amp;amp;#93; [[{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=edit}} edit]] [[{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=history}} history]] [{{purge|purge}}] &lt;br /&gt;
    | &amp;lt;!--/doc doesn't exist--&amp;gt;&lt;br /&gt;
      [[{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}| action=edit&amp;amp;preload={{&lt;br /&gt;
        #if: {{{preload|}}} &lt;br /&gt;
        | {{urlencode:{{{preload}}}}}&lt;br /&gt;
        | {{#ifeq: {{SUBJECTSPACE}} | {{ns:File}}&lt;br /&gt;
          | Template:Documentation/preload-filespace&lt;br /&gt;
          | Template:Documentation/preload&lt;br /&gt;
          }} }} }} create]]&lt;br /&gt;
&lt;br /&gt;
    }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
       Add a link to the [/text] subpage for translation&lt;br /&gt;
&lt;br /&gt;
    --&amp;gt;{{#ifexist:{{FULLPAGENAME}}/text|&amp;amp;#91;[[{{FULLPAGENAME}}/text|{{int:translate}} {{int:Templates}}]]&amp;amp;#93;}} &amp;lt;!--&lt;br /&gt;
    --&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
  }}&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&amp;lt;!-- close the div --&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{pp-template}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Documentation/end_box2&amp;diff=3646</id>
		<title>Template:Documentation/end box2</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Documentation/end_box2&amp;diff=3646"/>
				<updated>2016-12-08T17:22:42Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;&amp;lt;noinclude&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/noinclude&amp;gt;&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--So right or left floating items don't stick out of the doc box.--&amp;gt; &amp;lt;/div&amp;gt;&amp;lt;!--End of green doc box--&amp;gt;&amp;lt;!--   Link...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/noinclude&amp;gt;&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--So right or left floating items don't stick out of the doc box.--&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;!--End of green doc box--&amp;gt;&amp;lt;!--&lt;br /&gt;
  Link box below for the doc meta-data:&lt;br /&gt;
--&amp;gt;{{documentation/end box&lt;br /&gt;
| preload = {{{preload|}}}   &amp;lt;!--Allow custom preloads--&amp;gt;&lt;br /&gt;
| content = {{{content|}}}&lt;br /&gt;
| link box = {{{link box|}}}   &amp;lt;!--So &amp;quot;link box=off&amp;quot; works--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| docpage = &lt;br /&gt;
  {{#if: {{{1|}}}&lt;br /&gt;
  | {{{1|}}}&lt;br /&gt;
  | {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc&lt;br /&gt;
  }}&lt;br /&gt;
| doc exist = &lt;br /&gt;
  {{#ifexist: &lt;br /&gt;
    {{#if: {{{1|}}}&lt;br /&gt;
    | {{{1|}}}   &amp;lt;!--Other docname fed--&amp;gt;&lt;br /&gt;
    | {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/doc&lt;br /&gt;
    }}&lt;br /&gt;
  | yes&lt;br /&gt;
  }}&lt;br /&gt;
| docname fed =&lt;br /&gt;
  {{#if: {{{1|}}}&lt;br /&gt;
  | yes&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
| sandbox = &lt;br /&gt;
  {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/sandbox&lt;br /&gt;
| testcases = &lt;br /&gt;
  {{{docspace|{{NAMESPACE}}}}}:{{{template page|{{PAGENAME}}}}}/testcases&lt;br /&gt;
&lt;br /&gt;
| template page = &lt;br /&gt;
  {{NAMESPACE}}:{{{template page|{{PAGENAME}}}}}&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{pp-template}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Documentation/end_box&amp;diff=3645</id>
		<title>Template:Documentation/end box</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Documentation/end_box&amp;diff=3645"/>
				<updated>2016-12-08T17:22:06Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;&amp;lt;!--   Link box below for the doc meta-data: --&amp;gt;{{#if:    &amp;lt;!--Check if we should show the link box--&amp;gt;   {{#ifeq: {{{link box|}}} | off   |   | {{{doc exist|yes}}}{{     #switc...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
  Link box below for the doc meta-data:&lt;br /&gt;
--&amp;gt;{{#if: &lt;br /&gt;
  &amp;lt;!--Check if we should show the link box--&amp;gt;&lt;br /&gt;
  {{#ifeq: {{{link box|}}} | off&lt;br /&gt;
  |&lt;br /&gt;
  | {{{doc exist|yes}}}{{&lt;br /&gt;
    #switch: {{SUBJECTSPACE}}&lt;br /&gt;
    | {{ns:User}}&lt;br /&gt;
    | {{ns:Module}}&lt;br /&gt;
    | {{ns:Template}} = yes&lt;br /&gt;
    }}&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
| {{fmbox&lt;br /&gt;
  | id = documentation-meta-data&lt;br /&gt;
  | image = none&lt;br /&gt;
  | style = background-color: #ecfcf4;&lt;br /&gt;
  | textstyle = font-style: italic;&lt;br /&gt;
  | text = &lt;br /&gt;
    {{#if: {{{link box|}}}&lt;br /&gt;
    | {{{link box}}}   &amp;lt;!--Use custom link box content--&amp;gt;&lt;br /&gt;
    | {{#if: {{{doc exist|yes}}}&lt;br /&gt;
      | &amp;lt;!--/doc exists, link to it--&amp;gt;&lt;br /&gt;
        The above [[Wikipedia:Template documentation|documentation]] is [[Wikipedia:Transclusion|transcluded]] from [[{{{docpage|{{FULLPAGENAME}}/doc}}}]]. &amp;lt;small style=&amp;quot;font-style: normal&amp;quot;&amp;gt;([{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=edit}} edit] &amp;amp;#124; [{{fullurl:{{{docpage|{{FULLPAGENAME}}/doc}}}|action=history}} history])&amp;lt;/small&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
      |&amp;lt;!-- /doc does not exist, ask to create one?&lt;br /&gt;
   --&amp;gt;{{#switch: {{SUBJECTSPACE}}&lt;br /&gt;
         | {{ns:Module}} = You might want to [{{fullurl: {{{docpage| {{FULLPAGENAME}}/doc }}} | action=edit&amp;amp;preload=Template:Documentation/preload-module-doc }} create] a documentation page for this [[Wikipedia:Lua|Scribunto module]]&amp;lt;br&amp;gt;&lt;br /&gt;
         | #default =&lt;br /&gt;
          }}&lt;br /&gt;
      }}&amp;lt;!-- &lt;br /&gt;
        Add links to /sandbox and /testcases when appropriate:&lt;br /&gt;
   --&amp;gt;{{#switch: {{SUBJECTSPACE}}&lt;br /&gt;
      | {{ns:User}}&lt;br /&gt;
      | {{ns:Module}}&lt;br /&gt;
      | {{ns:Template}} = &lt;br /&gt;
        Editors can experiment in this {{#switch: {{SUBJECTSPACE}} | {{ns:module}} = module's | #default = template's}} {{&lt;br /&gt;
        #ifexist: {{{sandbox| {{FULLPAGENAME}}/sandbox }}}&lt;br /&gt;
        | [[{{{sandbox| {{FULLPAGENAME}}/sandbox }}}|sandbox]] &amp;lt;small style=&amp;quot;font-style: normal&amp;quot;&amp;gt;([{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit }} edit] &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; [{{fullurl:Special:ComparePages | page1={{urlencode:{{{template page|{{FULLPAGENAME}}}}}}}&amp;amp;page2={{urlencode:{{{sandbox|{{FULLPAGENAME}}/sandbox}}}}}}} diff])&amp;lt;/small&amp;gt; &lt;br /&gt;
        | sandbox &amp;lt;small style=&amp;quot;font-style: normal&amp;quot;&amp;gt;([{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit&amp;amp;preload=Template:Documentation/preload-{{#ifeq: {{SUBJECTSPACE}}|{{ns:Module}}|module-}}sandbox }} create] &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; [{{fullurl: {{{sandbox| {{FULLPAGENAME}}/sandbox }}} | action=edit&amp;amp;preload={{urlencode:{{{template page|{{FULLPAGENAME}}}}}}}&amp;amp;summary={{urlencode:Create sandbox version of [[{{{template page|{{FULLPAGENAME}}}}}]]}} }} mirror])&amp;lt;/small&amp;gt;&lt;br /&gt;
        }} and {{&lt;br /&gt;
        #ifexist: {{{testcases| {{FULLPAGENAME}}/testcases }}}&lt;br /&gt;
        | [[{{{testcases| {{FULLPAGENAME}}/testcases }}}|testcases]] &amp;lt;small style=&amp;quot;font-style: normal&amp;quot;&amp;gt;([{{fullurl: {{{testcases| {{FULLPAGENAME}}/testcases }}} | action=edit }} edit])&amp;lt;/small&amp;gt;&lt;br /&gt;
        | testcases &amp;lt;small style=&amp;quot;font-style: normal&amp;quot;&amp;gt;([{{fullurl: {{{testcases| {{FULLPAGENAME}}/testcases }}} | action=edit&amp;amp;preload=Template:Documentation/preload-{{#ifeq: {{SUBJECTSPACE}}|{{ns:Module}}|module-}}testcases }} create])&amp;lt;/small&amp;gt;&lt;br /&gt;
        }} pages. &amp;lt;br /&amp;gt;&lt;br /&gt;
      }}&amp;lt;!--&lt;br /&gt;
        Show the cats text, but not &lt;br /&gt;
        if &amp;quot;content&amp;quot; fed or &amp;quot;docname fed&amp;quot; since then it is &lt;br /&gt;
        unclear where to add the cats.&lt;br /&gt;
   --&amp;gt;{{#if: {{{content|}}} {{{docname fed|}}}&lt;br /&gt;
      | &lt;br /&gt;
      | Please add categories to the [[{{{docpage|{{FULLPAGENAME}}/doc}}}|/doc]] subpage.&lt;br /&gt;
      }}&amp;lt;!--&lt;br /&gt;
        Show the &amp;quot;Subpages&amp;quot; link:&lt;br /&gt;
   --&amp;gt;{{#switch: {{SUBJECTSPACE}}&lt;br /&gt;
      | {{ns:File}} =   &amp;lt;!--Don't show it--&amp;gt;&lt;br /&gt;
      | {{ns:Module}} = &amp;amp;#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this module]].&lt;br /&gt;
      | {{ns:Template}} = &amp;amp;#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this template]].&lt;br /&gt;
      | #default = &amp;amp;#32;[[Special:PrefixIndex/{{{template page|{{FULLPAGENAME}}}}}/|Subpages of this page]].&lt;br /&gt;
      }}&lt;br /&gt;
    }}{{#ifexist:{{FULLPAGENAME}}/Print&lt;br /&gt;
     |&amp;lt;br /&amp;gt;A [[Help:Books/for experts#Improving the book layout|print version]] of this template exists at [[/Print]]. If you make a change to this template, please update the print version as well.[[Category:Templates with print versions]]&lt;br /&gt;
    }}&lt;br /&gt;
  }}&lt;br /&gt;
}}&amp;lt;!--End link box--&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
  Detect and report strange usage:&lt;br /&gt;
--&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!--Check if {{documentation}} is transcluded &lt;br /&gt;
      on a /doc or /testcases page--&amp;gt;&lt;br /&gt;
  {{#switch: {{SUBPAGENAME}}&lt;br /&gt;
  | doc&lt;br /&gt;
  | testcases = strange&lt;br /&gt;
  }}&lt;br /&gt;
  &amp;lt;!--More checks can be added here, just return anything&lt;br /&gt;
      to make the surrounding if-case trigger--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;includeonly&amp;gt;[[Category:Wikipedia pages with strange ((documentation)) usage|{{main other|Main:}}{{FULLPAGENAME}}]]&amp;lt;!-- Sort on namespace --&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Documentation/docspace&amp;diff=3644</id>
		<title>Template:Documentation/docspace</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Documentation/docspace&amp;diff=3644"/>
				<updated>2016-12-08T17:21:27Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;{{#switch: {{SUBJECTSPACE}}   | {{ns:0}}   | {{ns:File}}   | {{ns:MediaWiki}}   | {{ns:Category}} = {{TALKSPACE}}   | #default = {{SUBJECTSPACE}} }}&amp;lt;noinclude&amp;gt; {{documentation...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch: {{SUBJECTSPACE}}&lt;br /&gt;
  | {{ns:0}}&lt;br /&gt;
  | {{ns:File}}&lt;br /&gt;
  | {{ns:MediaWiki}}&lt;br /&gt;
  | {{ns:Category}} = {{TALKSPACE}}&lt;br /&gt;
  | #default = {{SUBJECTSPACE}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
This subtemplate of {{tl|documentation}} is used to determine the namespace of the documentation page.&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Subtemplates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Documentation_subpage&amp;diff=3643</id>
		<title>Template:Documentation subpage</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Documentation_subpage&amp;diff=3643"/>
				<updated>2016-12-08T17:20:49Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#ifeq: {{lc:{{SUBPAGENAME}}}} | {{{override|doc}}}	   | &amp;lt;!-- doc page --&amp;gt;	 &amp;lt;/includeonly&amp;gt;{{	     #ifeq: {{{doc-notice|show}}} | show	     | {{mbox	       | type...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifeq: {{lc:{{SUBPAGENAME}}}} | {{{override|doc}}}	&lt;br /&gt;
  | &amp;lt;!-- doc page --&amp;gt;	&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;{{	&lt;br /&gt;
    #ifeq: {{{doc-notice|show}}} | show	&lt;br /&gt;
    | {{mbox	&lt;br /&gt;
      | type = notice	&lt;br /&gt;
      | image = [[File:Edit-copy green.svg|40px|link=]]&lt;br /&gt;
      | text = 	{{Documentation subpage/text/{{#ifexist:Template:Documentation subpage/text/{{int:lang}}|{{int:lang}}|en}}|1={{{1|}}}|text2={{{text2|}}}|text1={{{text1|}}}}}&lt;br /&gt;
      }}	&lt;br /&gt;
    }}{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}{{&lt;br /&gt;
    #if: {{{inhibit|}}}&lt;br /&gt;
    | &amp;lt;!-- skip --&amp;gt;&lt;br /&gt;
    | &amp;lt;includeonly&amp;gt;{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}|[[Category:{{	&lt;br /&gt;
      #switch: {{SUBJECTSPACE}}	&lt;br /&gt;
      | Template  = Template&lt;br /&gt;
      | User      = User	&lt;br /&gt;
      | #default  = Wikidata&lt;br /&gt;
    }} documentation pages]]|[[Category:Documentation subpages without corresponding pages]]}}&amp;lt;/includeonly&amp;gt;	&lt;br /&gt;
  }}&amp;lt;includeonly&amp;gt;	&lt;br /&gt;
| &amp;lt;!-- if not on a /doc subpage, do nothing --&amp;gt;&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;	&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Purge&amp;diff=3642</id>
		<title>Template:Purge</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Purge&amp;diff=3642"/>
				<updated>2016-12-08T17:19:38Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;&amp;lt;span class=&amp;quot;noprint plainlinks purgelink&amp;quot;&amp;gt;[{{fullurl:{{{page|{{FULLPAGENAME}}}}}|action=purge}}#{{#if:{{{anchor|}}}|{{urlencode:{{{anchor|}}}|WIKI}}}} &amp;lt;span title=&amp;quot;Purge this...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;noprint plainlinks purgelink&amp;quot;&amp;gt;[{{fullurl:{{{page|{{FULLPAGENAME}}}}}|action=purge}}#{{#if:{{{anchor|}}}|{{urlencode:{{{anchor|}}}|WIKI}}}} &amp;lt;span title=&amp;quot;Purge this page&amp;quot;&amp;gt;{{{1|Purge}}}&amp;lt;/span&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Arguments&amp;diff=3641</id>
		<title>Module:Arguments</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Arguments&amp;diff=3641"/>
				<updated>2016-12-08T17:18:32Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;-- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require('libraryUtil')&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don't have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		val = val:match('^%s*(.-)%s*$')&lt;br /&gt;
		if val == '' then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		return val:match('^%s*(.-)%s*$')&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == 'string' then&lt;br /&gt;
		if val:find('%S') then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType('getArgs', 1, frame, 'table', true)&lt;br /&gt;
	checkType('getArgs', 2, options, 'table', true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame's availability. If we weren't&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == 'table' and type(frame.getParent) == 'function' then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame's title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub('/sandbox$', '')&lt;br /&gt;
				local found = false&lt;br /&gt;
				if type(options.wrappers) == 'table' then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if v == title then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				elseif options.wrappers == title then&lt;br /&gt;
					found = true&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn't set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.	&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don't have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= 'function' then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option 'valueFunc'&amp;quot;&lt;br /&gt;
					.. '(function expected, got '&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. ')',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(iterator, tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table using the specified iterator. If a value is already&lt;br /&gt;
		-- present it is not overwritten; tables listed earlier have precedence.&lt;br /&gt;
		-- We are also memoizing nil values, but those values can be&lt;br /&gt;
		-- overwritten.&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in iterator(t) do&lt;br /&gt;
				if metaArgs[key] == nil then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = true&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal == nil then&lt;br /&gt;
				nilArgs[key] = true&lt;br /&gt;
			else&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				'could not write to argument table key &amp;quot;'&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. '&amp;quot;; the table is read-only',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				'could not write to argument table key &amp;quot;'&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. '&amp;quot;; overwriting existing arguments is not permitted',&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn't looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = true&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(pairs, argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
			metatable.doneIpairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return pairs(metaArgs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function ()&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		if not metatable.doneIpairs then&lt;br /&gt;
			mergeArgs(ipairs, argTables)&lt;br /&gt;
			metatable.doneIpairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return ipairs(metaArgs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Module:Message_box/configuration&amp;diff=3640</id>
		<title>Module:Message box/configuration</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Module:Message_box/configuration&amp;diff=3640"/>
				<updated>2016-12-08T17:15:57Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;local ambox = { 	types = { 		speedy = { 			class = 'ambox-speedy', 			image = 'Ambox speedy deletion.png' 		}, 		delete = { 			class = 'ambox-delete', 			image = 'Ambox deleti...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local ambox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'ambox-speedy',&lt;br /&gt;
			image = 'Ambox speedy deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'ambox-delete',&lt;br /&gt;
			image = 'Ambox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'ambox-content',&lt;br /&gt;
			image = 'Ambox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'ambox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'ambox-move',&lt;br /&gt;
			image = 'Ambox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'ambox-protection',&lt;br /&gt;
			image = 'Ambox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'ambox-notice',&lt;br /&gt;
			image = 'Ambox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default                     = 'notice',&lt;br /&gt;
	allowBlankParams            = {'talk', 'sect', 'date', 'issue', 'fix', 'subst'},&lt;br /&gt;
	allowSmall                  = true,&lt;br /&gt;
	smallParam                  = 'left',&lt;br /&gt;
	smallClass                  = 'mbox-small-left',&lt;br /&gt;
	substCheck                  = true,&lt;br /&gt;
	classes                     = {'metadata', 'plainlinks', 'ambox'},&lt;br /&gt;
	imageEmptyCell              = true,&lt;br /&gt;
	imageCheckBlank             = true,&lt;br /&gt;
	imageSmallSize              = '20x20px',&lt;br /&gt;
	imageCellDiv                = true,&lt;br /&gt;
	useCollapsibleTextFields    = true,&lt;br /&gt;
	imageRightNone              = true,&lt;br /&gt;
	sectionDefault              = 'article',&lt;br /&gt;
	allowMainspaceCategories    = true,&lt;br /&gt;
	templateCategory            = 'Article message templates',&lt;br /&gt;
        templateCategoryRequireName = true,&lt;br /&gt;
	templateErrorCategory       = 'Article message templates with missing parameters',&lt;br /&gt;
	templateErrorParamsToCheck  = {'issue', 'fix', 'subst'}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local cmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'cmbox-speedy',&lt;br /&gt;
			image = 'Cmbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'cmbox-delete',&lt;br /&gt;
			image = 'Cmbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'cmbox-content',&lt;br /&gt;
			image = 'Cmbox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'cmbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'cmbox-move',&lt;br /&gt;
			image = 'Cmbox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'cmbox-protection',&lt;br /&gt;
			image = 'Cmbox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'cmbox-notice',&lt;br /&gt;
			image = 'Cmbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'plainlinks', 'cmbox'},&lt;br /&gt;
	imageEmptyCell       = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local fmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = 'fmbox-warning',&lt;br /&gt;
			image = 'Cmbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		editnotice = {&lt;br /&gt;
			class = 'fmbox-editnotice',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		},&lt;br /&gt;
		system = {&lt;br /&gt;
			class = 'fmbox-system',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'system',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	allowId                = true,&lt;br /&gt;
	classes              = {'plainlinks', 'fmbox'},&lt;br /&gt;
	imageEmptyCell       = false,&lt;br /&gt;
	imageRightNone       = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local imbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'imbox-speedy',&lt;br /&gt;
			image = 'Imbox speedy deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'imbox-delete',&lt;br /&gt;
			image = 'Imbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'imbox-content',&lt;br /&gt;
			image = 'Imbox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'imbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'imbox-move',&lt;br /&gt;
			image = 'Imbox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'imbox-protection',&lt;br /&gt;
			image = 'Imbox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = 'imbox-license',&lt;br /&gt;
			image = 'Imbox license.png'&lt;br /&gt;
		},&lt;br /&gt;
		featured = {&lt;br /&gt;
			class = 'imbox-featured',&lt;br /&gt;
			image = 'Imbox featured.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'imbox-notice',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'imbox'},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	below                = true,&lt;br /&gt;
	templateCategory     = 'File message boxes'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local ombox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'ombox-speedy',&lt;br /&gt;
			image = 'Imbox speedy deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'ombox-delete',&lt;br /&gt;
			image = 'Imbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'ombox-content',&lt;br /&gt;
			image = 'Imbox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'ombox-style',&lt;br /&gt;
			image = 'Edit-clear.svg'&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'ombox-move',&lt;br /&gt;
			image = 'Imbox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'ombox-protection',&lt;br /&gt;
			image = 'Imbox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'ombox-notice',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'plainlinks', 'ombox'},&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageRightNone       = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local tmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = 'tmbox-speedy',&lt;br /&gt;
			image = 'Imbox speedy deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = 'tmbox-delete',&lt;br /&gt;
			image = 'Imbox deletion.png'&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = 'tmbox-content',&lt;br /&gt;
			image = 'Imbox content.png'&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = 'tmbox-style',&lt;br /&gt;
			image = 'Edit-clear.svg '&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = 'tmbox-move',&lt;br /&gt;
			image = 'Imbox move.png'&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = 'tmbox-protection',&lt;br /&gt;
			image = 'Imbox protection.png'&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = 'tmbox-notice',&lt;br /&gt;
			image = 'Imbox notice.png'&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = 'notice',&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {'plainlinks', 'tmbox'},&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageRightNone       = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageEmptyCellStyle  = true,&lt;br /&gt;
	templateCategory     = 'Talk message boxes'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	ambox = ambox,&lt;br /&gt;
	cmbox = cmbox,&lt;br /&gt;
	fmbox = fmbox,&lt;br /&gt;
	imbox = imbox,&lt;br /&gt;
	ombox = ombox,&lt;br /&gt;
	tmbox = tmbox&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	<entry>
		<id>https://base.transformap.co/index.php?title=Template:Tag&amp;diff=3639</id>
		<title>Template:Tag</title>
		<link rel="alternate" type="text/html" href="https://base.transformap.co/index.php?title=Template:Tag&amp;diff=3639"/>
				<updated>2016-12-08T17:14:55Z</updated>
		
		<summary type="html">&lt;p&gt;Michael: Created page with &amp;quot;&amp;lt;code style=&amp;quot;white-space:nowrap;&amp;quot;&amp;gt;{{#switch:{{{2|pair}}}  |c|close  = &amp;lt;!--nothing--&amp;gt;  |s|single  |o|open  |p|pair   = &amp;amp;lt;{{{1|tag}}}{{#if:{{{params|}}}|&amp;amp;#32;{{{params}}}}} }}...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code style=&amp;quot;white-space:nowrap;&amp;quot;&amp;gt;{{#switch:{{{2|pair}}}&lt;br /&gt;
 |c|close  = &amp;lt;!--nothing--&amp;gt;&lt;br /&gt;
 |s|single&lt;br /&gt;
 |o|open&lt;br /&gt;
 |p|pair   = &amp;amp;lt;{{{1|tag}}}{{#if:{{{params|}}}|&amp;amp;#32;{{{params}}}}}&lt;br /&gt;
}}{{#switch:{{{2|pair}}}&lt;br /&gt;
 |c|close  = {{{content|}}}&lt;br /&gt;
 |s|single = &amp;amp;#32;&amp;amp;#47;&amp;amp;gt;&lt;br /&gt;
 |o|open   = &amp;amp;gt;{{{content|}}}&lt;br /&gt;
 |p|pair   = &amp;amp;gt;{{{content|...}}}&lt;br /&gt;
}}{{#switch:{{{2|pair}}}&lt;br /&gt;
 |s|single&lt;br /&gt;
 |o|open   = &amp;lt;!--nothing--&amp;gt;&lt;br /&gt;
 |c|close&lt;br /&gt;
 |p|pair   = &amp;amp;lt;&amp;amp;#47;{{{1|tag}}}&amp;amp;gt;&lt;br /&gt;
}}&amp;lt;/code&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michael</name></author>	</entry>

	</feed>