<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bitcrush.io/laserwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=86.135.251.50</id>
	<title>Laserwiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://bitcrush.io/laserwiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=86.135.251.50"/>
	<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Special:Contributions/86.135.251.50"/>
	<updated>2026-04-12T22:03:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:Message_box/configuration&amp;diff=5638</id>
		<title>Module:Message box/configuration</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:Message_box/configuration&amp;diff=5638"/>
		<updated>2014-04-27T10:40:35Z</updated>

		<summary type="html">&lt;p&gt;86.135.251.50: Undo revision 983093 by 86.135.251.50 (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local ambox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		critical = {&lt;br /&gt;
			class = &#039;ambox-speedy&#039;,&lt;br /&gt;
			image = &#039;Ambox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;ambox-speedy&#039;,&lt;br /&gt;
			image = &#039;Ambox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		important = {&lt;br /&gt;
			class = &#039;ambox-delete&#039;,&lt;br /&gt;
			image = &#039;Ambox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;ambox-delete&#039;,&lt;br /&gt;
			image = &#039;Ambox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = &#039;ambox-content&#039;,&lt;br /&gt;
			image = &#039;Ambox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;ambox-content&#039;,&lt;br /&gt;
			image = &#039;Ambox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		caution = {&lt;br /&gt;
			class = &#039;ambox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;ambox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;ambox-move&#039;,&lt;br /&gt;
			image = &#039;Ambox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;ambox-protection&#039;,&lt;br /&gt;
			image = &#039;Ambox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;ambox-notice&#039;,&lt;br /&gt;
			image = &#039;Ambox notice.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = &#039;ambox-notice&#039;,&lt;br /&gt;
			image = &#039;Ambox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default                     = &#039;notice&#039;,&lt;br /&gt;
	allowBlankParams            = {&#039;talk&#039;, &#039;sect&#039;, &#039;date&#039;, &#039;issue&#039;, &#039;fix&#039;, &#039;subst&#039;, &#039;hidden&#039;},&lt;br /&gt;
	allowSmall                  = true,&lt;br /&gt;
	smallParam                  = &#039;left&#039;,&lt;br /&gt;
	smallClass                  = &#039;mbox-small-left&#039;,&lt;br /&gt;
	substCheck                  = true,&lt;br /&gt;
	classes                     = {&#039;metadata&#039;, &#039;plainlinks&#039;, &#039;ambox&#039;},&lt;br /&gt;
	imageEmptyCell              = true,&lt;br /&gt;
	imageCheckBlank             = true,&lt;br /&gt;
	imageSmallSize              = &#039;20x20px&#039;,&lt;br /&gt;
	imageCellDiv                = true,&lt;br /&gt;
	useCollapsibleTextFields    = true,&lt;br /&gt;
	imageRightNone              = true,&lt;br /&gt;
	sectionDefault              = &#039;article&#039;,&lt;br /&gt;
	allowMainspaceCategories    = true,&lt;br /&gt;
	templateCategory            = &#039;Article message templates&#039;,&lt;br /&gt;
        templateCategoryRequireName = true,&lt;br /&gt;
	templateErrorCategory       = &#039;Article message templates with missing parameters&#039;,&lt;br /&gt;
	templateErrorParamsToCheck  = {&#039;issue&#039;, &#039;fix&#039;, &#039;subst&#039;}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local cmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		critical = {&lt;br /&gt;
			class = &#039;cmbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Cmbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;cmbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Cmbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		important = {&lt;br /&gt;
			class = &#039;cmbox-delete&#039;,&lt;br /&gt;
			image = &#039;Cmbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;cmbox-delete&#039;,&lt;br /&gt;
			image = &#039;Cmbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = &#039;cmbox-content&#039;,&lt;br /&gt;
			image = &#039;Cmbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;cmbox-content&#039;,&lt;br /&gt;
			image = &#039;Cmbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		caution = {&lt;br /&gt;
			class = &#039;cmbox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;cmbox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;cmbox-move&#039;,&lt;br /&gt;
			image = &#039;Cmbox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;cmbox-protection&#039;,&lt;br /&gt;
			image = &#039;Cmbox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;cmbox-notice&#039;,&lt;br /&gt;
			image = &#039;Cmbox notice.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = &#039;cmbox-notice&#039;,&lt;br /&gt;
			image = &#039;Cmbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;notice&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {&#039;plainlinks&#039;, &#039;cmbox&#039;},&lt;br /&gt;
	imageEmptyCell       = true&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local fmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = &#039;fmbox-warning&#039;,&lt;br /&gt;
			image = &#039;Cmbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		editnotice = {&lt;br /&gt;
			class = &#039;fmbox-editnotice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		system = {&lt;br /&gt;
			class = &#039;fmbox-system&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;system&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	allowId                = true,&lt;br /&gt;
	classes              = {&#039;plainlinks&#039;, &#039;fmbox&#039;},&lt;br /&gt;
	imageEmptyCell       = false,&lt;br /&gt;
	imageRightNone       = false&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local imbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		critical = {&lt;br /&gt;
			class = &#039;imbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;imbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		important = {&lt;br /&gt;
			class = &#039;imbox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;imbox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = &#039;imbox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;imbox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		caution = {&lt;br /&gt;
			class = &#039;imbox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;imbox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;imbox-move&#039;,&lt;br /&gt;
			image = &#039;Imbox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;imbox-protection&#039;,&lt;br /&gt;
			image = &#039;Imbox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;imbox-notice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = &#039;imbox-license&#039;,&lt;br /&gt;
			image = &#039;Imbox license.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		featured = {&lt;br /&gt;
			class = &#039;imbox-featured&#039;,&lt;br /&gt;
			image = &#039;Imbox featured.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;notice&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {&#039;imbox&#039;},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	below                = true,&lt;br /&gt;
	templateCategory     = &#039;File message boxes&#039;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local ombox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		critical = {&lt;br /&gt;
			class = &#039;ombox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;ombox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		important = {&lt;br /&gt;
			class = &#039;ombox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;ombox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = &#039;ombox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;ombox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		caution = {&lt;br /&gt;
			class = &#039;ombox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;ombox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;ombox-move&#039;,&lt;br /&gt;
			image = &#039;Imbox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;ombox-protection&#039;,&lt;br /&gt;
			image = &#039;Imbox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;ombox-notice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = &#039;ombox-notice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;notice&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {&#039;plainlinks&#039;, &#039;ombox&#039;},&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageRightNone       = true&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local tmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		critical = {&lt;br /&gt;
			class = &#039;tmbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;tmbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		important = {&lt;br /&gt;
			class = &#039;tmbox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;tmbox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = &#039;tmbox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;tmbox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		caution = {&lt;br /&gt;
			class = &#039;tmbox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;tmbox-style&#039;,&lt;br /&gt;
			image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;tmbox-move&#039;,&lt;br /&gt;
			image = &#039;Imbox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;tmbox-protection&#039;,&lt;br /&gt;
			image = &#039;Imbox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;tmbox-notice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = &#039;tmbox-notice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;notice&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {&#039;plainlinks&#039;, &#039;tmbox&#039;},&lt;br /&gt;
	allowId              = true,&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageRightNone       = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageEmptyCellStyle  = true,&lt;br /&gt;
	templateCategory     = &#039;Talk message boxes&#039;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
return {&lt;br /&gt;
	ambox = ambox,&lt;br /&gt;
	cmbox = cmbox,&lt;br /&gt;
	fmbox = fmbox,&lt;br /&gt;
	imbox = imbox,&lt;br /&gt;
	ombox = ombox,&lt;br /&gt;
	tmbox = tmbox&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>86.135.251.50</name></author>
	</entry>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:Message_box/configuration&amp;diff=5637</id>
		<title>Module:Message box/configuration</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:Message_box/configuration&amp;diff=5637"/>
		<updated>2014-04-27T10:37:14Z</updated>

		<summary type="html">&lt;p&gt;86.135.251.50: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local ambox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;ambox-speedy&#039;,&lt;br /&gt;
			image = &#039;Ambox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;ambox-delete&#039;,&lt;br /&gt;
			image = &#039;Ambox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;ambox-content&#039;,&lt;br /&gt;
			image = &#039;Ambox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;ambox-style&#039;,&lt;br /&gt;
			image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;ambox-move&#039;,&lt;br /&gt;
			image = &#039;Ambox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;ambox-protection&#039;,&lt;br /&gt;
			image = &#039;Ambox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;ambox-notice&#039;,&lt;br /&gt;
			image = &#039;Ambox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default                     = &#039;notice&#039;,&lt;br /&gt;
	allowBlankParams            = {&#039;talk&#039;, &#039;sect&#039;, &#039;date&#039;, &#039;issue&#039;, &#039;fix&#039;, &#039;subst&#039;, &#039;hidden&#039;},&lt;br /&gt;
	allowSmall                  = true,&lt;br /&gt;
	smallParam                  = &#039;left&#039;,&lt;br /&gt;
	smallClass                  = &#039;mbox-small-left&#039;,&lt;br /&gt;
	substCheck                  = true,&lt;br /&gt;
	classes                     = {&#039;metadata&#039;, &#039;plainlinks&#039;, &#039;ambox&#039;},&lt;br /&gt;
	imageEmptyCell              = true,&lt;br /&gt;
	imageCheckBlank             = true,&lt;br /&gt;
	imageSmallSize              = &#039;20x20px&#039;,&lt;br /&gt;
	imageCellDiv                = true,&lt;br /&gt;
	useCollapsibleTextFields    = true,&lt;br /&gt;
	imageRightNone              = true,&lt;br /&gt;
	sectionDefault              = &#039;article&#039;,&lt;br /&gt;
	allowMainspaceCategories    = true,&lt;br /&gt;
	templateCategory            = &#039;Article message templates&#039;,&lt;br /&gt;
        templateCategoryRequireName = true,&lt;br /&gt;
	templateErrorCategory       = &#039;Article message templates with missing parameters&#039;,&lt;br /&gt;
	templateErrorParamsToCheck  = {&#039;issue&#039;, &#039;fix&#039;, &#039;subst&#039;}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local cmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;cmbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Cmbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;cmbox-delete&#039;,&lt;br /&gt;
			image = &#039;Cmbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;cmbox-content&#039;,&lt;br /&gt;
			image = &#039;Cmbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;cmbox-style&#039;,&lt;br /&gt;
			image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;cmbox-move&#039;,&lt;br /&gt;
			image = &#039;Cmbox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;cmbox-protection&#039;,&lt;br /&gt;
			image = &#039;Cmbox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;cmbox-notice&#039;,&lt;br /&gt;
			image = &#039;Cmbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;notice&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {&#039;plainlinks&#039;, &#039;cmbox&#039;},&lt;br /&gt;
	imageEmptyCell       = true&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local fmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		warning = {&lt;br /&gt;
			class = &#039;fmbox-warning&#039;,&lt;br /&gt;
			image = &#039;Cmbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		editnotice = {&lt;br /&gt;
			class = &#039;fmbox-editnotice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		system = {&lt;br /&gt;
			class = &#039;fmbox-system&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;system&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	allowId                = true,&lt;br /&gt;
	classes              = {&#039;plainlinks&#039;, &#039;fmbox&#039;},&lt;br /&gt;
	imageEmptyCell       = false,&lt;br /&gt;
	imageRightNone       = false&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local imbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;imbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;imbox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;imbox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;imbox-style&#039;,&lt;br /&gt;
			image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;imbox-move&#039;,&lt;br /&gt;
			image = &#039;Imbox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;imbox-protection&#039;,&lt;br /&gt;
			image = &#039;Imbox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		license = {&lt;br /&gt;
			class = &#039;imbox-license&#039;,&lt;br /&gt;
			image = &#039;Imbox license.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		featured = {&lt;br /&gt;
			class = &#039;imbox-featured&#039;,&lt;br /&gt;
			image = &#039;Imbox featured.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;imbox-notice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;notice&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {&#039;imbox&#039;},&lt;br /&gt;
	usePlainlinksParam   = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	below                = true,&lt;br /&gt;
	templateCategory     = &#039;File message boxes&#039;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local ombox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;ombox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;ombox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;ombox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;ombox-style&#039;,&lt;br /&gt;
			image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;ombox-move&#039;,&lt;br /&gt;
			image = &#039;Imbox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;ombox-protection&#039;,&lt;br /&gt;
			image = &#039;Imbox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;ombox-notice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;notice&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {&#039;plainlinks&#039;, &#039;ombox&#039;},&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageRightNone       = true&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local tmbox = {&lt;br /&gt;
	types = {&lt;br /&gt;
		speedy = {&lt;br /&gt;
			class = &#039;tmbox-speedy&#039;,&lt;br /&gt;
			image = &#039;Imbox speedy deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		delete = {&lt;br /&gt;
			class = &#039;tmbox-delete&#039;,&lt;br /&gt;
			image = &#039;Imbox deletion.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		content = {&lt;br /&gt;
			class = &#039;tmbox-content&#039;,&lt;br /&gt;
			image = &#039;Imbox content.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		style = {&lt;br /&gt;
			class = &#039;tmbox-style&#039;,&lt;br /&gt;
			image = &#039;Edit-clear.svg &#039;&lt;br /&gt;
		},&lt;br /&gt;
		move = {&lt;br /&gt;
			class = &#039;tmbox-move&#039;,&lt;br /&gt;
			image = &#039;Imbox move.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		protection = {&lt;br /&gt;
			class = &#039;tmbox-protection&#039;,&lt;br /&gt;
			image = &#039;Imbox protection.png&#039;&lt;br /&gt;
		},&lt;br /&gt;
		notice = {&lt;br /&gt;
			class = &#039;tmbox-notice&#039;,&lt;br /&gt;
			image = &#039;Imbox notice.png&#039;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	default              = &#039;notice&#039;,&lt;br /&gt;
	showInvalidTypeError = true,&lt;br /&gt;
	classes              = {&#039;plainlinks&#039;, &#039;tmbox&#039;},&lt;br /&gt;
	allowId              = true,&lt;br /&gt;
	allowSmall           = true,&lt;br /&gt;
	imageRightNone       = true,&lt;br /&gt;
	imageEmptyCell       = true,&lt;br /&gt;
	imageEmptyCellStyle  = true,&lt;br /&gt;
	templateCategory     = &#039;Talk message boxes&#039;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
return {&lt;br /&gt;
	ambox = ambox,&lt;br /&gt;
	cmbox = cmbox,&lt;br /&gt;
	fmbox = fmbox,&lt;br /&gt;
	imbox = imbox,&lt;br /&gt;
	ombox = ombox,&lt;br /&gt;
	tmbox = tmbox&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>86.135.251.50</name></author>
	</entry>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:Yesno&amp;diff=5870</id>
		<title>Module:Yesno</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:Yesno&amp;diff=5870"/>
		<updated>2014-04-27T10:27:40Z</updated>

		<summary type="html">&lt;p&gt;86.135.251.50: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to the template {{yesno}}.&lt;br /&gt;
 &lt;br /&gt;
return function (val, default)&lt;br /&gt;
	-- If your wiki uses non-ascii characters for any of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., you&lt;br /&gt;
	-- should replace &amp;quot;val:lower()&amp;quot; with &amp;quot;mw.ustring.lower(val)&amp;quot; in the&lt;br /&gt;
	-- following line.&lt;br /&gt;
	val = type(val) == &#039;string&#039; and val:lower() or val&lt;br /&gt;
	if val == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif val == true &lt;br /&gt;
		or val == &#039;yes&#039;&lt;br /&gt;
		or val == &#039;y&#039;&lt;br /&gt;
		or val == &#039;true&#039;&lt;br /&gt;
		or tonumber(val) == 1&lt;br /&gt;
	then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif val == false&lt;br /&gt;
		or val == &#039;no&#039;&lt;br /&gt;
		or val == &#039;n&#039;&lt;br /&gt;
		or val == &#039;false&#039;&lt;br /&gt;
		or tonumber(val) == 0&lt;br /&gt;
	then&lt;br /&gt;
		return false&lt;br /&gt;
	else&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>86.135.251.50</name></author>
	</entry>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:Namespace_detect/data&amp;diff=5694</id>
		<title>Module:Namespace detect/data</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:Namespace_detect/data&amp;diff=5694"/>
		<updated>2014-04-27T10:22:09Z</updated>

		<summary type="html">&lt;p&gt;86.135.251.50: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                          Namespace detect data                             --&lt;br /&gt;
-- This module holds data for [[Module:Namespace detect]] to be loaded per    --&lt;br /&gt;
-- page, rather than per #invoke, for performance reasons.                    --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
local cfg = require(&#039;Module:Namespace detect/config&#039;)&lt;br /&gt;
 &lt;br /&gt;
local function addKey(t, key, defaultKey)&lt;br /&gt;
	if key ~= defaultKey then&lt;br /&gt;
		t[#t + 1] = key&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
-- Get a table of parameters to query for each default parameter name.&lt;br /&gt;
-- This allows wikis to customise parameter names in the cfg table while&lt;br /&gt;
-- ensuring that default parameter names will always work. The cfg table&lt;br /&gt;
-- values can be added as a string, or as an array of strings.&lt;br /&gt;
 &lt;br /&gt;
local defaultKeys = {&lt;br /&gt;
	&#039;main&#039;,&lt;br /&gt;
	&#039;talk&#039;,&lt;br /&gt;
	&#039;other&#039;,&lt;br /&gt;
	&#039;subjectns&#039;,&lt;br /&gt;
	&#039;demospace&#039;,&lt;br /&gt;
	&#039;demopage&#039;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
local argKeys = {}&lt;br /&gt;
for i, defaultKey in ipairs(defaultKeys) do&lt;br /&gt;
	argKeys[defaultKey] = {defaultKey}&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
for defaultKey, t in pairs(argKeys) do&lt;br /&gt;
	local cfgValue = cfg[defaultKey]&lt;br /&gt;
	local cfgValueType = type(cfgValue)&lt;br /&gt;
	if cfgValueType == &#039;string&#039; then&lt;br /&gt;
		addKey(t, cfgValue, defaultKey)&lt;br /&gt;
	elseif cfgValueType == &#039;table&#039; then&lt;br /&gt;
		for i, key in ipairs(cfgValue) do&lt;br /&gt;
			addKey(t, key, defaultKey)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	cfg[defaultKey] = nil -- Free the cfg value as we don&#039;t need it any more.&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
local function getParamMappings()&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Returns a table of how parameter names map to namespace names. The keys&lt;br /&gt;
	-- are the actual namespace names, in lower case, and the values are the&lt;br /&gt;
	-- possible parameter names for that namespace, also in lower case. The&lt;br /&gt;
	-- table entries are structured like this:&lt;br /&gt;
	-- {&lt;br /&gt;
	--   [&#039;&#039;] = {&#039;main&#039;},&lt;br /&gt;
	--   [&#039;wikipedia&#039;] = {&#039;wikipedia&#039;, &#039;project&#039;, &#039;wp&#039;},&lt;br /&gt;
	--   ...&lt;br /&gt;
	-- }&lt;br /&gt;
	--]]&lt;br /&gt;
	local mappings = {}&lt;br /&gt;
	local mainNsName = mw.site.subjectNamespaces[0].name&lt;br /&gt;
	mainNsName = mw.ustring.lower(mainNsName)&lt;br /&gt;
	mappings[mainNsName] = mw.clone(argKeys.main)&lt;br /&gt;
	mappings[&#039;talk&#039;] = mw.clone(argKeys.talk)&lt;br /&gt;
	for nsid, ns in pairs(mw.site.subjectNamespaces) do&lt;br /&gt;
		if nsid ~= 0 then -- Exclude main namespace.&lt;br /&gt;
			local nsname = mw.ustring.lower(ns.name)&lt;br /&gt;
			local canonicalName = mw.ustring.lower(ns.canonicalName)&lt;br /&gt;
			mappings[nsname] = {nsname}&lt;br /&gt;
			if canonicalName ~= nsname then&lt;br /&gt;
				table.insert(mappings[nsname], canonicalName)&lt;br /&gt;
			end&lt;br /&gt;
			for _, alias in ipairs(ns.aliases) do&lt;br /&gt;
				table.insert(mappings[nsname], mw.ustring.lower(alias))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mappings&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
return {&lt;br /&gt;
	argKeys = argKeys,&lt;br /&gt;
	cfg = cfg,&lt;br /&gt;
	mappings = getParamMappings()&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>86.135.251.50</name></author>
	</entry>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:Namespace_detect/config&amp;diff=5673</id>
		<title>Module:Namespace detect/config</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:Namespace_detect/config&amp;diff=5673"/>
		<updated>2014-04-27T10:21:07Z</updated>

		<summary type="html">&lt;p&gt;86.135.251.50: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                    Namespace detect configuration data                     --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module stores configuration data for Module:Namespace detect. Here    --&lt;br /&gt;
-- you can localise the module to your wiki&#039;s language.                       --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To activate a configuration item, you need to uncomment it. This means     --&lt;br /&gt;
-- that you need to remove the text &amp;quot;-- &amp;quot; at the start of the line.           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
local cfg = {} -- Don&#039;t edit this line.&lt;br /&gt;
 &lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Parameter names                               --&lt;br /&gt;
-- These configuration items specify custom parameter names. Values added     --&lt;br /&gt;
-- here will work in addition to the default English parameter names.         --&lt;br /&gt;
-- To add one extra name, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = &#039;parameter name&#039;                                                 --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To add multiple names, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = {&#039;parameter name 1&#039;, &#039;parameter name 2&#039;, &#039;parameter name 3&#039;}     --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
---- This parameter displays content for the main namespace:&lt;br /&gt;
-- cfg.main = &#039;main&#039;&lt;br /&gt;
 &lt;br /&gt;
---- This parameter displays in talk namespaces:&lt;br /&gt;
-- cfg.talk = &#039;talk&#039;&lt;br /&gt;
 &lt;br /&gt;
---- This parameter displays content for &amp;quot;other&amp;quot; namespaces (namespaces for which&lt;br /&gt;
---- parameters have not been specified):&lt;br /&gt;
-- cfg.other = &#039;other&#039;&lt;br /&gt;
 &lt;br /&gt;
---- This parameter makes talk pages behave as though they are the corresponding&lt;br /&gt;
---- subject namespace. Note that this parameter is used with [[Module:Yesno]].&lt;br /&gt;
---- Edit that module to change the default values of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc.&lt;br /&gt;
-- cfg.subjectns = &#039;subjectns&#039;&lt;br /&gt;
 &lt;br /&gt;
---- This parameter sets a demonstration namespace:&lt;br /&gt;
-- cfg.demospace = &#039;demospace&#039;&lt;br /&gt;
 &lt;br /&gt;
---- This parameter sets a specific page to compare:&lt;br /&gt;
cfg.demopage = &#039;page&#039;&lt;br /&gt;
 &lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           Table configuration                              --&lt;br /&gt;
-- These configuration items allow customisation of the &amp;quot;table&amp;quot; function,     --&lt;br /&gt;
-- used to generate a table of possible parameters in the module              --&lt;br /&gt;
-- documentation.                                                             --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
---- The header for the namespace column in the wikitable containing the list of&lt;br /&gt;
---- possible subject-space parameters.&lt;br /&gt;
-- cfg.wikitableNamespaceHeader = &#039;Namespace&#039;&lt;br /&gt;
 &lt;br /&gt;
---- The header for the wikitable containing the list of possible subject-space&lt;br /&gt;
---- parameters.&lt;br /&gt;
-- cfg.wikitableAliasesHeader = &#039;Aliases&#039;&lt;br /&gt;
 &lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                        End of configuration data                           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
return cfg -- Don&#039;t edit this line.&lt;/div&gt;</summary>
		<author><name>86.135.251.50</name></author>
	</entry>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:Arguments&amp;diff=5135</id>
		<title>Module:Arguments</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:Arguments&amp;diff=5135"/>
		<updated>2014-04-27T10:16:58Z</updated>

		<summary type="html">&lt;p&gt;86.135.251.50: &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;
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;
	-- Get the arguments from the frame object if available. If the frame object&lt;br /&gt;
	-- is not available, we are being called from another Lua module or from the&lt;br /&gt;
	-- debug console, so assign the args to a new variable so we can&lt;br /&gt;
	-- differentiate them.&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 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;
			pargs = frame:getParent().args&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(iterator, tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table using the specified iterator. If a value is already&lt;br /&gt;
		-- present it is not overwritten; tables listed earlier have precedence.&lt;br /&gt;
		-- We are also memoizing nil values, but those values can be&lt;br /&gt;
		-- overwritten.&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in iterator(t) do&lt;br /&gt;
				if metaArgs[key] == nil then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = true&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
 &lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal == nil then&lt;br /&gt;
				nilArgs[key] = true&lt;br /&gt;
			else&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				&#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] = true -- Memoize nils.&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(pairs, argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
			metatable.doneIpairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return pairs(metaArgs)&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	metatable.__ipairs = function ()&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		if not metatable.doneIpairs then&lt;br /&gt;
			mergeArgs(ipairs, argTables)&lt;br /&gt;
			metatable.doneIpairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return ipairs(metaArgs)&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>86.135.251.50</name></author>
	</entry>
	<entry>
		<id>https://bitcrush.io/laserwiki/index.php?title=Module:Message_box&amp;diff=5582</id>
		<title>Module:Message box</title>
		<link rel="alternate" type="text/html" href="https://bitcrush.io/laserwiki/index.php?title=Module:Message_box&amp;diff=5582"/>
		<updated>2014-04-27T10:14:50Z</updated>

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