<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.c2dl.info/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Streetclaw</id>
	<title>CCDirectLink - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.c2dl.info/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Streetclaw"/>
	<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/Special:Contributions/Streetclaw"/>
	<updated>2026-08-18T09:30:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=CCLoader&amp;diff=273</id>
		<title>CCLoader</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=CCLoader&amp;diff=273"/>
		<updated>2024-09-06T23:57:19Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Image resize&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;CCLoader&#039;&#039;&#039; is the de facto modloader for CrossCode and obviously a prerequisite for playing the CrossCode with mods. Really, it is the only actively developed modloader intended for use by both mod users and mod developers (RIP [https://github.com/20kdc/decrossfuscator/blob/master/lib/rapture.js Rapture] + [https://github.com/20kdc/decrossfuscator/tree/master/mods pre-1.1.0 mods], [[Dorito]] and [[CCInjector]]).&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
There are three ways to perform CCLoader installation, they are both described in this document. But before we continue:&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;VERY IMPORTANT NOTE:&#039;&#039;&#039; Don&#039;t use the green &amp;quot;clone or download&amp;quot; button! ==&lt;br /&gt;
&lt;br /&gt;
[[File:Clone-or-download.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
This button downloads the source code, not the compiled files! In the case of CCLoader you can&#039;t just download the source code and run it because CCLoader is not written in JavaScript! While this doesn&#039;t apply to all CrossCode mods out there as most of them are written in plain JS and as such don&#039;t need to be compiled, &#039;&#039;&#039;you should get used to looking at the &amp;quot;Releases&amp;quot; page first before trying to download the source code&#039;&#039;&#039;. In the new redesigned GitHub UI the link to it became more apparent:&lt;br /&gt;
&lt;br /&gt;
[[File:Github-project-frontpage-releases.png|700px]]&lt;br /&gt;
&lt;br /&gt;
== Method 1: Quick-installation archive ==&lt;br /&gt;
&lt;br /&gt;
This method is recommended for most users (at least right now because the mod manager is not stable enough for a public release and has a few critical bugs) and will very likely remain the primary installation method because of its simplicity.&lt;br /&gt;
&lt;br /&gt;
# Obviously, &#039;&#039;&#039;first of all you have to locate the [[Locations of CrossCode files#Game files folder|CrossCode game files folder]].&#039;&#039;&#039;&lt;br /&gt;
# Go to the [https://github.com/CCDirectLink/CCLoader/releases/latest latest release page] of CCLoader.&lt;br /&gt;
# In the &amp;quot;Assets&amp;quot; list at the bottom of the release click the link which says &#039;&#039;&#039;Source code (zip)&#039;&#039;&#039; (a &amp;lt;code&amp;gt;tar.gz&amp;lt;/code&amp;gt; download also exist for GNU/Linux and macOS users). This will download a quick installation archive.&lt;br /&gt;
# Extract this archive somewhere:&amp;lt;br&amp;gt;[[File:Extract-ccloader-quick-install.png|class=block-img]]&lt;br /&gt;
# Copy the files inside the archive directly into the game folder, like this:&amp;lt;br&amp;gt;[[File:Ccloader-quick-install.png|700px]]&amp;lt;br&amp;gt;The only file you&#039;ll have to overwrite in a clean CrossCode installation is the &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;:&amp;lt;br&amp;gt;[[File:Ccloader-quick-install-overwrite-package-json.png|class=block-img]]&lt;br /&gt;
# You&#039;ve now successfully installed CCLoader! The end result should look like (notice the new &amp;lt;code&amp;gt;ccloader&amp;lt;/code&amp;gt; folder):&amp;lt;br&amp;gt;[[File:Ccloader-installation-end-result.png|700px]]&lt;br /&gt;
# Mods can be installed into the &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt; folder located inside &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;, for more information on that see the [[Installing mods|relevant guide]].&lt;br /&gt;
&lt;br /&gt;
=== Bonus for Linux users ===&lt;br /&gt;
&lt;br /&gt;
On Linux this entire process can be performed with two commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /path/to/CrossCode&lt;br /&gt;
# Replace the version in the URL here with the latest one:&lt;br /&gt;
curl --location --fail &#039;https://github.com/CCDirectLink/CCLoader/archive/refs/tags/v2.20.2/v2.10.1.zip&#039; \&lt;br /&gt;
  | tar --extract --gzip --verbose --file -&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verifying a successful CCLoader installation ===&lt;br /&gt;
&lt;br /&gt;
Upon launching the game you&#039;ll see the CCLoader version in the bottom right corner of the title screen and at the top of the pause screen (where the game version is) if CCLoader was installed correctly. You&#039;ll also be able to see the following tab in the options menu:&lt;br /&gt;
&lt;br /&gt;
[[File:Ccloader-mod-settings-menu.png|700px]]&lt;br /&gt;
&lt;br /&gt;
It will obviously be empty if you haven&#039;t [[Installing mods|installed any mods]].&lt;br /&gt;
&lt;br /&gt;
== Method 2: Using the automatic installer ==&lt;br /&gt;
&lt;br /&gt;
See https://github.com/CCDirectLink/ccloader-installer. It may be broken though.&lt;br /&gt;
&lt;br /&gt;
[[Category:Modloaders]]&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Category:Pages_with_script_errors&amp;diff=272</id>
		<title>Category:Pages with script errors</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Category:Pages_with_script_errors&amp;diff=272"/>
		<updated>2024-09-06T23:48:19Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=CrossCode_Modding_Tutorial&amp;diff=271</id>
		<title>CrossCode Modding Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=CrossCode_Modding_Tutorial&amp;diff=271"/>
		<updated>2024-09-06T23:46:45Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Update deprecated tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains the steps on how to create your very first CrossCode mod. (header WIP, ask 2767mr)&lt;br /&gt;
&lt;br /&gt;
= Installing CCLoader =&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#9888; &#039;&#039;&#039;Due to DRM it is not possible to mod Xbox Game Pass or Microsoft Store versions of the game.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
See [[CCLoader#Installation]]&lt;br /&gt;
&lt;br /&gt;
= Installing NW.js =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* [[Locations_of_CrossCode_files#Game_files_folder|CC installation folder]]&lt;br /&gt;
* [https://nwjs.io NW.js SDK zip]&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#9888; &#039;&#039;&#039;The game uses an outdated version of NW.js, so you might want to use version &amp;lt;code&amp;gt;0.35.5&amp;lt;/code&amp;gt; to avoid accidentally using features not yet available in CrossCode.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
# Open the nwjs-sdk zip&lt;br /&gt;
# Open the folder so you can see the &amp;lt;code&amp;gt;nw.exe&amp;lt;/code&amp;gt; file&lt;br /&gt;
&lt;br /&gt;
[[File:nwjsRoot.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;li value=3&amp;gt;Extract/drag all files into the [[Locations_of_CrossCode_files#Game_files_folder|CC installation folder]] and replace existing files when prompted.&amp;lt;/li&amp;gt;&lt;br /&gt;
# Delete &amp;lt;code&amp;gt;CrossCode.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rename &amp;lt;code&amp;gt;nw.exe&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;CrossCode.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open the game&lt;br /&gt;
# Press F12 to open the Chrome DevTools&lt;br /&gt;
# Click the &amp;lt;code&amp;gt;Console&amp;lt;/code&amp;gt; tab&lt;br /&gt;
# In the top bar, click &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt;&lt;br /&gt;
# Choose the second entry in the dropdown list&lt;br /&gt;
# You can now enter commands into the console&lt;br /&gt;
&lt;br /&gt;
= Making a mod =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* [[CCLoader#Installation|Installing CCLoader]]&lt;br /&gt;
* [[Locations_of_CrossCode_files#Game_files_folder|CC installation folder]]&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
# Open the [[Locations_of_CrossCode_files#Game_files_folder|CC installation folder]]&lt;br /&gt;
# Open &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt; -&amp;gt; &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt;&lt;br /&gt;
# Create a new folder for your mod. In this example, we are going to use &amp;lt;code&amp;gt;myMod&amp;lt;/code&amp;gt;&lt;br /&gt;
# Create a new file called &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file is used to tell CCLoader how to load your mod. It contains the internal name (&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;), the in-game displayed name (&amp;lt;code&amp;gt;ccmodHumanName&amp;lt;/code&amp;gt;), the version number (&amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;) and dependencies (&amp;lt;code&amp;gt;ccmodDependencies&amp;lt;/code&amp;gt;). Only &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; are required.&lt;br /&gt;
&lt;br /&gt;
=== Example &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;my-mod&amp;quot;,&lt;br /&gt;
  &amp;quot;ccmodHumanName&amp;quot;: &amp;quot;My Mod&amp;quot;,&lt;br /&gt;
  &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;li value=5&amp;gt;Find a file to modify&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example we will do a simple palette swap of Lea. You can find her sprites in &amp;lt;code&amp;gt;assets/media/entity/player/move.png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;li value=6&amp;gt;Copy the file to your mod&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order for CCLoader to pick up the file from the mod it needs to be inside the mod folder with the same name as the original. This means that &amp;lt;code&amp;gt;assets/media/entity/player/move.png&amp;lt;/code&amp;gt; turns into &amp;lt;code&amp;gt;assets/mods/myMod/assets/media/entity/player/move.png&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#9888; &#039;&#039;&#039;Do not publish original CrossCode files in your mod.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;li value=7&amp;gt;Edit the file&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example I am using Paint.NET to swap Lea&#039;s red clothes for green ones:&lt;br /&gt;
&lt;br /&gt;
[[File:leaRecolor.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;li value=8&amp;gt;Restart the game and test your mod&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:leaRecolored.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
= Editing JSON =&lt;br /&gt;
&lt;br /&gt;
Often it is not enough to just edit png files to make mods. Changing sizes, making new entities or maps require one to edit or create new JSON files. This guide shows you how to work with JSON files in your mod.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* [[CrossCode Modding Tutorial#Making a mod|Making a mod]]&lt;br /&gt;
&lt;br /&gt;
== New JSON files ==&lt;br /&gt;
&lt;br /&gt;
Adding new JSON files does not require any special attention. Simply put the file into the correct folder and CCLoader will pick it up automatically.&lt;br /&gt;
&lt;br /&gt;
== Existing JSON files ==&lt;br /&gt;
&lt;br /&gt;
Editing existing JSON files is problematic in a few cases. Now only are these files pretty big but there are also a lot of instances where multiple mods want to modify the same file. In that case simply replacing the entire file doesn’t work.&lt;br /&gt;
&lt;br /&gt;
Instead you can use a mechanism called patches. These are files that only record the changes made to the original file, allowing multiple mods to apply patches to the same file. They work similar to file replacements as they require you to use the same name as the original file. The difference is that they append a &amp;lt;code&amp;gt;.patch&amp;lt;/code&amp;gt; to the filename and use special sytanx exmplained in more detail on [[Patching]].&lt;br /&gt;
&lt;br /&gt;
In order to work with JSON files it is recommend to beautify them before using them. You can use [https://beautifier.io/ beautifier.io] to do that for you.&lt;br /&gt;
&lt;br /&gt;
In this example we will make a patch that will increase the damage Lea does. This information can be found in &amp;lt;code&amp;gt;assets/data/players/lea.json&amp;lt;/code&amp;gt;. Once beautified one can easily see the value we want to modify.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;character&amp;quot;: &amp;quot;main.lea&amp;quot;,&lt;br /&gt;
    &amp;quot;sheet&amp;quot;: &amp;quot;player&amp;quot;,&lt;br /&gt;
    &amp;quot;headIdx&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;class&amp;quot;: &amp;quot;SPHEROMANCER&amp;quot;,&lt;br /&gt;
    &amp;quot;stats&amp;quot;: {&lt;br /&gt;
        &amp;quot;hp&amp;quot;: {&lt;br /&gt;
            &amp;quot;base&amp;quot;: 200,&lt;br /&gt;
            &amp;quot;increase&amp;quot;: 2000,&lt;br /&gt;
            &amp;quot;variance&amp;quot;: 0.1&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;attack&amp;quot;: {&lt;br /&gt;
            &amp;quot;base&amp;quot;: 20,&lt;br /&gt;
            &amp;quot;increase&amp;quot;: 200,&lt;br /&gt;
            &amp;quot;variance&amp;quot;: 0.9&lt;br /&gt;
        },&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we want to somehow change &amp;lt;code&amp;gt;stats.attack.base&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt;. For that we first create a patch file &amp;lt;code&amp;gt;assets/mods/myMod/assets/data/players/lea.json.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#128640; &#039;&#039;&#039;Tip: Most editors will not recognize these files as JSON by default. Almost all popular editors include a feature to manually set which type of file you are currently editing.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
First you can begin the file with &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt; to signal that this file is using the “Patch Step” format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next we insert a step that navigates into the &amp;lt;code&amp;gt;attack&amp;lt;/code&amp;gt; object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;stats&amp;quot;, &amp;quot;attack&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we can overwride a value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;base&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 200&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the end, we navigate back to the root of the document. In this case it is not required but will make future additions a lot easier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the end we end up with this &amp;lt;code&amp;gt;lea.json.patch&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
[{&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;ENTER&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: [&amp;quot;stats&amp;quot;, &amp;quot;attack&amp;quot;]&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;SET_KEY&amp;quot;,&lt;br /&gt;
    &amp;quot;index&amp;quot;: &amp;quot;base&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: 200&lt;br /&gt;
}, {&lt;br /&gt;
    &amp;quot;type&amp;quot;: &amp;quot;EXIT&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: 2&lt;br /&gt;
}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Making a JavaScript mod =&lt;br /&gt;
&lt;br /&gt;
Although the game provides a very powerful JSON scripting system it is sometimes required to add new puzzle elements or edit internal workings of existing ones. For this one needs javascript mods.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* [[CrossCode Modding Tutorial#Making a mod|Making a mod]]&lt;br /&gt;
&lt;br /&gt;
== Entry points ==&lt;br /&gt;
&lt;br /&gt;
In order to load a JavaScript file, there needs to be an entry in the &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; of the mod. There are multiple possible values here that reference different points in time at which a mod is loaded. Furthermore there is an entry called &amp;lt;code&amp;gt;plugin&amp;lt;/code&amp;gt; which combines all these entry points.&lt;br /&gt;
&lt;br /&gt;
For example, if we want to double all gained CP points we need to add a script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;my-mod&amp;quot;,&lt;br /&gt;
    &amp;quot;ccmodHumanName&amp;quot;: &amp;quot;My Mod&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
    &amp;quot;plugin&amp;quot;: &amp;quot;plugin.js&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;100%&amp;quot;| &amp;amp;#9888; If you use entry points other than &amp;lt;code&amp;gt;plugin&amp;lt;/code&amp;gt; you should always set &amp;lt;code&amp;gt;&amp;amp;quot;module&amp;amp;quot;: true&amp;lt;/code&amp;gt; as well.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mod loading stages ==&lt;br /&gt;
&lt;br /&gt;
=== Prestart ===&lt;br /&gt;
&lt;br /&gt;
This is the entry point you usually want to use. At this point, most of the game code is loaded but almost none of it executed yet. This makes it the perfect chance to change how the internals work.&lt;br /&gt;
&lt;br /&gt;
=== Preload ===&lt;br /&gt;
&lt;br /&gt;
At this point none of the game has been loaded yet. This means that while nothing has loaded yet but one can use this to set up libraries or use some JavaScript black magic.&lt;br /&gt;
&lt;br /&gt;
=== Postload ===&lt;br /&gt;
&lt;br /&gt;
Here some of the game code has been loaded, however pretty much nothing has been executed yet. Specifically, none of the resources have been been loaded yet, making it possible to intercept and work with them.&lt;br /&gt;
&lt;br /&gt;
=== Main ===&lt;br /&gt;
&lt;br /&gt;
This stage, which has been called “main” for legacy reasons, executes code as soon as the title menu start playing. This allows mods to use code that may have not been executed yet in the prestart stage, though it should be avoided is easily possible.&lt;br /&gt;
&lt;br /&gt;
== Plugin ==&lt;br /&gt;
&lt;br /&gt;
While using loading stages directly in the &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; directly executes the code in a script the plugin combines multiple stages at once. Every plugin defines an exported JavaScript class that is used to execute the code.&lt;br /&gt;
&lt;br /&gt;
Since we defined the file as &amp;lt;code&amp;gt;plugin.js&amp;lt;/code&amp;gt; above we create a new file &amp;lt;code&amp;gt;assets/mods/myMod/plugin.js&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
export default class MyMod {&lt;br /&gt;
    prestart() {&lt;br /&gt;
        //Prestart code will go in here.&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The advantage of using plugins over direct stages is that the constructor of the plugin receives an object as argument which can be used to find out which folder the current mod is stored in.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#128640; &#039;&#039;&#039;Tip: A plugin can also be used to write async code in a loading stage, blocking all other mods from loading until it has finished.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now that we can execute code in the prestart stage, we need to find out how to double the CP points. If we look into the &amp;lt;code&amp;gt;assets/js/game.compiled.js&amp;lt;/code&amp;gt; file we can find out that there is a class called &amp;lt;code&amp;gt;sc.PlayerModel&amp;lt;/code&amp;gt; which contains a function&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ts&amp;quot;&amp;gt;public addSkillPoints(points: number, element: number, all: boolean, extra: boolean): void&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
We now want to manipulate &amp;lt;code&amp;gt;addSkillPoints&amp;lt;/code&amp;gt; so that &amp;lt;code&amp;gt;points&amp;lt;/code&amp;gt; are doubled. For that we can use the &amp;lt;code&amp;gt;inject&amp;lt;/code&amp;gt; function. This is a function that exists on all classes that allows you to add and overwrite existing functions. Furthermore, inside that function you can use &amp;lt;code&amp;gt;this.parent(...)&amp;lt;/code&amp;gt; to call the original functon.&lt;br /&gt;
&lt;br /&gt;
We can use this to make a mod that doubles all CP:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot; line=&amp;quot;line&amp;quot;&amp;gt;&lt;br /&gt;
export default class MyMod {&lt;br /&gt;
    prestart() {&lt;br /&gt;
        sc.PlayerModel.inject({&lt;br /&gt;
            addSkillPoints(points, element, all, extra) {&lt;br /&gt;
                this.parent(points*2, element, all, extra);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example mod can be found on GitHub.&amp;lt;ref&amp;gt;https://github.com/CCDirectLink/CrossCode-Modding-Tutorial/tree/master/example&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Share your mod =&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* [[CrossCode Modding Tutorial#Making a mod|Making a mod]]&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
# Open your mod folder that contains the &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; file&lt;br /&gt;
# Select all files/folders needed for the mod&lt;br /&gt;
# Create a zip archive from these files. On Windows you can do this using right click &amp;amp;gt; send to &amp;amp;gt; zip-archived folder&lt;br /&gt;
&lt;br /&gt;
You can already share this file&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rename the .zip file to .ccmod&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows other users to simply drag the file into the mods folder and not have to worry about extracting it&lt;br /&gt;
&lt;br /&gt;
== Publish on the official list ==&lt;br /&gt;
&lt;br /&gt;
Since the process of approving a mod for the official list is a bit complicated (and is likely to change in the future) the best way is to:&lt;br /&gt;
* Publish your source code on [https://github.com/ GitHub]&lt;br /&gt;
* Make sure you have a correct version number&lt;br /&gt;
* Create a [https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/managing-releases-in-a-repository Github Release] - you can upload your .ccmod file there&lt;br /&gt;
* Message (an admin) on the [https://discord.gg/TFs6n5v CrossCode Modding Discord] to add your mod to the list&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding guides]]&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Installing_mods&amp;diff=270</id>
		<title>Installing mods</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Installing_mods&amp;diff=270"/>
		<updated>2024-09-06T23:33:58Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: /* Downloading releases */ Resize image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This guide describes the most common way of installation of perfectly regular CrossCode mods. Granted, not every mod is equal, some may require additional setup before or after installation, but that must be described in mod&#039;s README document. If not - well, this is most likely the mod author&#039;s problem. Note that you don&#039;t have to read this guide each time you download a new mod as this page is intended for absolute beginners.&lt;br /&gt;
&lt;br /&gt;
=== Short note about upgrading mods ===&lt;br /&gt;
&lt;br /&gt;
You &#039;&#039;&#039;can&#039;&#039;&#039; perform mod upgrades by performing the steps described in this guide, but replacing all previous files when unpacking the downloaded mod. However, &#039;&#039;&#039;this is not recommended&#039;&#039;&#039; (by me at least) - instead you should first delete the folder with the previous version of the mod you are upgrading and only then unpack the new version, just in case.&lt;br /&gt;
&lt;br /&gt;
== Step 1. Install [[CCLoader]] ==&lt;br /&gt;
&lt;br /&gt;
CCLoader (aka the &#039;&#039;&#039;C&#039;&#039;&#039;ross&#039;&#039;&#039;C&#039;&#039;&#039;ode mod&#039;&#039;&#039;loader&#039;&#039;&#039;) is required for most mods nowadays to work. Well, it is possible to &amp;lt;s&amp;gt;ab&amp;lt;/s&amp;gt;use the DLC/extension system for creating simple asset swaps, but these are its limits - it&#039;s &#039;&#039;definitely&#039;&#039; not designed for full-fledged modding. CCLoader also provides various tooling for mod authors for selectively patching game content, so that mod authors can put just the changed bits of game files in their mods instead of copying them entirely. The guide about CCLoader installation can be found [[CCLoader#Installation|here]].&lt;br /&gt;
&lt;br /&gt;
== Step 2. Get the mod files ==&lt;br /&gt;
&lt;br /&gt;
Most mods are distributed as zip archives. There are two ways to obtain those:&lt;br /&gt;
&lt;br /&gt;
=== Downloading releases ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;See also [[CCLoader#VERY IMPORTANT NOTE: Don&#039;t use the green &amp;quot;clone or download&amp;quot; button!|this section]] of the CCLoader installation guide&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless explicitly stated otherwise in the mod&#039;s README, &#039;&#039;&#039;when actually downloading mods you should always check first for released versions&#039;&#039;&#039;, or &amp;quot;releases&amp;quot; for short. Most mod authors use GitHub for storing source code and distributing releases where you can access the page with changelogs and downloads through these links:&lt;br /&gt;
&lt;br /&gt;
[[File:Github-mod-releases.png|900px]]&lt;br /&gt;
&lt;br /&gt;
Pressing on the version marked as &amp;quot;latest&amp;quot; will take you to, unsurprisingly, the page of the latest release, pressing on the &amp;lt;code&amp;gt;Releases (N)&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;+N releases&amp;lt;/code&amp;gt; links at the top and bottom (where &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is some number) will take you to a list of all available versions. Mods also often include the following badge in their README which takes you directly to downloads:&lt;br /&gt;
&lt;br /&gt;
[https://raw.githubusercontent.com/CCDirectLink/organization/master/assets/badges/releases@2x.png https://raw.githubusercontent.com/CCDirectLink/organization/master/assets/badges/releases@2x.png]&lt;br /&gt;
&lt;br /&gt;
On the release page you&#039;ll see the section named &amp;quot;Assets&amp;quot;. It always includes at least two entries: &amp;quot;Source code (zip)&amp;quot; and &amp;quot;Source code (tar.gz)&amp;quot;. If only links for downloading source code are present - don&#039;t worry, you can use those to install the mod. Just download whichever archive format you prefer. Otherwise mod authors upload at least zip archives on the downloads page, usually the file name of those includes the mod ID and version.&lt;br /&gt;
&lt;br /&gt;
=== Downloading source code ===&lt;br /&gt;
&lt;br /&gt;
Most of the time mod authors publish the releases properly, but when the &amp;quot;releases&amp;quot; page is empty or the link is hidden it can mean one of three things:&lt;br /&gt;
&lt;br /&gt;
# The project is dead.&lt;br /&gt;
# The mod is work-in-progress project, or WIP for short. Such mods usually don&#039;t have a proper README file. In this case you should contact the author to ask if the mod is usable. You can also potentially help with the development - sometimes mods may need testers.&lt;br /&gt;
# The author was just lazy to publish releases properly. Most mods don&#039;t require compilation or preprocessing of assets or scripts to be loaded into the game and work, so in such cases you can try to download the mod&#039;s source code. On GitHub this can be done by pressing the green &amp;quot;code&amp;quot; button with a download icon to the left, and then pressing &amp;quot;download ZIP&amp;quot; in the opened popup:&amp;lt;br&amp;gt;[[File:Mod-download-source-code.png|class=block-img]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beware, however, that sometimes the source code of mods is structured in a weird way&#039;&#039;&#039;, mostly in mods made by ac2pic aka Emileyah, so sometimes you can&#039;t just put files of the downloaded archive into your mods folder and call it a day. As a rule of thumb, a folder which contains a file named &amp;lt;code&amp;gt;ccmod.json&amp;lt;/code&amp;gt; is most likely a mod. In the case of ac2pic&#039;s mods, the mod is usually located in a subfolder named similarly to the mod itself.&lt;br /&gt;
&lt;br /&gt;
== Step 3. Unpack the downloaded mod into your mods folder ==&lt;br /&gt;
&lt;br /&gt;
The title of this step is a bit misleading, because depending on the type of mod you downloaded, you may not even have to extract it.&lt;br /&gt;
&lt;br /&gt;
To locate your mods folder you first need to find the [[Locations of CrossCode files#Game files folder|CrossCode game files folder]], then go to &amp;lt;code&amp;gt;assets&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt;. If the folder &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt; doesn&#039;t exist - create it.&lt;br /&gt;
&lt;br /&gt;
=== Is your mod a &amp;lt;code&amp;gt;.ccmod&amp;lt;/code&amp;gt; file? ===&lt;br /&gt;
&lt;br /&gt;
Worry not! All you have to do is move the file into the &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
=== Is your mod a &amp;lt;code&amp;gt;.zip&amp;lt;/code&amp;gt; file? ===&lt;br /&gt;
&lt;br /&gt;
Unpack the mod folder contained in the archive you downloaded there. Be sure to put the mod folder in &amp;lt;code&amp;gt;mods&amp;lt;/code&amp;gt;, not the files inside because &#039;&#039;&#039;each mod lives in its own separate folder&#039;&#039;&#039;! You can also ensure that the folder you unpacked contains a file named &amp;lt;code&amp;gt;ccmod.json&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:Mods-dir-structure-separate-folders.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; these screenshots are a bit outdated (TODO update, include multiple mods to better demonstrate the idea), for example because they doesn&#039;t contain &amp;lt;code&amp;gt;ccmod.json&amp;lt;/code&amp;gt;, but I hope you get the correct idea.&lt;br /&gt;
&lt;br /&gt;
== Step 4. PROFIT!!! ==&lt;br /&gt;
&lt;br /&gt;
This basically concludes installation of perfectly regular mods.&lt;br /&gt;
&lt;br /&gt;
== Common mod installation problems ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Problem with requirements of mod&amp;quot; errors are printed and the mod isn&#039;t loaded ===&lt;br /&gt;
&lt;br /&gt;
Some mods work only on certain versions of CrossCode or CCLoader and some mods require other mods to function (so-called libraries). If these requirements of a given mod aren&#039;t met when the game is loaded, the modloader will simply skip this mod and proceed to start the game without it.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Requirement problem&lt;br /&gt;
!width=&amp;quot;75%&amp;quot;| Explanation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod &#039;xyz&#039; is not installed&amp;lt;/code&amp;gt;&lt;br /&gt;
| The mod &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt; is a so-called &amp;quot;dependency&amp;quot; of the mod you installed and you should install it as well. Usually dependencies are listed in the mod&#039;s README.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod &#039;xyz&#039; is disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
| Unsurprisingly, you have to enable the mod &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt; to get the installed mod working.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod &#039;xyz&#039; is not loaded&amp;lt;/code&amp;gt;&lt;br /&gt;
| If there is a problem in the chain of dependencies, then all mods in that chain aren&#039;t loaded. See the error which caused &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt; to not be loaded.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;version of xyz is not in range abc&amp;lt;/code&amp;gt;&lt;br /&gt;
| The installed mod is compatible with a specific range of versions of &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt;, try downgrading or upgrading &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mod &#039;xyz&#039; doesn&#039;t have a version&amp;lt;/code&amp;gt;&lt;br /&gt;
| The developer of the mod you are installing likely made a mistake or you downloaded a very old development version of &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides for mod users]]&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Cc-discord-description&amp;diff=269</id>
		<title>MediaWiki:Cc-discord-description</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Cc-discord-description&amp;diff=269"/>
		<updated>2024-08-01T15:08:01Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Update description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Radical Fish Discord&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Sidebar&amp;diff=268</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Sidebar&amp;diff=268"/>
		<updated>2024-08-01T14:55:10Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Add CC Discord to navigation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* c2dl-nav&lt;br /&gt;
** home-url|home-description&lt;br /&gt;
** mods-url|mods-description&lt;br /&gt;
** tools-url|tools-description&lt;br /&gt;
** cc-discord-url|cc-discord-description&lt;br /&gt;
** discord-url|discord-description&lt;br /&gt;
** github-url|github-description&lt;br /&gt;
** gitlab-url|gitlab-description&lt;br /&gt;
** reddit-url|reddit-description&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Cc-discord-description&amp;diff=267</id>
		<title>MediaWiki:Cc-discord-description</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Cc-discord-description&amp;diff=267"/>
		<updated>2024-08-01T14:54:28Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: CC Discord description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CrossCode Discord&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Cc-discord-url&amp;diff=266</id>
		<title>MediaWiki:Cc-discord-url</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Cc-discord-url&amp;diff=266"/>
		<updated>2024-08-01T14:53:33Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Add CC Discord-URL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://discord.gg/radicalfish&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Discord-description&amp;diff=265</id>
		<title>MediaWiki:Discord-description</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Discord-description&amp;diff=265"/>
		<updated>2024-08-01T14:17:04Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Refine description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modding Discord&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_error.svg&amp;diff=240</id>
		<title>File:Ui note error.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_error.svg&amp;diff=240"/>
		<updated>2023-05-25T19:04:12Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing (MIT) ==&lt;br /&gt;
&lt;br /&gt;
Copyright © 2011–2018 [https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/AUTHORS.txt OOjs UI Team and other contributors]&lt;br /&gt;
&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
The Software is provided &amp;quot;as is&amp;quot;, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the Software or the use or other dealings in the Software.&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_warn.svg&amp;diff=239</id>
		<title>File:Ui note warn.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_warn.svg&amp;diff=239"/>
		<updated>2023-05-25T19:02:39Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing (MIT) ==&lt;br /&gt;
&lt;br /&gt;
Copyright © 2011–2018 [https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/AUTHORS.txt OOjs UI Team and other contributors]&lt;br /&gt;
&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
The Software is provided &amp;quot;as is&amp;quot;, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the Software or the use or other dealings in the Software.&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_reminder.svg&amp;diff=238</id>
		<title>File:Ui note reminder.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_reminder.svg&amp;diff=238"/>
		<updated>2023-05-25T19:02:02Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing (MIT) ==&lt;br /&gt;
&lt;br /&gt;
Copyright © 2011–2018 [https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/AUTHORS.txt OOjs UI Team and other contributors]&lt;br /&gt;
&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
The Software is provided &amp;quot;as is&amp;quot;, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the Software or the use or other dealings in the Software.&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_info.svg&amp;diff=237</id>
		<title>File:Ui note info.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_info.svg&amp;diff=237"/>
		<updated>2023-05-25T18:59:46Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Licensing added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Licensing (MIT) ==&lt;br /&gt;
&lt;br /&gt;
Copyright © 2011–2018 [https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/AUTHORS.txt OOjs UI Team and other contributors]&lt;br /&gt;
&lt;br /&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;br /&gt;
&lt;br /&gt;
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;br /&gt;
&lt;br /&gt;
The Software is provided &amp;quot;as is&amp;quot;, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the Software or the use or other dealings in the Software.&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_reminder.svg&amp;diff=232</id>
		<title>File:Ui note reminder.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_reminder.svg&amp;diff=232"/>
		<updated>2023-05-25T18:26:19Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=File:Ui_note_info.svg&amp;diff=231</id>
		<title>File:Ui note info.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=File:Ui_note_info.svg&amp;diff=231"/>
		<updated>2023-05-25T18:21:03Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Sidebar&amp;diff=226</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Sidebar&amp;diff=226"/>
		<updated>2023-02-03T16:51:46Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Twitter url removed (no account)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* c2dl-nav&lt;br /&gt;
** home-url|home-description&lt;br /&gt;
** mods-url|mods-description&lt;br /&gt;
** tools-url|tools-description&lt;br /&gt;
** discord-url|discord-description&lt;br /&gt;
** github-url|github-description&lt;br /&gt;
** gitlab-url|gitlab-description&lt;br /&gt;
** reddit-url|reddit-description&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Module:List/doc&amp;diff=145</id>
		<title>Module:List/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Module:List/doc&amp;diff=145"/>
		<updated>2020-08-31T22:44:25Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List template. Based on [https://www.mediawiki.org/wiki/Module:List MediaWiki List Module]&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
Creates a list in an specified format.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=listType|param=1|desc=List type|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|bulleted|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|bulleted|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|unbulleted|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|unbulleted|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|horizontal|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|horizontal|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|horizontal_ordered|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|horizontal_ordered|a|b|c}}&lt;br /&gt;
|def=NULL|type=&amp;lt;nowiki&amp;gt;[ &amp;quot;bulleted&amp;quot; | &amp;quot;unbulleted&amp;quot; | &amp;quot;horizontal&amp;quot; | &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=listEntries|param=2...x|desc=List entries|def=NULL|type=WikiCode|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=olStart|param=start|desc=Start entry. &amp;lt;pre&amp;gt;&amp;lt;ol start=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt; [https://developer.mozilla.org/de/docs/Web/HTML/Element/ol#Attribute MDN (ol)]. Requires &amp;lt;code&amp;gt;listType&amp;lt;/code&amp;gt; &amp;lt;nowiki&amp;gt;[ &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|start=5}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|start=5}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|start=-5}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|start=-5}}&lt;br /&gt;
|def=1|type=SignedNumber|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=olType|param=type|desc=Ordered list type. &amp;lt;pre&amp;gt;&amp;lt;ol type=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;  [https://developer.mozilla.org/de/docs/Web/HTML/Element/ol#Attribute MDN (ol)]. Requires &amp;lt;code&amp;gt;listType&amp;lt;/code&amp;gt; &amp;lt;nowiki&amp;gt;[ &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;. It&#039;s recommended to use &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; or param &amp;lt;code&amp;gt;list_style_type&amp;lt;/code&amp;gt; instead|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|type=i}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|type=i}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|type=a}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|type=a}}&lt;br /&gt;
|def=1|type=&amp;lt;nowiki&amp;gt;[ &amp;quot;1&amp;quot; | &amp;quot;a&amp;quot; | &amp;quot;A&amp;quot; | &amp;quot;i&amp;quot; | &amp;quot;I&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=cssType|param=list_style_type|desc=Recommended list style type. Uses the css attribute &amp;lt;code&amp;gt;list-style-type&amp;lt;/code&amp;gt;|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=lower-alpha}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=lower-alpha}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=lower-greek}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=lower-greek}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=decimal-leading-zero}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=decimal-leading-zero}}&lt;br /&gt;
|def=NULL|type=[https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type MDN (list-style-type)]|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=divClass|param=class|desc=&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; attribute for the &amp;lt;pre&amp;gt;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt; surrounding the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=divStyle|param=style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the &amp;lt;pre&amp;gt;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt; surrounding the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=listStyle|param=list_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemStyle|param=item_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the list items|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemXStyle|param=item1_style...itemX_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for item x in list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemXValue|param=item1_value...itemX_value|desc=&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; attribute for item x in list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=listIndent|param=indent|desc=Set &amp;lt;code&amp;gt;margin-left&amp;lt;/code&amp;gt; for list (&amp;lt;code&amp;gt;intent * 1.6 em&amp;lt;/code&amp;gt;)|def=NULL|type=String|status=Optional}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:list|bulleted|First item|Second item|Third item|item1_style=background-color:yellow;|item2_style=background-color:silver;color:black;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#invoke:list|bulleted|First item|Second item|Third item|item1_style=background-color:yellow;|item2_style=background-color:silver;color:black;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Module:List/doc&amp;diff=144</id>
		<title>Module:List/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Module:List/doc&amp;diff=144"/>
		<updated>2020-08-31T22:39:17Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template for creating a unified parameter format for templates. Based on [https://www.mediawiki.org/wiki/Module:List MediaWiki (Module:List)]&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
Creates a list that displays Template parameter in a unified format.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=listType|param=1|desc=List type|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|bulleted|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|bulleted|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|unbulleted|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|unbulleted|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|horizontal|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|horizontal|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|horizontal_ordered|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|horizontal_ordered|a|b|c}}&lt;br /&gt;
|def=NULL|type=&amp;lt;nowiki&amp;gt;[ &amp;quot;bulleted&amp;quot; | &amp;quot;unbulleted&amp;quot; | &amp;quot;horizontal&amp;quot; | &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=listEntries|param=2...x|desc=List entries|def=NULL|type=WikiCode|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=olStart|param=start|desc=Start entry. &amp;lt;pre&amp;gt;&amp;lt;ol start=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt; [https://developer.mozilla.org/de/docs/Web/HTML/Element/ol#Attribute MDN (ol)]. Requires &amp;lt;code&amp;gt;listType&amp;lt;/code&amp;gt; &amp;lt;nowiki&amp;gt;[ &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|start=5}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|start=5}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|start=-5}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|start=-5}}&lt;br /&gt;
|def=1|type=SignedNumber|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=olType|param=type|desc=Ordered list type. &amp;lt;pre&amp;gt;&amp;lt;ol type=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;  [https://developer.mozilla.org/de/docs/Web/HTML/Element/ol#Attribute MDN (ol)]. Requires &amp;lt;code&amp;gt;listType&amp;lt;/code&amp;gt; &amp;lt;nowiki&amp;gt;[ &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;. It&#039;s recommended to use &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; or param &amp;lt;code&amp;gt;list_style_type&amp;lt;/code&amp;gt; instead|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|type=i}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|type=i}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|type=a}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|type=a}}&lt;br /&gt;
|def=1|type=&amp;lt;nowiki&amp;gt;[ &amp;quot;1&amp;quot; | &amp;quot;a&amp;quot; | &amp;quot;A&amp;quot; | &amp;quot;i&amp;quot; | &amp;quot;I&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=cssType|param=list_style_type|desc=Recommended list style type. Uses the css attribute &amp;lt;code&amp;gt;list-style-type&amp;lt;/code&amp;gt;|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=lower-alpha}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=lower-alpha}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=lower-greek}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=lower-greek}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=decimal-leading-zero}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=decimal-leading-zero}}&lt;br /&gt;
|def=NULL|type=[https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type MDN (list-style-type)]|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=divClass|param=class|desc=&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; attribute for the &amp;lt;pre&amp;gt;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt; surrounding the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=divStyle|param=style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the &amp;lt;pre&amp;gt;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt; surrounding the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=listStyle|param=list_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemStyle|param=item_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the list items|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemXStyle|param=item1_style...itemX_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for item x in list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemXValue|param=item1_value...itemX_value|desc=&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; attribute for item x in list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=listIndent|param=indent|desc=Set &amp;lt;code&amp;gt;margin-left&amp;lt;/code&amp;gt; for list (&amp;lt;code&amp;gt;intent * 1.6 em&amp;lt;/code&amp;gt;)|def=NULL|type=String|status=Optional}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:list|bulleted|First item|Second item|Third item|item1_style=background-color:yellow;|item2_style=background-color:silver;color:black;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#invoke:list|bulleted|First item|Second item|Third item|item1_style=background-color:yellow;|item2_style=background-color:silver;color:black;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Module:List/doc&amp;diff=143</id>
		<title>Module:List/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Module:List/doc&amp;diff=143"/>
		<updated>2020-08-31T22:36:05Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;Template for creating a unified parameter format for templates  == About == Creates a list that displays Template parameter in a unified format.  == Parameter == {{TemplateDat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template for creating a unified parameter format for templates&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
Creates a list that displays Template parameter in a unified format.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=listType|param=1|desc=List type|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|bulleted|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|bulleted|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|unbulleted|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|unbulleted|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|horizontal|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|horizontal|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|horizontal_ordered|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|horizontal_ordered|a|b|c}}&lt;br /&gt;
|def=NULL|type=&amp;lt;nowiki&amp;gt;[ &amp;quot;bulleted&amp;quot; | &amp;quot;unbulleted&amp;quot; | &amp;quot;horizontal&amp;quot; | &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=listEntries|param=2...x|desc=List entries|def=NULL|type=WikiCode|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=olStart|param=start|desc=Start entry. &amp;lt;pre&amp;gt;&amp;lt;ol start=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt; [https://developer.mozilla.org/de/docs/Web/HTML/Element/ol#Attribute MDN (ol)]. Requires &amp;lt;code&amp;gt;listType&amp;lt;/code&amp;gt; &amp;lt;nowiki&amp;gt;[ &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|start=5}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|start=5}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|start=-5}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|start=-5}}&lt;br /&gt;
|def=1|type=SignedNumber|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=olType|param=type|desc=Ordered list type. &amp;lt;pre&amp;gt;&amp;lt;ol type=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;  [https://developer.mozilla.org/de/docs/Web/HTML/Element/ol#Attribute MDN (ol)]. Requires &amp;lt;code&amp;gt;listType&amp;lt;/code&amp;gt; &amp;lt;nowiki&amp;gt;[ &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;. It&#039;s recommended to use &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; or param &amp;lt;code&amp;gt;list_style_type&amp;lt;/code&amp;gt; instead|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|type=i}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|type=i}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|type=a}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|type=a}}&lt;br /&gt;
|def=1|type=&amp;lt;nowiki&amp;gt;[ &amp;quot;1&amp;quot; | &amp;quot;a&amp;quot; | &amp;quot;A&amp;quot; | &amp;quot;i&amp;quot; | &amp;quot;I&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=cssType|param=list_style_type|desc=Recommended list style type. Uses the css attribute &amp;lt;code&amp;gt;list-style-type&amp;lt;/code&amp;gt;|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=lower-alpha}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=lower-alpha}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=lower-greek}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=lower-greek}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=decimal-leading-zero}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=decimal-leading-zero}}&lt;br /&gt;
|def=NULL|type=[https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type MDN (list-style-type)]|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=divClass|param=class|desc=&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; attribute for the &amp;lt;pre&amp;gt;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt; surrounding the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=divStyle|param=style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the &amp;lt;pre&amp;gt;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt; surrounding the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=listStyle|param=list_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemStyle|param=item_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the list items|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemXStyle|param=item1_style...itemX_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for item x in list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemXValue|param=item1_value...itemX_value|desc=&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; attribute for item x in list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=listIndent|param=indent|desc=Set &amp;lt;code&amp;gt;margin-left&amp;lt;/code&amp;gt; for list (&amp;lt;code&amp;gt;intent * 1.6 em&amp;lt;/code&amp;gt;)|def=NULL|type=String|status=Optional}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:list|bulleted|First item|Second item|Third item|item1_style=background-color:yellow;|item2_style=background-color:silver;color:black;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#invoke:list|bulleted|First item|Second item|Third item|item1_style=background-color:yellow;|item2_style=background-color:silver;color:black;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/doc&amp;diff=142</id>
		<title>Template:TemplateData/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/doc&amp;diff=142"/>
		<updated>2020-08-31T22:35:35Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Undo revision 141 by Streetclaw (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template for creating a unified parameter format for templates&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
Creates a list that displays Template parameter in a unified format.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Entries|param=1|desc=Parameter list|def=NULL|type=1 {[[Template:TemplateData/entry]]}|status=Required}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Complete example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Example name|alias1=Example alias 1|alias2=Example alias 2|alias3=Example alias 3|param=example param|desc=example description|def=NULL|example=xyz|type=String|status=Required}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Example name|alias1=Example alias 1|alias2=Example alias 2|alias3=Example alias 3|param=example param|desc=example description|def=NULL|example=xyz|type=String|status=Required}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/doc&amp;diff=141</id>
		<title>Template:TemplateData/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/doc&amp;diff=141"/>
		<updated>2020-08-31T22:34:49Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: doc added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template for creating a unified parameter format for templates&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
Creates a list that displays Template parameter in a unified format.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=listType|param=1|desc=List type|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|bulleted|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|bulleted|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|unbulleted|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|unbulleted|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|horizontal|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|horizontal|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|horizontal_ordered|a|b|c}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|horizontal_ordered|a|b|c}}&lt;br /&gt;
|def=NULL|type=&amp;lt;nowiki&amp;gt;[ &amp;quot;bulleted&amp;quot; | &amp;quot;unbulleted&amp;quot; | &amp;quot;horizontal&amp;quot; | &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=listEntries|param=2...x|desc=List entries|def=NULL|type=WikiCode|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=olStart|param=start|desc=Start entry. &amp;lt;pre&amp;gt;&amp;lt;ol start=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt; [https://developer.mozilla.org/de/docs/Web/HTML/Element/ol#Attribute MDN (ol)]. Requires &amp;lt;code&amp;gt;listType&amp;lt;/code&amp;gt; &amp;lt;nowiki&amp;gt;[ &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|start=5}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|start=5}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|start=-5}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|start=-5}}&lt;br /&gt;
|def=1|type=SignedNumber|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=olType|param=type|desc=Ordered list type. &amp;lt;pre&amp;gt;&amp;lt;ol type=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/pre&amp;gt;  [https://developer.mozilla.org/de/docs/Web/HTML/Element/ol#Attribute MDN (ol)]. Requires &amp;lt;code&amp;gt;listType&amp;lt;/code&amp;gt; &amp;lt;nowiki&amp;gt;[ &amp;quot;ordered&amp;quot; | &amp;quot;horizontal_ordered&amp;quot; ]&amp;lt;/nowiki&amp;gt;. It&#039;s recommended to use &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; or param &amp;lt;code&amp;gt;list_style_type&amp;lt;/code&amp;gt; instead|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|type=i}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|type=i}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|type=a}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|type=a}}&lt;br /&gt;
|def=1|type=&amp;lt;nowiki&amp;gt;[ &amp;quot;1&amp;quot; | &amp;quot;a&amp;quot; | &amp;quot;A&amp;quot; | &amp;quot;i&amp;quot; | &amp;quot;I&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=cssType|param=list_style_type|desc=Recommended list style type. Uses the css attribute &amp;lt;code&amp;gt;list-style-type&amp;lt;/code&amp;gt;|example=&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=lower-alpha}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=lower-alpha}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=lower-greek}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=lower-greek}}&lt;br /&gt;
&amp;lt;pre&amp;gt;{{#invoke:list|ordered|a|b|c|list_style_type=decimal-leading-zero}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{#invoke:list|ordered|a|b|c|list_style_type=decimal-leading-zero}}&lt;br /&gt;
|def=NULL|type=[https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type MDN (list-style-type)]|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=divClass|param=class|desc=&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; attribute for the &amp;lt;pre&amp;gt;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt; surrounding the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=divStyle|param=style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the &amp;lt;pre&amp;gt;&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;&amp;lt;/pre&amp;gt; surrounding the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=listStyle|param=list_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemStyle|param=item_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for the list items|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemXStyle|param=item1_style...itemX_style|desc=&amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; attribute for item x in list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=itemXValue|param=item1_value...itemX_value|desc=&amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; attribute for item x in list|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=listIndent|param=indent|desc=Set &amp;lt;code&amp;gt;margin-left&amp;lt;/code&amp;gt; for list (&amp;lt;code&amp;gt;intent * 1.6 em&amp;lt;/code&amp;gt;)|def=NULL|type=String|status=Optional}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke:list|bulleted|First item|Second item|Third item|item1_style=background-color:yellow;|item2_style=background-color:silver;color:black;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{#invoke:list|bulleted|First item|Second item|Third item|item1_style=background-color:yellow;|item2_style=background-color:silver;color:black;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Module:Arguments&amp;diff=140</id>
		<title>Module:Arguments</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Module:Arguments&amp;diff=140"/>
		<updated>2020-08-31T21:22:08Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: 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(&#039;libraryUtil&#039;)&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&#039;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) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#039; 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) == &#039;string&#039; then&lt;br /&gt;
		return val:match(&#039;^%s*(.-)%s*$&#039;)&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) == &#039;string&#039; then&lt;br /&gt;
		if val:find(&#039;%S&#039;) 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;
local function matchesTitle(given, title)&lt;br /&gt;
	local tp = type( given )&lt;br /&gt;
	return (tp == &#039;string&#039; or tp == &#039;number&#039;) and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up argument translation.&lt;br /&gt;
	--]]&lt;br /&gt;
	options.translate = options.translate or {}&lt;br /&gt;
	if getmetatable(options.translate) == nil then&lt;br /&gt;
		setmetatable(options.translate, translate_mt)&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate == nil then&lt;br /&gt;
		options.backtranslate = {}&lt;br /&gt;
		for k,v in pairs(options.translate) do&lt;br /&gt;
			options.backtranslate[v] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
		setmetatable(options.backtranslate, {&lt;br /&gt;
			__index = function(t, k)&lt;br /&gt;
				if options.translate[k] ~= k then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&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&#039;s availability. If we weren&#039;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) == &#039;table&#039; and type(frame.getParent) == &#039;function&#039; 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&#039;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(&#039;/sandbox$&#039;, &#039;&#039;)&lt;br /&gt;
				local found = false&lt;br /&gt;
				if matchesTitle(options.wrappers, title) then&lt;br /&gt;
					found = true&lt;br /&gt;
				elseif type(options.wrappers) == &#039;table&#039; then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if matchesTitle(v, title) then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&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&#039;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&#039;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) ~= &#039;function&#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &#039;valueFunc&#039;&amp;quot;&lt;br /&gt;
					.. &#039;(function expected, got &#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &#039;)&#039;,&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(tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
		-- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
		-- values, which can be overwritten if they are &#039;s&#039; (soft).&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in pairs(t) do&lt;br /&gt;
				if metaArgs[key] == nil and nilArgs[key] ~= &#039;h&#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &#039;s&#039;&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;
		if type(key) == &#039;string&#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&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;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nilArgs[key] = &#039;h&#039;&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 type(key) == &#039;string&#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; the table is read-only&#039;,&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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; overwriting existing arguments is not permitted&#039;,&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&#039;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] = &#039;h&#039;&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function translatenext(invariant)&lt;br /&gt;
		local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
		invariant.k = k&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		elseif type(k) ~= &#039;string&#039; or not options.backtranslate then&lt;br /&gt;
			return k, v&lt;br /&gt;
		else&lt;br /&gt;
			local backtranslate = options.backtranslate[k]&lt;br /&gt;
			if backtranslate == nil then&lt;br /&gt;
				-- Skip this one. This is a tail call, so this won&#039;t cause stack overflow&lt;br /&gt;
				return translatenext(invariant)&lt;br /&gt;
			else&lt;br /&gt;
				return backtranslate, v&lt;br /&gt;
			end&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(argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return translatenext, { t = metaArgs }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function inext(t, i)&lt;br /&gt;
		-- This uses our __index metamethod&lt;br /&gt;
		local v = t[i + 1]&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			return i + 1, v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function (t)&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		return inext, t, 0&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>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Module:List&amp;diff=139</id>
		<title>Module:List</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Module:List&amp;diff=139"/>
		<updated>2020-08-31T21:14:43Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Lua module test (list)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module outputs different kinds of lists. At the moment, bulleted,&lt;br /&gt;
-- unbulleted, horizontal, ordered, and horizontal ordered lists are supported.&lt;br /&gt;
&lt;br /&gt;
local libUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libUtil.checkType&lt;br /&gt;
local mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local listTypes = {&lt;br /&gt;
	[&#039;bulleted&#039;] = true,&lt;br /&gt;
	[&#039;unbulleted&#039;] = true,&lt;br /&gt;
	[&#039;horizontal&#039;] = true,&lt;br /&gt;
	[&#039;ordered&#039;] = true,&lt;br /&gt;
	[&#039;horizontal_ordered&#039;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.makeListData(listType, args)&lt;br /&gt;
	-- Constructs a data table to be passed to p.renderList.&lt;br /&gt;
	local data = {}&lt;br /&gt;
&lt;br /&gt;
	-- Classes&lt;br /&gt;
	data.classes = {}&lt;br /&gt;
	if listType == &#039;horizontal&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		table.insert(data.classes, &#039;hlist&#039;)&lt;br /&gt;
	elseif listType == &#039;unbulleted&#039; then&lt;br /&gt;
		table.insert(data.classes, &#039;plainlist&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(data.classes, args.class)&lt;br /&gt;
&lt;br /&gt;
	-- Main div style&lt;br /&gt;
	data.style = args.style&lt;br /&gt;
&lt;br /&gt;
	-- Indent for horizontal lists&lt;br /&gt;
	if listType == &#039;horizontal&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		local indent = tonumber(args.indent)&lt;br /&gt;
		indent = indent and indent * 1.6 or 0&lt;br /&gt;
		if indent &amp;gt; 0 then&lt;br /&gt;
			data.marginLeft = indent .. &#039;em&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List style types for ordered lists&lt;br /&gt;
	-- This could be &amp;quot;1, 2, 3&amp;quot;, &amp;quot;a, b, c&amp;quot;, or a number of others. The list style&lt;br /&gt;
	-- type is either set by the &amp;quot;type&amp;quot; attribute or the &amp;quot;list-style-type&amp;quot; CSS&lt;br /&gt;
	-- property.&lt;br /&gt;
	if listType == &#039;ordered&#039; or listType == &#039;horizontal_ordered&#039; then &lt;br /&gt;
		data.listStyleType = args.list_style_type or args[&#039;list-style-type&#039;]&lt;br /&gt;
		data.type = args[&#039;type&#039;]&lt;br /&gt;
&lt;br /&gt;
		-- Detect invalid type attributes and attempt to convert them to&lt;br /&gt;
		-- list-style-type CSS properties.&lt;br /&gt;
		if data.type &lt;br /&gt;
			and not data.listStyleType&lt;br /&gt;
			and not tostring(data.type):find(&#039;^%s*[1AaIi]%s*$&#039;)&lt;br /&gt;
		then&lt;br /&gt;
			data.listStyleType = data.type&lt;br /&gt;
			data.type = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List tag type&lt;br /&gt;
	if listType == &#039;ordered&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		data.listTag = &#039;ol&#039;&lt;br /&gt;
	else&lt;br /&gt;
		data.listTag = &#039;ul&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start number for ordered lists&lt;br /&gt;
	data.start = args.start&lt;br /&gt;
	if listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		-- Apply fix to get start numbers working with horizontal ordered lists.&lt;br /&gt;
		local startNum = tonumber(data.start)&lt;br /&gt;
		if startNum then&lt;br /&gt;
			data.counterReset = &#039;listitem &#039; .. tostring(startNum - 1)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- List style&lt;br /&gt;
	 -- ul_style and ol_style are included for backwards compatibility. No&lt;br /&gt;
	 -- distinction is made for ordered or unordered lists.&lt;br /&gt;
	data.listStyle = args.list_style&lt;br /&gt;
&lt;br /&gt;
	-- List items&lt;br /&gt;
	-- li_style is included for backwards compatibility. item_style was included&lt;br /&gt;
	-- to be easier to understand for non-coders.&lt;br /&gt;
	data.itemStyle = args.item_style or args.li_style&lt;br /&gt;
	data.items = {}&lt;br /&gt;
	for i, num in ipairs(mTableTools.numKeys(args)) do&lt;br /&gt;
		local item = {}&lt;br /&gt;
		item.content = args[num]&lt;br /&gt;
		item.style = args[&#039;item&#039; .. tostring(num) .. &#039;_style&#039;]&lt;br /&gt;
			or args[&#039;item_style&#039; .. tostring(num)]&lt;br /&gt;
		item.value = args[&#039;item&#039; .. tostring(num) .. &#039;_value&#039;]&lt;br /&gt;
			or args[&#039;item_value&#039; .. tostring(num)]&lt;br /&gt;
		table.insert(data.items, item)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderList(data)&lt;br /&gt;
	-- Renders the list HTML.&lt;br /&gt;
	&lt;br /&gt;
	-- Return the blank string if there are no list items.&lt;br /&gt;
	if type(data.items) ~= &#039;table&#039; or #data.items &amp;lt; 1 then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Render the main div tag.&lt;br /&gt;
	local root = mw.html.create(&#039;div&#039;)&lt;br /&gt;
	for i, class in ipairs(data.classes or {}) do&lt;br /&gt;
		root:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	root:css{[&#039;margin-left&#039;] = data.marginLeft}&lt;br /&gt;
	if data.style then&lt;br /&gt;
		root:cssText(data.style)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list tag.&lt;br /&gt;
	local list = root:tag(data.listTag or &#039;ul&#039;)&lt;br /&gt;
	list&lt;br /&gt;
		:attr{start = data.start, type = data.type}&lt;br /&gt;
		:css{&lt;br /&gt;
			[&#039;counter-reset&#039;] = data.counterReset,&lt;br /&gt;
			[&#039;list-style-type&#039;] = data.listStyleType&lt;br /&gt;
		}&lt;br /&gt;
	if data.listStyle then&lt;br /&gt;
		list:cssText(data.listStyle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list items&lt;br /&gt;
	for i, t in ipairs(data.items or {}) do&lt;br /&gt;
		local item = list:tag(&#039;li&#039;)&lt;br /&gt;
		if data.itemStyle then&lt;br /&gt;
			item:cssText(data.itemStyle)&lt;br /&gt;
		end&lt;br /&gt;
		if t.style then&lt;br /&gt;
			item:cssText(t.style)&lt;br /&gt;
		end&lt;br /&gt;
		item&lt;br /&gt;
			:attr{value = t.value}&lt;br /&gt;
			:wikitext(t.content)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeList(listType, args)&lt;br /&gt;
	if not listType or not listTypes[listType] then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to &#039;makeList&#039; (&#039;%s&#039; is not a valid list type)&amp;quot;,&lt;br /&gt;
			tostring(listType)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	checkType(&#039;makeList&#039;, 2, args, &#039;table&#039;)&lt;br /&gt;
	local data = p.makeListData(listType, args)&lt;br /&gt;
	return p.renderList(data)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for listType in pairs(listTypes) do&lt;br /&gt;
	p[listType] = function (frame)&lt;br /&gt;
		local mArguments = require(&#039;Module:Arguments&#039;)&lt;br /&gt;
		local origArgs = mArguments.getArgs(frame)&lt;br /&gt;
		-- Copy all the arguments to a new table, for faster indexing.&lt;br /&gt;
		local args = {}&lt;br /&gt;
		for k, v in pairs(origArgs) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		return p.makeList(listType, args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Module:TableTools&amp;diff=138</id>
		<title>Module:TableTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Module:TableTools&amp;diff=138"/>
		<updated>2020-08-31T21:13:53Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Lua module test (table tools)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--                               TableTools                                       --&lt;br /&gt;
--                                                                                --&lt;br /&gt;
-- This module includes a number of functions for dealing with Lua tables.        --&lt;br /&gt;
-- It is a meta-module, meant to be called from other Lua modules, and should     --&lt;br /&gt;
-- not be called directly from #invoke.                                           --&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Define often-used variables and functions.&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
local infinity = math.huge&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isPositiveInteger&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given value is a positive integer, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a given table key is in the array part or the&lt;br /&gt;
-- hash part of a table.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.isPositiveInteger(v)&lt;br /&gt;
	if type(v) == &#039;number&#039; and v &amp;gt;= 1 and floor(v) == v and v &amp;lt; infinity then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isNan&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given number is a NaN value, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a value can be a valid table key. Lua will&lt;br /&gt;
-- generate an error if a NaN is used as a table key.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.isNan(v)&lt;br /&gt;
	if type(v) == &#039;number&#039; and tostring(v) == &#039;-nan&#039; then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- shallowClone&lt;br /&gt;
--&lt;br /&gt;
-- This returns a clone of a table. The value returned is a new table, but all&lt;br /&gt;
-- subtables and functions are shared. Metamethods are respected, but the returned&lt;br /&gt;
-- table will have no metatable of its own.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.shallowClone(t)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- removeDuplicates&lt;br /&gt;
--&lt;br /&gt;
-- This removes duplicate values from an array. Non-positive-integer keys are&lt;br /&gt;
-- ignored. The earliest value is kept, and all subsequent duplicate values are&lt;br /&gt;
-- removed, but otherwise the array order is unchanged.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.removeDuplicates(t)&lt;br /&gt;
	checkType(&#039;removeDuplicates&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local ret, exists = {}, {}&lt;br /&gt;
	for i, v in ipairs(t) do&lt;br /&gt;
		if isNan(v) then&lt;br /&gt;
			-- NaNs can&#039;t be table keys, and they are also unique, so we don&#039;t need to check existence.&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
		else&lt;br /&gt;
			if not exists[v] then&lt;br /&gt;
				ret[#ret + 1] = v&lt;br /&gt;
				exists[v] = true&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;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numKeys&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of any numerical&lt;br /&gt;
-- keys that have non-nil values, sorted in numerical order.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.numKeys(t)&lt;br /&gt;
	checkType(&#039;numKeys&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isPositiveInteger = p.isPositiveInteger&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if isPositiveInteger(k) then&lt;br /&gt;
			nums[#nums + 1] = k&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;
------------------------------------------------------------------------------------&lt;br /&gt;
-- affixNums&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of keys with the&lt;br /&gt;
-- specified prefix and suffix. For example, for the table&lt;br /&gt;
-- {a1 = &#039;foo&#039;, a3 = &#039;bar&#039;, a6 = &#039;baz&#039;} and the prefix &amp;quot;a&amp;quot;, affixNums will&lt;br /&gt;
-- return {1, 3, 6}.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.affixNums(t, prefix, suffix)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 3, suffix, &#039;string&#039;, true)&lt;br /&gt;
&lt;br /&gt;
	local function cleanPattern(s)&lt;br /&gt;
		-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
		s = s:gsub(&#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	suffix = suffix or &#039;&#039;&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = &#039;^&#039; .. prefix .. &#039;([1-9]%d*)&#039; .. suffix .. &#039;$&#039;&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then			&lt;br /&gt;
			local num = mw.ustring.match(k, pattern)&lt;br /&gt;
			if num then&lt;br /&gt;
				nums[#nums + 1] = tonumber(num)&lt;br /&gt;
			end&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;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numData&lt;br /&gt;
--&lt;br /&gt;
-- Given a table with keys like (&amp;quot;foo1&amp;quot;, &amp;quot;bar1&amp;quot;, &amp;quot;foo2&amp;quot;, &amp;quot;baz2&amp;quot;), returns a table&lt;br /&gt;
-- of subtables in the format &lt;br /&gt;
-- { [1] = {foo = &#039;text&#039;, bar = &#039;text&#039;}, [2] = {foo = &#039;text&#039;, baz = &#039;text&#039;} }&lt;br /&gt;
-- Keys that don&#039;t end with an integer are stored in a subtable named &amp;quot;other&amp;quot;.&lt;br /&gt;
-- The compress option compresses the table so that it can be iterated over with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.numData(t, compress)&lt;br /&gt;
	checkType(&#039;numData&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;numData&#039;, 2, compress, &#039;boolean&#039;, true)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		local prefix, num = mw.ustring.match(tostring(k), &#039;^([^0-9]*)([1-9][0-9]*)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			local subtable = ret[num] or {}&lt;br /&gt;
			if prefix == &#039;&#039; then&lt;br /&gt;
				-- Positional parameters match the blank string; put them at the start of the subtable instead.&lt;br /&gt;
				prefix = 1&lt;br /&gt;
			end&lt;br /&gt;
			subtable[prefix] = v&lt;br /&gt;
			ret[num] = subtable&lt;br /&gt;
		else&lt;br /&gt;
			local subtable = ret.other or {}&lt;br /&gt;
			subtable[k] = v&lt;br /&gt;
			ret.other = subtable&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if compress then&lt;br /&gt;
		local other = ret.other&lt;br /&gt;
		ret = p.compressSparseArray(ret)&lt;br /&gt;
		ret.other = other&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- compressSparseArray&lt;br /&gt;
--&lt;br /&gt;
-- This takes an array with one or more nil values, and removes the nil values&lt;br /&gt;
-- while preserving the order, so that the array can be safely traversed with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.compressSparseArray(t)&lt;br /&gt;
	checkType(&#039;compressSparseArray&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		ret[#ret + 1] = t[num]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseIpairs&lt;br /&gt;
--&lt;br /&gt;
-- This is an iterator for sparse arrays. It can be used like ipairs, but can&lt;br /&gt;
-- handle nil values.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.sparseIpairs(t)&lt;br /&gt;
	checkType(&#039;sparseIpairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	local lim = #nums&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if i &amp;lt;= lim then&lt;br /&gt;
			local key = nums[i]&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- size&lt;br /&gt;
--&lt;br /&gt;
-- This returns the size of a key/value pair table. It will also work on arrays,&lt;br /&gt;
-- but for arrays it is more efficient to use the # operator.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.size(t)&lt;br /&gt;
	checkType(&#039;size&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function defaultKeySort(item1, item2)&lt;br /&gt;
	-- &amp;quot;number&amp;quot; &amp;lt; &amp;quot;string&amp;quot;, so numbers will be sorted before strings.&lt;br /&gt;
	local type1, type2 = type(item1), type(item2)&lt;br /&gt;
	if type1 ~= type2 then&lt;br /&gt;
		return type1 &amp;lt; type2&lt;br /&gt;
	else -- This will fail with table, boolean, function.&lt;br /&gt;
		return item1 &amp;lt; item2&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns a list of the keys in a table, sorted using either a default&lt;br /&gt;
	comparison function or a custom keySort function.&lt;br /&gt;
]]&lt;br /&gt;
function p.keysToList(t, keySort, checked)&lt;br /&gt;
	if not checked then&lt;br /&gt;
		checkType(&#039;keysToList&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
		checkTypeMulti(&#039;keysToList&#039;, 2, keySort, { &#039;function&#039;, &#039;boolean&#039;, &#039;nil&#039; })&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local list = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for key, value in pairs(t) do&lt;br /&gt;
		list[index] = key&lt;br /&gt;
		index = index + 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if keySort ~= false then&lt;br /&gt;
		keySort = type(keySort) == &#039;function&#039; and keySort or defaultKeySort&lt;br /&gt;
		&lt;br /&gt;
		table.sort(list, keySort)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Iterates through a table, with the keys sorted using the keysToList function.&lt;br /&gt;
	If there are only numerical keys, sparseIpairs is probably more efficient.&lt;br /&gt;
]]&lt;br /&gt;
function p.sortedPairs(t, keySort)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 2, keySort, &#039;function&#039;, true)&lt;br /&gt;
	&lt;br /&gt;
	local list = p.keysToList(t, keySort, true)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		local key = list[i]&lt;br /&gt;
		if key ~= nil then&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns true if all keys in the table are consecutive integers starting at 1.&lt;br /&gt;
--]]&lt;br /&gt;
function p.isArray(t)&lt;br /&gt;
	checkType(&amp;quot;isArray&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if t[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- { &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { a = 1, b = 2, c = 3 }&lt;br /&gt;
function p.invert(array)&lt;br /&gt;
	checkType(&amp;quot;invert&amp;quot;, 1, array, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local map = {}&lt;br /&gt;
	for i, v in ipairs(array) do&lt;br /&gt;
		map[v] = i&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return map&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	{ &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { [&amp;quot;a&amp;quot;] = true, [&amp;quot;b&amp;quot;] = true, [&amp;quot;c&amp;quot;] = true }&lt;br /&gt;
--]]&lt;br /&gt;
function p.listToSet(t)&lt;br /&gt;
	checkType(&amp;quot;listToSet&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, item in ipairs(t) do&lt;br /&gt;
		set[item] = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return set&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Recursive deep copy function.&lt;br /&gt;
	Preserves identities of subtables.&lt;br /&gt;
	&lt;br /&gt;
]]&lt;br /&gt;
local function _deepCopy(orig, includeMetatable, already_seen)&lt;br /&gt;
	-- Stores copies of tables indexed by the original table.&lt;br /&gt;
	already_seen = already_seen or {}&lt;br /&gt;
	&lt;br /&gt;
	local copy = already_seen[orig]&lt;br /&gt;
	if copy ~= nil then&lt;br /&gt;
		return copy&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if type(orig) == &#039;table&#039; then&lt;br /&gt;
		copy = {}&lt;br /&gt;
		for orig_key, orig_value in pairs(orig) do&lt;br /&gt;
			copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen)&lt;br /&gt;
		end&lt;br /&gt;
		already_seen[orig] = copy&lt;br /&gt;
		&lt;br /&gt;
		if includeMetatable then&lt;br /&gt;
			local mt = getmetatable(orig)&lt;br /&gt;
			if mt ~= nil then&lt;br /&gt;
				local mt_copy = deepcopy(mt, includeMetatable, already_seen)&lt;br /&gt;
				setmetatable(copy, mt_copy)&lt;br /&gt;
				already_seen[mt] = mt_copy&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else -- number, string, boolean, etc&lt;br /&gt;
		copy = orig&lt;br /&gt;
	end&lt;br /&gt;
	return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.deepCopy(orig, noMetatable, already_seen)&lt;br /&gt;
	checkType(&amp;quot;deepCopy&amp;quot;, 3, already_seen, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	&lt;br /&gt;
	return _deepCopy(orig, not noMetatable, already_seen)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Concatenates all values in the table that are indexed by a number, in order.&lt;br /&gt;
	sparseConcat{ a, nil, c, d }  =&amp;gt;  &amp;quot;acd&amp;quot;&lt;br /&gt;
	sparseConcat{ nil, b, c, d }  =&amp;gt;  &amp;quot;bcd&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
function p.sparseConcat(t, sep, i, j)&lt;br /&gt;
	local list = {}&lt;br /&gt;
	&lt;br /&gt;
	local list_i = 0&lt;br /&gt;
	for _, v in p.sparseIpairs(t) do&lt;br /&gt;
		list_i = list_i + 1&lt;br /&gt;
		list[list_i] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(list, sep, i, j)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- This returns the length of a table, or the first integer key n counting from&lt;br /&gt;
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return&lt;br /&gt;
-- a different value when there are gaps in the array portion of the table.&lt;br /&gt;
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.&lt;br /&gt;
-- Note: #frame.args in frame object always be set to 0, regardless of &lt;br /&gt;
-- the number of unnamed template parameters, so use this function for&lt;br /&gt;
-- frame.args.&lt;br /&gt;
--]]&lt;br /&gt;
function p.length(t)&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while t[i] ~= nil do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i - 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.inArray(arr, valueToFind)&lt;br /&gt;
	checkType(&amp;quot;inArray&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- if valueToFind is nil, error?&lt;br /&gt;
	&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if v == valueToFind then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=User_talk:Streetclaw&amp;diff=118</id>
		<title>User talk:Streetclaw</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=User_talk:Streetclaw&amp;diff=118"/>
		<updated>2020-08-15T15:09:10Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=User:Streetclaw&amp;diff=117</id>
		<title>User:Streetclaw</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=User:Streetclaw&amp;diff=117"/>
		<updated>2020-08-15T15:04:56Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;* Discord: Streetclaw#8113 * Github: github:streetclaw  Category:CCDirectLink members&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Discord: Streetclaw#8113&lt;br /&gt;
* Github: [[github:streetclaw]]&lt;br /&gt;
&lt;br /&gt;
[[Category:CCDirectLink members]]&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Category:Documented_template&amp;diff=116</id>
		<title>Category:Documented template</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Category:Documented_template&amp;diff=116"/>
		<updated>2020-08-15T15:01:48Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;Lists all documented templates.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lists all documented templates.&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Doc/doc&amp;diff=113</id>
		<title>Template:Doc/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Doc/doc&amp;diff=113"/>
		<updated>2020-08-15T14:46:28Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Documentation information added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template to describe and document templates.&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
This template should be used for the documentation of templates.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
Inserts the content of [[Template:Doc/doc]] if used in [[Template:Doc]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{doc}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The template should only be used inside of &amp;lt;code&amp;gt;noinclude&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/entry/doc&amp;diff=112</id>
		<title>Template:TemplateData/entry/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/entry/doc&amp;diff=112"/>
		<updated>2020-08-15T14:38:08Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: /* Examples */ unused param removed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template for creating a unified parameter format for templates&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
Creates a list that displays Template parameter in a unified format.&lt;br /&gt;
This template creates a single entry for the Required template [[Template:TemplateData]].&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Parameter title|param=name|desc=Specify a title for a parameter of the template documentation|def=NULL|type=String|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter name|param=param|desc=Specify a name for a parameter of the template documentation|def=NULL|type=String|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter alias1|param=alias1|desc=Specify a alias for a parameter of the template documentation|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter alias2|param=alias2|desc=Specify a alias for a parameter of the template documentation|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter alias3|param=alias3|desc=Specify a alias for a parameter of the template documentation|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter Description|param=desc|desc=Specify a description for a parameter of the template documentation|def=no description|type=WikiCode|status=Recommended}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter Example|param=example|desc=Specify an example for a parameter of the template documentation|def=no example|type=WikiCode|status=Recommended}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter type|param=type|desc=Specify a type for a parameter of the template documentation: [[#Data_Dictionary_Notation_.28DDN.29_for_types|Data Dictionary Notation]]|def=NULL|type=[[#Data_Dictionary_Notation_.28DDN.29_for_types|DDNCode]]|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter status|param=status|desc=Specify a status for a parameter of the template documentation|def=NULL|type=&amp;lt;nowiki&amp;gt;[&amp;quot;Required&amp;quot; | &amp;quot;Recommended&amp;quot; | &amp;quot;Optional&amp;quot; | &amp;quot;Deprecated&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Auto pre|param=autoPre|desc=Automatic pre for examples|def=0|type=Boolean|status=Optional}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Complete example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Example name|alias1=Example alias 1|alias2=Example alias 2|alias3=Example alias 3|param=example param|desc=example description|def=NULL|example=xyz|type=String|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Auto pre name B|alias1=B alias 1|alias2=B alias 2|alias3=B alias 3|param=B param|desc=B description|def=NULL|example=&lt;br /&gt;
* List example with containing templates and HTML tags&lt;br /&gt;
|type=String|status=Required|autoPre=1}}&lt;br /&gt;
{{TemplateData/entry|name=Deprecated Example name|alias1=Deprecated alias 1|alias2=Deprecated alias 2|alias3=Deprecated alias 3|param=deprecated param|desc=deprecated description|def=NULL|example=xyz|type=String|status=Deprecated}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Example name|alias1=Example alias 1|alias2=Example alias 2|alias3=Example alias 3|param=example param|desc=example description|def=NULL|example=xyz|type=String|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Auto pre name B|alias1=B alias 1|alias2=B alias 2|alias3=B alias 3|param=B param|desc=B description|def=NULL|example=&lt;br /&gt;
* List example with containing templates and HTML tags&lt;br /&gt;
|type=String|status=Required|autoPre=1}}&lt;br /&gt;
{{TemplateData/entry|name=Deprecated Example name|alias1=Deprecated alias 1|alias2=Deprecated alias 2|alias3=Deprecated alias 3|param=deprecated param|desc=deprecated description|def=NULL|example=xyz|type=String|status=Deprecated}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data Dictionary Notation (DDN) for types ==&lt;br /&gt;
&lt;br /&gt;
The [http://users.csc.calpoly.edu/~jdalbey/SWE/DDnotation.html Data Dictionary Notation (DDN)] is a modified modified [https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form BNF notation] (which is used in [https://en.wikipedia.org/wiki/Data_dictionary Data Dictionaries]) to describes the structure of data entries. The BNF and DDN notation is used in the field of [https://en.wikipedia.org/wiki/Software_engineering Software engineering (SWE)]. In this case it describes how types have to be structured.&lt;br /&gt;
&lt;br /&gt;
The used DDN Notation is slightly different than the linked DDN Notation:&lt;br /&gt;
* The upper limit is &#039;&#039;&#039;not&#039;&#039;&#039; superscript&lt;br /&gt;
* Can have a lower limit&lt;br /&gt;
* Can have optional parts&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type&lt;br /&gt;
! Notation&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Sequence&lt;br /&gt;
| +&lt;br /&gt;
| Sequence of definitions&lt;br /&gt;
|-&lt;br /&gt;
| Alternative&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[...|...]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Only one element out of this list&lt;br /&gt;
|-&lt;br /&gt;
| Repetition&lt;br /&gt;
| {...}&lt;br /&gt;
| Repetition of the definition&lt;br /&gt;
|-&lt;br /&gt;
| Repetition&lt;br /&gt;
| 2 {...}&lt;br /&gt;
| Repetition of the definition with the minimum of two&lt;br /&gt;
|-&lt;br /&gt;
| Repetition&lt;br /&gt;
| {...} 5&lt;br /&gt;
| Repetition of the definition with the maximum of five&lt;br /&gt;
|-&lt;br /&gt;
| Repetition&lt;br /&gt;
| 1 {...} 6&lt;br /&gt;
| Repetition of the definition with the minimum of one and the maximum of six&lt;br /&gt;
|-&lt;br /&gt;
| Option&lt;br /&gt;
| (...)&lt;br /&gt;
| Optional definition&lt;br /&gt;
|-&lt;br /&gt;
| Specific value&lt;br /&gt;
| &amp;quot;...&amp;quot;&lt;br /&gt;
| fix definition&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Predefined ===&lt;br /&gt;
&lt;br /&gt;
All predefined Types can be used directly or inside DDNCode&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type&lt;br /&gt;
! Definition&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| NULL&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| NonzeroDigit&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;1&amp;quot; | &amp;quot;2&amp;quot; | &amp;quot;3&amp;quot; | &amp;quot;4&amp;quot; | &amp;quot;5&amp;quot; | &amp;quot;6&amp;quot; | &amp;quot;7&amp;quot; | &amp;quot;8&amp;quot; | &amp;quot;9&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, 1 - 9&lt;br /&gt;
|-&lt;br /&gt;
| Digit&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;0&amp;quot; | &amp;quot;1&amp;quot; | &amp;quot;2&amp;quot; | &amp;quot;3&amp;quot; | &amp;quot;4&amp;quot; | &amp;quot;5&amp;quot; | &amp;quot;6&amp;quot; | &amp;quot;7&amp;quot; | &amp;quot;8&amp;quot; | &amp;quot;9&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, 0 - 9&lt;br /&gt;
|-&lt;br /&gt;
| LowerAlphabet&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;a&amp;quot; | &amp;quot;b&amp;quot; | &amp;quot;c&amp;quot; | &amp;quot;d&amp;quot; | &amp;quot;e&amp;quot; | &amp;quot;f&amp;quot; | &amp;quot;g&amp;quot; | &amp;quot;h&amp;quot; | &amp;quot;i&amp;quot; | &amp;quot;j&amp;quot; | &amp;quot;k&amp;quot; | &amp;quot;l&amp;quot; | &amp;quot;m&amp;quot; | &amp;quot;n&amp;quot; | &amp;quot;o&amp;quot; | &amp;quot;p&amp;quot; | &amp;quot;q&amp;quot; | &amp;quot;r&amp;quot; | &amp;quot;s&amp;quot; | &amp;quot;t&amp;quot; | &amp;quot;u&amp;quot; | &amp;quot;v&amp;quot; | &amp;quot;w&amp;quot; | &amp;quot;x&amp;quot; | &amp;quot;y&amp;quot; | &amp;quot;z&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, a - z&lt;br /&gt;
|-&lt;br /&gt;
| UpperAlphabet&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;A&amp;quot; | &amp;quot;B&amp;quot; | &amp;quot;C&amp;quot; | &amp;quot;D&amp;quot; | &amp;quot;E&amp;quot; | &amp;quot;F&amp;quot; | &amp;quot;G&amp;quot; | &amp;quot;H&amp;quot; | &amp;quot;I&amp;quot; | &amp;quot;J&amp;quot; | &amp;quot;K&amp;quot; | &amp;quot;L&amp;quot; | &amp;quot;M&amp;quot; | &amp;quot;N&amp;quot; | &amp;quot;O&amp;quot; | &amp;quot;P&amp;quot; | &amp;quot;Q&amp;quot; | &amp;quot;R&amp;quot; | &amp;quot;S&amp;quot; | &amp;quot;T&amp;quot; | &amp;quot;U&amp;quot; | &amp;quot;V&amp;quot; | &amp;quot;W&amp;quot; | &amp;quot;X&amp;quot; | &amp;quot;Y&amp;quot; | &amp;quot;Z&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, A - Z&lt;br /&gt;
|-&lt;br /&gt;
| Alphabet&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[LowerAlphabet | UpperAlphabet]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, a - z / A - Z&lt;br /&gt;
|-&lt;br /&gt;
| Ascii&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Ascii} 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [https://en.wikipedia.org/wiki/ASCII ASCII] character&lt;br /&gt;
|-&lt;br /&gt;
| Char&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Char} 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [https://en.wikipedia.org/wiki/UTF-8 UTF-8] character&lt;br /&gt;
|-&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Char}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| One or more UTF-8 characters&lt;br /&gt;
|-&lt;br /&gt;
| AsciiString&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Ascii}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| One or more ASCII characters&lt;br /&gt;
|-&lt;br /&gt;
| WikiCode&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {WikiCode} 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any wiki code&lt;br /&gt;
|-&lt;br /&gt;
| DDNCode&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {DDNCode} 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any DDNCode (links are allowed)&lt;br /&gt;
|-&lt;br /&gt;
| Number&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Digit}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number with zero&lt;br /&gt;
|-&lt;br /&gt;
| Decimal&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Digit} + ( &amp;quot;.&amp;quot; + 1 {Digit} )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number with zero&lt;br /&gt;
|-&lt;br /&gt;
| NonzeroNumber&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ 1 {NonzeroDigit} 1 | 2 {Digit} ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number without zero&lt;br /&gt;
|-&lt;br /&gt;
| SignedNumber&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ &amp;quot;-&amp;quot; + 1 {NonzeroDigit} 1 | 1 {Digit} 1 | (&amp;quot;-&amp;quot;) + 2 {Digit} ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any Integer (doesn&#039;t allow -0 only 0)&lt;br /&gt;
|-&lt;br /&gt;
| PercentValue&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ 1 {Digit} 2 | &amp;quot;100&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number from 0 to 100&lt;br /&gt;
|-&lt;br /&gt;
| SignedPercentValue&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ &amp;quot;-&amp;quot; + 1 {NonzeroDigit} 1 | 1 {Digit} 1 | (&amp;quot;-&amp;quot;) + 2 {Digit} 2 | (&amp;quot;-&amp;quot;) + &amp;quot;100&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number from 0 to 100 and from -1 to -100&lt;br /&gt;
|-&lt;br /&gt;
| Percent&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;PercentValue + &amp;quot;%&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| From 0% to 100% (natural number)&lt;br /&gt;
|-&lt;br /&gt;
| SignedPercent&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;SignedPercentValue + &amp;quot;%&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| From 0% to 100% and from -1% to -100% (natural number)&lt;br /&gt;
|-&lt;br /&gt;
| Boolean&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;0&amp;quot; | &amp;quot;1&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 0 (off) or 1 (on)&lt;br /&gt;
|-&lt;br /&gt;
| True&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;1&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 1 (on)&lt;br /&gt;
|-&lt;br /&gt;
| False&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;0&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 0 (off)&lt;br /&gt;
|-&lt;br /&gt;
| Month&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ 1 {NonzeroDigit} 1 | &amp;quot;10&amp;quot; | &amp;quot;11&amp;quot; | &amp;quot;12&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 1 - 12&lt;br /&gt;
|-&lt;br /&gt;
| Monthfill&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;0&amp;quot; + 1 {NonzeroDigit} 1 | &amp;quot;10&amp;quot; | &amp;quot;11&amp;quot; | &amp;quot;12&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 01, 02, 03 ... - 12&lt;br /&gt;
|-&lt;br /&gt;
| Monthname&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;January&amp;quot; | &amp;quot;February&amp;quot; | &amp;quot;March&amp;quot; | &amp;quot;April&amp;quot; | &amp;quot;May&amp;quot; | &amp;quot;June&amp;quot; | &amp;quot;July&amp;quot; | &amp;quot;August&amp;quot; | &amp;quot;September&amp;quot; | &amp;quot;October&amp;quot; | &amp;quot;November&amp;quot; | &amp;quot;December&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Month (name)&lt;br /&gt;
|-&lt;br /&gt;
| Day&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ ( [ &amp;quot;1&amp;quot; | &amp;quot;2&amp;quot; ] ) + 1 {Digit} 1 | &amp;quot;30&amp;quot; | &amp;quot;31&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 1 - 31&lt;br /&gt;
|-&lt;br /&gt;
| Dayfill&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ [ &amp;quot;0&amp;quot; | 1&amp;quot; | &amp;quot;2&amp;quot; ] + 1 {Digit} 1 | &amp;quot;30&amp;quot; | &amp;quot;31&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 01, 02, 03 ... - 31&lt;br /&gt;
|-&lt;br /&gt;
| Year&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Digit}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any year&lt;br /&gt;
|-&lt;br /&gt;
| LabeledYear&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;Year + [&amp;quot; AD&amp;quot; | &amp;quot; BC&amp;quot; | &amp;quot; AC&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any year with label&lt;br /&gt;
|-&lt;br /&gt;
| LevelNumber&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ 1 {NonzeroDigit} 1 | 2 {Digit} 2 ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 1, 2, ... - 99&lt;br /&gt;
|-&lt;br /&gt;
| LevelNumberFill&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ &amp;quot;0&amp;quot; + 1 {NonzeroDigit} 1 | 2 {Digit} 2 ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 01, 02, ... - 99&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Special Predefined ===&lt;br /&gt;
&lt;br /&gt;
These predefines are based on the current Template&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type&lt;br /&gt;
! Definition&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;{{{&amp;lt;name&amp;gt;}}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| All parameter names of the current template (this means: use the same type as in &amp;lt;nowiki&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;Template:&amp;lt;name&amp;gt;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;[[Template:&amp;lt;name&amp;gt;]]&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Other templates (link required for type; this means: use these template as type; used in nested templates)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
* String + Number + {param}&lt;br /&gt;
* Number + param&lt;br /&gt;
(param is in this example an other parameter of the template)&lt;br /&gt;
* String + &amp;quot; = &amp;quot; + 1 {String} 2&lt;br /&gt;
* String + (Number)&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/doc&amp;diff=111</id>
		<title>Template:TemplateData/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/doc&amp;diff=111"/>
		<updated>2020-08-15T14:34:51Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;Template for creating a unified parameter format for templates  == About == Creates a list that displays Template parameter in a unified format.  == Parameter == {{TemplateDat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template for creating a unified parameter format for templates&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
Creates a list that displays Template parameter in a unified format.&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Entries|param=1|desc=Parameter list|def=NULL|type=1 {[[Template:TemplateData/entry]]}|status=Required}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Complete example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Example name|alias1=Example alias 1|alias2=Example alias 2|alias3=Example alias 3|param=example param|desc=example description|def=NULL|example=xyz|type=String|status=Required}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Example name|alias1=Example alias 1|alias2=Example alias 2|alias3=Example alias 3|param=example param|desc=example description|def=NULL|example=xyz|type=String|status=Required}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData&amp;diff=110</id>
		<title>Template:TemplateData</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData&amp;diff=110"/>
		<updated>2020-08-15T14:34:14Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;Do not use named parameter for &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; ... &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. The first Parameter will be automatically marked as &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;Do not use named parameter for &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; ... &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. The first Parameter will be automatically marked as &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, the second as &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; and so on.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=2 | Parameter&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Status&lt;br /&gt;
|-&lt;br /&gt;
{{{1}}}&lt;br /&gt;
|}&lt;br /&gt;
See [[Template:TemplateData]] and [[Template:TemplateData/entry]] for more information about the parameter list and [[Template:TemplateData/entry#Data Dictionary Notation (DDN) for types|DDNCode]] for more information about types and the DDN Notation&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/entry&amp;diff=109</id>
		<title>Template:TemplateData/entry</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/entry&amp;diff=109"/>
		<updated>2020-08-15T14:33:42Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;! style=&amp;quot;width:15%; text-align:center&amp;quot; | {{#ifeq: {{{status}}}|Deprecated|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;{{{name}}}&amp;lt;/span&amp;gt;|{{{name}}}}} |&amp;lt;c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;! style=&amp;quot;width:15%; text-align:center&amp;quot; | {{#ifeq: {{{status}}}|Deprecated|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;{{{name}}}&amp;lt;/span&amp;gt;|{{{name}}}}}&lt;br /&gt;
|&amp;lt;code&amp;gt;{{{param}}}&amp;lt;/code&amp;gt;{{#if: {{{alias1|}}} |&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;{{{alias1}}}&amp;lt;/code&amp;gt;}}{{#if: {{{alias2|}}} |&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;{{{alias2}}}&amp;lt;/code&amp;gt;}}{{#if: {{{alias3|}}} |&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;{{{alias3}}}&amp;lt;/code&amp;gt;}}&lt;br /&gt;
| {{#if: {{{desc|}}} | {{{desc}}} | no description }}&lt;br /&gt;
&#039;&#039;&#039;Default:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code&amp;gt;{{{def}}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
{{#if:{{{example|}}}|{{{example}}}&lt;br /&gt;
{{#ifeq:{{WsBool|{{{autoPre}}}}}|1|{{#tag:pre|{{{example}}}}}}}| no example }}&lt;br /&gt;
| {{{type}}}&lt;br /&gt;
| {{#ifeq: {{{status}}}|Deprecated|&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Deprecated&amp;lt;/span&amp;gt;|{{{status}}}}}&lt;br /&gt;
|-&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/entry/doc&amp;diff=108</id>
		<title>Template:TemplateData/entry/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:TemplateData/entry/doc&amp;diff=108"/>
		<updated>2020-08-15T14:33:21Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;Template for creating a unified parameter format for templates  == About == Creates a list that displays Template parameter in a unified format. This template creates a single...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template for creating a unified parameter format for templates&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
Creates a list that displays Template parameter in a unified format.&lt;br /&gt;
This template creates a single entry for the Required template [[Template:TemplateData]].&lt;br /&gt;
&lt;br /&gt;
== Parameter ==&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Parameter title|param=name|desc=Specify a title for a parameter of the template documentation|def=NULL|type=String|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter name|param=param|desc=Specify a name for a parameter of the template documentation|def=NULL|type=String|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter alias1|param=alias1|desc=Specify a alias for a parameter of the template documentation|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter alias2|param=alias2|desc=Specify a alias for a parameter of the template documentation|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter alias3|param=alias3|desc=Specify a alias for a parameter of the template documentation|def=NULL|type=String|status=Optional}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter Description|param=desc|desc=Specify a description for a parameter of the template documentation|def=no description|type=WikiCode|status=Recommended}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter Example|param=example|desc=Specify an example for a parameter of the template documentation|def=no example|type=WikiCode|status=Recommended}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter type|param=type|desc=Specify a type for a parameter of the template documentation: [[#Data_Dictionary_Notation_.28DDN.29_for_types|Data Dictionary Notation]]|def=NULL|type=[[#Data_Dictionary_Notation_.28DDN.29_for_types|DDNCode]]|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Parameter status|param=status|desc=Specify a status for a parameter of the template documentation|def=NULL|type=&amp;lt;nowiki&amp;gt;[&amp;quot;Required&amp;quot; | &amp;quot;Recommended&amp;quot; | &amp;quot;Optional&amp;quot; | &amp;quot;Deprecated&amp;quot; ]&amp;lt;/nowiki&amp;gt;|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Auto pre|param=autoPre|desc=Automatic pre for examples|def=0|type=Boolean|status=Optional}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Complete example:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Example name|alias1=Example alias 1|alias2=Example alias 2|alias3=Example alias 3|param=example param|desc=example description|def=NULL|example=xyz|type=String|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Auto pre name B|alias1=B alias 1|alias2=B alias 2|alias3=B alias 3|param=B param|desc=B description|def=NULL|example=&lt;br /&gt;
* List example with containing templates and HTML tags&lt;br /&gt;
* No Icon (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;): {{ItemLink|Ginger Tom. Salad|noIcon=1}}&lt;br /&gt;
* Icon (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): {{ItemLink|Ginger Tom. Salad|noIcon=0}}&lt;br /&gt;
* Default (parameter not used / &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): {{ItemLink|Ginger Tom. Salad}}&lt;br /&gt;
|type=String|status=Required|autoPre=1}}&lt;br /&gt;
{{TemplateData/entry|name=Deprecated Example name|alias1=Deprecated alias 1|alias2=Deprecated alias 2|alias3=Deprecated alias 3|param=deprecated param|desc=deprecated description|def=NULL|example=xyz|type=String|status=Deprecated}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{TemplateData|&lt;br /&gt;
{{TemplateData/entry|name=Example name|alias1=Example alias 1|alias2=Example alias 2|alias3=Example alias 3|param=example param|desc=example description|def=NULL|example=xyz|type=String|status=Required}}&lt;br /&gt;
{{TemplateData/entry|name=Auto pre name B|alias1=B alias 1|alias2=B alias 2|alias3=B alias 3|param=B param|desc=B description|def=NULL|example=&lt;br /&gt;
* List example with containing templates and HTML tags&lt;br /&gt;
* No Icon (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;): {{ItemLink|Ginger Tom. Salad|noIcon=1}}&lt;br /&gt;
* Icon (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): {{ItemLink|Ginger Tom. Salad|noIcon=0}}&lt;br /&gt;
* Default (parameter not used / &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;): {{ItemLink|Ginger Tom. Salad}}&lt;br /&gt;
|type=String|status=Required|autoPre=1}}&lt;br /&gt;
{{TemplateData/entry|name=Deprecated Example name|alias1=Deprecated alias 1|alias2=Deprecated alias 2|alias3=Deprecated alias 3|param=deprecated param|desc=deprecated description|def=NULL|example=xyz|type=String|status=Deprecated}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data Dictionary Notation (DDN) for types ==&lt;br /&gt;
&lt;br /&gt;
The [http://users.csc.calpoly.edu/~jdalbey/SWE/DDnotation.html Data Dictionary Notation (DDN)] is a modified modified [https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form BNF notation] (which is used in [https://en.wikipedia.org/wiki/Data_dictionary Data Dictionaries]) to describes the structure of data entries. The BNF and DDN notation is used in the field of [https://en.wikipedia.org/wiki/Software_engineering Software engineering (SWE)]. In this case it describes how types have to be structured.&lt;br /&gt;
&lt;br /&gt;
The used DDN Notation is slightly different than the linked DDN Notation:&lt;br /&gt;
* The upper limit is &#039;&#039;&#039;not&#039;&#039;&#039; superscript&lt;br /&gt;
* Can have a lower limit&lt;br /&gt;
* Can have optional parts&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type&lt;br /&gt;
! Notation&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| Sequence&lt;br /&gt;
| +&lt;br /&gt;
| Sequence of definitions&lt;br /&gt;
|-&lt;br /&gt;
| Alternative&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[...|...]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Only one element out of this list&lt;br /&gt;
|-&lt;br /&gt;
| Repetition&lt;br /&gt;
| {...}&lt;br /&gt;
| Repetition of the definition&lt;br /&gt;
|-&lt;br /&gt;
| Repetition&lt;br /&gt;
| 2 {...}&lt;br /&gt;
| Repetition of the definition with the minimum of two&lt;br /&gt;
|-&lt;br /&gt;
| Repetition&lt;br /&gt;
| {...} 5&lt;br /&gt;
| Repetition of the definition with the maximum of five&lt;br /&gt;
|-&lt;br /&gt;
| Repetition&lt;br /&gt;
| 1 {...} 6&lt;br /&gt;
| Repetition of the definition with the minimum of one and the maximum of six&lt;br /&gt;
|-&lt;br /&gt;
| Option&lt;br /&gt;
| (...)&lt;br /&gt;
| Optional definition&lt;br /&gt;
|-&lt;br /&gt;
| Specific value&lt;br /&gt;
| &amp;quot;...&amp;quot;&lt;br /&gt;
| fix definition&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Predefined ===&lt;br /&gt;
&lt;br /&gt;
All predefined Types can be used directly or inside DDNCode&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type&lt;br /&gt;
! Definition&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| NULL&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Empty&lt;br /&gt;
|-&lt;br /&gt;
| NonzeroDigit&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;1&amp;quot; | &amp;quot;2&amp;quot; | &amp;quot;3&amp;quot; | &amp;quot;4&amp;quot; | &amp;quot;5&amp;quot; | &amp;quot;6&amp;quot; | &amp;quot;7&amp;quot; | &amp;quot;8&amp;quot; | &amp;quot;9&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, 1 - 9&lt;br /&gt;
|-&lt;br /&gt;
| Digit&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;0&amp;quot; | &amp;quot;1&amp;quot; | &amp;quot;2&amp;quot; | &amp;quot;3&amp;quot; | &amp;quot;4&amp;quot; | &amp;quot;5&amp;quot; | &amp;quot;6&amp;quot; | &amp;quot;7&amp;quot; | &amp;quot;8&amp;quot; | &amp;quot;9&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, 0 - 9&lt;br /&gt;
|-&lt;br /&gt;
| LowerAlphabet&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;a&amp;quot; | &amp;quot;b&amp;quot; | &amp;quot;c&amp;quot; | &amp;quot;d&amp;quot; | &amp;quot;e&amp;quot; | &amp;quot;f&amp;quot; | &amp;quot;g&amp;quot; | &amp;quot;h&amp;quot; | &amp;quot;i&amp;quot; | &amp;quot;j&amp;quot; | &amp;quot;k&amp;quot; | &amp;quot;l&amp;quot; | &amp;quot;m&amp;quot; | &amp;quot;n&amp;quot; | &amp;quot;o&amp;quot; | &amp;quot;p&amp;quot; | &amp;quot;q&amp;quot; | &amp;quot;r&amp;quot; | &amp;quot;s&amp;quot; | &amp;quot;t&amp;quot; | &amp;quot;u&amp;quot; | &amp;quot;v&amp;quot; | &amp;quot;w&amp;quot; | &amp;quot;x&amp;quot; | &amp;quot;y&amp;quot; | &amp;quot;z&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, a - z&lt;br /&gt;
|-&lt;br /&gt;
| UpperAlphabet&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;A&amp;quot; | &amp;quot;B&amp;quot; | &amp;quot;C&amp;quot; | &amp;quot;D&amp;quot; | &amp;quot;E&amp;quot; | &amp;quot;F&amp;quot; | &amp;quot;G&amp;quot; | &amp;quot;H&amp;quot; | &amp;quot;I&amp;quot; | &amp;quot;J&amp;quot; | &amp;quot;K&amp;quot; | &amp;quot;L&amp;quot; | &amp;quot;M&amp;quot; | &amp;quot;N&amp;quot; | &amp;quot;O&amp;quot; | &amp;quot;P&amp;quot; | &amp;quot;Q&amp;quot; | &amp;quot;R&amp;quot; | &amp;quot;S&amp;quot; | &amp;quot;T&amp;quot; | &amp;quot;U&amp;quot; | &amp;quot;V&amp;quot; | &amp;quot;W&amp;quot; | &amp;quot;X&amp;quot; | &amp;quot;Y&amp;quot; | &amp;quot;Z&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, A - Z&lt;br /&gt;
|-&lt;br /&gt;
| Alphabet&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[LowerAlphabet | UpperAlphabet]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Single character, a - z / A - Z&lt;br /&gt;
|-&lt;br /&gt;
| Ascii&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Ascii} 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [https://en.wikipedia.org/wiki/ASCII ASCII] character&lt;br /&gt;
|-&lt;br /&gt;
| Char&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Char} 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [https://en.wikipedia.org/wiki/UTF-8 UTF-8] character&lt;br /&gt;
|-&lt;br /&gt;
| String&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Char}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| One or more UTF-8 characters&lt;br /&gt;
|-&lt;br /&gt;
| AsciiString&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Ascii}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| One or more ASCII characters&lt;br /&gt;
|-&lt;br /&gt;
| WikiCode&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {WikiCode} 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any wiki code&lt;br /&gt;
|-&lt;br /&gt;
| DDNCode&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {DDNCode} 1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any DDNCode (links are allowed)&lt;br /&gt;
|-&lt;br /&gt;
| Number&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Digit}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number with zero&lt;br /&gt;
|-&lt;br /&gt;
| Decimal&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Digit} + ( &amp;quot;.&amp;quot; + 1 {Digit} )&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number with zero&lt;br /&gt;
|-&lt;br /&gt;
| NonzeroNumber&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ 1 {NonzeroDigit} 1 | 2 {Digit} ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number without zero&lt;br /&gt;
|-&lt;br /&gt;
| SignedNumber&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ &amp;quot;-&amp;quot; + 1 {NonzeroDigit} 1 | 1 {Digit} 1 | (&amp;quot;-&amp;quot;) + 2 {Digit} ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any Integer (doesn&#039;t allow -0 only 0)&lt;br /&gt;
|-&lt;br /&gt;
| PercentValue&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ 1 {Digit} 2 | &amp;quot;100&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number from 0 to 100&lt;br /&gt;
|-&lt;br /&gt;
| SignedPercentValue&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ &amp;quot;-&amp;quot; + 1 {NonzeroDigit} 1 | 1 {Digit} 1 | (&amp;quot;-&amp;quot;) + 2 {Digit} 2 | (&amp;quot;-&amp;quot;) + &amp;quot;100&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any natural number from 0 to 100 and from -1 to -100&lt;br /&gt;
|-&lt;br /&gt;
| Percent&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;PercentValue + &amp;quot;%&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| From 0% to 100% (natural number)&lt;br /&gt;
|-&lt;br /&gt;
| SignedPercent&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;SignedPercentValue + &amp;quot;%&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| From 0% to 100% and from -1% to -100% (natural number)&lt;br /&gt;
|-&lt;br /&gt;
| Boolean&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;0&amp;quot; | &amp;quot;1&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 0 (off) or 1 (on)&lt;br /&gt;
|-&lt;br /&gt;
| True&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;1&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 1 (on)&lt;br /&gt;
|-&lt;br /&gt;
| False&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;0&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 0 (off)&lt;br /&gt;
|-&lt;br /&gt;
| Month&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ 1 {NonzeroDigit} 1 | &amp;quot;10&amp;quot; | &amp;quot;11&amp;quot; | &amp;quot;12&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 1 - 12&lt;br /&gt;
|-&lt;br /&gt;
| Monthfill&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;0&amp;quot; + 1 {NonzeroDigit} 1 | &amp;quot;10&amp;quot; | &amp;quot;11&amp;quot; | &amp;quot;12&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 01, 02, 03 ... - 12&lt;br /&gt;
|-&lt;br /&gt;
| Monthname&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[&amp;quot;January&amp;quot; | &amp;quot;February&amp;quot; | &amp;quot;March&amp;quot; | &amp;quot;April&amp;quot; | &amp;quot;May&amp;quot; | &amp;quot;June&amp;quot; | &amp;quot;July&amp;quot; | &amp;quot;August&amp;quot; | &amp;quot;September&amp;quot; | &amp;quot;October&amp;quot; | &amp;quot;November&amp;quot; | &amp;quot;December&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Month (name)&lt;br /&gt;
|-&lt;br /&gt;
| Day&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ ( [ &amp;quot;1&amp;quot; | &amp;quot;2&amp;quot; ] ) + 1 {Digit} 1 | &amp;quot;30&amp;quot; | &amp;quot;31&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 1 - 31&lt;br /&gt;
|-&lt;br /&gt;
| Dayfill&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ [ &amp;quot;0&amp;quot; | 1&amp;quot; | &amp;quot;2&amp;quot; ] + 1 {Digit} 1 | &amp;quot;30&amp;quot; | &amp;quot;31&amp;quot; ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 01, 02, 03 ... - 31&lt;br /&gt;
|-&lt;br /&gt;
| Year&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;1 {Digit}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any year&lt;br /&gt;
|-&lt;br /&gt;
| LabeledYear&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;Year + [&amp;quot; AD&amp;quot; | &amp;quot; BC&amp;quot; | &amp;quot; AC&amp;quot;]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Any year with label&lt;br /&gt;
|-&lt;br /&gt;
| LevelNumber&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ 1 {NonzeroDigit} 1 | 2 {Digit} 2 ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 1, 2, ... - 99&lt;br /&gt;
|-&lt;br /&gt;
| LevelNumberFill&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[ &amp;quot;0&amp;quot; + 1 {NonzeroDigit} 1 | 2 {Digit} 2 ]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| 01, 02, ... - 99&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Special Predefined ===&lt;br /&gt;
&lt;br /&gt;
These predefines are based on the current Template&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type&lt;br /&gt;
! Definition&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;{{{&amp;lt;name&amp;gt;}}}&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| All parameter names of the current template (this means: use the same type as in &amp;lt;nowiki&amp;gt;&amp;lt;name&amp;gt;&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;lt;Template:&amp;lt;name&amp;gt;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;&amp;quot;[[Template:&amp;lt;name&amp;gt;]]&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Other templates (link required for type; this means: use these template as type; used in nested templates)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
* String + Number + {param}&lt;br /&gt;
* Number + param&lt;br /&gt;
(param is in this example an other parameter of the template)&lt;br /&gt;
* String + &amp;quot; = &amp;quot; + 1 {String} 2&lt;br /&gt;
* String + (Number)&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Doc&amp;diff=107</id>
		<title>Template:Doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Doc&amp;diff=107"/>
		<updated>2020-08-15T14:31:16Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{/doc}}&lt;br /&gt;
[[Category:Documented template]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Doc/doc&amp;diff=106</id>
		<title>Template:Doc/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Doc/doc&amp;diff=106"/>
		<updated>2020-08-15T14:28:32Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;Template documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Template documentation&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=Template:Doc&amp;diff=105</id>
		<title>Template:Doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=Template:Doc&amp;diff=105"/>
		<updated>2020-08-15T14:28:18Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{/doc}}&amp;lt;/includeonly&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{/doc}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Home-description/de&amp;diff=81</id>
		<title>MediaWiki:Home-description/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Home-description/de&amp;diff=81"/>
		<updated>2020-08-11T13:23:59Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Startseite&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Home-description/de&amp;diff=80</id>
		<title>MediaWiki:Home-description/de</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Home-description/de&amp;diff=80"/>
		<updated>2020-08-11T13:22:56Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;Hauptseite&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hauptseite&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Sidebar&amp;diff=79</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Sidebar&amp;diff=79"/>
		<updated>2020-08-11T13:19:02Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* c2dl-nav&lt;br /&gt;
** home-url|home-description&lt;br /&gt;
** mods-url|mods-description&lt;br /&gt;
** tools-url|tools-description&lt;br /&gt;
** discord-url|discord-description&lt;br /&gt;
** github-url|github-description&lt;br /&gt;
** gitlab-url|gitlab-description&lt;br /&gt;
** reddit-url|reddit-description&lt;br /&gt;
** twitter-url|twitter-description&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Discord-url&amp;diff=78</id>
		<title>MediaWiki:Discord-url</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Discord-url&amp;diff=78"/>
		<updated>2020-08-11T13:17:52Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;https://c2dl.info/r/md&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://c2dl.info/r/md&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Reddit-url&amp;diff=76</id>
		<title>MediaWiki:Reddit-url</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Reddit-url&amp;diff=76"/>
		<updated>2020-08-11T13:17:04Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;https://www.reddit.com/r/CrossCodeModding/&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://www.reddit.com/r/CrossCodeModding/&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Gitlab-url&amp;diff=75</id>
		<title>MediaWiki:Gitlab-url</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Gitlab-url&amp;diff=75"/>
		<updated>2020-08-11T13:16:46Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;https://gitlab.com/CCDirectLink&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://gitlab.com/CCDirectLink&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Github-url&amp;diff=74</id>
		<title>MediaWiki:Github-url</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Github-url&amp;diff=74"/>
		<updated>2020-08-11T13:16:29Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;https://github.com/CCDirectLink&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://github.com/CCDirectLink&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Gitlab-description&amp;diff=73</id>
		<title>MediaWiki:Gitlab-description</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Gitlab-description&amp;diff=73"/>
		<updated>2020-08-11T13:15:46Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;GitLab&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GitLab&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Github-description&amp;diff=72</id>
		<title>MediaWiki:Github-description</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Github-description&amp;diff=72"/>
		<updated>2020-08-11T13:15:33Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;GitHub&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GitHub&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Reddit-description&amp;diff=71</id>
		<title>MediaWiki:Reddit-description</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Reddit-description&amp;diff=71"/>
		<updated>2020-08-11T13:15:20Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;Reddit&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reddit&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Discord-description&amp;diff=69</id>
		<title>MediaWiki:Discord-description</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Discord-description&amp;diff=69"/>
		<updated>2020-08-11T13:14:55Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;Discord&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Discord&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Home-description&amp;diff=68</id>
		<title>MediaWiki:Home-description</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Home-description&amp;diff=68"/>
		<updated>2020-08-11T13:13:14Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Home&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:Sidebar&amp;diff=67</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:Sidebar&amp;diff=67"/>
		<updated>2020-08-11T13:12:38Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* c2dl-nav&lt;br /&gt;
** home-url|home-description&lt;br /&gt;
** mods-url|mods-description&lt;br /&gt;
** tools-url|tools-description&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
	<entry>
		<id>https://wiki.c2dl.info/w/index.php?title=MediaWiki:C2dl-nav&amp;diff=66</id>
		<title>MediaWiki:C2dl-nav</title>
		<link rel="alternate" type="text/html" href="https://wiki.c2dl.info/w/index.php?title=MediaWiki:C2dl-nav&amp;diff=66"/>
		<updated>2020-08-11T13:11:57Z</updated>

		<summary type="html">&lt;p&gt;Streetclaw: Created page with &amp;quot;C2DL&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;C2DL&lt;/div&gt;</summary>
		<author><name>Streetclaw</name></author>
	</entry>
</feed>