<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="no">
	<id>https://leksikon.araa.no/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marcuspn</id>
	<title>Arbeiderbevegelsens leksikon - Brukerbidrag [no]</title>
	<link rel="self" type="application/atom+xml" href="https://leksikon.araa.no/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marcuspn"/>
	<link rel="alternate" type="text/html" href="https://leksikon.araa.no/Spesial:Bidrag/Marcuspn"/>
	<updated>2026-09-11T02:04:02Z</updated>
	<subtitle>Brukerbidrag</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Gadget-morebits.js&amp;diff=1128</id>
		<title>MediaWiki:Gadget-morebits.js</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Gadget-morebits.js&amp;diff=1128"/>
		<updated>2026-09-10T15:10:07Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * A library full of lots of goodness for user scripts on MediaWiki wikis, including Wikipedia.&lt;br /&gt;
 *&lt;br /&gt;
 * The highlights include:&lt;br /&gt;
 * - {@link Morebits.wiki.Api} - make calls to the MediaWiki API&lt;br /&gt;
 * - {@link Morebits.wiki.Page} - modify pages on the wiki (edit, revert, delete, etc.)&lt;br /&gt;
 * - {@link Morebits.Date} - enhanced date object processing, sort of a light moment.js&lt;br /&gt;
 * - {@link Morebits.QuickForm} - generate quick HTML forms on the fly&lt;br /&gt;
 * - {@link Morebits.SimpleWindow} - generate dialog windows and modals&lt;br /&gt;
 * - {@link Morebits.Status} - a rough-and-ready status message displayer, used by the Morebits.wiki classes&lt;br /&gt;
 * - {@link Morebits.wikitext} - utilities for dealing with wikitext&lt;br /&gt;
 * - {@link Morebits.string} - utilities for manipulating strings&lt;br /&gt;
 * - {@link Morebits.array} - utilities for manipulating arrays&lt;br /&gt;
 * - {@link Morebits.ip} - utilities to help process IP addresses&lt;br /&gt;
 *&lt;br /&gt;
 * Dependencies:&lt;br /&gt;
 * - The whole thing relies on jQuery.  But most wikis should provide this by default.&lt;br /&gt;
 * - {@link Morebits.QuickForm}, {@link Morebits.SimpleWindow}, and {@link Morebits.Status} rely on the &amp;quot;morebits.css&amp;quot; file for their styling.&lt;br /&gt;
 * - To create a gadget based on morebits.js, use this syntax in MediaWiki:Gadgets-definition:&lt;br /&gt;
 *     - `*GadgetName[ResourceLoader|dependencies=mediawiki.user,mediawiki.util,mediawiki.Title]|morebits.js|morebits.css|GadgetName.js`&lt;br /&gt;
 * - Alternatively, you can configure morebits.js as a hidden gadget in MediaWiki:Gadgets-definition:&lt;br /&gt;
 *     - `*morebits[ResourceLoader|dependencies=mediawiki.user,mediawiki.util,mediawiki.Title|hidden]|morebits.js|morebits.css`&lt;br /&gt;
 *     and then load ext.gadget.morebits as one of the dependencies for the new gadget.&lt;br /&gt;
 *&lt;br /&gt;
 * All the stuff here works on all browsers for which MediaWiki provides JavaScript support.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is maintained by the maintainers of Twinkle.&lt;br /&gt;
 * For queries, suggestions, help, etc., head to [Wikipedia talk:Twinkle on English Wikipedia](http://en.wikipedia.org/wiki/WT:TW).&lt;br /&gt;
 * The latest development source is available at {@link https://github.com/wikimedia-gadgets/twinkle/blob/master/src/morebits.js|GitHub}.&lt;br /&gt;
 *&lt;br /&gt;
 * @namespace Morebits&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
&lt;br /&gt;
/** @lends Morebits */&lt;br /&gt;
const Morebits = {};&lt;br /&gt;
window.Morebits = Morebits; // allow global access&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Wiki-specific configurations for Morebits&lt;br /&gt;
 */&lt;br /&gt;
Morebits.l10n = {&lt;br /&gt;
	/**&lt;br /&gt;
	 * Local aliases for &amp;quot;redirect&amp;quot; magic word.&lt;br /&gt;
	 * Check using api.php?action=query&amp;amp;format=json&amp;amp;meta=siteinfo&amp;amp;formatversion=2&amp;amp;siprop=magicwords&lt;br /&gt;
	 */&lt;br /&gt;
	redirectTagAliases: [&#039;#REDIRECT&#039;],&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Takes a string as argument and checks if it is a timestamp or not&lt;br /&gt;
	 * If not, it returns null. If yes, it returns an array of integers&lt;br /&gt;
	 * in the format [year, month, date, hour, minute, second]&lt;br /&gt;
	 * which can be passed to Date.UTC()&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} str&lt;br /&gt;
	 * @return {number[] | null}&lt;br /&gt;
	 */&lt;br /&gt;
	signatureTimestampFormat: function(str) {&lt;br /&gt;
		// HH:mm, DD Month YYYY (UTC)&lt;br /&gt;
		const rgx = /(\d{2}):(\d{2}), (\d{1,2}) (\w+) (\d{4}) \(UTC\)/;&lt;br /&gt;
		const match = rgx.exec(str);&lt;br /&gt;
		if (!match) {&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
		const month = Morebits.Date.localeData.months.indexOf(match[4]);&lt;br /&gt;
		if (month === -1) {&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
		// ..... year ... month .. date ... hour .... minute&lt;br /&gt;
		return [match[5], month, match[3], match[1], match[2]];&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple helper function to see what groups a user might belong.&lt;br /&gt;
 *&lt;br /&gt;
 * @param {string} group - e.g. `sysop`, `extendedconfirmed`, etc.&lt;br /&gt;
 * @return {boolean}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.userIsInGroup = function(group) {&lt;br /&gt;
	return mw.config.get(&#039;wgUserGroups&#039;).includes(group);&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * Hardcodes whether the user is a sysop, used a lot.&lt;br /&gt;
 *&lt;br /&gt;
 * @type {boolean}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.userIsSysop = Morebits.userIsInGroup(&#039;sysop&#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Determines whether the current page is a redirect or soft redirect. Fails&lt;br /&gt;
 * to detect soft redirects on edit, history, etc. pages.  Will attempt to&lt;br /&gt;
 * detect Module:RfD, with the same failure points.&lt;br /&gt;
 *&lt;br /&gt;
 * @return {boolean}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.isPageRedirect = function() {&lt;br /&gt;
	return !!(mw.config.get(&#039;wgIsRedirect&#039;) || document.getElementById(&#039;softredirect&#039;) || $(&#039;.box-RfD&#039;).length);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Stores a normalized (underscores converted to spaces) version of the&lt;br /&gt;
 * `wgPageName` variable.&lt;br /&gt;
 *&lt;br /&gt;
 * @type {string}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.pageNameNorm = mw.config.get(&#039;wgPageName&#039;).replace(/_/g, &#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Create a string for use in regex matching a page name.  Accounts for&lt;br /&gt;
 * leading character&#039;s capitalization, underscores as spaces, and special&lt;br /&gt;
 * characters being escaped.  See also {@link Morebits.namespaceRegex}.&lt;br /&gt;
 *&lt;br /&gt;
 * @param {string} pageName - Page name without namespace.&lt;br /&gt;
 * @return {string} - For a page name `Foo bar`, returns the string `[Ff]oo[_ ]bar`.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.pageNameRegex = function(pageName) {&lt;br /&gt;
	if (pageName === &#039;&#039;) {&lt;br /&gt;
		return &#039;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
	const firstChar = pageName[0],&lt;br /&gt;
		remainder = Morebits.string.escapeRegExp(pageName.slice(1));&lt;br /&gt;
	if (mw.Title.phpCharToUpper(firstChar) !== firstChar.toLowerCase()) {&lt;br /&gt;
		return &#039;[&#039; + mw.Title.phpCharToUpper(firstChar) + firstChar.toLowerCase() + &#039;]&#039; + remainder;&lt;br /&gt;
	}&lt;br /&gt;
	return Morebits.string.escapeRegExp(firstChar) + remainder;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Converts string or array of DOM nodes into an HTML fragment.&lt;br /&gt;
 * Wikilink syntax (`[[...]]`) is transformed into HTML anchor.&lt;br /&gt;
 * Used in Morebits.QuickForm and Morebits.Status&lt;br /&gt;
 *&lt;br /&gt;
 * @internal&lt;br /&gt;
 * @param {string|Node|(string|Node)[]} input&lt;br /&gt;
 * @return {DocumentFragment}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.createHtml = function(input) {&lt;br /&gt;
	const fragment = document.createDocumentFragment();&lt;br /&gt;
	if (!input) {&lt;br /&gt;
		return fragment;&lt;br /&gt;
	}&lt;br /&gt;
	if (!Array.isArray(input)) {&lt;br /&gt;
		input = [input];&lt;br /&gt;
	}&lt;br /&gt;
	for (let i = 0; i &amp;lt; input.length; ++i) {&lt;br /&gt;
		if (input[i] instanceof Node) {&lt;br /&gt;
			fragment.appendChild(input[i]);&lt;br /&gt;
		} else {&lt;br /&gt;
			$.parseHTML(Morebits.createHtml.renderWikilinks(input[i])).forEach((node) =&amp;gt; {&lt;br /&gt;
				fragment.appendChild(node);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return fragment;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Converts wikilinks to HTML anchor tags.&lt;br /&gt;
 *&lt;br /&gt;
 * @param {string} text&lt;br /&gt;
 * @return {string}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.createHtml.renderWikilinks = function(text) {&lt;br /&gt;
	const ub = new Morebits.Unbinder(text);&lt;br /&gt;
	// Don&#039;t convert wikilinks within code tags as they&#039;re used for displaying wiki-code&lt;br /&gt;
	ub.unbind(&#039;&amp;lt;code&amp;gt;&#039;, &#039;&amp;lt;/code&amp;gt;&#039;);&lt;br /&gt;
	ub.content = ub.content.replace(&lt;br /&gt;
		/\[\[:?(?:([^|\]]+?)\|)?([^\]|]+?)\]\]/g,&lt;br /&gt;
		(_, target, text) =&amp;gt; {&lt;br /&gt;
			if (!target) {&lt;br /&gt;
				target = text;&lt;br /&gt;
			}&lt;br /&gt;
			return &#039;&amp;lt;a target=&amp;quot;_blank&amp;quot; href=&amp;quot;&#039; + mw.util.getUrl(target) +&lt;br /&gt;
				&#039;&amp;quot; title=&amp;quot;&#039; + target.replace(/&amp;quot;/g, &#039;&amp;amp;#34;&#039;) + &#039;&amp;quot;&amp;gt;&#039; + text + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
		});&lt;br /&gt;
	return ub.rebind();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Create a string for use in regex matching all namespace aliases, regardless&lt;br /&gt;
 * of the capitalization and underscores/spaces.  Doesn&#039;t include the optional&lt;br /&gt;
 * leading `:`, but if there&#039;s more than one item, wraps the list in a&lt;br /&gt;
 * non-capturing group.  This means you can do `Morebits.namespaceRegex([4]) +&lt;br /&gt;
 * &#039;:&#039; + Morebits.pageNameRegex(&#039;Twinkle&#039;)` to match a full page.  Uses&lt;br /&gt;
 * {@link Morebits.pageNameRegex}.&lt;br /&gt;
 *&lt;br /&gt;
 * @param {number[]} namespaces - Array of namespace numbers.  Unused/invalid&lt;br /&gt;
 * namespace numbers are silently discarded.&lt;br /&gt;
 * @example&lt;br /&gt;
 * // returns &#039;(?:[Ff][Ii][Ll][Ee]|[Ii][Mm][Aa][Gg][Ee])&#039;&lt;br /&gt;
 * Morebits.namespaceRegex([6])&lt;br /&gt;
 * @return {string} - Regex-suitable string of all namespace aliases.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.namespaceRegex = function(namespaces) {&lt;br /&gt;
	if (!Array.isArray(namespaces)) {&lt;br /&gt;
		namespaces = [namespaces];&lt;br /&gt;
	}&lt;br /&gt;
	const aliases = [];&lt;br /&gt;
	let regex;&lt;br /&gt;
	$.each(mw.config.get(&#039;wgNamespaceIds&#039;), (name, number) =&amp;gt; {&lt;br /&gt;
		if (namespaces.includes(number)) {&lt;br /&gt;
			// Namespaces are completely agnostic as to case,&lt;br /&gt;
			// and a regex string is more useful/compatible than a RegExp object,&lt;br /&gt;
			// so we accept any casing for any letter.&lt;br /&gt;
			aliases.push(name.split(&#039;&#039;).map((char) =&amp;gt; Morebits.pageNameRegex(char)).join(&#039;&#039;));&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
	switch (aliases.length) {&lt;br /&gt;
		case 0:&lt;br /&gt;
			regex = &#039;&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		case 1:&lt;br /&gt;
			regex = aliases[0];&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			regex = &#039;(?:&#039; + aliases.join(&#039;|&#039;) + &#039;)&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
	return regex;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.QuickForm **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * Creation of simple and standard forms without much specific coding.&lt;br /&gt;
 *&lt;br /&gt;
 * @namespace Morebits.QuickForm&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {event} event - Function to execute when form is submitted.&lt;br /&gt;
 * @param {string} [eventType=submit] - Type of the event.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm = function QuickForm(event, eventType) {&lt;br /&gt;
	this.root = new Morebits.QuickForm.Element({ type: &#039;form&#039;, event: event, eventType: eventType });&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Renders the HTML output of the quickForm.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @return {HTMLElement}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.prototype.render = function QuickFormRender() {&lt;br /&gt;
	const ret = this.root.render();&lt;br /&gt;
	ret.names = {};&lt;br /&gt;
	return ret;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Append element to the form.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {(object|Morebits.QuickForm.Element)} data - A quickform element, or the object with which&lt;br /&gt;
 * a quickform element is constructed.&lt;br /&gt;
 * @return {Morebits.QuickForm.Element} - Same as what is passed to the function.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.prototype.append = function QuickFormAppend(data) {&lt;br /&gt;
	return this.root.append(data);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Create a new element for the the form.&lt;br /&gt;
 *&lt;br /&gt;
 * Index to Morebits.QuickForm.Element types:&lt;br /&gt;
 * - Global attributes: id, className, style, tooltip, extra, $data, adminonly&lt;br /&gt;
 * - `select`: A combo box (aka drop-down).&lt;br /&gt;
 *     - Attributes: name, label, multiple, size, list, event, disabled&lt;br /&gt;
 *  - `option`: An element for a combo box.&lt;br /&gt;
 *      - Attributes: value, label, selected, disabled&lt;br /&gt;
 *  - `optgroup`: A group of &amp;quot;option&amp;quot;s.&lt;br /&gt;
 *      - Attributes: label, list&lt;br /&gt;
 *  - `field`: A fieldset (aka group box).&lt;br /&gt;
 *      - Attributes: name, label, disabled&lt;br /&gt;
 *  - `checkbox`: A checkbox. Must use &amp;quot;list&amp;quot; parameter.&lt;br /&gt;
 *      - Attributes: name, list, event&lt;br /&gt;
 *      - Attributes (within list): name, label, value, checked, disabled, event, subgroup&lt;br /&gt;
 *  - `radio`: A radio button. Must use &amp;quot;list&amp;quot; parameter.&lt;br /&gt;
 *      - Attributes: name, list, event&lt;br /&gt;
 *      - Attributes (within list): name, label, value, checked, disabled, event, subgroup&lt;br /&gt;
 *  - `input`: A text input box.&lt;br /&gt;
 *      - Attributes: name, label, value, size, placeholder, maxlength, disabled, required, readonly, event&lt;br /&gt;
 *  - `number`: A number input box.&lt;br /&gt;
 *      - Attributes: Everything the text `input` has, as well as: min, max, step, list&lt;br /&gt;
 *  - `dyninput`: A set of text boxes with &amp;quot;Remove&amp;quot; buttons and an &amp;quot;Add&amp;quot; button.&lt;br /&gt;
 *      - Attributes: name, label, min, max, inputs, sublabel, value, size, maxlength, event&lt;br /&gt;
 *  - `hidden`: An invisible form field.&lt;br /&gt;
 *      - Attributes: name, value&lt;br /&gt;
 *  - `header`: A level 5 header.&lt;br /&gt;
 *      - Attributes: label&lt;br /&gt;
 *  - `div`: A generic placeholder element or label.&lt;br /&gt;
 *      - Attributes: name, label&lt;br /&gt;
 *  - `submit`: A submit button. Morebits.SimpleWindow moves these to the footer of the dialog.&lt;br /&gt;
 *      - Attributes: name, label, disabled&lt;br /&gt;
 *  - `button`: A generic button.&lt;br /&gt;
 *      - Attributes: name, label, disabled, event&lt;br /&gt;
 *  - `textarea`: A big, multi-line text box.&lt;br /&gt;
 *      - Attributes: name, label, value, cols, rows, disabled, required, readonly&lt;br /&gt;
 *  - `fragment`: A DocumentFragment object.&lt;br /&gt;
 *      - No attributes, and no global attributes except adminonly.&lt;br /&gt;
 * There is some difference on how types handle the `label` attribute:&lt;br /&gt;
 * - `div`, `select`, `field`, `checkbox`/`radio`, `input`, `textarea`, `header`, and `dyninput` can accept an array of items,&lt;br /&gt;
 * and the label item(s) can be `Element`s.&lt;br /&gt;
 * - `option`, `optgroup`, `_dyninput_cell`, `submit`, and `button` accept only a single string.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {Object} data - Object representing the quickform element. Should&lt;br /&gt;
 * specify one of the available types from the index above, as well as any&lt;br /&gt;
 * relevant and available attributes.&lt;br /&gt;
 * @example new Morebits.QuickForm.Element({&lt;br /&gt;
 *     name: &#039;target&#039;,&lt;br /&gt;
 *     type: &#039;input&#039;,&lt;br /&gt;
 *     label: &#039;Your target:&#039;,&lt;br /&gt;
 *     tooltip: &#039;Enter your target. Required.&#039;,&lt;br /&gt;
 *     required: true&lt;br /&gt;
 * });&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.Element = function QuickFormElement(data) {&lt;br /&gt;
	this.data = data;&lt;br /&gt;
	this.childs = [];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @memberof Morebits.QuickForm.Element&lt;br /&gt;
 * @type {number}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.Element.id = 0;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Appends an element to current element.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm.Element&lt;br /&gt;
 * @param {Morebits.QuickForm.Element} data - A quickForm element or the object required to&lt;br /&gt;
 * create the quickForm element.&lt;br /&gt;
 * @return {Morebits.QuickForm.Element} The same element passed in.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.Element.prototype.append = function QuickFormElementAppend(data) {&lt;br /&gt;
	let child;&lt;br /&gt;
	if (data instanceof Morebits.QuickForm.Element) {&lt;br /&gt;
		child = data;&lt;br /&gt;
	} else {&lt;br /&gt;
		child = new Morebits.QuickForm.Element(data);&lt;br /&gt;
	}&lt;br /&gt;
	this.childs.push(child);&lt;br /&gt;
	return child;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Renders the HTML output for the quickForm element.  This should be called&lt;br /&gt;
 * without parameters: `form.render()`.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm.Element&lt;br /&gt;
 * @return {HTMLElement}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.Element.prototype.render = function QuickFormElementRender(internal_subgroup_id) {&lt;br /&gt;
	const currentNode = this.compute(this.data, internal_subgroup_id);&lt;br /&gt;
&lt;br /&gt;
	for (let i = 0; i &amp;lt; this.childs.length; ++i) {&lt;br /&gt;
		// do not pass internal_subgroup_id to recursive calls&lt;br /&gt;
		currentNode[1].appendChild(this.childs[i].render());&lt;br /&gt;
	}&lt;br /&gt;
	return currentNode[0];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/** @memberof Morebits.QuickForm.Element */&lt;br /&gt;
Morebits.QuickForm.Element.prototype.compute = function QuickFormElementCompute(data, in_id) {&lt;br /&gt;
	let node;&lt;br /&gt;
	let childContainer = null;&lt;br /&gt;
	let label;&lt;br /&gt;
	const id = (in_id ? in_id + &#039;_&#039; : &#039;&#039;) + &#039;node_&#039; + Morebits.QuickForm.Element.id++;&lt;br /&gt;
	if (data.adminonly &amp;amp;&amp;amp; !Morebits.userIsSysop) {&lt;br /&gt;
		// hell hack alpha&lt;br /&gt;
		data.type = &#039;hidden&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	let i, current, subnode;&lt;br /&gt;
	switch (data.type) {&lt;br /&gt;
		case &#039;form&#039;:&lt;br /&gt;
			node = document.createElement(&#039;form&#039;);&lt;br /&gt;
			node.className = &#039;quickform&#039;;&lt;br /&gt;
			node.setAttribute(&#039;action&#039;, &#039;javascript:void(0);&#039;);&lt;br /&gt;
			if (data.event) {&lt;br /&gt;
				node.addEventListener(data.eventType || &#039;submit&#039;, data.event, false);&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;fragment&#039;:&lt;br /&gt;
			node = document.createDocumentFragment();&lt;br /&gt;
			// fragments can&#039;t have any attributes, so just return it straight away&lt;br /&gt;
			return [node, node];&lt;br /&gt;
		// Sometimes Twinkle uses fancy searchable &amp;quot;select&amp;quot; elements. This is powered by the third party library &amp;quot;select2&amp;quot;. Activate it by creating a Morebits &amp;quot;select&amp;quot; element, then call `$(&#039;select[name=sub_group]&#039;).select2({});` or similar towards the end of your main code.&lt;br /&gt;
		case &#039;select&#039;:&lt;br /&gt;
			node = document.createElement(&#039;div&#039;);&lt;br /&gt;
&lt;br /&gt;
			node.setAttribute(&#039;id&#039;, &#039;div_&#039; + id);&lt;br /&gt;
			if (data.label) {&lt;br /&gt;
				label = node.appendChild(document.createElement(&#039;label&#039;));&lt;br /&gt;
				label.setAttribute(&#039;for&#039;, id);&lt;br /&gt;
				label.appendChild(Morebits.createHtml(data.label));&lt;br /&gt;
				label.style.marginRight = &#039;3px&#039;;&lt;br /&gt;
			}&lt;br /&gt;
			var select = node.appendChild(document.createElement(&#039;select&#039;));&lt;br /&gt;
			if (data.event) {&lt;br /&gt;
				select.addEventListener(&#039;change&#039;, data.event, false);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.multiple) {&lt;br /&gt;
				select.setAttribute(&#039;multiple&#039;, &#039;multiple&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.size) {&lt;br /&gt;
				select.setAttribute(&#039;size&#039;, data.size);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.disabled) {&lt;br /&gt;
				select.setAttribute(&#039;disabled&#039;, &#039;disabled&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			select.setAttribute(&#039;name&#039;, data.name);&lt;br /&gt;
&lt;br /&gt;
			if (data.list) {&lt;br /&gt;
				for (i = 0; i &amp;lt; data.list.length; ++i) {&lt;br /&gt;
&lt;br /&gt;
					current = data.list[i];&lt;br /&gt;
&lt;br /&gt;
					if (current.list) {&lt;br /&gt;
						current.type = &#039;optgroup&#039;;&lt;br /&gt;
					} else {&lt;br /&gt;
						current.type = &#039;option&#039;;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					subnode = this.compute(current);&lt;br /&gt;
					select.appendChild(subnode[0]);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			childContainer = select;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;option&#039;:&lt;br /&gt;
			node = document.createElement(&#039;option&#039;);&lt;br /&gt;
			node.values = data.value;&lt;br /&gt;
			node.setAttribute(&#039;value&#039;, data.value);&lt;br /&gt;
			if (data.selected) {&lt;br /&gt;
				node.setAttribute(&#039;selected&#039;, &#039;selected&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.disabled) {&lt;br /&gt;
				node.setAttribute(&#039;disabled&#039;, &#039;disabled&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			node.setAttribute(&#039;label&#039;, data.label);&lt;br /&gt;
			node.appendChild(document.createTextNode(data.label));&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;optgroup&#039;:&lt;br /&gt;
			node = document.createElement(&#039;optgroup&#039;);&lt;br /&gt;
			node.setAttribute(&#039;label&#039;, data.label);&lt;br /&gt;
&lt;br /&gt;
			if (data.list) {&lt;br /&gt;
				for (i = 0; i &amp;lt; data.list.length; ++i) {&lt;br /&gt;
&lt;br /&gt;
					current = data.list[i];&lt;br /&gt;
					current.type = &#039;option&#039;; // must be options here&lt;br /&gt;
&lt;br /&gt;
					subnode = this.compute(current);&lt;br /&gt;
					node.appendChild(subnode[0]);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;field&#039;:&lt;br /&gt;
			node = document.createElement(&#039;fieldset&#039;);&lt;br /&gt;
			label = node.appendChild(document.createElement(&#039;legend&#039;));&lt;br /&gt;
			label.appendChild(Morebits.createHtml(data.label));&lt;br /&gt;
			if (data.name) {&lt;br /&gt;
				node.setAttribute(&#039;name&#039;, data.name);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.disabled) {&lt;br /&gt;
				node.setAttribute(&#039;disabled&#039;, &#039;disabled&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;checkbox&#039;:&lt;br /&gt;
		case &#039;radio&#039;:&lt;br /&gt;
			node = document.createElement(&#039;div&#039;);&lt;br /&gt;
			if (data.list) {&lt;br /&gt;
				for (i = 0; i &amp;lt; data.list.length; ++i) {&lt;br /&gt;
					const cur_id = id + &#039;_&#039; + i;&lt;br /&gt;
					current = data.list[i];&lt;br /&gt;
					var cur_div;&lt;br /&gt;
					if (current.type === &#039;header&#039;) {&lt;br /&gt;
					// inline hack&lt;br /&gt;
						cur_div = node.appendChild(document.createElement(&#039;h6&#039;));&lt;br /&gt;
						cur_div.appendChild(document.createTextNode(current.label));&lt;br /&gt;
						if (current.tooltip) {&lt;br /&gt;
							Morebits.QuickForm.Element.generateTooltip(cur_div, current);&lt;br /&gt;
						}&lt;br /&gt;
						continue;&lt;br /&gt;
					}&lt;br /&gt;
					cur_div = node.appendChild(document.createElement(&#039;div&#039;));&lt;br /&gt;
					subnode = cur_div.appendChild(document.createElement(&#039;input&#039;));&lt;br /&gt;
					subnode.values = current.value;&lt;br /&gt;
					subnode.setAttribute(&#039;value&#039;, current.value);&lt;br /&gt;
					subnode.setAttribute(&#039;type&#039;, data.type);&lt;br /&gt;
					subnode.setAttribute(&#039;id&#039;, cur_id);&lt;br /&gt;
					subnode.setAttribute(&#039;name&#039;, current.name || data.name);&lt;br /&gt;
&lt;br /&gt;
					// If name is provided on the individual checkbox, add a data-single&lt;br /&gt;
					// attribute which indicates it isn&#039;t part of a list of checkboxes with&lt;br /&gt;
					// same name. Used in getInputData()&lt;br /&gt;
					if (current.name) {&lt;br /&gt;
						subnode.setAttribute(&#039;data-single&#039;, &#039;data-single&#039;);&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					if (current.checked) {&lt;br /&gt;
						subnode.setAttribute(&#039;checked&#039;, &#039;checked&#039;);&lt;br /&gt;
					}&lt;br /&gt;
					if (current.disabled) {&lt;br /&gt;
						subnode.setAttribute(&#039;disabled&#039;, &#039;disabled&#039;);&lt;br /&gt;
					}&lt;br /&gt;
					label = cur_div.appendChild(document.createElement(&#039;label&#039;));&lt;br /&gt;
&lt;br /&gt;
					label.appendChild(Morebits.createHtml(current.label));&lt;br /&gt;
					label.setAttribute(&#039;for&#039;, cur_id);&lt;br /&gt;
					if (current.tooltip) {&lt;br /&gt;
						Morebits.QuickForm.Element.generateTooltip(label, current);&lt;br /&gt;
					}&lt;br /&gt;
					// styles go on the label, doesn&#039;t make sense to style a checkbox/radio&lt;br /&gt;
					if (current.style) {&lt;br /&gt;
						label.setAttribute(&#039;style&#039;, current.style);&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					var event;&lt;br /&gt;
					if (current.subgroup) {&lt;br /&gt;
						let tmpgroup = current.subgroup;&lt;br /&gt;
&lt;br /&gt;
						if (!Array.isArray(tmpgroup)) {&lt;br /&gt;
							tmpgroup = [tmpgroup];&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
						var subgroupRaw = new Morebits.QuickForm.Element({&lt;br /&gt;
							type: &#039;div&#039;,&lt;br /&gt;
							id: id + &#039;_&#039; + i + &#039;_subgroup&#039;&lt;br /&gt;
						});&lt;br /&gt;
						$.each(tmpgroup, (idx, el) =&amp;gt; {&lt;br /&gt;
							const newEl = $.extend({}, el);&lt;br /&gt;
							if (!newEl.type) {&lt;br /&gt;
								newEl.type = data.type;&lt;br /&gt;
							}&lt;br /&gt;
							newEl.name = (current.name || data.name) + &#039;.&#039; + newEl.name;&lt;br /&gt;
							subgroupRaw.append(newEl);&lt;br /&gt;
						});&lt;br /&gt;
&lt;br /&gt;
						const subgroup = subgroupRaw.render(cur_id);&lt;br /&gt;
						subgroup.className = &#039;quickformSubgroup&#039;;&lt;br /&gt;
						subnode.subgroup = subgroup;&lt;br /&gt;
						subnode.shown = false;&lt;br /&gt;
&lt;br /&gt;
						event = function(e) {&lt;br /&gt;
							if (e.target.checked) {&lt;br /&gt;
								e.target.parentNode.appendChild(e.target.subgroup);&lt;br /&gt;
								if (e.target.type === &#039;radio&#039;) {&lt;br /&gt;
									const name = e.target.name;&lt;br /&gt;
									if (e.target.form.names[name] !== undefined) {&lt;br /&gt;
										e.target.form.names[name].parentNode.removeChild(e.target.form.names[name].subgroup);&lt;br /&gt;
									}&lt;br /&gt;
									e.target.form.names[name] = e.target;&lt;br /&gt;
								}&lt;br /&gt;
							} else {&lt;br /&gt;
								e.target.parentNode.removeChild(e.target.subgroup);&lt;br /&gt;
							}&lt;br /&gt;
						};&lt;br /&gt;
						subnode.addEventListener(&#039;change&#039;, event, true);&lt;br /&gt;
						if (current.checked) {&lt;br /&gt;
							subnode.parentNode.appendChild(subgroup);&lt;br /&gt;
						}&lt;br /&gt;
					} else if (data.type === &#039;radio&#039;) {&lt;br /&gt;
						event = function(e) {&lt;br /&gt;
							if (e.target.checked) {&lt;br /&gt;
								const name = e.target.name;&lt;br /&gt;
								if (e.target.form.names[name] !== undefined) {&lt;br /&gt;
									e.target.form.names[name].parentNode.removeChild(e.target.form.names[name].subgroup);&lt;br /&gt;
								}&lt;br /&gt;
								delete e.target.form.names[name];&lt;br /&gt;
							}&lt;br /&gt;
						};&lt;br /&gt;
						subnode.addEventListener(&#039;change&#039;, event, true);&lt;br /&gt;
					}&lt;br /&gt;
					// add users&#039; event last, so it can interact with the subgroup&lt;br /&gt;
					if (data.event) {&lt;br /&gt;
						subnode.addEventListener(&#039;change&#039;, data.event, false);&lt;br /&gt;
					} else if (current.event) {&lt;br /&gt;
						subnode.addEventListener(&#039;change&#039;, current.event, true);&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if (data.shiftClickSupport &amp;amp;&amp;amp; data.type === &#039;checkbox&#039;) {&lt;br /&gt;
				Morebits.checkboxShiftClickSupport(Morebits.QuickForm.getElements(node, data.name));&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		// input is actually a text-type, so number here inherits the same stuff&lt;br /&gt;
		case &#039;number&#039;:&lt;br /&gt;
		case &#039;input&#039;:&lt;br /&gt;
			node = document.createElement(&#039;div&#039;);&lt;br /&gt;
			node.setAttribute(&#039;id&#039;, &#039;div_&#039; + id);&lt;br /&gt;
&lt;br /&gt;
			if (data.label) {&lt;br /&gt;
				label = node.appendChild(document.createElement(&#039;label&#039;));&lt;br /&gt;
				label.appendChild(Morebits.createHtml(data.label));&lt;br /&gt;
				label.setAttribute(&#039;for&#039;, data.id || id);&lt;br /&gt;
				label.style.marginRight = &#039;3px&#039;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			subnode = node.appendChild(document.createElement(&#039;input&#039;));&lt;br /&gt;
			subnode.setAttribute(&#039;name&#039;, data.name);&lt;br /&gt;
&lt;br /&gt;
			if (data.type === &#039;input&#039;) {&lt;br /&gt;
				subnode.setAttribute(&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
			} else {&lt;br /&gt;
				subnode.setAttribute(&#039;type&#039;, &#039;number&#039;);&lt;br /&gt;
				[&#039;min&#039;, &#039;max&#039;, &#039;step&#039;, &#039;list&#039;].forEach((att) =&amp;gt; {&lt;br /&gt;
					if (data[att]) {&lt;br /&gt;
						subnode.setAttribute(att, data[att]);&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			[&#039;value&#039;, &#039;size&#039;, &#039;placeholder&#039;, &#039;maxlength&#039;].forEach((att) =&amp;gt; {&lt;br /&gt;
				if (data[att]) {&lt;br /&gt;
					subnode.setAttribute(att, data[att]);&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
			[&#039;disabled&#039;, &#039;required&#039;, &#039;readonly&#039;].forEach((att) =&amp;gt; {&lt;br /&gt;
				if (data[att]) {&lt;br /&gt;
					subnode.setAttribute(att, att);&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
			if (data.event) {&lt;br /&gt;
				subnode.addEventListener(&#039;input&#039;, data.event, false);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			childContainer = subnode;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;dyninput&#039;:&lt;br /&gt;
			var min = data.min || 1;&lt;br /&gt;
			var max = data.max || Infinity;&lt;br /&gt;
&lt;br /&gt;
			node = document.createElement(&#039;div&#039;);&lt;br /&gt;
&lt;br /&gt;
			label = node.appendChild(document.createElement(&#039;h5&#039;));&lt;br /&gt;
			label.appendChild(Morebits.createHtml(data.label));&lt;br /&gt;
			var listNode = node.appendChild(document.createElement(&#039;div&#039;));&lt;br /&gt;
&lt;br /&gt;
			var more = this.compute({&lt;br /&gt;
				type: &#039;button&#039;,&lt;br /&gt;
				label: &#039;more&#039;,&lt;br /&gt;
				disabled: min &amp;gt;= max,&lt;br /&gt;
				event: function(e) {&lt;br /&gt;
					const new_node = new Morebits.QuickForm.Element(e.target.sublist);&lt;br /&gt;
					e.target.area.appendChild(new_node.render());&lt;br /&gt;
&lt;br /&gt;
					if (++e.target.counter &amp;gt;= e.target.max) {&lt;br /&gt;
						e.target.setAttribute(&#039;disabled&#039;, &#039;disabled&#039;);&lt;br /&gt;
					}&lt;br /&gt;
					e.stopPropagation();&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			node.appendChild(more[0]);&lt;br /&gt;
			var moreButton = more[1];&lt;br /&gt;
&lt;br /&gt;
			var sublist = {&lt;br /&gt;
				type: &#039;_dyninput_row&#039;,&lt;br /&gt;
				remove: false,&lt;br /&gt;
				maxlength: data.maxlength,&lt;br /&gt;
				event: data.event,&lt;br /&gt;
				inputs: data.inputs || [{&lt;br /&gt;
					// compatibility&lt;br /&gt;
					label: data.sublabel || data.label,&lt;br /&gt;
					name: data.name,&lt;br /&gt;
					value: data.value,&lt;br /&gt;
					size: data.size&lt;br /&gt;
				}]&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			for (i = 0; i &amp;lt; min; ++i) {&lt;br /&gt;
				const elem = new Morebits.QuickForm.Element(sublist);&lt;br /&gt;
				listNode.appendChild(elem.render());&lt;br /&gt;
			}&lt;br /&gt;
			sublist.remove = true;&lt;br /&gt;
			sublist.morebutton = moreButton;&lt;br /&gt;
			sublist.listnode = listNode;&lt;br /&gt;
&lt;br /&gt;
			moreButton.sublist = sublist;&lt;br /&gt;
			moreButton.area = listNode;&lt;br /&gt;
			moreButton.max = max - min;&lt;br /&gt;
			moreButton.counter = 0;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;_dyninput_row&#039;: // Private&lt;br /&gt;
			node = document.createElement(&#039;div&#039;);&lt;br /&gt;
&lt;br /&gt;
			data.inputs.forEach((subdata) =&amp;gt; {&lt;br /&gt;
				const cell = new Morebits.QuickForm.Element($.extend(subdata, { type: &#039;_dyninput_cell&#039; }));&lt;br /&gt;
				node.appendChild(cell.render());&lt;br /&gt;
			});&lt;br /&gt;
			if (data.remove) {&lt;br /&gt;
				const remove = this.compute({&lt;br /&gt;
					type: &#039;button&#039;,&lt;br /&gt;
					label: &#039;remove&#039;,&lt;br /&gt;
					event: function(e) {&lt;br /&gt;
						const list = e.target.listnode;&lt;br /&gt;
						const node = e.target.inputnode;&lt;br /&gt;
						const more = e.target.morebutton;&lt;br /&gt;
&lt;br /&gt;
						list.removeChild(node);&lt;br /&gt;
						--more.counter;&lt;br /&gt;
						more.removeAttribute(&#039;disabled&#039;);&lt;br /&gt;
						e.stopPropagation();&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
				node.appendChild(remove[0]);&lt;br /&gt;
				const removeButton = remove[1];&lt;br /&gt;
				removeButton.inputnode = node;&lt;br /&gt;
				removeButton.listnode = data.listnode;&lt;br /&gt;
				removeButton.morebutton = data.morebutton;&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;_dyninput_cell&#039;: // Private, similar to normal input&lt;br /&gt;
			node = document.createElement(&#039;span&#039;);&lt;br /&gt;
&lt;br /&gt;
			if (data.label) {&lt;br /&gt;
				label = node.appendChild(document.createElement(&#039;label&#039;));&lt;br /&gt;
				label.appendChild(document.createTextNode(data.label));&lt;br /&gt;
				label.setAttribute(&#039;for&#039;, id + &#039;_input&#039;);&lt;br /&gt;
				label.style.marginRight = &#039;3px&#039;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			subnode = node.appendChild(document.createElement(&#039;input&#039;));&lt;br /&gt;
			subnode.setAttribute(&#039;id&#039;, id + &#039;_input&#039;);&lt;br /&gt;
			if (data.value) {&lt;br /&gt;
				subnode.setAttribute(&#039;value&#039;, data.value);&lt;br /&gt;
			}&lt;br /&gt;
			subnode.setAttribute(&#039;name&#039;, data.name);&lt;br /&gt;
			subnode.setAttribute(&#039;type&#039;, &#039;text&#039;);&lt;br /&gt;
			subnode.setAttribute(&#039;data-dyninput&#039;, &#039;data-dyninput&#039;);&lt;br /&gt;
			if (data.size) {&lt;br /&gt;
				subnode.setAttribute(&#039;size&#039;, data.size);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.maxlength) {&lt;br /&gt;
				subnode.setAttribute(&#039;maxlength&#039;, data.maxlength);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.required) {&lt;br /&gt;
				subnode.setAttribute(&#039;required&#039;, &#039;required&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.disabled) {&lt;br /&gt;
				subnode.setAttribute(&#039;required&#039;, &#039;disabled&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.event) {&lt;br /&gt;
				subnode.addEventListener(&#039;input&#039;, data.event, false);&lt;br /&gt;
			}&lt;br /&gt;
			node.style.marginRight = &#039;3px&#039;;&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;hidden&#039;:&lt;br /&gt;
			node = document.createElement(&#039;input&#039;);&lt;br /&gt;
			node.setAttribute(&#039;type&#039;, &#039;hidden&#039;);&lt;br /&gt;
			node.values = data.value;&lt;br /&gt;
			node.setAttribute(&#039;value&#039;, data.value);&lt;br /&gt;
			node.setAttribute(&#039;name&#039;, data.name);&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;header&#039;:&lt;br /&gt;
			node = document.createElement(&#039;h5&#039;);&lt;br /&gt;
			node.appendChild(Morebits.createHtml(data.label));&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;div&#039;:&lt;br /&gt;
			node = document.createElement(&#039;div&#039;);&lt;br /&gt;
			if (data.name) {&lt;br /&gt;
				node.setAttribute(&#039;name&#039;, data.name);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.label) {&lt;br /&gt;
				const result = document.createElement(&#039;span&#039;);&lt;br /&gt;
				result.className = &#039;quickformDescription&#039;;&lt;br /&gt;
				result.appendChild(Morebits.createHtml(data.label));&lt;br /&gt;
				node.appendChild(result);&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;submit&#039;:&lt;br /&gt;
			node = document.createElement(&#039;span&#039;);&lt;br /&gt;
			childContainer = node.appendChild(document.createElement(&#039;input&#039;));&lt;br /&gt;
			childContainer.setAttribute(&#039;type&#039;, &#039;submit&#039;);&lt;br /&gt;
			if (data.label) {&lt;br /&gt;
				childContainer.setAttribute(&#039;value&#039;, data.label);&lt;br /&gt;
			}&lt;br /&gt;
			childContainer.setAttribute(&#039;name&#039;, data.name || &#039;submit&#039;);&lt;br /&gt;
			if (data.disabled) {&lt;br /&gt;
				childContainer.setAttribute(&#039;disabled&#039;, &#039;disabled&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;button&#039;:&lt;br /&gt;
			node = document.createElement(&#039;span&#039;);&lt;br /&gt;
			childContainer = node.appendChild(document.createElement(&#039;input&#039;));&lt;br /&gt;
			childContainer.setAttribute(&#039;type&#039;, &#039;button&#039;);&lt;br /&gt;
			if (data.label) {&lt;br /&gt;
				childContainer.setAttribute(&#039;value&#039;, data.label);&lt;br /&gt;
			}&lt;br /&gt;
			childContainer.setAttribute(&#039;name&#039;, data.name);&lt;br /&gt;
			if (data.disabled) {&lt;br /&gt;
				childContainer.setAttribute(&#039;disabled&#039;, &#039;disabled&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.event) {&lt;br /&gt;
				childContainer.addEventListener(&#039;click&#039;, data.event, false);&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &#039;textarea&#039;:&lt;br /&gt;
			node = document.createElement(&#039;div&#039;);&lt;br /&gt;
			node.setAttribute(&#039;id&#039;, &#039;div_&#039; + id);&lt;br /&gt;
			if (data.label) {&lt;br /&gt;
				label = node.appendChild(document.createElement(&#039;h5&#039;));&lt;br /&gt;
				const labelElement = document.createElement(&#039;label&#039;);&lt;br /&gt;
				labelElement.appendChild(Morebits.createHtml(data.label));&lt;br /&gt;
				labelElement.setAttribute(&#039;for&#039;, data.id || id);&lt;br /&gt;
				label.appendChild(labelElement);&lt;br /&gt;
			}&lt;br /&gt;
			subnode = node.appendChild(document.createElement(&#039;textarea&#039;));&lt;br /&gt;
			subnode.setAttribute(&#039;name&#039;, data.name);&lt;br /&gt;
			if (data.cols) {&lt;br /&gt;
				subnode.setAttribute(&#039;cols&#039;, data.cols);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.rows) {&lt;br /&gt;
				subnode.setAttribute(&#039;rows&#039;, data.rows);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.disabled) {&lt;br /&gt;
				subnode.setAttribute(&#039;disabled&#039;, &#039;disabled&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.required) {&lt;br /&gt;
				subnode.setAttribute(&#039;required&#039;, &#039;required&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.readonly) {&lt;br /&gt;
				subnode.setAttribute(&#039;readonly&#039;, &#039;readonly&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			if (data.value) {&lt;br /&gt;
				subnode.value = data.value;&lt;br /&gt;
			}&lt;br /&gt;
			childContainer = subnode;&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			throw new Error(&#039;Morebits.QuickForm: unknown element type &#039; + data.type.toString());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (!childContainer) {&lt;br /&gt;
		childContainer = node;&lt;br /&gt;
	}&lt;br /&gt;
	if (data.tooltip) {&lt;br /&gt;
		Morebits.QuickForm.Element.generateTooltip(label || node, data);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (data.extra) {&lt;br /&gt;
		childContainer.extra = data.extra;&lt;br /&gt;
	}&lt;br /&gt;
	if (data.$data) {&lt;br /&gt;
		$(childContainer).data(data.$data);&lt;br /&gt;
	}&lt;br /&gt;
	if (data.style) {&lt;br /&gt;
		childContainer.setAttribute(&#039;style&#039;, data.style);&lt;br /&gt;
	}&lt;br /&gt;
	if (data.className) {&lt;br /&gt;
		childContainer.className = childContainer.className ?&lt;br /&gt;
			childContainer.className + &#039; &#039; + data.className :&lt;br /&gt;
			data.className;&lt;br /&gt;
	}&lt;br /&gt;
	childContainer.setAttribute(&#039;id&#039;, data.id || id);&lt;br /&gt;
&lt;br /&gt;
	return [node, childContainer];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Morebits.QuickForm.$tooltip = null;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Create a tooltip.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm.Element&lt;br /&gt;
 * @param {HTMLElement} node - The HTML element beside which a tooltip is to be generated.&lt;br /&gt;
 * @param {Object} data - Tooltip-related configuration data.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.Element.generateTooltip = function QuickFormElementGenerateTooltip(node, data) {&lt;br /&gt;
	if (!Morebits.QuickForm.$tooltip) {&lt;br /&gt;
		Morebits.QuickForm.$tooltip = $(&#039;&amp;lt;div&amp;gt;&#039;)&lt;br /&gt;
			.attr(&#039;id&#039;, &#039;morebits-ui-tooltip&#039;)&lt;br /&gt;
			.attr(&#039;role&#039;, &#039;tooltip&#039;)&lt;br /&gt;
			.addClass(&#039;morebits-ui-tooltip&#039;)&lt;br /&gt;
			.appendTo(&#039;body&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	const $tooltip = Morebits.QuickForm.$tooltip;&lt;br /&gt;
	const $button = $(&#039;&amp;lt;span&amp;gt;&#039;)&lt;br /&gt;
		.addClass(&#039;morebits-tooltipButton&#039;)&lt;br /&gt;
		.text(&#039;?&#039;)&lt;br /&gt;
		.appendTo(node);&lt;br /&gt;
&lt;br /&gt;
	$button.on(&#039;mouseenter&#039;, () =&amp;gt; {&lt;br /&gt;
		$tooltip.html(data.tooltip).addClass(&#039;visible&#039;);&lt;br /&gt;
&lt;br /&gt;
		const buttonRect = $button[0].getBoundingClientRect();&lt;br /&gt;
		const tooltipRect = $tooltip[0].getBoundingClientRect();&lt;br /&gt;
&lt;br /&gt;
		const topOffset = buttonRect.bottom + tooltipRect.height &amp;lt; window.innerHeight ?&lt;br /&gt;
			buttonRect.bottom : // It fits at the top of the question mark - place it there&lt;br /&gt;
			Math.max(0, buttonRect.top - tooltipRect.height); // Else, place to the bottom of the question mark&lt;br /&gt;
		const leftOffset = buttonRect.right + tooltipRect.width &amp;lt; window.innerWidth ?&lt;br /&gt;
			buttonRect.right : // It fits at the right of the question mark - place it there&lt;br /&gt;
			Math.max(0, buttonRect.left - tooltipRect.width); // Else, place to the left of the question mark&lt;br /&gt;
		$tooltip.css(&#039;top&#039;, window.scrollY + topOffset);&lt;br /&gt;
		$tooltip.css(&#039;left&#039;, window.scrollX + leftOffset);&lt;br /&gt;
	}).on(&#039;mouseleave&#039;, () =&amp;gt; {&lt;br /&gt;
		$tooltip.removeClass(&#039;visible&#039;);&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Some utility methods for manipulating quickForms after their creation:&lt;br /&gt;
// (None of these work for &amp;quot;dyninput&amp;quot; type fields at present)&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Returns an object containing all filled form data entered by the user, with the object&lt;br /&gt;
 * keys being the form element names. Disabled fields will be ignored, but not hidden fields.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {HTMLFormElement} form&lt;br /&gt;
 * @return {Object} With field names as keys, input data as values.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.getInputData = function(form) {&lt;br /&gt;
	const result = {};&lt;br /&gt;
&lt;br /&gt;
	for (let i = 0; i &amp;lt; form.elements.length; i++) {&lt;br /&gt;
		const field = form.elements[i];&lt;br /&gt;
		if (field.disabled || !field.name || !field.type ||&lt;br /&gt;
			field.type === &#039;submit&#039; || field.type === &#039;button&#039;) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// For elements in subgroups, quickform prepends element names with&lt;br /&gt;
		// name of the parent group followed by a period, get rid of that.&lt;br /&gt;
		const fieldNameNorm = field.name.slice(field.name.indexOf(&#039;.&#039;) + 1);&lt;br /&gt;
&lt;br /&gt;
		switch (field.type) {&lt;br /&gt;
			case &#039;radio&#039;:&lt;br /&gt;
				if (field.checked) {&lt;br /&gt;
					result[fieldNameNorm] = field.value;&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;checkbox&#039;:&lt;br /&gt;
				if (field.dataset.single) {&lt;br /&gt;
					result[fieldNameNorm] = field.checked; // boolean&lt;br /&gt;
				} else {&lt;br /&gt;
					result[fieldNameNorm] = result[fieldNameNorm] || [];&lt;br /&gt;
					if (field.checked) {&lt;br /&gt;
						result[fieldNameNorm].push(field.value);&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;select-multiple&#039;:&lt;br /&gt;
				result[fieldNameNorm] = $(field).val(); // field.value doesn&#039;t work&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;text&#039;: // falls through&lt;br /&gt;
			case &#039;textarea&#039;:&lt;br /&gt;
				if (field.dataset.dyninput) {&lt;br /&gt;
					result[fieldNameNorm] = result[fieldNameNorm] || [];&lt;br /&gt;
					result[fieldNameNorm].push(field.value.trim());&lt;br /&gt;
				} else {&lt;br /&gt;
					result[fieldNameNorm] = field.value.trim();&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			default: // could be select-one, date, number, email, etc&lt;br /&gt;
				if (field.value) {&lt;br /&gt;
					result[fieldNameNorm] = field.value;&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Returns all form elements with a given field name or ID.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {HTMLFormElement} form&lt;br /&gt;
 * @param {string} fieldName - The name or id of the fields.&lt;br /&gt;
 * @return {HTMLElement[]} - Array of matching form elements.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.getElements = function QuickFormGetElements(form, fieldName) {&lt;br /&gt;
	const $form = $(form);&lt;br /&gt;
	fieldName = $.escapeSelector(fieldName); // sanitize input&lt;br /&gt;
	let $elements = $form.find(&#039;[name=&amp;quot;&#039; + fieldName + &#039;&amp;quot;]&#039;);&lt;br /&gt;
	if ($elements.length &amp;gt; 0) {&lt;br /&gt;
		return $elements.toArray();&lt;br /&gt;
	}&lt;br /&gt;
	$elements = $form.find(&#039;#&#039; + fieldName);&lt;br /&gt;
	return $elements.toArray();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Searches the array of elements for a checkbox or radio button with a certain&lt;br /&gt;
 * `value` attribute, and returns the first such element. Returns null if not found.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {HTMLInputElement[]} elementArray - Array of checkbox or radio elements.&lt;br /&gt;
 * @param {string} value - Value to search for.&lt;br /&gt;
 * @return {HTMLInputElement}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.getCheckboxOrRadio = function QuickFormGetCheckboxOrRadio(elementArray, value) {&lt;br /&gt;
	const found = $.grep(elementArray, (el) =&amp;gt; el.value === value);&lt;br /&gt;
	if (found.length &amp;gt; 0) {&lt;br /&gt;
		return found[0];&lt;br /&gt;
	}&lt;br /&gt;
	return null;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Returns the &amp;amp;lt;div&amp;gt; containing the form element, or the form element itself&lt;br /&gt;
 * May not work as expected on checkboxes or radios.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {HTMLElement} element&lt;br /&gt;
 * @return {HTMLElement}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.getElementContainer = function QuickFormGetElementContainer(element) {&lt;br /&gt;
	// for divs, headings and fieldsets, the container is the element itself&lt;br /&gt;
	if (element instanceof HTMLFieldSetElement || element instanceof HTMLDivElement ||&lt;br /&gt;
			element instanceof HTMLHeadingElement) {&lt;br /&gt;
		return element;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// for others, just return the parent node&lt;br /&gt;
	return element.parentNode;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Gets the HTML element that contains the label of the given form element&lt;br /&gt;
 * (mainly for internal use).&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {(HTMLElement|Morebits.QuickForm.Element)} element&lt;br /&gt;
 * @return {HTMLElement}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.getElementLabelObject = function QuickFormGetElementLabelObject(element) {&lt;br /&gt;
	// for buttons, divs and headers, the label is on the element itself&lt;br /&gt;
	if (element.type === &#039;button&#039; || element.type === &#039;submit&#039; ||&lt;br /&gt;
			element instanceof HTMLDivElement || element instanceof HTMLHeadingElement) {&lt;br /&gt;
		return element;&lt;br /&gt;
	// for fieldsets, the label is the child &amp;lt;legend&amp;gt; element&lt;br /&gt;
	} else if (element instanceof HTMLFieldSetElement) {&lt;br /&gt;
		return element.getElementsByTagName(&#039;legend&#039;)[0];&lt;br /&gt;
	// for textareas, the label is the sibling &amp;lt;h5&amp;gt; element&lt;br /&gt;
	} else if (element instanceof HTMLTextAreaElement) {&lt;br /&gt;
		return element.parentNode.getElementsByTagName(&#039;h5&#039;)[0];&lt;br /&gt;
	}&lt;br /&gt;
	// for others, the label is the sibling &amp;lt;label&amp;gt; element&lt;br /&gt;
	return element.parentNode.getElementsByTagName(&#039;label&#039;)[0];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Gets the label text of the element.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {(HTMLElement|Morebits.QuickForm.Element)} element&lt;br /&gt;
 * @return {string}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.getElementLabel = function QuickFormGetElementLabel(element) {&lt;br /&gt;
	const labelElement = Morebits.QuickForm.getElementLabelObject(element);&lt;br /&gt;
&lt;br /&gt;
	if (!labelElement) {&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
	return labelElement.firstChild.textContent;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Sets the label of the element to the given text.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {(HTMLElement|Morebits.QuickForm.Element)} element&lt;br /&gt;
 * @param {string} labelText&lt;br /&gt;
 * @return {boolean} True if succeeded, false if the label element is unavailable.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.setElementLabel = function QuickFormSetElementLabel(element, labelText) {&lt;br /&gt;
	const labelElement = Morebits.QuickForm.getElementLabelObject(element);&lt;br /&gt;
&lt;br /&gt;
	if (!labelElement) {&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	labelElement.firstChild.textContent = labelText;&lt;br /&gt;
	return true;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Stores the element&#039;s current label, and temporarily sets the label to the given text.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {(HTMLElement|Morebits.QuickForm.Element)} element&lt;br /&gt;
 * @param {string} temporaryLabelText&lt;br /&gt;
 * @return {boolean} `true` if succeeded, `false` if the label element is unavailable.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.overrideElementLabel = function QuickFormOverrideElementLabel(element, temporaryLabelText) {&lt;br /&gt;
	if (!element.hasAttribute(&#039;data-oldlabel&#039;)) {&lt;br /&gt;
		element.setAttribute(&#039;data-oldlabel&#039;, Morebits.QuickForm.getElementLabel(element));&lt;br /&gt;
	}&lt;br /&gt;
	return Morebits.QuickForm.setElementLabel(element, temporaryLabelText);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Restores the label stored by overrideElementLabel.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {(HTMLElement|Morebits.QuickForm.Element)} element&lt;br /&gt;
 * @return {boolean} True if succeeded, false if the label element is unavailable.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.resetElementLabel = function QuickFormResetElementLabel(element) {&lt;br /&gt;
	if (element.hasAttribute(&#039;data-oldlabel&#039;)) {&lt;br /&gt;
		return Morebits.QuickForm.setElementLabel(element, element.getAttribute(&#039;data-oldlabel&#039;));&lt;br /&gt;
	}&lt;br /&gt;
	return null;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Shows or hides a form element plus its label and tooltip.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {(HTMLElement|jQuery|string)} element - HTML/jQuery element, or jQuery selector string.&lt;br /&gt;
 * @param {boolean} [visibility] - Skip this to toggle visibility.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.setElementVisibility = function QuickFormSetElementVisibility(element, visibility) {&lt;br /&gt;
	$(element).toggle(visibility);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Shows or hides the question mark icon (which displays the tooltip) next to a form element.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.QuickForm&lt;br /&gt;
 * @param {(HTMLElement|jQuery)} element&lt;br /&gt;
 * @param {boolean} [visibility] - Skip this to toggle visibility.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.QuickForm.setElementTooltipVisibility = function QuickFormSetElementTooltipVisibility(element, visibility) {&lt;br /&gt;
	$(Morebits.QuickForm.getElementContainer(element)).find(&#039;.morebits-tooltipButton&#039;).toggle(visibility);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @external HTMLFormElement&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * Get checked items in the form.&lt;br /&gt;
 *&lt;br /&gt;
 * @method external:HTMLFormElement.getChecked&lt;br /&gt;
 * @param {string} name - Find checked property of elements (i.e. a checkbox&lt;br /&gt;
 * or a radiobutton) with the given name, or select options that have selected&lt;br /&gt;
 * set to true (don&#039;t try to mix selects with radio/checkboxes).&lt;br /&gt;
 * @param {string} [type] - Optionally specify either radio or checkbox (for&lt;br /&gt;
 * the event that both checkboxes and radiobuttons have the same name).&lt;br /&gt;
 * @return {string[]} - Contains the values of elements with the given name&lt;br /&gt;
 * checked property set to true.&lt;br /&gt;
 */&lt;br /&gt;
HTMLFormElement.prototype.getChecked = function(name, type) {&lt;br /&gt;
	const elements = this.elements[name];&lt;br /&gt;
	if (!elements) {&lt;br /&gt;
		return [];&lt;br /&gt;
	}&lt;br /&gt;
	const return_array = [];&lt;br /&gt;
	let i;&lt;br /&gt;
	if (elements instanceof HTMLSelectElement) {&lt;br /&gt;
		const options = elements.options;&lt;br /&gt;
		for (i = 0; i &amp;lt; options.length; ++i) {&lt;br /&gt;
			if (options[i].selected) {&lt;br /&gt;
				if (options[i].values) {&lt;br /&gt;
					return_array.push(options[i].values);&lt;br /&gt;
				} else {&lt;br /&gt;
					return_array.push(options[i].value);&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	} else if (elements instanceof HTMLInputElement) {&lt;br /&gt;
		if (type &amp;amp;&amp;amp; elements.type !== type) {&lt;br /&gt;
			return [];&lt;br /&gt;
		} else if (elements.checked) {&lt;br /&gt;
			return [elements.value];&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		for (i = 0; i &amp;lt; elements.length; ++i) {&lt;br /&gt;
			if (elements[i].checked) {&lt;br /&gt;
				if (type &amp;amp;&amp;amp; elements[i].type !== type) {&lt;br /&gt;
					continue;&lt;br /&gt;
				}&lt;br /&gt;
				if (elements[i].values) {&lt;br /&gt;
					return_array.push(elements[i].values);&lt;br /&gt;
				} else {&lt;br /&gt;
					return_array.push(elements[i].value);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return return_array;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Does the same as {@link HTMLFormElement.getChecked|getChecked}, but with unchecked elements.&lt;br /&gt;
 *&lt;br /&gt;
 * @method external:HTMLFormElement.getUnchecked&lt;br /&gt;
 * @param {string} name - Find checked property of elements (i.e. a checkbox&lt;br /&gt;
 * or a radiobutton) with the given name, or select options that have selected&lt;br /&gt;
 * set to true (don&#039;t try to mix selects with radio/checkboxes).&lt;br /&gt;
 * @param {string} [type] - Optionally specify either radio or checkbox (for&lt;br /&gt;
 * the event that both checkboxes and radiobuttons have the same name).&lt;br /&gt;
 * @return {string[]} - Contains the values of elements with the given name&lt;br /&gt;
 * checked property set to true.&lt;br /&gt;
 */&lt;br /&gt;
HTMLFormElement.prototype.getUnchecked = function(name, type) {&lt;br /&gt;
	const elements = this.elements[name];&lt;br /&gt;
	if (!elements) {&lt;br /&gt;
		return [];&lt;br /&gt;
	}&lt;br /&gt;
	const return_array = [];&lt;br /&gt;
	let i;&lt;br /&gt;
	if (elements instanceof HTMLSelectElement) {&lt;br /&gt;
		const options = elements.options;&lt;br /&gt;
		for (i = 0; i &amp;lt; options.length; ++i) {&lt;br /&gt;
			if (!options[i].selected) {&lt;br /&gt;
				if (options[i].values) {&lt;br /&gt;
					return_array.push(options[i].values);&lt;br /&gt;
				} else {&lt;br /&gt;
					return_array.push(options[i].value);&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	} else if (elements instanceof HTMLInputElement) {&lt;br /&gt;
		if (type &amp;amp;&amp;amp; elements.type !== type) {&lt;br /&gt;
			return [];&lt;br /&gt;
		} else if (!elements.checked) {&lt;br /&gt;
			return [elements.value];&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		for (i = 0; i &amp;lt; elements.length; ++i) {&lt;br /&gt;
			if (!elements[i].checked) {&lt;br /&gt;
				if (type &amp;amp;&amp;amp; elements[i].type !== type) {&lt;br /&gt;
					continue;&lt;br /&gt;
				}&lt;br /&gt;
				if (elements[i].values) {&lt;br /&gt;
					return_array.push(elements[i].values);&lt;br /&gt;
				} else {&lt;br /&gt;
					return_array.push(elements[i].value);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return return_array;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Utilities to help process IP addresses.&lt;br /&gt;
 *&lt;br /&gt;
 * @namespace Morebits.ip&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 */&lt;br /&gt;
Morebits.ip = {&lt;br /&gt;
	/**&lt;br /&gt;
	 * Converts an IPv6 address to the canonical form stored and used by MediaWiki.&lt;br /&gt;
	 * JavaScript translation of the {@link https://gerrit.wikimedia.org/r/plugins/gitiles/mediawiki/core/+/8eb6ac3e84ea3312d391ca96c12c49e3ad0753bb/includes/utils/IP.php#131|`IP::sanitizeIP()`}&lt;br /&gt;
	 * function from the IPUtils library.  Addresses are verbose, uppercase,&lt;br /&gt;
	 * normalized, and expanded to 8 words.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} address - The IPv6 address, with or without CIDR.&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	sanitizeIPv6: function(address) {&lt;br /&gt;
		address = address.trim();&lt;br /&gt;
		if (address === &#039;&#039;) {&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
		if (!mw.util.isIPv6Address(address, true)) {&lt;br /&gt;
			return address; // nothing else to do for IPv4 addresses or invalid ones&lt;br /&gt;
		}&lt;br /&gt;
		// Remove any whitespaces, convert to upper case&lt;br /&gt;
		address = address.toUpperCase();&lt;br /&gt;
		// Expand zero abbreviations&lt;br /&gt;
		const abbrevPos = address.indexOf(&#039;::&#039;);&lt;br /&gt;
		if (abbrevPos &amp;gt; -1) {&lt;br /&gt;
			// We know this is valid IPv6. Find the last index of the&lt;br /&gt;
			// address before any CIDR number (e.g. &amp;quot;a:b:c::/24&amp;quot;).&lt;br /&gt;
			const CIDRStart = address.indexOf(&#039;/&#039;);&lt;br /&gt;
			const addressEnd = CIDRStart !== -1 ? CIDRStart - 1 : address.length - 1;&lt;br /&gt;
			// If the &#039;::&#039; is at the beginning...&lt;br /&gt;
			let repeat, extra, pad;&lt;br /&gt;
			if (abbrevPos === 0) {&lt;br /&gt;
				repeat = &#039;0:&#039;;&lt;br /&gt;
				extra = address === &#039;::&#039; ? &#039;0&#039; : &#039;&#039;; // for the address &#039;::&#039;&lt;br /&gt;
				pad = 9; // 7+2 (due to &#039;::&#039;)&lt;br /&gt;
				// If the &#039;::&#039; is at the end...&lt;br /&gt;
			} else if (abbrevPos === (addressEnd - 1)) {&lt;br /&gt;
				repeat = &#039;:0&#039;;&lt;br /&gt;
				extra = &#039;&#039;;&lt;br /&gt;
				pad = 9; // 7+2 (due to &#039;::&#039;)&lt;br /&gt;
				// If the &#039;::&#039; is in the middle...&lt;br /&gt;
			} else {&lt;br /&gt;
				repeat = &#039;:0&#039;;&lt;br /&gt;
				extra = &#039;:&#039;;&lt;br /&gt;
				pad = 8; // 6+2 (due to &#039;::&#039;)&lt;br /&gt;
			}&lt;br /&gt;
			let replacement = repeat;&lt;br /&gt;
			pad -= address.split(&#039;:&#039;).length - 1;&lt;br /&gt;
			for (let i = 1; i &amp;lt; pad; i++) {&lt;br /&gt;
				replacement += repeat;&lt;br /&gt;
			}&lt;br /&gt;
			replacement += extra;&lt;br /&gt;
			address = address.replace(&#039;::&#039;, replacement);&lt;br /&gt;
		}&lt;br /&gt;
		// Remove leading zeros from each bloc as needed&lt;br /&gt;
		return address.replace(/(^|:)0+([0-9A-Fa-f]{1,4})/g, &#039;$1$2&#039;);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Determine if the given IP address is a range.  Just conjoins&lt;br /&gt;
	 * `mw.util.isIPAddress` with and without the `allowBlock` option.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} ip&lt;br /&gt;
	 * @return {boolean} - True if given a valid IP address range, false otherwise.&lt;br /&gt;
	 */&lt;br /&gt;
	isRange: function(ip) {&lt;br /&gt;
		return mw.util.isIPAddress(ip, true) &amp;amp;&amp;amp; !mw.util.isIPAddress(ip);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Check that an IP range is within the CIDR limits.  Most likely to be useful&lt;br /&gt;
	 * in conjunction with `wgRelevantUserName`.  CIDR limits are hardcoded as /16&lt;br /&gt;
	 * for IPv4 and /32 for IPv6.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {boolean} - True for valid ranges within the CIDR limits,&lt;br /&gt;
	 * otherwise false (ranges outside the limit, single IPs, non-IPs).&lt;br /&gt;
	 */&lt;br /&gt;
	validCIDR: function(ip) {&lt;br /&gt;
		if (Morebits.ip.isRange(ip)) {&lt;br /&gt;
			const subnet = parseInt(ip.match(/\/(\d{1,3})$/)[1], 10);&lt;br /&gt;
			if (subnet) { // Should be redundant&lt;br /&gt;
				if (mw.util.isIPv6Address(ip, true)) {&lt;br /&gt;
					if (subnet &amp;gt;= 32) {&lt;br /&gt;
						return true;&lt;br /&gt;
					}&lt;br /&gt;
				} else {&lt;br /&gt;
					if (subnet &amp;gt;= 16) {&lt;br /&gt;
						return true;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return false;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the /64 subnet for an IPv6 address.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} ipv6 - The IPv6 address, with or without a subnet.&lt;br /&gt;
	 * @return {boolean|string} - False if not IPv6 or bigger than a 64,&lt;br /&gt;
	 * otherwise the (sanitized) /64 address.&lt;br /&gt;
	 */&lt;br /&gt;
	get64: function(ipv6) {&lt;br /&gt;
		if (!ipv6 || !mw.util.isIPv6Address(ipv6, true)) {&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		const subnetMatch = ipv6.match(/\/(\d{1,3})$/);&lt;br /&gt;
		if (subnetMatch &amp;amp;&amp;amp; parseInt(subnetMatch[1], 10) &amp;lt; 64) {&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		ipv6 = Morebits.ip.sanitizeIPv6(ipv6);&lt;br /&gt;
		const ip_re = /^((?:[0-9A-F]{1,4}:){4})(?:[0-9A-F]{1,4}:){3}[0-9A-F]{1,4}(?:\/\d{1,3})?$/;&lt;br /&gt;
		// eslint-disable-next-line no-useless-concat&lt;br /&gt;
		return ipv6.replace(ip_re, &#039;$1&#039; + &#039;0:0:0:0/64&#039;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Helper functions to manipulate strings.&lt;br /&gt;
 *&lt;br /&gt;
 * @namespace Morebits.string&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 */&lt;br /&gt;
Morebits.string = {&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {string} str&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	toUpperCaseFirstChar: function(str) {&lt;br /&gt;
		str = str.toString();&lt;br /&gt;
		return str.slice(0, 1).toUpperCase() + str.slice(1);&lt;br /&gt;
	},&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {string} str&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	toLowerCaseFirstChar: function(str) {&lt;br /&gt;
		str = str.toString();&lt;br /&gt;
		return str.slice(0, 1).toLowerCase() + str.slice(1);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Gives an array of substrings of `str` - starting with `start` and&lt;br /&gt;
	 * ending with `end` - which is not in `skiplist`.  Intended for use&lt;br /&gt;
	 * on wikitext with templates or links.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} str&lt;br /&gt;
	 * @param {string} start&lt;br /&gt;
	 * @param {string} end&lt;br /&gt;
	 * @param {(string[]|string)} [skiplist]&lt;br /&gt;
	 * @return {string[]}&lt;br /&gt;
	 * @throws {Error} If the `start` and `end` strings aren&#039;t of the same length.&lt;br /&gt;
	 * @throws {Error} If `skiplist` isn&#039;t an array or string&lt;br /&gt;
	 */&lt;br /&gt;
	splitWeightedByKeys: function(str, start, end, skiplist) {&lt;br /&gt;
		if (start.length !== end.length) {&lt;br /&gt;
			throw new Error(&#039;start marker and end marker must be of the same length&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		let level = 0;&lt;br /&gt;
		let initial = null;&lt;br /&gt;
		const result = [];&lt;br /&gt;
		if (!Array.isArray(skiplist)) {&lt;br /&gt;
			if (skiplist === undefined) {&lt;br /&gt;
				skiplist = [];&lt;br /&gt;
			} else if (typeof skiplist === &#039;string&#039;) {&lt;br /&gt;
				skiplist = [skiplist];&lt;br /&gt;
			} else {&lt;br /&gt;
				throw new Error(&#039;non-applicable skiplist parameter&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		for (let i = 0; i &amp;lt; str.length; ++i) {&lt;br /&gt;
			for (let j = 0; j &amp;lt; skiplist.length; ++j) {&lt;br /&gt;
				if (str.substr(i, skiplist[j].length) === skiplist[j]) {&lt;br /&gt;
					i += skiplist[j].length - 1;&lt;br /&gt;
					continue;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if (str.substr(i, start.length) === start) {&lt;br /&gt;
				if (initial === null) {&lt;br /&gt;
					initial = i;&lt;br /&gt;
				}&lt;br /&gt;
				++level;&lt;br /&gt;
				i += start.length - 1;&lt;br /&gt;
			} else if (str.substr(i, end.length) === end) {&lt;br /&gt;
				--level;&lt;br /&gt;
				i += end.length - 1;&lt;br /&gt;
			}&lt;br /&gt;
			if (!level &amp;amp;&amp;amp; initial !== null) {&lt;br /&gt;
				result.push(str.substring(initial, i + 1));&lt;br /&gt;
				initial = null;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return result;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Formats freeform &amp;quot;reason&amp;quot; (from a textarea) for deletion/other&lt;br /&gt;
	 * templates that are going to be substituted, (e.g. PROD, XFD, RPP).&lt;br /&gt;
	 * Handles `|` outside a nowiki tag.&lt;br /&gt;
	 * Optionally, also adds a signature if not present already.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} str&lt;br /&gt;
	 * @param {boolean} [addSig]&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	formatReasonText: function(str, addSig) {&lt;br /&gt;
		let reason = (str || &#039;&#039;).toString().trim();&lt;br /&gt;
		const unbinder = new Morebits.Unbinder(reason);&lt;br /&gt;
		// eslint-disable-next-line no-useless-concat&lt;br /&gt;
		unbinder.unbind(&#039;&amp;lt;no&#039; + &#039;wiki&amp;gt;&#039;, &#039;&amp;lt;/no&#039; + &#039;wiki&amp;gt;&#039;);&lt;br /&gt;
		unbinder.content = unbinder.content.replace(/\|/g, &#039;{{subst:!}}&#039;);&lt;br /&gt;
		reason = unbinder.rebind();&lt;br /&gt;
		if (addSig) {&lt;br /&gt;
			const sig = &#039;~~~~&#039;, sigIndex = reason.lastIndexOf(sig);&lt;br /&gt;
			if (sigIndex === -1 || sigIndex !== reason.length - sig.length) {&lt;br /&gt;
				reason += &#039; &#039; + sig;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return reason.trim();&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Formats a &amp;quot;reason&amp;quot; (from a textarea) for inclusion in a userspace&lt;br /&gt;
	 * log.  Replaces newlines with {{Pb}}, and adds an extra `#` before&lt;br /&gt;
	 * list items for proper formatting.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} str&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	formatReasonForLog: function(str) {&lt;br /&gt;
		return str&lt;br /&gt;
			// handle line breaks, which otherwise break numbering&lt;br /&gt;
			.replace(/\n+/g, &#039;{{pb}}&#039;)&lt;br /&gt;
			// put an extra # in front before bulleted or numbered list items&lt;br /&gt;
			.replace(/^(#+)/mg, &#039;#$1&#039;)&lt;br /&gt;
			.replace(/^(\*+)/mg, &#039;#$1&#039;);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Like `String.prototype.replace()`, but escapes any dollar signs in&lt;br /&gt;
	 * the replacement string.  Useful when the the replacement string is&lt;br /&gt;
	 * arbitrary, such as a username or freeform user input, and could&lt;br /&gt;
	 * contain dollar signs.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} string - Text in which to replace.&lt;br /&gt;
	 * @param {(string|RegExp)} pattern&lt;br /&gt;
	 * @param {string} replacement&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	safeReplace: function morebitsStringSafeReplace(string, pattern, replacement) {&lt;br /&gt;
		return string.replace(pattern, replacement.replace(/\$/g, &#039;$$$$&#039;));&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Determine if the user-provided expiration will be considered an&lt;br /&gt;
	 * infinite-length by MW.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @see {@link https://phabricator.wikimedia.org/T68646}&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} expiry&lt;br /&gt;
	 * @return {boolean}&lt;br /&gt;
	 */&lt;br /&gt;
	isInfinity: function morebitsStringIsInfinity(expiry) {&lt;br /&gt;
		return [&#039;indefinite&#039;, &#039;infinity&#039;, &#039;infinite&#039;, &#039;never&#039;].includes(expiry);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Escapes a string to be used in a RegExp, replacing spaces and&lt;br /&gt;
	 * underscores with `[_ ]` as they are often equivalent.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} text - String to be escaped.&lt;br /&gt;
	 * @return {string} - The escaped text.&lt;br /&gt;
	 */&lt;br /&gt;
	escapeRegExp: function(text) {&lt;br /&gt;
		return mw.util.escapeRegExp(text).replace(/ |_/g, &#039;[_ ]&#039;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Helper functions to manipulate arrays.&lt;br /&gt;
 *&lt;br /&gt;
 * @namespace Morebits.array&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 */&lt;br /&gt;
Morebits.array = {&lt;br /&gt;
	/**&lt;br /&gt;
	 * Remove duplicated items from an array.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Array} arr&lt;br /&gt;
	 * @return {Array} A copy of the array with duplicates removed.&lt;br /&gt;
	 * @throws {Error} When provided a non-array.&lt;br /&gt;
	 */&lt;br /&gt;
	uniq: function(arr) {&lt;br /&gt;
		if (!Array.isArray(arr)) {&lt;br /&gt;
			throw new Error(&#039;A non-array object passed to Morebits.array.uniq&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		return arr.filter((item, idx) =&amp;gt; arr.indexOf(item) === idx);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Remove non-duplicated items from an array.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Array} arr&lt;br /&gt;
	 * @return {Array} A copy of the array with the first instance of each value&lt;br /&gt;
	 * removed; subsequent instances of those values (duplicates) remain.&lt;br /&gt;
	 * @throws {Error} When provided a non-array.&lt;br /&gt;
	 */&lt;br /&gt;
	dups: function(arr) {&lt;br /&gt;
		if (!Array.isArray(arr)) {&lt;br /&gt;
			throw new Error(&#039;A non-array object passed to Morebits.array.dups&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		return arr.filter((item, idx) =&amp;gt; arr.indexOf(item) !== idx);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Break up an array into smaller arrays.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Array} arr&lt;br /&gt;
	 * @param {number} size - Size of each chunk (except the last, which could be different).&lt;br /&gt;
	 * @return {Array[]} An array containing the smaller, chunked arrays.&lt;br /&gt;
	 * @throws {Error} When provided a non-array.&lt;br /&gt;
	 */&lt;br /&gt;
	chunk: function(arr, size) {&lt;br /&gt;
		if (!Array.isArray(arr)) {&lt;br /&gt;
			throw new Error(&#039;A non-array object passed to Morebits.array.chunk&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		if (typeof size !== &#039;number&#039; || size &amp;lt;= 0) { // pretty impossible to do anything :)&lt;br /&gt;
			return [arr]; // we return an array consisting of this array.&lt;br /&gt;
		}&lt;br /&gt;
		const numChunks = Math.ceil(arr.length / size);&lt;br /&gt;
		const result = new Array(numChunks);&lt;br /&gt;
		for (let i = 0; i &amp;lt; numChunks; i++) {&lt;br /&gt;
			result[i] = arr.slice(i * size, (i + 1) * size);&lt;br /&gt;
		}&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Utilities to enhance select2 menus. See twinklewarn, twinklexfd,&lt;br /&gt;
 * twinkleblock for sample usages.&lt;br /&gt;
 *&lt;br /&gt;
 * @see {@link https://select2.org/}&lt;br /&gt;
 *&lt;br /&gt;
 * @namespace Morebits.select2&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @requires jQuery.select2&lt;br /&gt;
 */&lt;br /&gt;
Morebits.select2 = {&lt;br /&gt;
	matchers: {&lt;br /&gt;
		/**&lt;br /&gt;
		 * Custom matcher in which if the optgroup name matches, all options in that&lt;br /&gt;
		 * group are shown, like in jquery.chosen.&lt;br /&gt;
		 */&lt;br /&gt;
		optgroupFull: function(params, data) {&lt;br /&gt;
			const originalMatcher = $.fn.select2.defaults.defaults.matcher;&lt;br /&gt;
			const result = originalMatcher(params, data);&lt;br /&gt;
&lt;br /&gt;
			if (result &amp;amp;&amp;amp; params.term &amp;amp;&amp;amp;&lt;br /&gt;
				data.text.toUpperCase().includes(params.term.toUpperCase())) {&lt;br /&gt;
				result.children = data.children;&lt;br /&gt;
			}&lt;br /&gt;
			return result;&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		/** Custom matcher that matches from the beginning of words only. */&lt;br /&gt;
		wordBeginning: function(params, data) {&lt;br /&gt;
			const originalMatcher = $.fn.select2.defaults.defaults.matcher;&lt;br /&gt;
			const result = originalMatcher(params, data);&lt;br /&gt;
			if (!params.term || (result &amp;amp;&amp;amp;&lt;br /&gt;
				new RegExp(&#039;\\b&#039; + mw.util.escapeRegExp(params.term), &#039;i&#039;).test(result.text))) {&lt;br /&gt;
				return result;&lt;br /&gt;
			}&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/** Underline matched part of options. */&lt;br /&gt;
	highlightSearchMatches: function(data) {&lt;br /&gt;
		const searchTerm = Morebits.select2SearchQuery;&lt;br /&gt;
		if (!searchTerm || data.loading) {&lt;br /&gt;
			return data.text;&lt;br /&gt;
		}&lt;br /&gt;
		const idx = data.text.toUpperCase().indexOf(searchTerm.toUpperCase());&lt;br /&gt;
		if (idx &amp;lt; 0) {&lt;br /&gt;
			return data.text;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $(&#039;&amp;lt;span&amp;gt;&#039;).append(&lt;br /&gt;
			data.text.slice(0, idx),&lt;br /&gt;
			$(&#039;&amp;lt;span&amp;gt;&#039;).css(&#039;text-decoration&#039;, &#039;underline&#039;).text(data.text.slice(idx, idx + searchTerm.length)),&lt;br /&gt;
			data.text.slice(idx + searchTerm.length)&lt;br /&gt;
		);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/** Intercept query as it is happening, for use in highlightSearchMatches. */&lt;br /&gt;
	queryInterceptor: function(params) {&lt;br /&gt;
		Morebits.select2SearchQuery = params &amp;amp;&amp;amp; params.term;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Open dropdown and begin search when the `.select2-selection` has&lt;br /&gt;
	 * focus and a key is pressed.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @see {@link https://github.com/select2/select2/issues/3279#issuecomment-442524147}&lt;br /&gt;
	 */&lt;br /&gt;
	autoStart: function(ev) {&lt;br /&gt;
		if (ev.which &amp;lt; 48) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		let $target = $(ev.target).closest(&#039;.select2-container&#039;);&lt;br /&gt;
		if (!$target.length) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		$target = $target.prev();&lt;br /&gt;
		$target.select2(&#039;open&#039;);&lt;br /&gt;
		const search = $target.data(&#039;select2&#039;).dropdown.$search ||&lt;br /&gt;
			$target.data(&#039;select2&#039;).selection.$search;&lt;br /&gt;
		// Use DOM .focus() to work around a jQuery 3.6.0 regression (https://github.com/select2/select2/issues/5993)&lt;br /&gt;
		search[0].focus();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Temporarily hide a part of a string while processing the rest of it.&lt;br /&gt;
 * Used by {@link Morebits.wikitext.Page#commentOutImage|Morebits.wikitext.Page.commentOutImage}.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {string} string - The initial text to process.&lt;br /&gt;
 * @example var u = new Morebits.Unbinder(&#039;Hello world &amp;lt;!-- world --&amp;gt; world&#039;);&lt;br /&gt;
 * u.unbind(&#039;&amp;lt;!--&#039;, &#039;--&amp;gt;&#039;); // text inside comment remains intact&lt;br /&gt;
 * u.content = u.content.replace(/world/g, &#039;earth&#039;);&lt;br /&gt;
 * u.rebind(); // gives &#039;Hello earth &amp;lt;!-- world --&amp;gt; earth&#039;&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Unbinder = function Unbinder(string) {&lt;br /&gt;
	if (typeof string !== &#039;string&#039;) {&lt;br /&gt;
		throw new Error(&#039;not a string&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	/** The text being processed. */&lt;br /&gt;
	this.content = string;&lt;br /&gt;
	this.counter = 0;&lt;br /&gt;
	this.history = {};&lt;br /&gt;
	this.prefix = &#039;%UNIQ::&#039; + Math.random() + &#039;::&#039;;&lt;br /&gt;
	this.postfix = &#039;::UNIQ%&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Morebits.Unbinder.prototype = {&lt;br /&gt;
	/**&lt;br /&gt;
	 * Hide the region encapsulated by the `prefix` and `postfix` from&lt;br /&gt;
	 * string processing.  `prefix` and `postfix` will be used in a&lt;br /&gt;
	 * RegExp, so items that need escaping should be use `\\`.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} prefix&lt;br /&gt;
	 * @param {string} postfix&lt;br /&gt;
	 * @throws {Error} If either `prefix` or `postfix` is missing.&lt;br /&gt;
	 */&lt;br /&gt;
	unbind: function UnbinderUnbind(prefix, postfix) {&lt;br /&gt;
		if (!prefix || !postfix) {&lt;br /&gt;
			throw new Error(&#039;Both prefix and postfix must be provided&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		const re = new RegExp(prefix + &#039;([\\s\\S]*?)&#039; + postfix, &#039;g&#039;);&lt;br /&gt;
		this.content = this.content.replace(re, Morebits.Unbinder.getCallback(this));&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Restore the hidden portion of the `content` string.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {string} The processed output.&lt;br /&gt;
	 */&lt;br /&gt;
	rebind: function UnbinderRebind() {&lt;br /&gt;
		let content = this.content;&lt;br /&gt;
		content.self = this;&lt;br /&gt;
		for (const current in this.history) {&lt;br /&gt;
			if (Object.prototype.hasOwnProperty.call(this.history, current)) {&lt;br /&gt;
				content = content.replace(current, this.history[current]);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return content;&lt;br /&gt;
	},&lt;br /&gt;
	prefix: null, // %UNIQ::0.5955981644938324::&lt;br /&gt;
	postfix: null, // ::UNIQ%&lt;br /&gt;
	content: null, // string&lt;br /&gt;
	counter: null, // 0++&lt;br /&gt;
	history: null // {}&lt;br /&gt;
};&lt;br /&gt;
/** @memberof Morebits.Unbinder */&lt;br /&gt;
Morebits.Unbinder.getCallback = function UnbinderGetCallback(self) {&lt;br /&gt;
	return function UnbinderCallback(match) {&lt;br /&gt;
		const current = self.prefix + self.counter + self.postfix;&lt;br /&gt;
		self.history[current] = match;&lt;br /&gt;
		++self.counter;&lt;br /&gt;
		return current;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.Date **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * Create a date object with enhanced processing capabilities, a la&lt;br /&gt;
 * {@link https://momentjs.com/|moment.js}. MediaWiki timestamp format is also&lt;br /&gt;
 * acceptable, in addition to everything that JS Date() accepts.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @class&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Date = class extends Date {&lt;br /&gt;
	constructor(...args) {&lt;br /&gt;
		// Check MediaWiki formats&lt;br /&gt;
		// Must be first since firefox erroneously accepts the timestamp&lt;br /&gt;
		// format, sans timezone (See also: #921, #936, #1174, #1187), and the&lt;br /&gt;
		// 14-digit string will be interpreted differently.&lt;br /&gt;
		if (args.length === 1) {&lt;br /&gt;
			const param = args[0];&lt;br /&gt;
			if (/^\d{14}$/.test(param)) {&lt;br /&gt;
				// YYYYMMDDHHmmss&lt;br /&gt;
				const digitMatch = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/.exec(param);&lt;br /&gt;
				if (digitMatch) {&lt;br /&gt;
					// ..... year ... month .. date ... hour .... minute ..... second&lt;br /&gt;
					super(Date.UTC(digitMatch[1], digitMatch[2] - 1, digitMatch[3], digitMatch[4], digitMatch[5], digitMatch[6]));&lt;br /&gt;
				} else {&lt;br /&gt;
					super(...args);&lt;br /&gt;
				}&lt;br /&gt;
			} else if (typeof param === &#039;string&#039;) {&lt;br /&gt;
				// Wikitext signature timestamp&lt;br /&gt;
				const dateParts = Morebits.l10n.signatureTimestampFormat(param);&lt;br /&gt;
				if (dateParts) {&lt;br /&gt;
					super(Date.UTC(...dateParts));&lt;br /&gt;
				} else {&lt;br /&gt;
					super(...args);&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				super(...args);&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			super(...args);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!this.isValid()) {&lt;br /&gt;
			mw.log.warn(&#039;Invalid Morebits.Date initialisation:&#039;, args);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {boolean} */&lt;br /&gt;
	isValid() {&lt;br /&gt;
		return !isNaN(this.getTime());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {(Date|Morebits.Date)} date&lt;br /&gt;
	 * @return {boolean}&lt;br /&gt;
	 */&lt;br /&gt;
	isBefore(date) {&lt;br /&gt;
		return this.getTime() &amp;lt; date.getTime();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {(Date|Morebits.Date)} date&lt;br /&gt;
	 * @return {boolean}&lt;br /&gt;
	 */&lt;br /&gt;
	isAfter(date) {&lt;br /&gt;
		return this.getTime() &amp;gt; date.getTime();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} */&lt;br /&gt;
	getUTCMonthName() {&lt;br /&gt;
		return Morebits.Date.localeData.months[this.getUTCMonth()];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} */&lt;br /&gt;
	getUTCMonthNameAbbrev() {&lt;br /&gt;
		return Morebits.Date.localeData.monthsShort[this.getUTCMonth()];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} */&lt;br /&gt;
	getMonthName() {&lt;br /&gt;
		return Morebits.Date.localeData.months[this.getMonth()];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} */&lt;br /&gt;
	getMonthNameAbbrev() {&lt;br /&gt;
		return Morebits.Date.localeData.monthsShort[this.getMonth()];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} */&lt;br /&gt;
	getUTCDayName() {&lt;br /&gt;
		return Morebits.Date.localeData.days[this.getUTCDay()];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} */&lt;br /&gt;
	getUTCDayNameAbbrev() {&lt;br /&gt;
		return Morebits.Date.localeData.daysShort[this.getUTCDay()];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} */&lt;br /&gt;
	getDayName() {&lt;br /&gt;
		return Morebits.Date.localeData.days[this.getDay()];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} */&lt;br /&gt;
	getDayNameAbbrev() {&lt;br /&gt;
		return Morebits.Date.localeData.daysShort[this.getDay()];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Add a given number of minutes, hours, days, weeks, months, or years to the date.&lt;br /&gt;
	 * This is done in-place. The modified date object is also returned, allowing chaining.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {number} number - Should be an integer.&lt;br /&gt;
	 * @param {string} unit&lt;br /&gt;
	 * @throws {Error} If invalid or unsupported unit is given.&lt;br /&gt;
	 * @return {Morebits.Date}&lt;br /&gt;
	 */&lt;br /&gt;
	add(number, unit) {&lt;br /&gt;
		let num = parseInt(number, 10); // normalize&lt;br /&gt;
		if (isNaN(num)) {&lt;br /&gt;
			throw new Error(&#039;Invalid number &amp;quot;&#039; + number + &#039;&amp;quot; provided.&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		unit = unit.toLowerCase(); // normalize&lt;br /&gt;
		const unitMap = Morebits.Date.unitMap;&lt;br /&gt;
		let unitNorm = unitMap[unit] || unitMap[unit + &#039;s&#039;]; // so that both singular and  plural forms work&lt;br /&gt;
		if (unitNorm) {&lt;br /&gt;
			// No built-in week functions, so rather than build out ISO&#039;s getWeek/setWeek, just multiply&lt;br /&gt;
			// Probably can&#039;t be used for Julian-&amp;gt;Gregorian changeovers, etc.&lt;br /&gt;
			if (unitNorm === &#039;Week&#039;) {&lt;br /&gt;
				unitNorm = &#039;Date&#039;;&lt;br /&gt;
				num *= 7;&lt;br /&gt;
			}&lt;br /&gt;
			this[&#039;set&#039; + unitNorm](this[&#039;get&#039; + unitNorm]() + num);&lt;br /&gt;
			return this;&lt;br /&gt;
		}&lt;br /&gt;
		throw new Error(&#039;Invalid unit &amp;quot;&#039; + unit + &#039;&amp;quot;: Only &#039; + Object.keys(unitMap).join(&#039;, &#039;) + &#039; are allowed.&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Subtracts a given number of minutes, hours, days, weeks, months, or years to the date.&lt;br /&gt;
	 * This is done in-place. The modified date object is also returned, allowing chaining.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {number} number - Should be an integer.&lt;br /&gt;
	 * @param {string} unit&lt;br /&gt;
	 * @throws {Error} If invalid or unsupported unit is given.&lt;br /&gt;
	 * @return {Morebits.Date}&lt;br /&gt;
	 */&lt;br /&gt;
	subtract(number, unit) {&lt;br /&gt;
		return this.add(-number, unit);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Format the date into a string per the given format string.&lt;br /&gt;
	 * Replacement syntax is a subset of that in moment.js:&lt;br /&gt;
	 *&lt;br /&gt;
	 * | Syntax | Output |&lt;br /&gt;
	 * |--------|--------|&lt;br /&gt;
	 * | H | Hours (24-hour) |&lt;br /&gt;
	 * | HH | Hours (24-hour, padded to 2 digits) |&lt;br /&gt;
	 * | h | Hours (12-hour) |&lt;br /&gt;
	 * | hh | Hours (12-hour, padded to 2 digits) |&lt;br /&gt;
	 * | A | AM or PM |&lt;br /&gt;
	 * | m | Minutes |&lt;br /&gt;
	 * | mm | Minutes (padded to 2 digits) |&lt;br /&gt;
	 * | s | Seconds |&lt;br /&gt;
	 * | ss | Seconds (padded to 2 digits) |&lt;br /&gt;
	 * | SSS | Milliseconds fragment, 3 digits |&lt;br /&gt;
	 * | d | Day number of the week (Sun=0) |&lt;br /&gt;
	 * | ddd | Abbreviated day name |&lt;br /&gt;
	 * | dddd | Full day name |&lt;br /&gt;
	 * | D | Date |&lt;br /&gt;
	 * | DD | Date (padded to 2 digits) |&lt;br /&gt;
	 * | M | Month number (1-indexed) |&lt;br /&gt;
	 * | MM | Month number (1-indexed, padded to 2 digits) |&lt;br /&gt;
	 * | MMM | Abbreviated month name |&lt;br /&gt;
	 * | MMMM | Full month name |&lt;br /&gt;
	 * | Y | Year |&lt;br /&gt;
	 * | YY | Final two digits of year (20 for 2020, 42 for 1942) |&lt;br /&gt;
	 * | YYYY | Year (same as `Y`) |&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} formatstr - Format the date into a string, using&lt;br /&gt;
	 * the replacement syntax.  Use `[` and `]` to escape items.  If not&lt;br /&gt;
	 * provided, will return the ISO-8601-formatted string.&lt;br /&gt;
	 * @param {(string|number)} [zone=system] - `system` (for browser-default time zone),&lt;br /&gt;
	 * `utc`, or specify a time zone as number of minutes relative to UTC.&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	format(formatstr, zone) {&lt;br /&gt;
		if (!this.isValid()) {&lt;br /&gt;
			return &#039;Invalid date&#039;; // Put the truth out, preferable to &amp;quot;NaNNaNNan NaN:NaN&amp;quot; or whatever&lt;br /&gt;
		}&lt;br /&gt;
		let udate = this;&lt;br /&gt;
		// create a new date object that will contain the date to display as system time&lt;br /&gt;
		if (zone === &#039;utc&#039;) {&lt;br /&gt;
			udate = new Morebits.Date(this.getTime()).add(this.getTimezoneOffset(), &#039;minutes&#039;);&lt;br /&gt;
		} else if (typeof zone === &#039;number&#039;) {&lt;br /&gt;
			// convert to utc, then add the utc offset given&lt;br /&gt;
			udate = new Morebits.Date(this.getTime()).add(this.getTimezoneOffset() + zone, &#039;minutes&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// default to ISOString&lt;br /&gt;
		if (!formatstr) {&lt;br /&gt;
			return udate.toISOString();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const pad = function(num, len) {&lt;br /&gt;
			len = len || 2; // Up to length of 00 + 1&lt;br /&gt;
			return (&#039;00&#039; + num).toString().slice(0 - len);&lt;br /&gt;
		};&lt;br /&gt;
		const h24 = udate.getHours(), m = udate.getMinutes(), s = udate.getSeconds(), ms = udate.getMilliseconds();&lt;br /&gt;
		const D = udate.getDate(), M = udate.getMonth() + 1, Y = udate.getFullYear();&lt;br /&gt;
		const h12 = h24 % 12 || 12, amOrPm = h24 &amp;gt;= 12 ? &#039;PM&#039; : &#039;AM&#039;;&lt;br /&gt;
		const replacementMap = {&lt;br /&gt;
			HH: pad(h24), H: h24, hh: pad(h12), h: h12, A: amOrPm,&lt;br /&gt;
			mm: pad(m), m: m,&lt;br /&gt;
			ss: pad(s), s: s,&lt;br /&gt;
			SSS: pad(ms, 3),&lt;br /&gt;
			dddd: udate.getDayName(), ddd: udate.getDayNameAbbrev(), d: udate.getDay(),&lt;br /&gt;
			DD: pad(D), D: D,&lt;br /&gt;
			MMMM: udate.getMonthName(), MMM: udate.getMonthNameAbbrev(), MM: pad(M), M: M,&lt;br /&gt;
			YYYY: Y, YY: pad(Y % 100), Y: Y&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		const unbinder = new Morebits.Unbinder(formatstr); // escape stuff between [...]&lt;br /&gt;
		unbinder.unbind(&#039;\\[&#039;, &#039;\\]&#039;);&lt;br /&gt;
		unbinder.content = unbinder.content.replace(&lt;br /&gt;
			/* Regex notes:&lt;br /&gt;
			 * d(d{2,3})? matches exactly 1, 3 or 4 occurrences of &#039;d&#039; (&#039;dd&#039; is treated as a double match of &#039;d&#039;)&lt;br /&gt;
			 * Y{1,2}(Y{2})? matches exactly 1, 2 or 4 occurrences of &#039;Y&#039;&lt;br /&gt;
			 */&lt;br /&gt;
			/H{1,2}|h{1,2}|m{1,2}|s{1,2}|SSS|d(d{2,3})?|D{1,2}|M{1,4}|Y{1,2}(Y{2})?|A/g,&lt;br /&gt;
			(match) =&amp;gt; replacementMap[match]&lt;br /&gt;
		);&lt;br /&gt;
		return unbinder.rebind().replace(/\[(.*?)\]/g, &#039;$1&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Gives a readable relative time string such as &amp;quot;Yesterday at 6:43 PM&amp;quot; or &amp;quot;Last Thursday at 11:45 AM&amp;quot;.&lt;br /&gt;
	 * Similar to `calendar` in moment.js, but with time zone support.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {(string|number)} [zone=system] - &#039;system&#039; (for browser-default time zone),&lt;br /&gt;
	 * &#039;utc&#039; (for UTC), or specify a time zone as number of minutes past UTC.&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	calendar(zone) {&lt;br /&gt;
		// Zero out the hours, minutes, seconds and milliseconds - keeping only the date;&lt;br /&gt;
		// find the difference. Note that setHours() returns the same thing as getTime().&lt;br /&gt;
		const dateDiff = (new Date().setHours(0, 0, 0, 0) -&lt;br /&gt;
			new Date(this).setHours(0, 0, 0, 0)) / 8.64e7;&lt;br /&gt;
		switch (true) {&lt;br /&gt;
			case dateDiff === 0:&lt;br /&gt;
				return this.format(Morebits.Date.localeData.relativeTimes.thisDay, zone);&lt;br /&gt;
			case dateDiff === 1:&lt;br /&gt;
				return this.format(Morebits.Date.localeData.relativeTimes.prevDay, zone);&lt;br /&gt;
			case dateDiff &amp;gt; 0 &amp;amp;&amp;amp; dateDiff &amp;lt; 7:&lt;br /&gt;
				return this.format(Morebits.Date.localeData.relativeTimes.pastWeek, zone);&lt;br /&gt;
			case dateDiff === -1:&lt;br /&gt;
				return this.format(Morebits.Date.localeData.relativeTimes.nextDay, zone);&lt;br /&gt;
			case dateDiff &amp;lt; 0 &amp;amp;&amp;amp; dateDiff &amp;gt; -7:&lt;br /&gt;
				return this.format(Morebits.Date.localeData.relativeTimes.thisWeek, zone);&lt;br /&gt;
			default:&lt;br /&gt;
				return this.format(Morebits.Date.localeData.relativeTimes.other, zone);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get a regular expression that matches wikitext section titles, such&lt;br /&gt;
	 * as `==December 2019==` or `=== Jan 2018 ===`.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {RegExp}&lt;br /&gt;
	 */&lt;br /&gt;
	monthHeaderRegex() {&lt;br /&gt;
		return new RegExp(&#039;^(==+)\\s*(?:&#039; + this.getUTCMonthName() + &#039;|&#039; + this.getUTCMonthNameAbbrev() +&lt;br /&gt;
			&#039;)\\s+&#039; + this.getUTCFullYear() + &#039;\\s*\\1&#039;, &#039;mg&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Creates a wikitext section header with the month and year.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {number} [level=2] - Header level.  Pass 0 for just the text&lt;br /&gt;
	 * with no wikitext markers (==).&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	monthHeader(level) {&lt;br /&gt;
		// Default to 2, but allow for 0 or stringy numbers&lt;br /&gt;
		level = parseInt(level, 10);&lt;br /&gt;
		level = isNaN(level) ? 2 : level;&lt;br /&gt;
&lt;br /&gt;
		const header = &#039;=&#039;.repeat(level);&lt;br /&gt;
		const text = this.getUTCMonthName() + &#039; &#039; + this.getUTCFullYear();&lt;br /&gt;
&lt;br /&gt;
		if (header.length) { // wikitext-formatted header&lt;br /&gt;
			return header + &#039; &#039; + text + &#039; &#039; + header;&lt;br /&gt;
		}&lt;br /&gt;
		return text; // Just the string&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Localized strings for date processing.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.Date&lt;br /&gt;
 * @type {object.&amp;lt;string, string&amp;gt;}&lt;br /&gt;
 * @property {string[]} months&lt;br /&gt;
 * @property {string[]} monthsShort&lt;br /&gt;
 * @property {string[]} days&lt;br /&gt;
 * @property {string[]} daysShort&lt;br /&gt;
 * @property {object.&amp;lt;string, string&amp;gt;} relativeTimes&lt;br /&gt;
 * @private&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Date.localeData = {&lt;br /&gt;
	// message names here correspond to MediaWiki message names&lt;br /&gt;
	months: [&#039;January&#039;, &#039;February&#039;, &#039;March&#039;, &#039;April&#039;, &#039;May&#039;, &#039;June&#039;, &#039;July&#039;, &#039;August&#039;, &#039;September&#039;,&lt;br /&gt;
		&#039;October&#039;, &#039;November&#039;, &#039;December&#039;],&lt;br /&gt;
	monthsShort: [&#039;Jan&#039;, &#039;Feb&#039;, &#039;Mar&#039;, &#039;Apr&#039;, &#039;May&#039;, &#039;Jun&#039;, &#039;Jul&#039;, &#039;Aug&#039;, &#039;Sep&#039;, &#039;Oct&#039;, &#039;Nov&#039;, &#039;Dec&#039;],&lt;br /&gt;
	days: [&#039;Sunday&#039;, &#039;Monday&#039;, &#039;Tuesday&#039;, &#039;Wednesday&#039;, &#039;Thursday&#039;, &#039;Friday&#039;, &#039;Saturday&#039;],&lt;br /&gt;
	daysShort: [&#039;Sun&#039;, &#039;Mon&#039;, &#039;Tue&#039;, &#039;Wed&#039;, &#039;Thu&#039;, &#039;Fri&#039;, &#039;Sat&#039;],&lt;br /&gt;
&lt;br /&gt;
	relativeTimes: {&lt;br /&gt;
		thisDay: &#039;[Today at] h:mm A&#039;,&lt;br /&gt;
		prevDay: &#039;[Yesterday at] h:mm A&#039;,&lt;br /&gt;
		nextDay: &#039;[Tomorrow at] h:mm A&#039;,&lt;br /&gt;
		thisWeek: &#039;dddd [at] h:mm A&#039;,&lt;br /&gt;
		pastWeek: &#039;[Last] dddd [at] h:mm A&#039;,&lt;br /&gt;
		other: &#039;YYYY-MM-DD&#039;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Map units with getter/setter function names, for `add` and `subtract`&lt;br /&gt;
 * methods.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.Date&lt;br /&gt;
 * @type {object.&amp;lt;string, string&amp;gt;}&lt;br /&gt;
 * @property {string} seconds&lt;br /&gt;
 * @property {string} minutes&lt;br /&gt;
 * @property {string} hours&lt;br /&gt;
 * @property {string} days&lt;br /&gt;
 * @property {string} weeks&lt;br /&gt;
 * @property {string} months&lt;br /&gt;
 * @property {string} years&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Date.unitMap = {&lt;br /&gt;
	seconds: &#039;Seconds&#039;,&lt;br /&gt;
	minutes: &#039;Minutes&#039;,&lt;br /&gt;
	hours: &#039;Hours&#039;,&lt;br /&gt;
	days: &#039;Date&#039;,&lt;br /&gt;
	weeks: &#039;Week&#039;, // Not a function but handled in `add` through cunning use of multiplication&lt;br /&gt;
	months: &#039;Month&#039;,&lt;br /&gt;
	years: &#039;FullYear&#039;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.wiki **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * Various objects for wiki editing and API access, including&lt;br /&gt;
 * {@link Morebits.wiki.Api} and {@link Morebits.wiki.Page}.&lt;br /&gt;
 *&lt;br /&gt;
 * @namespace Morebits.wiki&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki = {};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.wiki.actionCompleted **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * @memberof Morebits.wiki&lt;br /&gt;
 * @type {number}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.numberOfActionsLeft = 0;&lt;br /&gt;
/**&lt;br /&gt;
 * @memberof Morebits.wiki&lt;br /&gt;
 * @type {number}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.nbrOfCheckpointsLeft = 0;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Display message and/or redirect to page upon completion of tasks.&lt;br /&gt;
 *&lt;br /&gt;
 * Every call to Morebits.wiki.Api.post() results in the dispatch of an&lt;br /&gt;
 * asynchronous callback. Each callback can in turn make an additional call to&lt;br /&gt;
 * Morebits.wiki.Api.post() to continue a processing sequence. At the&lt;br /&gt;
 * conclusion of the final callback of a processing sequence, it is not&lt;br /&gt;
 * possible to simply return to the original caller because there is no call&lt;br /&gt;
 * stack leading back to the original context. Instead,&lt;br /&gt;
 * Morebits.wiki.actionCompleted.event() is called to display the result to&lt;br /&gt;
 * the user and to perform an optional page redirect.&lt;br /&gt;
 *&lt;br /&gt;
 * The determination of when to call Morebits.wiki.actionCompleted.event() is&lt;br /&gt;
 * managed through the globals Morebits.wiki.numberOfActionsLeft and&lt;br /&gt;
 * Morebits.wiki.nbrOfCheckpointsLeft. Morebits.wiki.numberOfActionsLeft is&lt;br /&gt;
 * incremented at the start of every Morebits.wiki.Api call and decremented&lt;br /&gt;
 * after the completion of a callback function. If a callback function does&lt;br /&gt;
 * not create a new Morebits.wiki.Api object before exiting, it is the final&lt;br /&gt;
 * step in the processing chain and Morebits.wiki.actionCompleted.event() will&lt;br /&gt;
 * then be called.&lt;br /&gt;
 *&lt;br /&gt;
 * Optionally, callers may use Morebits.wiki.addCheckpoint() to indicate that&lt;br /&gt;
 * processing is not complete upon the conclusion of the final callback&lt;br /&gt;
 * function.  This is used for batch operations. The end of a batch is&lt;br /&gt;
 * signaled by calling Morebits.wiki.removeCheckpoint().&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.wiki&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.actionCompleted = function(self) {&lt;br /&gt;
	if (--Morebits.wiki.numberOfActionsLeft &amp;lt;= 0 &amp;amp;&amp;amp; Morebits.wiki.nbrOfCheckpointsLeft &amp;lt;= 0) {&lt;br /&gt;
		Morebits.wiki.actionCompleted.event(self);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Change per action wanted&lt;br /&gt;
/** @memberof Morebits.wiki */&lt;br /&gt;
Morebits.wiki.actionCompleted.event = function() {&lt;br /&gt;
	if (Morebits.wiki.actionCompleted.notice) {&lt;br /&gt;
		Morebits.Status.actionCompleted(Morebits.wiki.actionCompleted.notice);&lt;br /&gt;
	}&lt;br /&gt;
	if (Morebits.wiki.actionCompleted.redirect) {&lt;br /&gt;
		// if it isn&#039;t a URL, make it one. TODO: This breaks on the articles &#039;http://&#039;, &#039;ftp://&#039;, and similar ones.&lt;br /&gt;
		if (!(/^\w+:\/\//).test(Morebits.wiki.actionCompleted.redirect)) {&lt;br /&gt;
			Morebits.wiki.actionCompleted.redirect = mw.util.getUrl(Morebits.wiki.actionCompleted.redirect);&lt;br /&gt;
			if (Morebits.wiki.actionCompleted.followRedirect === false) {&lt;br /&gt;
				Morebits.wiki.actionCompleted.redirect += &#039;?redirect=no&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		window.setTimeout(() =&amp;gt; {&lt;br /&gt;
			window.location = Morebits.wiki.actionCompleted.redirect;&lt;br /&gt;
		}, Morebits.wiki.actionCompleted.timeOut);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/** @memberof Morebits.wiki */&lt;br /&gt;
Morebits.wiki.actionCompleted.timeOut = typeof window.wpActionCompletedTimeOut === &#039;undefined&#039; ? 5000 : window.wpActionCompletedTimeOut;&lt;br /&gt;
/** @memberof Morebits.wiki */&lt;br /&gt;
Morebits.wiki.actionCompleted.redirect = null;&lt;br /&gt;
/** @memberof Morebits.wiki */&lt;br /&gt;
Morebits.wiki.actionCompleted.notice = null;&lt;br /&gt;
&lt;br /&gt;
/** @memberof Morebits.wiki */&lt;br /&gt;
Morebits.wiki.addCheckpoint = function() {&lt;br /&gt;
	++Morebits.wiki.nbrOfCheckpointsLeft;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/** @memberof Morebits.wiki */&lt;br /&gt;
Morebits.wiki.removeCheckpoint = function() {&lt;br /&gt;
	if (--Morebits.wiki.nbrOfCheckpointsLeft &amp;lt;= 0 &amp;amp;&amp;amp; Morebits.wiki.numberOfActionsLeft &amp;lt;= 0) {&lt;br /&gt;
		Morebits.wiki.actionCompleted.event();&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.wiki.Api **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * An easy way to talk to the MediaWiki API.  Accepts either json or xml&lt;br /&gt;
 * (default) formats; if json is selected, will default to `formatversion=2`&lt;br /&gt;
 * unless otherwise specified.  Similarly, enforces newer `errorformat`s,&lt;br /&gt;
 * defaulting to `html` if unspecified.  `uselang` enforced to the wiki&#039;s&lt;br /&gt;
 * content language.&lt;br /&gt;
 *&lt;br /&gt;
 * In new code, the use of the last 3 parameters should be avoided, instead&lt;br /&gt;
 * use {@link Morebits.wiki.Api#setStatusElement|setStatusElement()} to bind&lt;br /&gt;
 * the status element (if needed) and use `.then()` or `.catch()` on the&lt;br /&gt;
 * promise returned by `post()`, rather than specify the `onSuccess` or&lt;br /&gt;
 * `onFailure` callbacks.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.wiki&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {string} currentAction - The current action (required).&lt;br /&gt;
 * @param {Object} query - The query (required).&lt;br /&gt;
 * @param {Function} [onSuccess] - The function to call when request is successful.&lt;br /&gt;
 * @param {Morebits.Status} [statusElement] - A Morebits.Status object to use for status messages.&lt;br /&gt;
 * @param {Function} [onError] - The function to call if an error occurs.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.Api = function(currentAction, query, onSuccess, statusElement, onError) {&lt;br /&gt;
	this.currentAction = currentAction;&lt;br /&gt;
	this.query = query;&lt;br /&gt;
	this.query.assert = &#039;user&#039;;&lt;br /&gt;
	// Enforce newer error formats, preferring html&lt;br /&gt;
	if (!query.errorformat || ![&#039;wikitext&#039;, &#039;plaintext&#039;].includes(query.errorformat)) {&lt;br /&gt;
		this.query.errorformat = &#039;html&#039;;&lt;br /&gt;
	}&lt;br /&gt;
	// Explicitly use the wiki&#039;s content language to minimize confusion,&lt;br /&gt;
	// see #1179 for discussion&lt;br /&gt;
	this.query.uselang = &#039;content&#039;;&lt;br /&gt;
	this.query.errorlang = &#039;uselang&#039;;&lt;br /&gt;
	this.query.errorsuselocal = 1;&lt;br /&gt;
&lt;br /&gt;
	this.onSuccess = onSuccess;&lt;br /&gt;
	this.onError = onError;&lt;br /&gt;
	if (statusElement) {&lt;br /&gt;
		this.setStatusElement(statusElement);&lt;br /&gt;
	} else {&lt;br /&gt;
		this.statelem = new Morebits.Status(currentAction);&lt;br /&gt;
	}&lt;br /&gt;
	// JSON is used throughout Morebits/Twinkle, but xml remains the default for backwards compatibility&lt;br /&gt;
	if (!query.format) {&lt;br /&gt;
		this.query.format = &#039;xml&#039;;&lt;br /&gt;
	} else if (query.format === &#039;json&#039; &amp;amp;&amp;amp; !query.formatversion) {&lt;br /&gt;
		this.query.formatversion = &#039;2&#039;;&lt;br /&gt;
	} else if (![&#039;xml&#039;, &#039;json&#039;].includes(query.format)) {&lt;br /&gt;
		this.statelem.error(&#039;Invalid API format: only xml and json are supported.&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Ignore tags for queries and most common unsupported actions, produces warnings&lt;br /&gt;
	if (query.action &amp;amp;&amp;amp; [&#039;query&#039;, &#039;review&#039;, &#039;stabilize&#039;, &#039;watch&#039;].includes(query.action)) {&lt;br /&gt;
		delete query.tags;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Morebits.wiki.Api.prototype = {&lt;br /&gt;
	currentAction: &#039;&#039;,&lt;br /&gt;
	onSuccess: null,&lt;br /&gt;
	onError: null,&lt;br /&gt;
	parent: window, // use global context if there is no parent object&lt;br /&gt;
	query: null,&lt;br /&gt;
	response: null,&lt;br /&gt;
	responseXML: null, // use `response` instead; retained for backwards compatibility&lt;br /&gt;
	statelem: null, // this non-standard name kept for backwards compatibility&lt;br /&gt;
	statusText: null, // result received from the API, normally &amp;quot;success&amp;quot; or &amp;quot;error&amp;quot;&lt;br /&gt;
	errorCode: null, // short text error code, if any, as documented in the MediaWiki API&lt;br /&gt;
	errorText: null, // full error description, if any&lt;br /&gt;
	badtokenRetry: false, // set to true if this on a retry attempted after a badtoken error&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Keep track of parent object for callbacks.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {*} parent&lt;br /&gt;
	 */&lt;br /&gt;
	setParent: function(parent) {&lt;br /&gt;
		this.parent = parent;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/** @param {Morebits.Status} statusElement */&lt;br /&gt;
	setStatusElement: function(statusElement) {&lt;br /&gt;
		this.statelem = statusElement;&lt;br /&gt;
		this.statelem.status(this.currentAction);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Carry out the request.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Object} callerAjaxParameters - Do not specify a parameter unless you really&lt;br /&gt;
	 * really want to give jQuery some extra parameters.&lt;br /&gt;
	 * @return {jQuery.Promise} - A jQuery promise object that is resolved or rejected with the api object.&lt;br /&gt;
	 */&lt;br /&gt;
	post: function(callerAjaxParameters) {&lt;br /&gt;
&lt;br /&gt;
		++Morebits.wiki.numberOfActionsLeft;&lt;br /&gt;
&lt;br /&gt;
		const queryString = $.map(this.query, (val, i) =&amp;gt; {&lt;br /&gt;
			if (Array.isArray(val)) {&lt;br /&gt;
				return encodeURIComponent(i) + &#039;=&#039; + val.map(encodeURIComponent).join(&#039;|&#039;);&lt;br /&gt;
			} else if (val !== undefined) {&lt;br /&gt;
				return encodeURIComponent(i) + &#039;=&#039; + encodeURIComponent(val);&lt;br /&gt;
			}&lt;br /&gt;
		}).join(&#039;&amp;amp;&#039;).replace(/^(.*?)(\btoken=[^&amp;amp;]*)&amp;amp;(.*)/, &#039;$1$3&amp;amp;$2&#039;);&lt;br /&gt;
		// token should always be the last item in the query string (bug TW-B-0013)&lt;br /&gt;
&lt;br /&gt;
		const headers = {&lt;br /&gt;
			&#039;Api-User-Agent&#039;: morebitsWikiApiUserAgent&lt;br /&gt;
		};&lt;br /&gt;
		if (this.query.action === &#039;parse&#039;) {&lt;br /&gt;
			// Per https://www.mediawiki.org/wiki/API:Etiquette&lt;br /&gt;
			headers[&#039;Promise-Non-Write-API-Action&#039;] = &#039;true&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		const ajaxparams = $.extend({}, {&lt;br /&gt;
			context: this,&lt;br /&gt;
			type: this.query.action === &#039;query&#039; ? &#039;GET&#039; : &#039;POST&#039;,&lt;br /&gt;
			url: mw.util.wikiScript(&#039;api&#039;),&lt;br /&gt;
			data: queryString,&lt;br /&gt;
			dataType: this.query.format,&lt;br /&gt;
			headers&lt;br /&gt;
		}, callerAjaxParameters);&lt;br /&gt;
&lt;br /&gt;
		return $.ajax(ajaxparams).then(&lt;br /&gt;
&lt;br /&gt;
			function onAPIsuccess(response, statusText) {&lt;br /&gt;
				this.statusText = statusText;&lt;br /&gt;
				this.response = this.responseXML = response;&lt;br /&gt;
				// Limit to first error&lt;br /&gt;
				if (this.query.format === &#039;json&#039;) {&lt;br /&gt;
					this.errorCode = response.errors &amp;amp;&amp;amp; response.errors[0].code;&lt;br /&gt;
					if (this.query.errorformat === &#039;html&#039;) {&lt;br /&gt;
						this.errorText = response.errors &amp;amp;&amp;amp; response.errors[0].html;&lt;br /&gt;
					} else if (this.query.errorformat === &#039;wikitext&#039; || this.query.errorformat === &#039;plaintext&#039;) {&lt;br /&gt;
						this.errorText = response.errors &amp;amp;&amp;amp; response.errors[0].text;&lt;br /&gt;
					}&lt;br /&gt;
				} else {&lt;br /&gt;
					this.errorCode = $(response).find(&#039;errors error&#039;).eq(0).attr(&#039;code&#039;);&lt;br /&gt;
					// Sufficient for html, wikitext, or plaintext errorformats&lt;br /&gt;
					this.errorText = $(response).find(&#039;errors error&#039;).eq(0).text();&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if (typeof this.errorCode === &#039;string&#039;) {&lt;br /&gt;
					// the API didn&#039;t like what we told it, e.g., bad edit token or an error creating a page&lt;br /&gt;
					return this.returnError(callerAjaxParameters);&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// invoke success callback if one was supplied&lt;br /&gt;
				if (this.onSuccess) {&lt;br /&gt;
					// set the callback context to this.parent for new code and supply the API object&lt;br /&gt;
					// as the first argument to the callback (for legacy code)&lt;br /&gt;
					this.onSuccess.call(this.parent, this);&lt;br /&gt;
				} else {&lt;br /&gt;
					this.statelem.info(&#039;done&#039;);&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				Morebits.wiki.actionCompleted();&lt;br /&gt;
&lt;br /&gt;
				return $.Deferred().resolveWith(this.parent, [this]);&lt;br /&gt;
			},&lt;br /&gt;
&lt;br /&gt;
			// only network and server errors reach here - complaints from the API itself are caught in success()&lt;br /&gt;
			function onAPIfailure(jqXHR, statusText, errorThrown) {&lt;br /&gt;
				this.statusText = statusText;&lt;br /&gt;
				this.errorThrown = errorThrown; // frequently undefined&lt;br /&gt;
				this.errorText = statusText + &#039; &amp;quot;&#039; + jqXHR.statusText + &#039;&amp;quot; occurred while contacting the API.&#039;;&lt;br /&gt;
				return this.returnError();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	returnError: function(callerAjaxParameters) {&lt;br /&gt;
		if (this.errorCode === &#039;badtoken&#039; &amp;amp;&amp;amp; !this.badtokenRetry) {&lt;br /&gt;
			this.statelem.warn(&#039;Invalid token. Getting a new token and retrying...&#039;);&lt;br /&gt;
			this.badtokenRetry = true;&lt;br /&gt;
			// Get a new CSRF token and retry. If the original action needs a different&lt;br /&gt;
			// type of action than CSRF, we do one pointless retry before bailing out&lt;br /&gt;
			return Morebits.wiki.Api.getToken().then((token) =&amp;gt; {&lt;br /&gt;
				this.query.token = token;&lt;br /&gt;
				return this.post(callerAjaxParameters);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		this.statelem.error(this.errorText + &#039; (&#039; + this.errorCode + &#039;)&#039;);&lt;br /&gt;
&lt;br /&gt;
		// invoke failure callback if one was supplied&lt;br /&gt;
		if (this.onError) {&lt;br /&gt;
&lt;br /&gt;
			// set the callback context to this.parent for new code and supply the API object&lt;br /&gt;
			// as the first argument to the callback for legacy code&lt;br /&gt;
			this.onError.call(this.parent, this);&lt;br /&gt;
		}&lt;br /&gt;
		// don&#039;t complete the action so that the error remains displayed&lt;br /&gt;
&lt;br /&gt;
		return $.Deferred().rejectWith(this.parent, [this]);&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getStatusElement: function() {&lt;br /&gt;
		return this.statelem;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getErrorCode: function() {&lt;br /&gt;
		return this.errorCode;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getErrorText: function() {&lt;br /&gt;
		return this.errorText;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getXML: function() { // retained for backwards compatibility, use getResponse() instead&lt;br /&gt;
		return this.responseXML;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	getResponse: function() {&lt;br /&gt;
		return this.response;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Retrieves wikitext from a page. Caching is enabled with a duration of 1 day.&lt;br /&gt;
 *&lt;br /&gt;
 * @param {string} title - Page title&lt;br /&gt;
 * @return {Promise&amp;lt;string|null&amp;gt;} Returns page content, or null if the page doesn&#039;t exist.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.getCachedPage = function(title) {&lt;br /&gt;
	return new mw.Api({ userAgent: morebitsWikiApiUserAgent }).get({&lt;br /&gt;
		action: &#039;query&#039;,&lt;br /&gt;
		prop: &#039;revisions&#039;,&lt;br /&gt;
		titles: title,&lt;br /&gt;
		rvprop: &#039;content&#039;,&lt;br /&gt;
		rvslots: &#039;*&#039;,&lt;br /&gt;
		format: &#039;json&#039;,&lt;br /&gt;
		formatversion: &#039;2&#039;,&lt;br /&gt;
		smaxage: &#039;86400&#039;, // cache for 1 day&lt;br /&gt;
		maxage: &#039;86400&#039;, // cache for 1 day&lt;br /&gt;
		uselang: &#039;content&#039;&lt;br /&gt;
	}).then((data) =&amp;gt; {&lt;br /&gt;
		const page = data.query.pages[0];&lt;br /&gt;
		if (page.missing) {&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
		return page.revisions[0].slots.main.content;&lt;br /&gt;
	});&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Retrieves JSON from a page. Caching is enabled with a duration of 1 day.&lt;br /&gt;
 *&lt;br /&gt;
 * @param {string} title - Page title&lt;br /&gt;
 * @return {Promise&amp;lt;string&amp;gt;}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.getCachedJson = function(title) {&lt;br /&gt;
	return Morebits.wiki.getCachedPage(title).then((wikitext) =&amp;gt; JSON.parse(wikitext));&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
var morebitsWikiApiUserAgent = &#039;morebits.js ([[w:WT:TW]])&#039;;&lt;br /&gt;
/**&lt;br /&gt;
 * Set the custom user agent header, which is used for server-side logging.&lt;br /&gt;
 * Note that doing so will set the useragent for every `Morebits.wiki.Api`&lt;br /&gt;
 * process performed thereafter.&lt;br /&gt;
 *&lt;br /&gt;
 * @see {@link https://lists.wikimedia.org/pipermail/mediawiki-api-announce/2014-November/000075.html}&lt;br /&gt;
 * for original announcement.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.wiki.Api&lt;br /&gt;
 * @param {string} [ua=morebits.js ([[w:WT:TW]])] - User agent.  The default&lt;br /&gt;
 * value of `morebits.js ([[w:WT:TW]])` will be appended to any provided&lt;br /&gt;
 * value.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.Api.setApiUserAgent = function(ua) {&lt;br /&gt;
	morebitsWikiApiUserAgent = (ua ? ua + &#039; &#039; : &#039;&#039;) + &#039;morebits.js ([[w:WT:TW]])&#039;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Get a new CSRF token on encountering token errors.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.wiki.Api&lt;br /&gt;
 * @return {string} MediaWiki CSRF token.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.Api.getToken = function() {&lt;br /&gt;
	const tokenApi = new Morebits.wiki.Api(&#039;Getting token&#039;, {&lt;br /&gt;
		action: &#039;query&#039;,&lt;br /&gt;
		meta: &#039;tokens&#039;,&lt;br /&gt;
		type: &#039;csrf&#039;,&lt;br /&gt;
		format: &#039;json&#039;&lt;br /&gt;
	});&lt;br /&gt;
	return tokenApi.post().then((apiobj) =&amp;gt; apiobj.response.query.tokens.csrftoken);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.wiki.Page **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * Use the MediaWiki API to load a page and optionally edit it, move it, etc.&lt;br /&gt;
 *&lt;br /&gt;
 * Callers are not permitted to directly access the properties of this class!&lt;br /&gt;
 * All property access is through the appropriate get___() or set___() method.&lt;br /&gt;
 *&lt;br /&gt;
 * Callers should set {@link Morebits.wiki.actionCompleted.notice} and {@link Morebits.wiki.actionCompleted.redirect}&lt;br /&gt;
 * before the first call to {@link Morebits.wiki.Page.load()}.&lt;br /&gt;
 *&lt;br /&gt;
 * Each of the callback functions takes one parameter, which is a&lt;br /&gt;
 * reference to the Morebits.wiki.Page object that registered the callback.&lt;br /&gt;
 * Callback functions may invoke any Morebits.wiki.Page prototype method using this reference.&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
 * Call sequence for common operations (optional final user callbacks not shown):&lt;br /&gt;
 *&lt;br /&gt;
 * - Edit current contents of a page (no edit conflict):&lt;br /&gt;
 * `.load(userTextEditCallback) -&amp;gt; ctx.loadApi.post() -&amp;gt;&lt;br /&gt;
 * ctx.loadApi.post.success() -&amp;gt; ctx.fnLoadSuccess() -&amp;gt; userTextEditCallback() -&amp;gt;&lt;br /&gt;
 * .save() -&amp;gt; ctx.saveApi.post() -&amp;gt; ctx.loadApi.post.success() -&amp;gt; ctx.fnSaveSuccess()`&lt;br /&gt;
 *&lt;br /&gt;
 * - Edit current contents of a page (with edit conflict):&lt;br /&gt;
 * `.load(userTextEditCallback) -&amp;gt; ctx.loadApi.post() -&amp;gt;&lt;br /&gt;
 * ctx.loadApi.post.success() -&amp;gt; ctx.fnLoadSuccess() -&amp;gt; userTextEditCallback() -&amp;gt;&lt;br /&gt;
 * .save() -&amp;gt; ctx.saveApi.post() -&amp;gt; ctx.loadApi.post.success() -&amp;gt;&lt;br /&gt;
 * ctx.fnSaveError() -&amp;gt; ctx.loadApi.post() -&amp;gt; ctx.loadApi.post.success() -&amp;gt;&lt;br /&gt;
 * ctx.fnLoadSuccess() -&amp;gt; userTextEditCallback() -&amp;gt; .save() -&amp;gt;&lt;br /&gt;
 * ctx.saveApi.post() -&amp;gt; ctx.loadApi.post.success() -&amp;gt; ctx.fnSaveSuccess()`&lt;br /&gt;
 *&lt;br /&gt;
 * - Append to a page (similar for prepend and newSection):&lt;br /&gt;
 * `.append() -&amp;gt; ctx.loadApi.post() -&amp;gt; ctx.loadApi.post.success() -&amp;gt;&lt;br /&gt;
 * ctx.fnLoadSuccess() -&amp;gt; ctx.fnAutoSave() -&amp;gt; .save() -&amp;gt; ctx.saveApi.post() -&amp;gt;&lt;br /&gt;
 * ctx.loadApi.post.success() -&amp;gt; ctx.fnSaveSuccess()`&lt;br /&gt;
 *&lt;br /&gt;
 * Notes:&lt;br /&gt;
 * 1. All functions following Morebits.wiki.Api.post() are invoked asynchronously from the jQuery AJAX library.&lt;br /&gt;
 * 2. The sequence for append/prepend/newSection could be slightly shortened,&lt;br /&gt;
 * but it would require significant duplication of code for little benefit.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.wiki&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {string} pageName - The name of the page, prefixed by the namespace (if any).&lt;br /&gt;
 * For the current page, use `mw.config.get(&#039;wgPageName&#039;)`.&lt;br /&gt;
 * @param {string|Morebits.Status} [status] - A string describing the action about to be undertaken,&lt;br /&gt;
 * or a Morebits.Status object&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.Page = function(pageName, status) {&lt;br /&gt;
&lt;br /&gt;
	if (!status) {&lt;br /&gt;
		status = &#039;Opening page &amp;quot;&#039; + pageName + &#039;&amp;quot;&#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Private context variables.&lt;br /&gt;
	 *&lt;br /&gt;
	 * This context is not visible to the outside, thus all the data here&lt;br /&gt;
	 * must be accessed via getter and setter functions.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @private&lt;br /&gt;
	 */&lt;br /&gt;
	const ctx = {&lt;br /&gt;
		// backing fields for public properties&lt;br /&gt;
		pageName: pageName,&lt;br /&gt;
		pageExists: false,&lt;br /&gt;
		editSummary: null,&lt;br /&gt;
		changeTags: null,&lt;br /&gt;
		testActions: null, // array if any valid actions&lt;br /&gt;
		callbackParameters: null,&lt;br /&gt;
		statusElement: status instanceof Morebits.Status ? status : new Morebits.Status(status),&lt;br /&gt;
&lt;br /&gt;
		// - edit&lt;br /&gt;
		pageText: null,&lt;br /&gt;
		editMode: &#039;all&#039;, // save() replaces entire contents of the page by default&lt;br /&gt;
		appendText: null, // can&#039;t reuse pageText for this because pageText is needed to follow a redirect&lt;br /&gt;
		prependText: null, // can&#039;t reuse pageText for this because pageText is needed to follow a redirect&lt;br /&gt;
		newSectionText: null,&lt;br /&gt;
		newSectionTitle: null,&lt;br /&gt;
		createOption: null,&lt;br /&gt;
		minorEdit: false,&lt;br /&gt;
		botEdit: false,&lt;br /&gt;
		pageSection: null,&lt;br /&gt;
		maxConflictRetries: 2,&lt;br /&gt;
		maxRetries: 2,&lt;br /&gt;
		followRedirect: false,&lt;br /&gt;
		followCrossNsRedirect: true,&lt;br /&gt;
		watchlistOption: &#039;nochange&#039;,&lt;br /&gt;
		watchlistExpiry: null,&lt;br /&gt;
		discussionToolsAutoSubscribe: null,&lt;br /&gt;
		creator: null,&lt;br /&gt;
		timestamp: null,&lt;br /&gt;
&lt;br /&gt;
		// - revert&lt;br /&gt;
		revertOldID: null,&lt;br /&gt;
&lt;br /&gt;
		// - move&lt;br /&gt;
		moveDestination: null,&lt;br /&gt;
		moveTalkPage: false,&lt;br /&gt;
		moveSubpages: false,&lt;br /&gt;
		moveSuppressRedirect: false,&lt;br /&gt;
&lt;br /&gt;
		// - protect&lt;br /&gt;
		protectEdit: null,&lt;br /&gt;
		protectMove: null,&lt;br /&gt;
		protectCreate: null,&lt;br /&gt;
		protectCascade: null,&lt;br /&gt;
&lt;br /&gt;
		// - delete&lt;br /&gt;
		deleteTalkPage: false,&lt;br /&gt;
&lt;br /&gt;
		// - undelete&lt;br /&gt;
		undeleteTalkPage: false,&lt;br /&gt;
&lt;br /&gt;
		// - creation lookup&lt;br /&gt;
		lookupNonRedirectCreator: false,&lt;br /&gt;
&lt;br /&gt;
		// - stabilize (FlaggedRevs)&lt;br /&gt;
		flaggedRevs: null,&lt;br /&gt;
&lt;br /&gt;
		// internal status&lt;br /&gt;
		pageLoaded: false,&lt;br /&gt;
		csrfToken: null,&lt;br /&gt;
		loadTime: null,&lt;br /&gt;
		lastEditTime: null,&lt;br /&gt;
		pageID: null,&lt;br /&gt;
		contentModel: null,&lt;br /&gt;
		revertCurID: null,&lt;br /&gt;
		revertUser: null,&lt;br /&gt;
		watched: false,&lt;br /&gt;
		fullyProtected: false,&lt;br /&gt;
		suppressProtectWarning: false,&lt;br /&gt;
		conflictRetries: 0,&lt;br /&gt;
		retries: 0,&lt;br /&gt;
&lt;br /&gt;
		// callbacks&lt;br /&gt;
		onLoadSuccess: null,&lt;br /&gt;
		onLoadFailure: null,&lt;br /&gt;
		onSaveSuccess: null,&lt;br /&gt;
		onSaveFailure: null,&lt;br /&gt;
		onLookupCreationSuccess: null,&lt;br /&gt;
		onLookupCreationFailure: null,&lt;br /&gt;
		onMoveSuccess: null,&lt;br /&gt;
		onMoveFailure: null,&lt;br /&gt;
		onDeleteSuccess: null,&lt;br /&gt;
		onDeleteFailure: null,&lt;br /&gt;
		onUndeleteSuccess: null,&lt;br /&gt;
		onUndeleteFailure: null,&lt;br /&gt;
		onProtectSuccess: null,&lt;br /&gt;
		onProtectFailure: null,&lt;br /&gt;
		onStabilizeSuccess: null,&lt;br /&gt;
		onStabilizeFailure: null,&lt;br /&gt;
&lt;br /&gt;
		// internal objects&lt;br /&gt;
		loadQuery: null,&lt;br /&gt;
		loadApi: null,&lt;br /&gt;
		saveApi: null,&lt;br /&gt;
		lookupCreationApi: null,&lt;br /&gt;
		moveApi: null,&lt;br /&gt;
		moveProcessApi: null,&lt;br /&gt;
		patrolApi: null,&lt;br /&gt;
		patrolProcessApi: null,&lt;br /&gt;
		triageApi: null,&lt;br /&gt;
		triageProcessListApi: null,&lt;br /&gt;
		triageProcessApi: null,&lt;br /&gt;
		deleteApi: null,&lt;br /&gt;
		deleteProcessApi: null,&lt;br /&gt;
		undeleteApi: null,&lt;br /&gt;
		undeleteProcessApi: null,&lt;br /&gt;
		protectApi: null,&lt;br /&gt;
		protectProcessApi: null,&lt;br /&gt;
		stabilizeApi: null,&lt;br /&gt;
		stabilizeProcessApi: null&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const emptyFunction = function() { };&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Loads the text for the page.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} onSuccess - Callback function which is called when the load has succeeded.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function which is called when the load fails.&lt;br /&gt;
	 */&lt;br /&gt;
	this.load = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onLoadSuccess = onSuccess;&lt;br /&gt;
		ctx.onLoadFailure = onFailure || emptyFunction;&lt;br /&gt;
&lt;br /&gt;
		// Need to be able to do something after the page loads&lt;br /&gt;
		if (!onSuccess) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: no onSuccess callback provided to load()!&#039;);&lt;br /&gt;
			ctx.onLoadFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.loadQuery = {&lt;br /&gt;
			action: &#039;query&#039;,&lt;br /&gt;
			prop: &#039;info|revisions&#039;,&lt;br /&gt;
			inprop: &#039;watched&#039;,&lt;br /&gt;
			intestactions: &#039;edit&#039;, // can be expanded&lt;br /&gt;
			curtimestamp: &#039;&#039;,&lt;br /&gt;
			meta: &#039;tokens&#039;,&lt;br /&gt;
			type: &#039;csrf&#039;,&lt;br /&gt;
			titles: ctx.pageName,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
			// don&#039;t need rvlimit=1 because we don&#039;t need rvstartid here and only one actual rev is returned by default&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		if (ctx.editMode === &#039;all&#039;) {&lt;br /&gt;
			ctx.loadQuery.rvprop = &#039;content|timestamp&#039;; // get the page content at the same time, if needed&lt;br /&gt;
		} else if (ctx.editMode === &#039;revert&#039;) {&lt;br /&gt;
			ctx.loadQuery.rvprop = &#039;timestamp&#039;;&lt;br /&gt;
			ctx.loadQuery.rvlimit = 1;&lt;br /&gt;
			ctx.loadQuery.rvstartid = ctx.revertOldID;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (ctx.followRedirect) {&lt;br /&gt;
			ctx.loadQuery.redirects = &#039;&#039;; // follow all redirects&lt;br /&gt;
		}&lt;br /&gt;
		if (typeof ctx.pageSection === &#039;number&#039;) {&lt;br /&gt;
			ctx.loadQuery.rvsection = ctx.pageSection;&lt;br /&gt;
		}&lt;br /&gt;
		if (Morebits.userIsSysop) {&lt;br /&gt;
			ctx.loadQuery.inprop += &#039;|protection&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.loadApi = new Morebits.wiki.Api(&#039;Retrieving page...&#039;, ctx.loadQuery, fnLoadSuccess, ctx.statusElement, ctx.onLoadFailure);&lt;br /&gt;
		ctx.loadApi.setParent(this);&lt;br /&gt;
		ctx.loadApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Saves the text for the page to Wikipedia.&lt;br /&gt;
	 * Must be preceded by successfully calling `load()`.&lt;br /&gt;
	 *&lt;br /&gt;
	 * Warning: Calling `save()` can result in additional calls to the&lt;br /&gt;
	 * previous `load()` callbacks to recover from edit conflicts! In this&lt;br /&gt;
	 * case, callers must make the same edit to the new pageText and&lt;br /&gt;
	 * re-invoke `save()`.  This behavior can be disabled with&lt;br /&gt;
	 * `setMaxConflictRetries(0)`.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} [onSuccess] - Callback function which is called when the save has succeeded.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function which is called when the save fails.&lt;br /&gt;
	 */&lt;br /&gt;
	this.save = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onSaveSuccess = onSuccess;&lt;br /&gt;
		ctx.onSaveFailure = onFailure || emptyFunction;&lt;br /&gt;
&lt;br /&gt;
		// are we getting our editing token from mw.user.tokens?&lt;br /&gt;
		const canUseMwUserToken = fnCanUseMwUserToken(&#039;edit&#039;);&lt;br /&gt;
&lt;br /&gt;
		if (!ctx.pageLoaded &amp;amp;&amp;amp; !canUseMwUserToken) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: attempt to save a page that has not been loaded!&#039;);&lt;br /&gt;
			ctx.onSaveFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		if (!ctx.editSummary) {&lt;br /&gt;
			// new section mode allows (nay, encourages) using the&lt;br /&gt;
			// title as the edit summary, but the query needs&lt;br /&gt;
			// editSummary to be undefined or &#039;&#039;, not null&lt;br /&gt;
			if (ctx.editMode === &#039;new&#039; &amp;amp;&amp;amp; ctx.newSectionTitle) {&lt;br /&gt;
				ctx.editSummary = &#039;&#039;;&lt;br /&gt;
			} else {&lt;br /&gt;
				ctx.statusElement.error(&#039;Internal error: edit summary not set before save!&#039;);&lt;br /&gt;
				ctx.onSaveFailure(this);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// shouldn&#039;t happen if canUseMwUserToken === true&lt;br /&gt;
		if (ctx.fullyProtected &amp;amp;&amp;amp; !ctx.suppressProtectWarning &amp;amp;&amp;amp;&lt;br /&gt;
			!confirm(&lt;br /&gt;
				ctx.fullyProtected === &#039;infinity&#039; ?&lt;br /&gt;
					&#039;You are about to make an edit to the fully protected page &amp;quot;&#039; + ctx.pageName + &#039;&amp;quot; (protected indefinitely).  \n\nClick OK to proceed with the edit, or Cancel to skip this edit.&#039; :&lt;br /&gt;
					&#039;You are about to make an edit to the fully protected page &amp;quot;&#039; + ctx.pageName +&lt;br /&gt;
					&#039;&amp;quot; (protection expiring &#039; + new Morebits.Date(ctx.fullyProtected).calendar(&#039;utc&#039;) + &#039; (UTC)).  \n\nClick OK to proceed with the edit, or Cancel to skip this edit.&#039;&lt;br /&gt;
			)&lt;br /&gt;
		) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Edit to fully protected page was aborted.&#039;);&lt;br /&gt;
			ctx.onSaveFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.retries = 0;&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;edit&#039;,&lt;br /&gt;
			title: ctx.pageName,&lt;br /&gt;
			summary: ctx.editSummary,&lt;br /&gt;
			token: canUseMwUserToken ? mw.user.tokens.get(&#039;csrfToken&#039;) : ctx.csrfToken,&lt;br /&gt;
			watchlist: ctx.watchlistOption,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
		if (ctx.changeTags) {&lt;br /&gt;
			query.tags = ctx.changeTags;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnApplyWatchlistExpiry()) {&lt;br /&gt;
			query.watchlistexpiry = ctx.watchlistExpiry;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (typeof ctx.pageSection === &#039;number&#039;) {&lt;br /&gt;
			query.section = ctx.pageSection;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Set minor edit attribute. If these parameters are present with any value, it is interpreted as true&lt;br /&gt;
		if (ctx.minorEdit) {&lt;br /&gt;
			query.minor = true;&lt;br /&gt;
		} else {&lt;br /&gt;
			query.notminor = true; // force Twinkle config to override user preference setting for &amp;quot;all edits are minor&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Set bot edit attribute. If this parameter is present with any value, it is interpreted as true&lt;br /&gt;
		if (ctx.botEdit) {&lt;br /&gt;
			query.bot = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (ctx.discussionToolsAutoSubscribe !== null) {&lt;br /&gt;
			query.discussiontoolsautosubscribe = ctx.discussionToolsAutoSubscribe ? &#039;yes&#039; : &#039;no&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		switch (ctx.editMode) {&lt;br /&gt;
			case &#039;append&#039;:&lt;br /&gt;
				if (ctx.appendText === null) {&lt;br /&gt;
					ctx.statusElement.error(&#039;Internal error: append text not set before save!&#039;);&lt;br /&gt;
					ctx.onSaveFailure(this);&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				query.appendtext = ctx.appendText; // use mode to append to current page contents&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;prepend&#039;:&lt;br /&gt;
				if (ctx.prependText === null) {&lt;br /&gt;
					ctx.statusElement.error(&#039;Internal error: prepend text not set before save!&#039;);&lt;br /&gt;
					ctx.onSaveFailure(this);&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				query.prependtext = ctx.prependText; // use mode to prepend to current page contents&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;new&#039;:&lt;br /&gt;
				if (!ctx.newSectionText) { // API doesn&#039;t allow empty new section text&lt;br /&gt;
					ctx.statusElement.error(&#039;Internal error: new section text not set before save!&#039;);&lt;br /&gt;
					ctx.onSaveFailure(this);&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				query.section = &#039;new&#039;;&lt;br /&gt;
				query.text = ctx.newSectionText; // add a new section to current page&lt;br /&gt;
				query.sectiontitle = ctx.newSectionTitle || ctx.editSummary; // done by the API, but non-&#039;&#039; values would get treated as text&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;revert&#039;:&lt;br /&gt;
				query.undo = ctx.revertCurID;&lt;br /&gt;
				query.undoafter = ctx.revertOldID;&lt;br /&gt;
				if (ctx.lastEditTime) {&lt;br /&gt;
					query.basetimestamp = ctx.lastEditTime; // check that page hasn&#039;t been edited since it was loaded&lt;br /&gt;
				}&lt;br /&gt;
				query.starttimestamp = ctx.loadTime; // check that page hasn&#039;t been deleted since it was loaded (don&#039;t recreate bad stuff)&lt;br /&gt;
				break;&lt;br /&gt;
			default: // &#039;all&#039;&lt;br /&gt;
				query.text = ctx.pageText; // replace entire contents of the page&lt;br /&gt;
				if (ctx.lastEditTime) {&lt;br /&gt;
					query.basetimestamp = ctx.lastEditTime; // check that page hasn&#039;t been edited since it was loaded&lt;br /&gt;
				}&lt;br /&gt;
				query.starttimestamp = ctx.loadTime; // check that page hasn&#039;t been deleted since it was loaded (don&#039;t recreate bad stuff)&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ([&#039;recreate&#039;, &#039;createonly&#039;, &#039;nocreate&#039;].includes(ctx.createOption)) {&lt;br /&gt;
			query[ctx.createOption] = &#039;&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (canUseMwUserToken &amp;amp;&amp;amp; ctx.followRedirect) {&lt;br /&gt;
			query.redirect = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.saveApi = new Morebits.wiki.Api(&#039;Saving page...&#039;, query, fnSaveSuccess, ctx.statusElement, fnSaveError);&lt;br /&gt;
		ctx.saveApi.setParent(this);&lt;br /&gt;
		ctx.saveApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Adds the text provided via `setAppendText()` to the end of the&lt;br /&gt;
	 * page.  Does not require calling `load()` first, unless a watchlist&lt;br /&gt;
	 * expiry is used.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} [onSuccess] - Callback function which is called when the method has succeeded.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function which is called when the method fails.&lt;br /&gt;
	 */&lt;br /&gt;
	this.append = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.editMode = &#039;append&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;edit&#039;)) {&lt;br /&gt;
			this.save(onSuccess, onFailure);&lt;br /&gt;
		} else {&lt;br /&gt;
			ctx.onSaveSuccess = onSuccess;&lt;br /&gt;
			ctx.onSaveFailure = onFailure || emptyFunction;&lt;br /&gt;
			this.load(fnAutoSave, ctx.onSaveFailure);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Adds the text provided via `setPrependText()` to the start of the&lt;br /&gt;
	 * page.  Does not require calling `load()` first, unless a watchlist&lt;br /&gt;
	 * expiry is used.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function}  [onSuccess] - Callback function which is called when the method has succeeded.&lt;br /&gt;
	 * @param {Function}  [onFailure] - Callback function which is called when the method fails.&lt;br /&gt;
	 */&lt;br /&gt;
	this.prepend = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.editMode = &#039;prepend&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;edit&#039;)) {&lt;br /&gt;
			this.save(onSuccess, onFailure);&lt;br /&gt;
		} else {&lt;br /&gt;
			ctx.onSaveSuccess = onSuccess;&lt;br /&gt;
			ctx.onSaveFailure = onFailure || emptyFunction;&lt;br /&gt;
			this.load(fnAutoSave, ctx.onSaveFailure);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Creates a new section with the text provided by `setNewSectionText()`&lt;br /&gt;
	 * and section title from `setNewSectionTitle()`.&lt;br /&gt;
	 * If `editSummary` is provided, that will be used instead of the&lt;br /&gt;
	 * autogenerated &amp;quot;-&amp;gt;Title (new section&amp;quot; edit summary.&lt;br /&gt;
	 * Does not require calling `load()` first, unless a watchlist expiry&lt;br /&gt;
	 * is used.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function}  [onSuccess] - Callback function which is called when the method has succeeded.&lt;br /&gt;
	 * @param {Function}  [onFailure] - Callback function which is called when the method fails.&lt;br /&gt;
	 */&lt;br /&gt;
	this.newSection = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.editMode = &#039;new&#039;;&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;edit&#039;)) {&lt;br /&gt;
			this.save(onSuccess, onFailure);&lt;br /&gt;
		} else {&lt;br /&gt;
			ctx.onSaveSuccess = onSuccess;&lt;br /&gt;
			ctx.onSaveFailure = onFailure || emptyFunction;&lt;br /&gt;
			this.load(fnAutoSave, ctx.onSaveFailure);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} The name of the loaded page, including the namespace */&lt;br /&gt;
	this.getPageName = function() {&lt;br /&gt;
		return ctx.pageName;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} The text of the page after a successful load() */&lt;br /&gt;
	this.getPageText = function() {&lt;br /&gt;
		return ctx.pageText;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {string} pageText - Updated page text that will be saved when `save()` is called */&lt;br /&gt;
	this.setPageText = function(pageText) {&lt;br /&gt;
		ctx.editMode = &#039;all&#039;;&lt;br /&gt;
		ctx.pageText = pageText;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {string} appendText - Text that will be appended to the page when `append()` is called */&lt;br /&gt;
	this.setAppendText = function(appendText) {&lt;br /&gt;
		ctx.editMode = &#039;append&#039;;&lt;br /&gt;
		ctx.appendText = appendText;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {string} prependText - Text that will be prepended to the page when `prepend()` is called */&lt;br /&gt;
	this.setPrependText = function(prependText) {&lt;br /&gt;
		ctx.editMode = &#039;prepend&#039;;&lt;br /&gt;
		ctx.prependText = prependText;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {string} newSectionText - Text that will be added in a new section on the page when `newSection()` is called */&lt;br /&gt;
	this.setNewSectionText = function(newSectionText) {&lt;br /&gt;
		ctx.editMode = &#039;new&#039;;&lt;br /&gt;
		ctx.newSectionText = newSectionText;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {string} newSectionTitle - Title for the new section created when `newSection()` is called&lt;br /&gt;
	 * If missing, `ctx.editSummary` will be used. Issues may occur if a substituted template is used.&lt;br /&gt;
	 */&lt;br /&gt;
	this.setNewSectionTitle = function(newSectionTitle) {&lt;br /&gt;
		ctx.editMode = &#039;new&#039;;&lt;br /&gt;
		ctx.newSectionTitle = newSectionTitle;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Edit-related setter methods:&lt;br /&gt;
	/**&lt;br /&gt;
	 * Set the edit summary that will be used when `save()` is called.&lt;br /&gt;
	 * Unnecessary if editMode is &#039;new&#039; and newSectionTitle is provided.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} summary&lt;br /&gt;
	 */&lt;br /&gt;
	this.setEditSummary = function(summary) {&lt;br /&gt;
		ctx.editSummary = summary;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Set any custom tag(s) to be applied to the API action.&lt;br /&gt;
	 * A number of actions don&#039;t support it, most notably watch, review,&lt;br /&gt;
	 * and stabilize ({@link https://phabricator.wikimedia.org/T247721|T247721}).&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string|string[]} tags - String or array of tag(s).&lt;br /&gt;
	 */&lt;br /&gt;
	this.setChangeTags = function(tags) {&lt;br /&gt;
		ctx.changeTags = tags;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {string} [createOption=null] - Can take the following four values:&lt;br /&gt;
	 * - recreate: create the page if it does not exist, or edit it if it exists.&lt;br /&gt;
	 * - createonly: create the page if it does not exist, but return an&lt;br /&gt;
	 * error if it already exists.&lt;br /&gt;
	 * - nocreate: don&#039;t create the page, only edit it if it already exists.&lt;br /&gt;
	 * - `null`: create the page if it does not exist, unless it was deleted&lt;br /&gt;
	 * in the moment between loading the page and saving the edit (default).&lt;br /&gt;
	 */&lt;br /&gt;
	this.setCreateOption = function(createOption) {&lt;br /&gt;
		ctx.createOption = createOption;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {boolean} minorEdit - Set true to mark the edit as a minor edit. */&lt;br /&gt;
	this.setMinorEdit = function(minorEdit) {&lt;br /&gt;
		ctx.minorEdit = minorEdit;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {boolean} botEdit - Set true to mark the edit as a bot edit */&lt;br /&gt;
	this.setBotEdit = function(botEdit) {&lt;br /&gt;
		ctx.botEdit = botEdit;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {number} pageSection - Integer specifying the section number to load or save.&lt;br /&gt;
	 * If specified as `null`, the entire page will be retrieved.&lt;br /&gt;
	 */&lt;br /&gt;
	this.setPageSection = function(pageSection) {&lt;br /&gt;
		ctx.pageSection = pageSection;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {number} maxConflictRetries - Number of retries for save errors involving an edit conflict or&lt;br /&gt;
	 * loss of token. Default: 2.&lt;br /&gt;
	 */&lt;br /&gt;
	this.setMaxConflictRetries = function(maxConflictRetries) {&lt;br /&gt;
		ctx.maxConflictRetries = maxConflictRetries;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {number} maxRetries - Number of retries for save errors not involving an edit conflict or&lt;br /&gt;
	 * loss of token. Default: 2.&lt;br /&gt;
	 */&lt;br /&gt;
	this.setMaxRetries = function(maxRetries) {&lt;br /&gt;
		ctx.maxRetries = maxRetries;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Set whether and how to watch the page, including setting an expiry.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {boolean|string|Morebits.Date|Date} [watchlistOption=false] -&lt;br /&gt;
	 * Basically a mix of MW API and Twinkley options available pre-expiry:&lt;br /&gt;
	 * - `true`|`&#039;yes&#039;`|`&#039;watch&#039;`: page will be added to the user&#039;s&lt;br /&gt;
	 * watchlist when the action is called. Defaults to an indefinite&lt;br /&gt;
	 * watch unless `watchlistExpiry` is provided.&lt;br /&gt;
	 * - `false`|`&#039;no&#039;`|`&#039;nochange&#039;`: watchlist status of the page (including expiry) will not be changed.&lt;br /&gt;
	 * - `&#039;default&#039;`|`&#039;preferences&#039;`: watchlist status of the page will be&lt;br /&gt;
	 * set based on the user&#039;s preference settings when the action is&lt;br /&gt;
	 * called. Defaults to an indefinite watch unless `watchlistExpiry` is&lt;br /&gt;
	 * provided.&lt;br /&gt;
	 * - `&#039;unwatch&#039;`: explicitly unwatch the page.&lt;br /&gt;
	 * - Any other `string` or `number`, or a `Morebits.Date` or `Date`&lt;br /&gt;
	 * object: watch page until the specified time, deferring to&lt;br /&gt;
	 * `watchlistExpiry` if provided.&lt;br /&gt;
	 * @param {string|number|Morebits.Date|Date} [watchlistExpiry=infinity] -&lt;br /&gt;
	 * A date-like string or number, or a date object.  If a string or number,&lt;br /&gt;
	 * can be relative (2 weeks) or other similarly date-like (i.e. NOT &amp;quot;potato&amp;quot;):&lt;br /&gt;
	 * ISO 8601: 2038-01-09T03:14:07Z&lt;br /&gt;
	 * MediaWiki: 20380109031407&lt;br /&gt;
	 * UNIX: 2147483647&lt;br /&gt;
	 * SQL: 2038-01-09 03:14:07&lt;br /&gt;
	 * Can also be `infinity` or infinity-like (`infinite`, `indefinite`, and `never`).&lt;br /&gt;
	 * See {@link https://phabricator.wikimedia.org/source/mediawiki-libs-Timestamp/browse/master/src/ConvertibleTimestamp.php;4e53b859a9580c55958078f46dd4f3a44d0fcaa0$57-109?as=source&amp;amp;blame=off}&lt;br /&gt;
	 */&lt;br /&gt;
	this.setWatchlist = function(watchlistOption, watchlistExpiry) {&lt;br /&gt;
		if (watchlistOption instanceof Morebits.Date || watchlistOption instanceof Date) {&lt;br /&gt;
			watchlistOption = watchlistOption.toISOString();&lt;br /&gt;
		}&lt;br /&gt;
		if (typeof watchlistExpiry === &#039;undefined&#039;) {&lt;br /&gt;
			watchlistExpiry = &#039;infinity&#039;;&lt;br /&gt;
		} else if (watchlistExpiry instanceof Morebits.Date || watchlistExpiry instanceof Date) {&lt;br /&gt;
			watchlistExpiry = watchlistExpiry.toISOString();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		switch (watchlistOption) {&lt;br /&gt;
			case &#039;nochange&#039;:&lt;br /&gt;
			case &#039;no&#039;:&lt;br /&gt;
			case false:&lt;br /&gt;
			case undefined:&lt;br /&gt;
				ctx.watchlistOption = &#039;nochange&#039;;&lt;br /&gt;
				// The MW API allows for changing expiry with nochange (as &amp;quot;nochange&amp;quot; refers to the binary status),&lt;br /&gt;
				// but by keeping this null it will default to any existing expiry, ensure there is actually &amp;quot;no change.&amp;quot;&lt;br /&gt;
				ctx.watchlistExpiry = null;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;unwatch&#039;:&lt;br /&gt;
				// expiry unimportant&lt;br /&gt;
				ctx.watchlistOption = &#039;unwatch&#039;;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;preferences&#039;:&lt;br /&gt;
			case &#039;default&#039;:&lt;br /&gt;
				ctx.watchlistOption = &#039;preferences&#039;;&lt;br /&gt;
				// The API allows an expiry here, but there is as of yet (T265716)&lt;br /&gt;
				// no expiry preference option, so it&#039;s a bit devoid of context.&lt;br /&gt;
				ctx.watchlistExpiry = watchlistExpiry;&lt;br /&gt;
				break;&lt;br /&gt;
			case &#039;watch&#039;:&lt;br /&gt;
			case &#039;yes&#039;:&lt;br /&gt;
			case true:&lt;br /&gt;
				ctx.watchlistOption = &#039;watch&#039;;&lt;br /&gt;
				ctx.watchlistExpiry = watchlistExpiry;&lt;br /&gt;
				break;&lt;br /&gt;
			default: // Not really a &amp;quot;default&amp;quot; per se but catches &amp;quot;any other string&amp;quot;&lt;br /&gt;
				ctx.watchlistOption = &#039;watch&#039;;&lt;br /&gt;
				ctx.watchlistExpiry = watchlistOption;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Set a watchlist expiry. setWatchlist can mostly handle this by&lt;br /&gt;
	 * itself, so this is here largely for completeness and compatibility&lt;br /&gt;
	 * with the full suite of options.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string|number|Morebits.Date|Date} [watchlistExpiry=infinity] -&lt;br /&gt;
	 * A date-like string or number, or a date object.  If a string or number,&lt;br /&gt;
	 * can be relative (2 weeks) or other similarly date-like (i.e. NOT &amp;quot;potato&amp;quot;):&lt;br /&gt;
	 * ISO 8601: 2038-01-09T03:14:07Z&lt;br /&gt;
	 * MediaWiki: 20380109031407&lt;br /&gt;
	 * UNIX: 2147483647&lt;br /&gt;
	 * SQL: 2038-01-09 03:14:07&lt;br /&gt;
	 * Can also be `infinity` or infinity-like (`infinite`, `indefinite`, and `never`).&lt;br /&gt;
	 * See {@link https://phabricator.wikimedia.org/source/mediawiki-libs-Timestamp/browse/master/src/ConvertibleTimestamp.php;4e53b859a9580c55958078f46dd4f3a44d0fcaa0$57-109?as=source&amp;amp;blame=off}&lt;br /&gt;
	 */&lt;br /&gt;
	this.setWatchlistExpiry = function(watchlistExpiry) {&lt;br /&gt;
		if (typeof watchlistExpiry === &#039;undefined&#039;) {&lt;br /&gt;
			watchlistExpiry = &#039;infinity&#039;;&lt;br /&gt;
		} else if (watchlistExpiry instanceof Morebits.Date || watchlistExpiry instanceof Date) {&lt;br /&gt;
			watchlistExpiry = watchlistExpiry.toISOString();&lt;br /&gt;
		}&lt;br /&gt;
		ctx.watchlistExpiry = watchlistExpiry;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * If editing a talk page, set whether to subscribe to any talk&lt;br /&gt;
	 * page thread created by the edit.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {boolean} subscribe&lt;br /&gt;
	 */&lt;br /&gt;
	this.setDiscussionToolsAutoSubscribe = function(subscribe) {&lt;br /&gt;
		ctx.discussionToolsAutoSubscribe = subscribe;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {boolean} [followRedirect=false] -&lt;br /&gt;
	 * - `true`: a maximum of one redirect will be followed. In the event&lt;br /&gt;
	 * of a redirect, a message is displayed to the user and the redirect&lt;br /&gt;
	 * target can be retrieved with getPageName().&lt;br /&gt;
	 * - `false`: (default) the requested pageName will be used without regard to any redirect.&lt;br /&gt;
	 * @param {boolean} [followCrossNsRedirect=true] - Not applicable if `followRedirect` is not set true.&lt;br /&gt;
	 * - `true`: (default) follow redirect even if it is a cross-namespace redirect&lt;br /&gt;
	 * - `false`: don&#039;t follow redirect if it is cross-namespace, edit the redirect itself.&lt;br /&gt;
	 */&lt;br /&gt;
	this.setFollowRedirect = function(followRedirect, followCrossNsRedirect) {&lt;br /&gt;
		if (ctx.pageLoaded) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: cannot change redirect setting after the page has been loaded!&#039;);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		ctx.followRedirect = followRedirect;&lt;br /&gt;
		ctx.followCrossNsRedirect = typeof followCrossNsRedirect !== &#039;undefined&#039; ? followCrossNsRedirect : ctx.followCrossNsRedirect;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// lookup-creation setter function&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {boolean} flag - If set true, the author and timestamp of&lt;br /&gt;
	 * the first non-redirect version of the page is retrieved.&lt;br /&gt;
	 *&lt;br /&gt;
	 * Warning:&lt;br /&gt;
	 * 1. If there are no revisions among the first 50 that are&lt;br /&gt;
	 * non-redirects, or if there are less 50 revisions and all are&lt;br /&gt;
	 * redirects, the original creation is retrieved.&lt;br /&gt;
	 * 2. Revisions that the user is not privileged to access&lt;br /&gt;
	 * (revdeled/suppressed) will be treated as non-redirects.&lt;br /&gt;
	 * 3. Must not be used when the page has a non-wikitext contentmodel&lt;br /&gt;
	 * such as Modulespace Lua or user JavaScript/CSS.&lt;br /&gt;
	 */&lt;br /&gt;
	this.setLookupNonRedirectCreator = function(flag) {&lt;br /&gt;
		ctx.lookupNonRedirectCreator = flag;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Move-related setter functions&lt;br /&gt;
	/** @param {string} destination */&lt;br /&gt;
	this.setMoveDestination = function(destination) {&lt;br /&gt;
		ctx.moveDestination = destination;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {boolean} flag */&lt;br /&gt;
	this.setMoveTalkPage = function(flag) {&lt;br /&gt;
		ctx.moveTalkPage = !!flag;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {boolean} flag */&lt;br /&gt;
	this.setMoveSubpages = function(flag) {&lt;br /&gt;
		ctx.moveSubpages = !!flag;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @param {boolean} flag */&lt;br /&gt;
	this.setMoveSuppressRedirect = function(flag) {&lt;br /&gt;
		ctx.moveSuppressRedirect = !!flag;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Protect-related setter functions&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {string} level - The right required for the specific action&lt;br /&gt;
	 * e.g. autoconfirmed, sysop, templateeditor, extendedconfirmed&lt;br /&gt;
	 * (enWiki-only).&lt;br /&gt;
	 * @param {string} [expiry=infinity]&lt;br /&gt;
	 */&lt;br /&gt;
	this.setEditProtection = function(level, expiry) {&lt;br /&gt;
		ctx.protectEdit = { level: level, expiry: expiry || &#039;infinity&#039; };&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	this.setMoveProtection = function(level, expiry) {&lt;br /&gt;
		ctx.protectMove = { level: level, expiry: expiry || &#039;infinity&#039; };&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	this.setCreateProtection = function(level, expiry) {&lt;br /&gt;
		ctx.protectCreate = { level: level, expiry: expiry || &#039;infinity&#039; };&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	this.setCascadingProtection = function(flag) {&lt;br /&gt;
		ctx.protectCascade = !!flag;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	this.suppressProtectWarning = function() {&lt;br /&gt;
		ctx.suppressProtectWarning = true;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Delete-related setter&lt;br /&gt;
	/** @param {boolean} flag */&lt;br /&gt;
	this.setDeleteTalkPage = function(flag) {&lt;br /&gt;
		ctx.deleteTalkPage = !!flag;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Undelete-related setter&lt;br /&gt;
	/** @param {boolean} flag */&lt;br /&gt;
	this.setUndeleteTalkPage = function(flag) {&lt;br /&gt;
		ctx.undeleteTalkPage = !!flag;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Revert-related getters/setters:&lt;br /&gt;
	this.setOldID = function(oldID) {&lt;br /&gt;
		ctx.revertOldID = oldID;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} The current revision ID of the page */&lt;br /&gt;
	this.getCurrentID = function() {&lt;br /&gt;
		return ctx.revertCurID;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} Last editor of the page */&lt;br /&gt;
	this.getRevisionUser = function() {&lt;br /&gt;
		return ctx.revertUser;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @return {string} ISO 8601 timestamp at which the page was last edited. */&lt;br /&gt;
	this.getLastEditTime = function() {&lt;br /&gt;
		return ctx.lastEditTime;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Miscellaneous getters/setters:&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define an object for use in a callback function.&lt;br /&gt;
	 *&lt;br /&gt;
	 * `callbackParameters` is for use by the caller only. The parameters&lt;br /&gt;
	 * allow a caller to pass the proper context into its callback&lt;br /&gt;
	 * function.  Callers must ensure that any changes to the&lt;br /&gt;
	 * callbackParameters object within a `load()` callback still permit a&lt;br /&gt;
	 * proper re-entry into the `load()` callback if an edit conflict is&lt;br /&gt;
	 * detected upon calling `save()`.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Object} callbackParameters&lt;br /&gt;
	 */&lt;br /&gt;
	this.setCallbackParameters = function(callbackParameters) {&lt;br /&gt;
		ctx.callbackParameters = callbackParameters;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {Object} - The object previously set by `setCallbackParameters()`.&lt;br /&gt;
	 */&lt;br /&gt;
	this.getCallbackParameters = function() {&lt;br /&gt;
		return ctx.callbackParameters;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {Morebits.Status} statusElement&lt;br /&gt;
	 */&lt;br /&gt;
	this.setStatusElement = function(statusElement) {&lt;br /&gt;
		ctx.statusElement = statusElement;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {Morebits.Status} Status element created by the constructor.&lt;br /&gt;
	 */&lt;br /&gt;
	this.getStatusElement = function() {&lt;br /&gt;
		return ctx.statusElement;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param {string} level - The right required for edits not to require&lt;br /&gt;
	 * review. Possible options: none, autoconfirmed, review (not on enWiki).&lt;br /&gt;
	 * @param {string} [expiry=infinity]&lt;br /&gt;
	 */&lt;br /&gt;
	this.setFlaggedRevs = function(level, expiry) {&lt;br /&gt;
		ctx.flaggedRevs = { level: level, expiry: expiry || &#039;infinity&#039; };&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {boolean} True if the page existed on the wiki when it was last loaded.&lt;br /&gt;
	 */&lt;br /&gt;
	this.exists = function() {&lt;br /&gt;
		return ctx.pageExists;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {string} Page ID of the page loaded. 0 if the page doesn&#039;t&lt;br /&gt;
	 * exist.&lt;br /&gt;
	 */&lt;br /&gt;
	this.getPageID = function() {&lt;br /&gt;
		return ctx.pageID;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {string} - Content model of the page.  Possible values&lt;br /&gt;
	 * include (but may not be limited to): `wikitext`, `javascript`,&lt;br /&gt;
	 * `css`, `json`, `Scribunto`, `sanitized-css`, `MassMessageListContent`.&lt;br /&gt;
	 * Also gettable via `mw.config.get(&#039;wgPageContentModel&#039;)`.&lt;br /&gt;
	 */&lt;br /&gt;
	this.getContentModel = function() {&lt;br /&gt;
		return ctx.contentModel;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {boolean|string} - Watched status of the page. Boolean&lt;br /&gt;
	 * unless it&#039;s being watched temporarily, in which case returns the&lt;br /&gt;
	 * expiry string.&lt;br /&gt;
	 */&lt;br /&gt;
	this.getWatched = function() {&lt;br /&gt;
		return ctx.watched;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {string} ISO 8601 timestamp at which the page was last loaded.&lt;br /&gt;
	 */&lt;br /&gt;
	this.getLoadTime = function() {&lt;br /&gt;
		return ctx.loadTime;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {string} The user who created the page following `lookupCreation()`.&lt;br /&gt;
	 */&lt;br /&gt;
	this.getCreator = function() {&lt;br /&gt;
		return ctx.creator;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @return {string} The ISOString timestamp of page creation following `lookupCreation()`.&lt;br /&gt;
	 */&lt;br /&gt;
	this.getCreationTimestamp = function() {&lt;br /&gt;
		return ctx.timestamp;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** @return {boolean} whether or not you can edit the page */&lt;br /&gt;
	this.canEdit = function() {&lt;br /&gt;
		return !!ctx.testActions &amp;amp;&amp;amp; ctx.testActions.includes(&#039;edit&#039;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Retrieves the username of the user who created the page as well as&lt;br /&gt;
	 * the timestamp of creation.  The username can be retrieved using the&lt;br /&gt;
	 * `getCreator()` function; the timestamp can be retrieved using the&lt;br /&gt;
	 * `getCreationTimestamp()` function.&lt;br /&gt;
	 * Prior to June 2019 known as `lookupCreator()`.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} onSuccess - Callback function to be called when&lt;br /&gt;
	 * the username and timestamp are found within the callback.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function to be called when&lt;br /&gt;
	 * the lookup fails&lt;br /&gt;
	 */&lt;br /&gt;
	this.lookupCreation = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onLookupCreationSuccess = onSuccess;&lt;br /&gt;
		ctx.onLookupCreationFailure = onFailure || emptyFunction;&lt;br /&gt;
		if (!onSuccess) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: no onSuccess callback provided to lookupCreation()!&#039;);&lt;br /&gt;
			ctx.onLookupCreationFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;query&#039;,&lt;br /&gt;
			prop: &#039;revisions&#039;,&lt;br /&gt;
			titles: ctx.pageName,&lt;br /&gt;
			rvlimit: 1,&lt;br /&gt;
			rvprop: &#039;user|timestamp&#039;,&lt;br /&gt;
			rvdir: &#039;newer&#039;,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Only the wikitext content model can reliably handle&lt;br /&gt;
		// rvsection, others return an error when paired with the&lt;br /&gt;
		// content rvprop. Relatedly, non-wikitext models don&#039;t&lt;br /&gt;
		// understand the #REDIRECT concept, so we shouldn&#039;t attempt&lt;br /&gt;
		// the redirect resolution in fnLookupCreationSuccess&lt;br /&gt;
		if (ctx.lookupNonRedirectCreator) {&lt;br /&gt;
			query.rvsection = 0;&lt;br /&gt;
			query.rvprop += &#039;|content&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (ctx.followRedirect) {&lt;br /&gt;
			query.redirects = &#039;&#039;; // follow all redirects&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.lookupCreationApi = new Morebits.wiki.Api(&#039;Retrieving page creation information&#039;, query, fnLookupCreationSuccess, ctx.statusElement, ctx.onLookupCreationFailure);&lt;br /&gt;
		ctx.lookupCreationApi.setParent(this);&lt;br /&gt;
		ctx.lookupCreationApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Reverts a page to `revertOldID` set by `setOldID`.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} [onSuccess] - Callback function to run on success.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function to run on failure.&lt;br /&gt;
	 */&lt;br /&gt;
	this.revert = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onSaveSuccess = onSuccess;&lt;br /&gt;
		ctx.onSaveFailure = onFailure || emptyFunction;&lt;br /&gt;
&lt;br /&gt;
		if (!ctx.revertOldID) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: revision ID to revert to was not set before revert!&#039;);&lt;br /&gt;
			ctx.onSaveFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.editMode = &#039;revert&#039;;&lt;br /&gt;
		this.load(fnAutoSave, ctx.onSaveFailure);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Moves a page to another title.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} [onSuccess] - Callback function to run on success.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function to run on failure.&lt;br /&gt;
	 */&lt;br /&gt;
	this.move = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onMoveSuccess = onSuccess;&lt;br /&gt;
		ctx.onMoveFailure = onFailure || emptyFunction;&lt;br /&gt;
&lt;br /&gt;
		if (!fnPreflightChecks.call(this, &#039;move&#039;, ctx.onMoveFailure)) {&lt;br /&gt;
			return; // abort&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!ctx.moveDestination) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: destination page name was not set before move!&#039;);&lt;br /&gt;
			ctx.onMoveFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;move&#039;)) {&lt;br /&gt;
			fnProcessMove.call(this, this);&lt;br /&gt;
		} else {&lt;br /&gt;
			const query = fnNeedTokenInfoQuery(&#039;move&#039;);&lt;br /&gt;
&lt;br /&gt;
			ctx.moveApi = new Morebits.wiki.Api(&#039;retrieving token...&#039;, query, fnProcessMove, ctx.statusElement, ctx.onMoveFailure);&lt;br /&gt;
			ctx.moveApi.setParent(this);&lt;br /&gt;
			ctx.moveApi.post();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Marks the page as patrolled, using `rcid` (if available) or `revid`.&lt;br /&gt;
	 *&lt;br /&gt;
	 * Patrolling as such doesn&#039;t need to rely on loading the page in&lt;br /&gt;
	 * question; simply passing a revid to the API is sufficient, so in&lt;br /&gt;
	 * those cases just using {@link Morebits.wiki.Api} is probably preferable.&lt;br /&gt;
	 *&lt;br /&gt;
	 * No error handling since we don&#039;t actually care about the errors.&lt;br /&gt;
	 */&lt;br /&gt;
	this.patrol = function() {&lt;br /&gt;
		if (!Morebits.userIsSysop &amp;amp;&amp;amp; !Morebits.userIsInGroup(&#039;patroller&#039;)) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// If a link is present, don&#039;t need to check if it&#039;s patrolled&lt;br /&gt;
		if ($(&#039;.patrollink&#039;).length) {&lt;br /&gt;
			const patrolhref = $(&#039;.patrollink a&#039;).attr(&#039;href&#039;);&lt;br /&gt;
			ctx.rcid = mw.util.getParamValue(&#039;rcid&#039;, patrolhref);&lt;br /&gt;
			fnProcessPatrol(this, this);&lt;br /&gt;
		} else {&lt;br /&gt;
			const patrolQuery = {&lt;br /&gt;
				action: &#039;query&#039;,&lt;br /&gt;
				prop: &#039;info&#039;,&lt;br /&gt;
				meta: &#039;tokens&#039;,&lt;br /&gt;
				type: &#039;patrol&#039;, // as long as we&#039;re querying, might as well get a token&lt;br /&gt;
				list: &#039;recentchanges&#039;, // check if the page is unpatrolled&lt;br /&gt;
				titles: ctx.pageName,&lt;br /&gt;
				rcprop: &#039;patrolled&#039;,&lt;br /&gt;
				rctitle: ctx.pageName,&lt;br /&gt;
				rclimit: 1,&lt;br /&gt;
				format: &#039;json&#039;&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			ctx.patrolApi = new Morebits.wiki.Api(&#039;retrieving token...&#039;, patrolQuery, fnProcessPatrol);&lt;br /&gt;
			ctx.patrolApi.setParent(this);&lt;br /&gt;
			ctx.patrolApi.post();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Marks the page as reviewed by the PageTriage extension.&lt;br /&gt;
	 *&lt;br /&gt;
	 * Will, by it&#039;s nature, mark as patrolled as well. Falls back to&lt;br /&gt;
	 * patrolling if not in an appropriate namespace.&lt;br /&gt;
	 *&lt;br /&gt;
	 * Doesn&#039;t inherently rely on loading the page in question; simply&lt;br /&gt;
	 * passing a `pageid` to the API is sufficient, so in those cases just&lt;br /&gt;
	 * using {@link Morebits.wiki.Api} is probably preferable.&lt;br /&gt;
	 *&lt;br /&gt;
	 * Will first check if the page is queued via&lt;br /&gt;
	 * {@link Morebits.wiki.Page~fnProcessTriageList|fnProcessTriageList}.&lt;br /&gt;
	 *&lt;br /&gt;
	 * No error handling since we don&#039;t actually care about the errors.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @see {@link https://www.mediawiki.org/wiki/Extension:PageTriage} Referred to as &amp;quot;review&amp;quot; on-wiki.&lt;br /&gt;
	 */&lt;br /&gt;
	this.triage = function() {&lt;br /&gt;
		// Fall back to patrol if not a valid triage namespace&lt;br /&gt;
		if (!mw.config.get(&#039;pageTriageNamespaces&#039;).includes(new mw.Title(ctx.pageName).getNamespaceId())) {&lt;br /&gt;
			this.patrol();&lt;br /&gt;
		} else {&lt;br /&gt;
			if (!Morebits.userIsSysop &amp;amp;&amp;amp; !Morebits.userIsInGroup(&#039;patroller&#039;)) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// If on the page in question, don&#039;t need to query for page ID&lt;br /&gt;
			if (new mw.Title(Morebits.pageNameNorm).getPrefixedText() === new mw.Title(ctx.pageName).getPrefixedText()) {&lt;br /&gt;
				ctx.pageID = mw.config.get(&#039;wgArticleId&#039;);&lt;br /&gt;
				fnProcessTriageList(this, this);&lt;br /&gt;
			} else {&lt;br /&gt;
				const query = fnNeedTokenInfoQuery(&#039;triage&#039;);&lt;br /&gt;
&lt;br /&gt;
				ctx.triageApi = new Morebits.wiki.Api(&#039;retrieving token...&#039;, query, fnProcessTriageList);&lt;br /&gt;
				ctx.triageApi.setParent(this);&lt;br /&gt;
				ctx.triageApi.post();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// |delete| is a reserved word in some flavours of JS&lt;br /&gt;
	/**&lt;br /&gt;
	 * Deletes a page (for admins only).&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} [onSuccess] - Callback function to run on success.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function to run on failure.&lt;br /&gt;
	 */&lt;br /&gt;
	this.deletePage = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onDeleteSuccess = onSuccess;&lt;br /&gt;
		ctx.onDeleteFailure = onFailure || emptyFunction;&lt;br /&gt;
&lt;br /&gt;
		if (!fnPreflightChecks.call(this, &#039;delete&#039;, ctx.onDeleteFailure)) {&lt;br /&gt;
			return; // abort&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;delete&#039;)) {&lt;br /&gt;
			fnProcessDelete.call(this, this);&lt;br /&gt;
		} else {&lt;br /&gt;
			const query = fnNeedTokenInfoQuery(&#039;delete&#039;);&lt;br /&gt;
&lt;br /&gt;
			ctx.deleteApi = new Morebits.wiki.Api(&#039;retrieving token...&#039;, query, fnProcessDelete, ctx.statusElement, ctx.onDeleteFailure);&lt;br /&gt;
			ctx.deleteApi.setParent(this);&lt;br /&gt;
			ctx.deleteApi.post();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Undeletes a page (for admins only).&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} [onSuccess] - Callback function to run on success.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function to run on failure.&lt;br /&gt;
	 */&lt;br /&gt;
	this.undeletePage = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onUndeleteSuccess = onSuccess;&lt;br /&gt;
		ctx.onUndeleteFailure = onFailure || emptyFunction;&lt;br /&gt;
&lt;br /&gt;
		if (!fnPreflightChecks.call(this, &#039;undelete&#039;, ctx.onUndeleteFailure)) {&lt;br /&gt;
			return; // abort&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;undelete&#039;)) {&lt;br /&gt;
			fnProcessUndelete.call(this, this);&lt;br /&gt;
		} else {&lt;br /&gt;
			const query = fnNeedTokenInfoQuery(&#039;undelete&#039;);&lt;br /&gt;
&lt;br /&gt;
			ctx.undeleteApi = new Morebits.wiki.Api(&#039;retrieving token...&#039;, query, fnProcessUndelete, ctx.statusElement, ctx.onUndeleteFailure);&lt;br /&gt;
			ctx.undeleteApi.setParent(this);&lt;br /&gt;
			ctx.undeleteApi.post();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Protects a page (for admins only).&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} [onSuccess] - Callback function to run on success.&lt;br /&gt;
	 * @param {Function} [onFailure] - Callback function to run on failure.&lt;br /&gt;
	 */&lt;br /&gt;
	this.protect = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onProtectSuccess = onSuccess;&lt;br /&gt;
		ctx.onProtectFailure = onFailure || emptyFunction;&lt;br /&gt;
&lt;br /&gt;
		if (!fnPreflightChecks.call(this, &#039;protect&#039;, ctx.onProtectFailure)) {&lt;br /&gt;
			return; // abort&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!ctx.protectEdit &amp;amp;&amp;amp; !ctx.protectMove &amp;amp;&amp;amp; !ctx.protectCreate) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: you must set edit and/or move and/or create protection before calling protect()!&#039;);&lt;br /&gt;
			ctx.onProtectFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// because of the way MW API interprets protection levels&lt;br /&gt;
		// (absolute, not differential), we always need to request&lt;br /&gt;
		// protection levels from the server&lt;br /&gt;
		const query = fnNeedTokenInfoQuery(&#039;protect&#039;);&lt;br /&gt;
&lt;br /&gt;
		ctx.protectApi = new Morebits.wiki.Api(&#039;retrieving token...&#039;, query, fnProcessProtect, ctx.statusElement, ctx.onProtectFailure);&lt;br /&gt;
		ctx.protectApi.setParent(this);&lt;br /&gt;
		ctx.protectApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Apply FlaggedRevs protection settings.  Only works on wikis where&lt;br /&gt;
	 * the extension is installed (`$wgFlaggedRevsProtection = true`&lt;br /&gt;
	 * i.e. where FlaggedRevs settings appear on the &amp;quot;protect&amp;quot; tab).&lt;br /&gt;
	 *&lt;br /&gt;
	 * @see {@link https://www.mediawiki.org/wiki/Extension:FlaggedRevs}&lt;br /&gt;
	 * Referred to as &amp;quot;pending changes&amp;quot; on-wiki.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} [onSuccess]&lt;br /&gt;
	 * @param {Function} [onFailure]&lt;br /&gt;
	 */&lt;br /&gt;
	this.stabilize = function(onSuccess, onFailure) {&lt;br /&gt;
		ctx.onStabilizeSuccess = onSuccess;&lt;br /&gt;
		ctx.onStabilizeFailure = onFailure || emptyFunction;&lt;br /&gt;
&lt;br /&gt;
		if (!fnPreflightChecks.call(this, &#039;FlaggedRevs&#039;, ctx.onStabilizeFailure)) {&lt;br /&gt;
			return; // abort&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!ctx.flaggedRevs) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: you must set flaggedRevs before calling stabilize()!&#039;);&lt;br /&gt;
			ctx.onStabilizeFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;stabilize&#039;)) {&lt;br /&gt;
			fnProcessStabilize.call(this, this);&lt;br /&gt;
		} else {&lt;br /&gt;
			const query = fnNeedTokenInfoQuery(&#039;stabilize&#039;);&lt;br /&gt;
&lt;br /&gt;
			ctx.stabilizeApi = new Morebits.wiki.Api(&#039;retrieving token...&#039;, query, fnProcessStabilize, ctx.statusElement, ctx.onStabilizeFailure);&lt;br /&gt;
			ctx.stabilizeApi.setParent(this);&lt;br /&gt;
			ctx.stabilizeApi.post();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/*&lt;br /&gt;
	 * Private member functions&lt;br /&gt;
	 * These are not exposed outside&lt;br /&gt;
	 */&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Determines whether we can save an API call by using the csrf token&lt;br /&gt;
	 * sent with the page HTML, or whether we need to ask the server for&lt;br /&gt;
	 * more info (e.g. protection or watchlist expiry).&lt;br /&gt;
	 *&lt;br /&gt;
	 * Currently used for `append`, `prepend`, `newSection`, `move`,&lt;br /&gt;
	 * `stabilize`, `deletePage`, and `undeletePage`. Not used for&lt;br /&gt;
	 * `protect` since it always needs to request protection status.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} [action=edit] - The action being undertaken, e.g.&lt;br /&gt;
	 * &amp;quot;edit&amp;quot; or &amp;quot;delete&amp;quot;. In practice, only &amp;quot;edit&amp;quot; or &amp;quot;notedit&amp;quot; matters.&lt;br /&gt;
	 * @return {boolean}&lt;br /&gt;
	 */&lt;br /&gt;
	var fnCanUseMwUserToken = function(action = &#039;edit&#039;) {&lt;br /&gt;
		// If a watchlist expiry is set, we must always load the page&lt;br /&gt;
		// to avoid overwriting indefinite protection.  Of course, not&lt;br /&gt;
		// needed if setting indefinite watching!&lt;br /&gt;
		if (ctx.watchlistExpiry &amp;amp;&amp;amp; !Morebits.string.isInfinity(ctx.watchlistExpiry)) {&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// API-based redirect resolution only works for action=query and&lt;br /&gt;
		// action=edit in append/prepend/new modes&lt;br /&gt;
		if (ctx.followRedirect) {&lt;br /&gt;
			if (!ctx.followCrossNsRedirect) {&lt;br /&gt;
				return false; // must load the page to check for cross namespace redirects&lt;br /&gt;
			}&lt;br /&gt;
			if (action !== &#039;edit&#039; || (ctx.editMode === &#039;all&#039; || ctx.editMode === &#039;revert&#039;)) {&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// do we need to fetch the edit protection expiry?&lt;br /&gt;
		if (Morebits.userIsSysop &amp;amp;&amp;amp; !ctx.suppressProtectWarning) {&lt;br /&gt;
			if (new mw.Title(Morebits.pageNameNorm).getPrefixedText() !== new mw.Title(ctx.pageName).getPrefixedText()) {&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// wgRestrictionEdit is null on non-existent pages,&lt;br /&gt;
			// so this neatly handles nonexistent pages&lt;br /&gt;
			const editRestriction = mw.config.get(&#039;wgRestrictionEdit&#039;);&lt;br /&gt;
			if (!editRestriction || editRestriction.includes(&#039;sysop&#039;)) {&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return !!mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * When functions can&#039;t use&lt;br /&gt;
	 * {@link Morebits.wiki.Page~fnCanUseMwUserToken|fnCanUseMwUserToken}&lt;br /&gt;
	 * or require checking protection or watched status, maintain the query&lt;br /&gt;
	 * in one place. Used for {@link Morebits.wiki.Page#deletePage|delete},&lt;br /&gt;
	 * {@link Morebits.wiki.Page#undeletePage|undelete},&lt;br /&gt;
	 * {@link Morebits.wiki.Page#protect|protect},&lt;br /&gt;
	 * {@link Morebits.wiki.Page#stabilize|stabilize},&lt;br /&gt;
	 * and {@link Morebits.wiki.Page#move|move}&lt;br /&gt;
	 * (basically, just not {@link Morebits.wiki.Page#load|load}).&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} action - The action being undertaken, e.g. &amp;quot;edit&amp;quot; or&lt;br /&gt;
	 * &amp;quot;delete&amp;quot;.&lt;br /&gt;
	 * @return {Object} Appropriate query.&lt;br /&gt;
	 */&lt;br /&gt;
	var fnNeedTokenInfoQuery = function(action) {&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;query&#039;,&lt;br /&gt;
			meta: &#039;tokens&#039;,&lt;br /&gt;
			type: &#039;csrf&#039;,&lt;br /&gt;
			titles: ctx.pageName,&lt;br /&gt;
			prop: &#039;info&#039;,&lt;br /&gt;
			inprop: &#039;watched&#039;,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
		// Protection not checked for flagged-revs or non-sysop moves&lt;br /&gt;
		if (action !== &#039;stabilize&#039; &amp;amp;&amp;amp; (action !== &#039;move&#039; || Morebits.userIsSysop)) {&lt;br /&gt;
			query.inprop += &#039;|protection&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if (ctx.followRedirect &amp;amp;&amp;amp; action !== &#039;undelete&#039;) {&lt;br /&gt;
			query.redirects = &#039;&#039;; // follow all redirects&lt;br /&gt;
		}&lt;br /&gt;
		return query;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// callback from loadSuccess() for append(), prepend(), and newSection() threads&lt;br /&gt;
	var fnAutoSave = function(pageobj) {&lt;br /&gt;
		pageobj.save(ctx.onSaveSuccess, ctx.onSaveFailure);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// callback from loadApi.post()&lt;br /&gt;
	var fnLoadSuccess = function() {&lt;br /&gt;
		const response = ctx.loadApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
		if (!fnCheckPageName(response, ctx.onLoadFailure)) {&lt;br /&gt;
			return; // abort&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const page = response.pages[0];&lt;br /&gt;
		let rev;&lt;br /&gt;
		ctx.pageExists = !page.missing;&lt;br /&gt;
		if (ctx.pageExists) {&lt;br /&gt;
			rev = page.revisions[0];&lt;br /&gt;
			ctx.lastEditTime = rev.timestamp;&lt;br /&gt;
			ctx.pageText = rev.content;&lt;br /&gt;
			ctx.pageID = page.pageid;&lt;br /&gt;
		} else {&lt;br /&gt;
			ctx.pageText = &#039;&#039;; // allow for concatenation, etc.&lt;br /&gt;
			ctx.pageID = 0; // nonexistent in response, matches wgArticleId&lt;br /&gt;
		}&lt;br /&gt;
		ctx.csrfToken = response.tokens.csrftoken;&lt;br /&gt;
		if (!ctx.csrfToken) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Failed to retrieve edit token.&#039;);&lt;br /&gt;
			ctx.onLoadFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		ctx.loadTime = ctx.loadApi.getResponse().curtimestamp;&lt;br /&gt;
		if (!ctx.loadTime) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Failed to retrieve current timestamp.&#039;);&lt;br /&gt;
			ctx.onLoadFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.contentModel = page.contentmodel;&lt;br /&gt;
		ctx.watched = page.watchlistexpiry || page.watched;&lt;br /&gt;
&lt;br /&gt;
		// extract protection info, to alert admins when they are about to edit a protected page&lt;br /&gt;
		// Includes cascading protection&lt;br /&gt;
		if (Morebits.userIsSysop) {&lt;br /&gt;
			const editProt = page.protection.filter((pr) =&amp;gt; pr.type === &#039;edit&#039; &amp;amp;&amp;amp; pr.level === &#039;sysop&#039;).pop();&lt;br /&gt;
			if (editProt) {&lt;br /&gt;
				ctx.fullyProtected = editProt.expiry;&lt;br /&gt;
			} else {&lt;br /&gt;
				ctx.fullyProtected = false;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.revertCurID = page.lastrevid;&lt;br /&gt;
&lt;br /&gt;
		const testactions = page.actions;&lt;br /&gt;
		ctx.testActions = []; // was null&lt;br /&gt;
		Object.keys(testactions).forEach((action) =&amp;gt; {&lt;br /&gt;
			if (testactions[action]) {&lt;br /&gt;
				ctx.testActions.push(action);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		if (ctx.editMode === &#039;revert&#039;) {&lt;br /&gt;
			ctx.revertCurID = rev &amp;amp;&amp;amp; rev.revid;&lt;br /&gt;
			if (!ctx.revertCurID) {&lt;br /&gt;
				ctx.statusElement.error(&#039;Failed to retrieve current revision ID.&#039;);&lt;br /&gt;
				ctx.onLoadFailure(this);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			ctx.revertUser = rev &amp;amp;&amp;amp; rev.user;&lt;br /&gt;
			if (!ctx.revertUser) {&lt;br /&gt;
				if (rev &amp;amp;&amp;amp; rev.userhidden) { // username was RevDel&#039;d or oversighted&lt;br /&gt;
					ctx.revertUser = &#039;&amp;lt;username hidden&amp;gt;&#039;;&lt;br /&gt;
				} else {&lt;br /&gt;
					ctx.statusElement.error(&#039;Failed to retrieve user who made the revision.&#039;);&lt;br /&gt;
					ctx.onLoadFailure(this);&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// set revert edit summary&lt;br /&gt;
			ctx.editSummary = &#039;[[Help:Revert|Reverted]] to revision &#039; + ctx.revertOldID + &#039; by &#039; + ctx.revertUser + &#039;: &#039; + ctx.editSummary;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.pageLoaded = true;&lt;br /&gt;
&lt;br /&gt;
		// alert(&amp;quot;Generate edit conflict now&amp;quot;);  // for testing edit conflict recovery logic&lt;br /&gt;
		ctx.onLoadSuccess(this); // invoke callback&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// helper function to parse the page name returned from the API&lt;br /&gt;
	var fnCheckPageName = function(response, onFailure) {&lt;br /&gt;
		if (!onFailure) {&lt;br /&gt;
			onFailure = emptyFunction;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const page = response.pages &amp;amp;&amp;amp; response.pages[0];&lt;br /&gt;
		if (page) {&lt;br /&gt;
			// check for invalid titles&lt;br /&gt;
			if (page.invalid) {&lt;br /&gt;
				ctx.statusElement.error(&#039;The page title is invalid: &#039; + ctx.pageName);&lt;br /&gt;
				onFailure(this);&lt;br /&gt;
				return false; // abort&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// retrieve actual title of the page after normalization and redirects&lt;br /&gt;
			const resolvedName = page.title;&lt;br /&gt;
&lt;br /&gt;
			if (response.redirects) {&lt;br /&gt;
				// check for cross-namespace redirect:&lt;br /&gt;
				const origNs = new mw.Title(ctx.pageName).namespace;&lt;br /&gt;
				const newNs = new mw.Title(resolvedName).namespace;&lt;br /&gt;
				if (origNs !== newNs &amp;amp;&amp;amp; !ctx.followCrossNsRedirect) {&lt;br /&gt;
					ctx.statusElement.error(ctx.pageName + &#039; is a cross-namespace redirect to &#039; + resolvedName + &#039;, aborted&#039;);&lt;br /&gt;
					onFailure(this);&lt;br /&gt;
					return false;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// only notify user for redirects, not normalization&lt;br /&gt;
				new Morebits.Status(&#039;Note&#039;, &#039;Redirected from &#039; + ctx.pageName + &#039; to &#039; + resolvedName);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			ctx.pageName = resolvedName; // update to redirect target or normalized name&lt;br /&gt;
&lt;br /&gt;
		} else {&lt;br /&gt;
			// could be a circular redirect or other problem&lt;br /&gt;
			ctx.statusElement.error(&#039;Could not resolve redirects for: &#039; + ctx.pageName);&lt;br /&gt;
			onFailure(this);&lt;br /&gt;
&lt;br /&gt;
			// force error to stay on the screen&lt;br /&gt;
			++Morebits.wiki.numberOfActionsLeft;&lt;br /&gt;
			return false; // abort&lt;br /&gt;
		}&lt;br /&gt;
		return true; // all OK&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Determine whether we should provide a watchlist expiry.  Will not&lt;br /&gt;
	 * do so if the page is currently permanently watched, or the current&lt;br /&gt;
	 * expiry is *after* the new, provided expiry.  Only handles strings&lt;br /&gt;
	 * recognized by {@link Morebits.Date} or relative timeframes with&lt;br /&gt;
	 * unit it can process.  Relies on the fact that fnCanUseMwUserToken&lt;br /&gt;
	 * requires page loading if a watchlistexpiry is provided, so we are&lt;br /&gt;
	 * ensured of knowing the watch status by the use of this.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {boolean}&lt;br /&gt;
	 */&lt;br /&gt;
	var fnApplyWatchlistExpiry = function() {&lt;br /&gt;
		if (ctx.watchlistExpiry) {&lt;br /&gt;
			if (!ctx.watched || Morebits.string.isInfinity(ctx.watchlistExpiry)) {&lt;br /&gt;
				return true;&lt;br /&gt;
			} else if (typeof ctx.watched === &#039;string&#039;) {&lt;br /&gt;
				let newExpiry;&lt;br /&gt;
				// Attempt to determine if the new expiry is a&lt;br /&gt;
				// relative (e.g. `1 month`) or absolute datetime&lt;br /&gt;
				const rel = ctx.watchlistExpiry.split(&#039; &#039;);&lt;br /&gt;
				try {&lt;br /&gt;
					newExpiry = new Morebits.Date().add(rel[0], rel[1]);&lt;br /&gt;
				} catch (e) {&lt;br /&gt;
					newExpiry = new Morebits.Date(ctx.watchlistExpiry);&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// If the date is valid, only use it if it extends the current expiry&lt;br /&gt;
				if (newExpiry.isValid()) {&lt;br /&gt;
					if (newExpiry.isAfter(new Morebits.Date(ctx.watched))) {&lt;br /&gt;
						return true;&lt;br /&gt;
					}&lt;br /&gt;
				} else {&lt;br /&gt;
					// If it&#039;s still not valid, hope it&#039;s a valid MW expiry format that&lt;br /&gt;
					// Morebits.Date doesn&#039;t recognize, so just default to using it.&lt;br /&gt;
					// This will also include minor typos.&lt;br /&gt;
					return true;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// callback from saveApi.post()&lt;br /&gt;
	var fnSaveSuccess = function() {&lt;br /&gt;
		ctx.editMode = &#039;all&#039;; // cancel append/prepend/newSection/revert modes&lt;br /&gt;
		const response = ctx.saveApi.getResponse();&lt;br /&gt;
&lt;br /&gt;
		// see if the API thinks we were successful&lt;br /&gt;
		if (response.edit.result === &#039;Success&#039;) {&lt;br /&gt;
&lt;br /&gt;
			// real success&lt;br /&gt;
			// default on success action - display link for edited page&lt;br /&gt;
			const link = document.createElement(&#039;a&#039;);&lt;br /&gt;
			link.setAttribute(&#039;href&#039;, mw.util.getUrl(ctx.pageName));&lt;br /&gt;
			link.appendChild(document.createTextNode(ctx.pageName));&lt;br /&gt;
			ctx.statusElement.info([&#039;completed (&#039;, link, &#039;)&#039;]);&lt;br /&gt;
			if (ctx.onSaveSuccess) {&lt;br /&gt;
				ctx.onSaveSuccess(this); // invoke callback&lt;br /&gt;
			}&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// errors here are only generated by extensions which hook APIEditBeforeSave within MediaWiki,&lt;br /&gt;
		// which as of 1.34.0-wmf.23 (Sept 2019) should only encompass captcha messages&lt;br /&gt;
		if (response.edit.captcha) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Could not save the page because the wiki server wanted you to fill out a CAPTCHA.&#039;);&lt;br /&gt;
		} else {&lt;br /&gt;
			ctx.statusElement.error(&#039;Unknown error received from API while saving page&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// force error to stay on the screen&lt;br /&gt;
		++Morebits.wiki.numberOfActionsLeft;&lt;br /&gt;
&lt;br /&gt;
		ctx.onSaveFailure(this);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// callback from saveApi.post()&lt;br /&gt;
	var fnSaveError = function() {&lt;br /&gt;
		const errorCode = ctx.saveApi.getErrorCode();&lt;br /&gt;
&lt;br /&gt;
		// check for edit conflict&lt;br /&gt;
		if (errorCode === &#039;editconflict&#039; &amp;amp;&amp;amp; ctx.conflictRetries++ &amp;lt; ctx.maxConflictRetries) {&lt;br /&gt;
&lt;br /&gt;
			// edit conflicts can occur when the page needs to be purged from the server cache&lt;br /&gt;
			const purgeQuery = {&lt;br /&gt;
				action: &#039;purge&#039;,&lt;br /&gt;
				titles: ctx.pageName // redirects are already resolved&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			const purgeApi = new Morebits.wiki.Api(&#039;Edit conflict detected, purging server cache&#039;, purgeQuery, (() =&amp;gt; {&lt;br /&gt;
				--Morebits.wiki.numberOfActionsLeft; // allow for normal completion if retry succeeds&lt;br /&gt;
&lt;br /&gt;
				ctx.statusElement.info(&#039;Edit conflict detected, reapplying edit&#039;);&lt;br /&gt;
				if (fnCanUseMwUserToken(&#039;edit&#039;)) {&lt;br /&gt;
					ctx.saveApi.post(); // necessarily append, prepend, or newSection, so this should work as desired&lt;br /&gt;
				} else {&lt;br /&gt;
					ctx.loadApi.post(); // reload the page and reapply the edit&lt;br /&gt;
				}&lt;br /&gt;
			}), ctx.statusElement);&lt;br /&gt;
			purgeApi.post();&lt;br /&gt;
&lt;br /&gt;
		// check for network or server error&lt;br /&gt;
		} else if ((errorCode === null || errorCode === undefined) &amp;amp;&amp;amp; ctx.retries++ &amp;lt; ctx.maxRetries) {&lt;br /&gt;
&lt;br /&gt;
			// the error might be transient, so try again&lt;br /&gt;
			ctx.statusElement.info(&#039;Save failed, retrying in 2 seconds ...&#039;);&lt;br /&gt;
			--Morebits.wiki.numberOfActionsLeft; // allow for normal completion if retry succeeds&lt;br /&gt;
&lt;br /&gt;
			// wait for sometime for client to regain connectivity&lt;br /&gt;
			sleep(2000).then(() =&amp;gt; {&lt;br /&gt;
				ctx.saveApi.post(); // give it another go!&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
		// hard error, give up&lt;br /&gt;
		} else {&lt;br /&gt;
			const response = ctx.saveApi.getResponse();&lt;br /&gt;
			const errorData = response.error || // bc error format&lt;br /&gt;
				response.errors[0].data; // html/wikitext/plaintext error format&lt;br /&gt;
&lt;br /&gt;
			switch (errorCode) {&lt;br /&gt;
&lt;br /&gt;
				case &#039;protectedpage&#039;:&lt;br /&gt;
					// non-admin attempting to edit a protected page - this gives a friendlier message than the default&lt;br /&gt;
					ctx.statusElement.error(&#039;Failed to save edit: Page is protected&#039;);&lt;br /&gt;
					break;&lt;br /&gt;
&lt;br /&gt;
				case &#039;abusefilter-disallowed&#039;:&lt;br /&gt;
					ctx.statusElement.error(&#039;The edit was disallowed by the edit filter: &amp;quot;&#039; + errorData.abusefilter.description + &#039;&amp;quot;.&#039;);&lt;br /&gt;
					break;&lt;br /&gt;
&lt;br /&gt;
				case &#039;abusefilter-warning&#039;:&lt;br /&gt;
					ctx.statusElement.error([&#039;A warning was returned by the edit filter: &amp;quot;&#039;, errorData.abusefilter.description, &#039;&amp;quot;. If you wish to proceed with the edit, please carry it out again. This warning will not appear a second time.&#039;]);&lt;br /&gt;
					// We should provide the user with a way to automatically retry the action if they so choose -&lt;br /&gt;
					// I can&#039;t see how to do this without creating a UI dependency on Morebits.wiki.Page though -- TTO&lt;br /&gt;
					break;&lt;br /&gt;
&lt;br /&gt;
				case &#039;spamblacklist&#039;:&lt;br /&gt;
					// If multiple items are blacklisted, we only return the first&lt;br /&gt;
					var spam = errorData.spamblacklist.matches[0];&lt;br /&gt;
					ctx.statusElement.error(&#039;Could not save the page because the URL &#039; + spam + &#039; is on the spam blacklist&#039;);&lt;br /&gt;
					break;&lt;br /&gt;
&lt;br /&gt;
				default:&lt;br /&gt;
					ctx.statusElement.error(&#039;Failed to save edit: &#039; + ctx.saveApi.getErrorText());&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			ctx.editMode = &#039;all&#039;; // cancel append/prepend/newSection/revert modes&lt;br /&gt;
			if (ctx.onSaveFailure) {&lt;br /&gt;
				ctx.onSaveFailure(this); // invoke callback&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const isTextRedirect = function(text) {&lt;br /&gt;
		if (!text) { // no text - content empty or inaccessible (revdelled or suppressed)&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		return Morebits.l10n.redirectTagAliases.some((tag) =&amp;gt; new RegExp(&#039;^\\s*&#039; + tag + &#039;\\W&#039;, &#039;i&#039;).test(text));&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnLookupCreationSuccess = function() {&lt;br /&gt;
		const response = ctx.lookupCreationApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
		if (!fnCheckPageName(response, ctx.onLookupCreationFailure)) {&lt;br /&gt;
			return; // abort&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const rev = response.pages[0].revisions &amp;amp;&amp;amp; response.pages[0].revisions[0];&lt;br /&gt;
		if (!rev) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Could not find any revisions of &#039; + ctx.pageName);&lt;br /&gt;
			ctx.onLookupCreationFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!ctx.lookupNonRedirectCreator || !isTextRedirect(rev.content)) {&lt;br /&gt;
&lt;br /&gt;
			ctx.creator = rev.user;&lt;br /&gt;
			if (!ctx.creator) {&lt;br /&gt;
				ctx.statusElement.error(&#039;Could not find name of page creator&#039;);&lt;br /&gt;
				ctx.onLookupCreationFailure(this);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			ctx.timestamp = rev.timestamp;&lt;br /&gt;
			if (!ctx.timestamp) {&lt;br /&gt;
				ctx.statusElement.error(&#039;Could not find timestamp of page creation&#039;);&lt;br /&gt;
				ctx.onLookupCreationFailure(this);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			ctx.statusElement.info(&#039;retrieved page creation information&#039;);&lt;br /&gt;
			ctx.onLookupCreationSuccess(this);&lt;br /&gt;
&lt;br /&gt;
		} else {&lt;br /&gt;
			ctx.lookupCreationApi.query.rvlimit = 50; // modify previous query to fetch more revisions&lt;br /&gt;
			ctx.lookupCreationApi.query.titles = ctx.pageName; // update pageName if redirect resolution took place in earlier query&lt;br /&gt;
&lt;br /&gt;
			ctx.lookupCreationApi = new Morebits.wiki.Api(&#039;Retrieving page creation information&#039;, ctx.lookupCreationApi.query, fnLookupNonRedirectCreator, ctx.statusElement, ctx.onLookupCreationFailure);&lt;br /&gt;
			ctx.lookupCreationApi.setParent(this);&lt;br /&gt;
			ctx.lookupCreationApi.post();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnLookupNonRedirectCreator = function() {&lt;br /&gt;
		const response = ctx.lookupCreationApi.getResponse().query;&lt;br /&gt;
		const revs = response.pages[0].revisions;&lt;br /&gt;
&lt;br /&gt;
		for (let i = 0; i &amp;lt; revs.length; i++) {&lt;br /&gt;
&lt;br /&gt;
			if (!isTextRedirect(revs[i].content)) {&lt;br /&gt;
				ctx.creator = revs[i].user;&lt;br /&gt;
				ctx.timestamp = revs[i].timestamp;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!ctx.creator) {&lt;br /&gt;
			// fallback to give first revision author if no non-redirect version in the first 50&lt;br /&gt;
			ctx.creator = revs[0].user;&lt;br /&gt;
			ctx.timestamp = revs[0].timestamp;&lt;br /&gt;
			if (!ctx.creator) {&lt;br /&gt;
				ctx.statusElement.error(&#039;Could not find name of page creator&#039;);&lt;br /&gt;
				ctx.onLookupCreationFailure(this);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
		if (!ctx.timestamp) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Could not find timestamp of page creation&#039;);&lt;br /&gt;
			ctx.onLookupCreationFailure(this);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.statusElement.info(&#039;retrieved page creation information&#039;);&lt;br /&gt;
		ctx.onLookupCreationSuccess(this);&lt;br /&gt;
&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Common checks for action methods. Used for move, undelete, delete,&lt;br /&gt;
	 * protect, stabilize.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} action - The action being checked.&lt;br /&gt;
	 * @param {string} onFailure - Failure callback.&lt;br /&gt;
	 * @return {boolean}&lt;br /&gt;
	 */&lt;br /&gt;
	var fnPreflightChecks = function(action, onFailure) {&lt;br /&gt;
		// if a non-admin tries to do this, don&#039;t bother&lt;br /&gt;
		if (!Morebits.userIsSysop &amp;amp;&amp;amp; action !== &#039;move&#039;) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Cannot &#039; + action + &#039;page : only admins can do that&#039;);&lt;br /&gt;
			onFailure(this);&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!ctx.editSummary) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Internal error: &#039; + action + &#039; reason not set (use setEditSummary function)!&#039;);&lt;br /&gt;
			onFailure(this);&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		return true; // all OK&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Common checks for fnProcess functions (`fnProcessDelete`, `fnProcessMove`, etc.&lt;br /&gt;
	 * Used for move, undelete, delete, protect, stabilize.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} action - The action being checked.&lt;br /&gt;
	 * @param {string} onFailure - Failure callback.&lt;br /&gt;
	 * @param {string} response - The response document from the API call.&lt;br /&gt;
	 * @return {boolean}&lt;br /&gt;
	 */&lt;br /&gt;
	const fnProcessChecks = function(action, onFailure, response) {&lt;br /&gt;
		const missing = response.pages[0].missing;&lt;br /&gt;
&lt;br /&gt;
		// No undelete as an existing page could have deleted revisions&lt;br /&gt;
		const actionMissing = missing &amp;amp;&amp;amp; [&#039;delete&#039;, &#039;stabilize&#039;, &#039;move&#039;].includes(action);&lt;br /&gt;
		const protectMissing = action === &#039;protect&#039; &amp;amp;&amp;amp; missing &amp;amp;&amp;amp; (ctx.protectEdit || ctx.protectMove);&lt;br /&gt;
		const saltMissing = action === &#039;protect&#039; &amp;amp;&amp;amp; !missing &amp;amp;&amp;amp; ctx.protectCreate;&lt;br /&gt;
&lt;br /&gt;
		if (actionMissing || protectMissing || saltMissing) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Cannot &#039; + action + &#039; the page because it &#039; + (missing ? &#039;no longer&#039; : &#039;already&#039;) + &#039; exists&#039;);&lt;br /&gt;
			onFailure(this);&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Delete, undelete, move&lt;br /&gt;
		// extract protection info&lt;br /&gt;
		let editprot;&lt;br /&gt;
		if (action === &#039;undelete&#039;) {&lt;br /&gt;
			editprot = response.pages[0].protection.filter((pr) =&amp;gt; pr.type === &#039;create&#039; &amp;amp;&amp;amp; pr.level === &#039;sysop&#039;).pop();&lt;br /&gt;
		} else if (action === &#039;delete&#039; || action === &#039;move&#039;) {&lt;br /&gt;
			editprot = response.pages[0].protection.filter((pr) =&amp;gt; pr.type === &#039;edit&#039; &amp;amp;&amp;amp; pr.level === &#039;sysop&#039;).pop();&lt;br /&gt;
		}&lt;br /&gt;
		if (editprot &amp;amp;&amp;amp; !ctx.suppressProtectWarning &amp;amp;&amp;amp;&lt;br /&gt;
			!confirm(&#039;You are about to &#039; + action + &#039; the fully protected page &amp;quot;&#039; + ctx.pageName +&lt;br /&gt;
			(editprot.expiry === &#039;infinity&#039; ? &#039;&amp;quot; (protected indefinitely)&#039; : &#039;&amp;quot; (protection expiring &#039; + new Morebits.Date(editprot.expiry).calendar(&#039;utc&#039;) + &#039; (UTC))&#039;) +&lt;br /&gt;
			&#039;.  \n\nClick OK to proceed with &#039; + action + &#039;, or Cancel to skip.&#039;)) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Aborted &#039; + action + &#039; on fully protected page.&#039;);&lt;br /&gt;
			onFailure(this);&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!response.tokens.csrftoken) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Failed to retrieve token.&#039;);&lt;br /&gt;
			onFailure(this);&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		return true; // all OK&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnProcessMove = function() {&lt;br /&gt;
		let pageTitle, token;&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;move&#039;)) {&lt;br /&gt;
			token = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
			pageTitle = ctx.pageName;&lt;br /&gt;
		} else {&lt;br /&gt;
			const response = ctx.moveApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
			if (!fnProcessChecks(&#039;move&#039;, ctx.onMoveFailure, response)) {&lt;br /&gt;
				return; // abort&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			token = response.tokens.csrftoken;&lt;br /&gt;
			const page = response.pages[0];&lt;br /&gt;
			pageTitle = page.title;&lt;br /&gt;
			ctx.watched = page.watchlistexpiry || page.watched;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;move&#039;,&lt;br /&gt;
			from: pageTitle,&lt;br /&gt;
			to: ctx.moveDestination,&lt;br /&gt;
			token: token,&lt;br /&gt;
			reason: ctx.editSummary,&lt;br /&gt;
			watchlist: ctx.watchlistOption,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
		if (ctx.changeTags) {&lt;br /&gt;
			query.tags = ctx.changeTags;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnApplyWatchlistExpiry()) {&lt;br /&gt;
			query.watchlistexpiry = ctx.watchlistExpiry;&lt;br /&gt;
		}&lt;br /&gt;
		if (ctx.moveTalkPage) {&lt;br /&gt;
			query.movetalk = &#039;true&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if (ctx.moveSubpages) {&lt;br /&gt;
			query.movesubpages = &#039;true&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		if (ctx.moveSuppressRedirect) {&lt;br /&gt;
			query.noredirect = &#039;true&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.moveProcessApi = new Morebits.wiki.Api(&#039;moving page...&#039;, query, ctx.onMoveSuccess, ctx.statusElement, ctx.onMoveFailure);&lt;br /&gt;
		ctx.moveProcessApi.setParent(this);&lt;br /&gt;
		ctx.moveProcessApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnProcessPatrol = function() {&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;patrol&#039;,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		// Didn&#039;t need to load the page&lt;br /&gt;
		if (ctx.rcid) {&lt;br /&gt;
			query.rcid = ctx.rcid;&lt;br /&gt;
			query.token = mw.user.tokens.get(&#039;patrolToken&#039;);&lt;br /&gt;
		} else {&lt;br /&gt;
			const response = ctx.patrolApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
			// Don&#039;t patrol if not unpatrolled&lt;br /&gt;
			if (!response.recentchanges[0].unpatrolled) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			const lastrevid = response.pages[0].lastrevid;&lt;br /&gt;
			if (!lastrevid) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			query.revid = lastrevid;&lt;br /&gt;
&lt;br /&gt;
			const token = response.tokens.csrftoken;&lt;br /&gt;
			if (!token) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			query.token = token;&lt;br /&gt;
		}&lt;br /&gt;
		if (ctx.changeTags) {&lt;br /&gt;
			query.tags = ctx.changeTags;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const patrolStat = new Morebits.Status(&#039;Marking page as patrolled&#039;);&lt;br /&gt;
&lt;br /&gt;
		ctx.patrolProcessApi = new Morebits.wiki.Api(&#039;patrolling page...&#039;, query, null, patrolStat);&lt;br /&gt;
		ctx.patrolProcessApi.setParent(this);&lt;br /&gt;
		ctx.patrolProcessApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Ensure that the page is curatable&lt;br /&gt;
	var fnProcessTriageList = function() {&lt;br /&gt;
		if (ctx.pageID) {&lt;br /&gt;
			ctx.csrfToken = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
		} else {&lt;br /&gt;
			const response = ctx.triageApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
			ctx.pageID = response.pages[0].pageid;&lt;br /&gt;
			if (!ctx.pageID) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			ctx.csrfToken = response.tokens.csrftoken;&lt;br /&gt;
			if (!ctx.csrfToken) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;pagetriagelist&#039;,&lt;br /&gt;
			page_id: ctx.pageID,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		ctx.triageProcessListApi = new Morebits.wiki.Api(&#039;checking curation status...&#039;, query, fnProcessTriage);&lt;br /&gt;
		ctx.triageProcessListApi.setParent(this);&lt;br /&gt;
		ctx.triageProcessListApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// callback from triageProcessListApi.post()&lt;br /&gt;
	var fnProcessTriage = function() {&lt;br /&gt;
		const responseList = ctx.triageProcessListApi.getResponse().pagetriagelist;&lt;br /&gt;
		// Exit if not in the queue&lt;br /&gt;
		if (!responseList || responseList.result !== &#039;success&#039;) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		const page = responseList.pages &amp;amp;&amp;amp; responseList.pages[0];&lt;br /&gt;
		// Do nothing if page already triaged/patrolled&lt;br /&gt;
		if (!page || !parseInt(page.patrol_status, 10)) {&lt;br /&gt;
			const query = {&lt;br /&gt;
				action: &#039;pagetriageaction&#039;,&lt;br /&gt;
				pageid: ctx.pageID,&lt;br /&gt;
				reviewed: 1,&lt;br /&gt;
				token: ctx.csrfToken,&lt;br /&gt;
				format: &#039;json&#039;&lt;br /&gt;
			};&lt;br /&gt;
			if (ctx.changeTags) {&lt;br /&gt;
				query.tags = ctx.changeTags;&lt;br /&gt;
			}&lt;br /&gt;
			const triageStat = new Morebits.Status(&#039;Marking page as curated&#039;);&lt;br /&gt;
			ctx.triageProcessApi = new Morebits.wiki.Api(&#039;curating page...&#039;, query, null, triageStat);&lt;br /&gt;
			ctx.triageProcessApi.setParent(this);&lt;br /&gt;
			ctx.triageProcessApi.post();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnProcessDelete = function() {&lt;br /&gt;
		let pageTitle, token;&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;delete&#039;)) {&lt;br /&gt;
			token = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
			pageTitle = ctx.pageName;&lt;br /&gt;
		} else {&lt;br /&gt;
			const response = ctx.deleteApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
			if (!fnProcessChecks(&#039;delete&#039;, ctx.onDeleteFailure, response)) {&lt;br /&gt;
				return; // abort&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			token = response.tokens.csrftoken;&lt;br /&gt;
			const page = response.pages[0];&lt;br /&gt;
			pageTitle = page.title;&lt;br /&gt;
			ctx.watched = page.watchlistexpiry || page.watched;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;delete&#039;,&lt;br /&gt;
			title: pageTitle,&lt;br /&gt;
			token: token,&lt;br /&gt;
			reason: ctx.editSummary,&lt;br /&gt;
			watchlist: ctx.watchlistOption,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
		if (ctx.changeTags) {&lt;br /&gt;
			query.tags = ctx.changeTags;&lt;br /&gt;
		}&lt;br /&gt;
		if (ctx.deleteTalkPage) {&lt;br /&gt;
			query.deletetalk = &#039;true&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnApplyWatchlistExpiry()) {&lt;br /&gt;
			query.watchlistexpiry = ctx.watchlistExpiry;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.deleteProcessApi = new Morebits.wiki.Api(&#039;deleting page...&#039;, query, ctx.onDeleteSuccess, ctx.statusElement, fnProcessDeleteError);&lt;br /&gt;
		ctx.deleteProcessApi.setParent(this);&lt;br /&gt;
		ctx.deleteProcessApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// callback from deleteProcessApi.post()&lt;br /&gt;
	var fnProcessDeleteError = function() {&lt;br /&gt;
&lt;br /&gt;
		const errorCode = ctx.deleteProcessApi.getErrorCode();&lt;br /&gt;
&lt;br /&gt;
		// check for &amp;quot;Database query error&amp;quot;&lt;br /&gt;
		if (errorCode === &#039;internal_api_error_DBQueryError&#039; &amp;amp;&amp;amp; ctx.retries++ &amp;lt; ctx.maxRetries) {&lt;br /&gt;
			ctx.statusElement.info(&#039;Database query error, retrying&#039;);&lt;br /&gt;
			--Morebits.wiki.numberOfActionsLeft; // allow for normal completion if retry succeeds&lt;br /&gt;
			ctx.deleteProcessApi.post(); // give it another go!&lt;br /&gt;
&lt;br /&gt;
		} else if (errorCode === &#039;missingtitle&#039;) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Cannot delete the page, because it no longer exists&#039;);&lt;br /&gt;
			if (ctx.onDeleteFailure) {&lt;br /&gt;
				ctx.onDeleteFailure.call(this, ctx.deleteProcessApi); // invoke callback&lt;br /&gt;
			}&lt;br /&gt;
		// hard error, give up&lt;br /&gt;
		} else {&lt;br /&gt;
			ctx.statusElement.error(&#039;Failed to delete the page: &#039; + ctx.deleteProcessApi.getErrorText());&lt;br /&gt;
			if (ctx.onDeleteFailure) {&lt;br /&gt;
				ctx.onDeleteFailure.call(this, ctx.deleteProcessApi); // invoke callback&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnProcessUndelete = function() {&lt;br /&gt;
		let pageTitle, token;&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;undelete&#039;)) {&lt;br /&gt;
			token = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
			pageTitle = ctx.pageName;&lt;br /&gt;
		} else {&lt;br /&gt;
			const response = ctx.undeleteApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
			if (!fnProcessChecks(&#039;undelete&#039;, ctx.onUndeleteFailure, response)) {&lt;br /&gt;
				return; // abort&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			token = response.tokens.csrftoken;&lt;br /&gt;
			const page = response.pages[0];&lt;br /&gt;
			pageTitle = page.title;&lt;br /&gt;
			ctx.watched = page.watchlistexpiry || page.watched;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;undelete&#039;,&lt;br /&gt;
			title: pageTitle,&lt;br /&gt;
			token: token,&lt;br /&gt;
			reason: ctx.editSummary,&lt;br /&gt;
			watchlist: ctx.watchlistOption,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
		if (ctx.changeTags) {&lt;br /&gt;
			query.tags = ctx.changeTags;&lt;br /&gt;
		}&lt;br /&gt;
		if (ctx.undeleteTalkPage) {&lt;br /&gt;
			query.undeletetalk = &#039;true&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnApplyWatchlistExpiry()) {&lt;br /&gt;
			query.watchlistexpiry = ctx.watchlistExpiry;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.undeleteProcessApi = new Morebits.wiki.Api(&#039;undeleting page...&#039;, query, ctx.onUndeleteSuccess, ctx.statusElement, fnProcessUndeleteError);&lt;br /&gt;
		ctx.undeleteProcessApi.setParent(this);&lt;br /&gt;
		ctx.undeleteProcessApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// callback from undeleteProcessApi.post()&lt;br /&gt;
	var fnProcessUndeleteError = function() {&lt;br /&gt;
&lt;br /&gt;
		const errorCode = ctx.undeleteProcessApi.getErrorCode();&lt;br /&gt;
&lt;br /&gt;
		// check for &amp;quot;Database query error&amp;quot;&lt;br /&gt;
		if (errorCode === &#039;internal_api_error_DBQueryError&#039;) {&lt;br /&gt;
			if (ctx.retries++ &amp;lt; ctx.maxRetries) {&lt;br /&gt;
				ctx.statusElement.info(&#039;Database query error, retrying&#039;);&lt;br /&gt;
				--Morebits.wiki.numberOfActionsLeft; // allow for normal completion if retry succeeds&lt;br /&gt;
				ctx.undeleteProcessApi.post(); // give it another go!&lt;br /&gt;
			} else {&lt;br /&gt;
				ctx.statusElement.error(&#039;Repeated database query error, please try again&#039;);&lt;br /&gt;
				if (ctx.onUndeleteFailure) {&lt;br /&gt;
					ctx.onUndeleteFailure.call(this, ctx.undeleteProcessApi); // invoke callback&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		} else if (errorCode === &#039;cantundelete&#039;) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Cannot undelete the page, either because there are no revisions to undelete or because it has already been undeleted&#039;);&lt;br /&gt;
			if (ctx.onUndeleteFailure) {&lt;br /&gt;
				ctx.onUndeleteFailure.call(this, ctx.undeleteProcessApi); // invoke callback&lt;br /&gt;
			}&lt;br /&gt;
		// hard error, give up&lt;br /&gt;
		} else {&lt;br /&gt;
			ctx.statusElement.error(&#039;Failed to undelete the page: &#039; + ctx.undeleteProcessApi.getErrorText());&lt;br /&gt;
			if (ctx.onUndeleteFailure) {&lt;br /&gt;
				ctx.onUndeleteFailure.call(this, ctx.undeleteProcessApi); // invoke callback&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnProcessProtect = function() {&lt;br /&gt;
		const response = ctx.protectApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
		if (!fnProcessChecks(&#039;protect&#039;, ctx.onProtectFailure, response)) {&lt;br /&gt;
			return; // abort&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const token = response.tokens.csrftoken;&lt;br /&gt;
		const page = response.pages[0];&lt;br /&gt;
		const pageTitle = page.title;&lt;br /&gt;
		ctx.watched = page.watchlistexpiry || page.watched;&lt;br /&gt;
&lt;br /&gt;
		// Fetch existing protection levels&lt;br /&gt;
		const prs = response.pages[0].protection;&lt;br /&gt;
		let editprot, moveprot, createprot;&lt;br /&gt;
		prs.forEach((pr) =&amp;gt; {&lt;br /&gt;
			// Filter out protection from cascading&lt;br /&gt;
			if (pr.type === &#039;edit&#039; &amp;amp;&amp;amp; !pr.source) {&lt;br /&gt;
				editprot = pr;&lt;br /&gt;
			} else if (pr.type === &#039;move&#039;) {&lt;br /&gt;
				moveprot = pr;&lt;br /&gt;
			} else if (pr.type === &#039;create&#039;) {&lt;br /&gt;
				createprot = pr;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		// Fall back to current levels if not explicitly set&lt;br /&gt;
		if (!ctx.protectEdit &amp;amp;&amp;amp; editprot) {&lt;br /&gt;
			ctx.protectEdit = { level: editprot.level, expiry: editprot.expiry };&lt;br /&gt;
		}&lt;br /&gt;
		if (!ctx.protectMove &amp;amp;&amp;amp; moveprot) {&lt;br /&gt;
			ctx.protectMove = { level: moveprot.level, expiry: moveprot.expiry };&lt;br /&gt;
		}&lt;br /&gt;
		if (!ctx.protectCreate &amp;amp;&amp;amp; createprot) {&lt;br /&gt;
			ctx.protectCreate = { level: createprot.level, expiry: createprot.expiry };&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Default to pre-existing cascading protection if unchanged (similar to above)&lt;br /&gt;
		if (ctx.protectCascade === null) {&lt;br /&gt;
			ctx.protectCascade = !!prs.filter((pr) =&amp;gt; pr.cascade).length;&lt;br /&gt;
		}&lt;br /&gt;
		// Warn if cascading protection being applied with an invalid protection level,&lt;br /&gt;
		// which for edit protection will cause cascading to be silently stripped&lt;br /&gt;
		if (ctx.protectCascade) {&lt;br /&gt;
			// On move protection, this is technically stricter than the MW API,&lt;br /&gt;
			// but seems reasonable to avoid dumb values and misleading log entries (T265626)&lt;br /&gt;
			if (((!ctx.protectEdit || ctx.protectEdit.level !== &#039;sysop&#039;) ||&lt;br /&gt;
				(!ctx.protectMove || ctx.protectMove.level !== &#039;sysop&#039;)) &amp;amp;&amp;amp;&lt;br /&gt;
				!confirm(&#039;You have cascading protection enabled on &amp;quot;&#039; + ctx.pageName +&lt;br /&gt;
				&#039;&amp;quot; but have not selected uniform sysop-level protection.\n\n&#039; +&lt;br /&gt;
				&#039;Click OK to adjust and proceed with sysop-level cascading protection, or Cancel to skip this action.&#039;)) {&lt;br /&gt;
				ctx.statusElement.error(&#039;Cascading protection was aborted.&#039;);&lt;br /&gt;
				ctx.onProtectFailure(this);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			ctx.protectEdit.level = &#039;sysop&#039;;&lt;br /&gt;
			ctx.protectMove.level = &#039;sysop&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Build protection levels and expirys (expiries?) for query&lt;br /&gt;
		const protections = [], expirys = [];&lt;br /&gt;
		if (ctx.protectEdit) {&lt;br /&gt;
			protections.push(&#039;edit=&#039; + ctx.protectEdit.level);&lt;br /&gt;
			expirys.push(ctx.protectEdit.expiry);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (ctx.protectMove) {&lt;br /&gt;
			protections.push(&#039;move=&#039; + ctx.protectMove.level);&lt;br /&gt;
			expirys.push(ctx.protectMove.expiry);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (ctx.protectCreate) {&lt;br /&gt;
			protections.push(&#039;create=&#039; + ctx.protectCreate.level);&lt;br /&gt;
			expirys.push(ctx.protectCreate.expiry);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;protect&#039;,&lt;br /&gt;
			title: pageTitle,&lt;br /&gt;
			token: token,&lt;br /&gt;
			protections: protections.join(&#039;|&#039;),&lt;br /&gt;
			expiry: expirys.join(&#039;|&#039;),&lt;br /&gt;
			reason: ctx.editSummary,&lt;br /&gt;
			watchlist: ctx.watchlistOption,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
		// Only shows up in logs, not page history [[phab:T259983]]&lt;br /&gt;
		if (ctx.changeTags) {&lt;br /&gt;
			query.tags = ctx.changeTags;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (fnApplyWatchlistExpiry()) {&lt;br /&gt;
			query.watchlistexpiry = ctx.watchlistExpiry;&lt;br /&gt;
		}&lt;br /&gt;
		if (ctx.protectCascade) {&lt;br /&gt;
			query.cascade = &#039;true&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.protectProcessApi = new Morebits.wiki.Api(&#039;protecting page...&#039;, query, ctx.onProtectSuccess, ctx.statusElement, ctx.onProtectFailure);&lt;br /&gt;
		ctx.protectProcessApi.setParent(this);&lt;br /&gt;
		ctx.protectProcessApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnProcessStabilize = function() {&lt;br /&gt;
		let pageTitle, token;&lt;br /&gt;
&lt;br /&gt;
		if (fnCanUseMwUserToken(&#039;stabilize&#039;)) {&lt;br /&gt;
			token = mw.user.tokens.get(&#039;csrfToken&#039;);&lt;br /&gt;
			pageTitle = ctx.pageName;&lt;br /&gt;
		} else {&lt;br /&gt;
			const response = ctx.stabilizeApi.getResponse().query;&lt;br /&gt;
&lt;br /&gt;
			// &#039;stabilize&#039; as a verb not necessarily well understood&lt;br /&gt;
			if (!fnProcessChecks(&#039;stabilize&#039;, ctx.onStabilizeFailure, response)) {&lt;br /&gt;
				return; // abort&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			token = response.tokens.csrftoken;&lt;br /&gt;
			const page = response.pages[0];&lt;br /&gt;
			pageTitle = page.title;&lt;br /&gt;
			// Doesn&#039;t support watchlist expiry [[phab:T263336]]&lt;br /&gt;
			// ctx.watched = page.watchlistexpiry || page.watched;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;stabilize&#039;,&lt;br /&gt;
			title: pageTitle,&lt;br /&gt;
			token: token,&lt;br /&gt;
			protectlevel: ctx.flaggedRevs.level,&lt;br /&gt;
			expiry: ctx.flaggedRevs.expiry,&lt;br /&gt;
			// tags: ctx.changeTags, // flaggedrevs tag support: [[phab:T247721]]&lt;br /&gt;
			reason: ctx.editSummary,&lt;br /&gt;
			watchlist: ctx.watchlistOption,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		/* Doesn&#039;t support watchlist expiry [[phab:T263336]]&lt;br /&gt;
		if (fnApplyWatchlistExpiry()) {&lt;br /&gt;
			query.watchlistexpiry = ctx.watchlistExpiry;&lt;br /&gt;
		}&lt;br /&gt;
		*/&lt;br /&gt;
&lt;br /&gt;
		ctx.stabilizeProcessApi = new Morebits.wiki.Api(&#039;configuring stabilization settings...&#039;, query, ctx.onStabilizeSuccess, ctx.statusElement, ctx.onStabilizeFailure);&lt;br /&gt;
		ctx.stabilizeProcessApi.setParent(this);&lt;br /&gt;
		ctx.stabilizeProcessApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var sleep = function(milliseconds) {&lt;br /&gt;
		const deferred = $.Deferred();&lt;br /&gt;
		setTimeout(deferred.resolve, milliseconds);&lt;br /&gt;
		return deferred;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
}; // end Morebits.wiki.Page&lt;br /&gt;
&lt;br /&gt;
/* Morebits.wiki.Page TODO: (XXX)&lt;br /&gt;
* - Should we retry loads also?&lt;br /&gt;
* - Need to reset current action before the save?&lt;br /&gt;
* - Deal with action.completed stuff&lt;br /&gt;
* - Need to reset all parameters once done (e.g. edit summary, move destination, etc.)&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.wiki.Preview **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * Use the API to parse a fragment of wikitext and render it as HTML.&lt;br /&gt;
 *&lt;br /&gt;
 * The suggested implementation pattern (in {@link Morebits.SimpleWindow} and&lt;br /&gt;
 * {@link Morebits.QuickForm} situations) is to construct a&lt;br /&gt;
 * `Morebits.wiki.Preview` object after rendering a `Morebits.QuickForm`, and&lt;br /&gt;
 * bind the object to an arbitrary property of the form (e.g. |previewer|).&lt;br /&gt;
 * For an example, see twinklewarn.js.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.wiki&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {HTMLElement} previewbox - The element that will contain the rendered HTML,&lt;br /&gt;
 * usually a &amp;lt;div&amp;gt; element.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wiki.Preview = function(previewbox) {&lt;br /&gt;
	this.previewbox = previewbox;&lt;br /&gt;
	$(previewbox).addClass(&#039;morebits-previewbox&#039;).hide();&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Displays the preview box, and begins an asynchronous attempt&lt;br /&gt;
	 * to render the specified wikitext.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} wikitext - Wikitext to render; most things should work, including `subst:` and `~~~~`.&lt;br /&gt;
	 * @param {string} [pageTitle] - Optional parameter for the page this should be rendered as being on, if omitted it is taken as the current page.&lt;br /&gt;
	 * @param {string} [sectionTitle] - If provided, render the text as a new section using this as the title.&lt;br /&gt;
	 * @return {jQuery.promise}&lt;br /&gt;
	 */&lt;br /&gt;
	this.beginRender = function(wikitext, pageTitle, sectionTitle) {&lt;br /&gt;
		$(previewbox).show();&lt;br /&gt;
&lt;br /&gt;
		const statusspan = document.createElement(&#039;span&#039;);&lt;br /&gt;
		previewbox.appendChild(statusspan);&lt;br /&gt;
		Morebits.Status.init(statusspan);&lt;br /&gt;
&lt;br /&gt;
		const query = {&lt;br /&gt;
			action: &#039;parse&#039;,&lt;br /&gt;
			prop: [&#039;text&#039;, &#039;modules&#039;],&lt;br /&gt;
			pst: true, // PST = pre-save transform; this makes substitution work properly&lt;br /&gt;
			preview: true,&lt;br /&gt;
			text: wikitext,&lt;br /&gt;
			title: pageTitle || mw.config.get(&#039;wgPageName&#039;),&lt;br /&gt;
			disablelimitreport: true,&lt;br /&gt;
			disableeditsection: true,&lt;br /&gt;
			format: &#039;json&#039;&lt;br /&gt;
		};&lt;br /&gt;
		if (sectionTitle) {&lt;br /&gt;
			query.section = &#039;new&#039;;&lt;br /&gt;
			query.sectiontitle = sectionTitle;&lt;br /&gt;
		}&lt;br /&gt;
		const renderApi = new Morebits.wiki.Api(&#039;loading...&#039;, query, fnRenderSuccess, new Morebits.Status(&#039;Preview&#039;));&lt;br /&gt;
		return renderApi.post();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnRenderSuccess = function(apiobj) {&lt;br /&gt;
		const response = apiobj.getResponse();&lt;br /&gt;
		const html = response.parse.text;&lt;br /&gt;
		if (!html) {&lt;br /&gt;
			apiobj.statelem.error(&#039;failed to retrieve preview, or template was blanked&#039;);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		previewbox.innerHTML = html;&lt;br /&gt;
		mw.loader.load(response.parse.modulestyles);&lt;br /&gt;
		mw.loader.load(response.parse.modules);&lt;br /&gt;
&lt;br /&gt;
		// this makes links open in new tab&lt;br /&gt;
		$(previewbox).find(&#039;a&#039;).attr(&#039;target&#039;, &#039;_blank&#039;);&lt;br /&gt;
&lt;br /&gt;
		// Integrate with scripts that do things on rendered content, like navpopups&lt;br /&gt;
		mw.hook(&#039;wikipage.content&#039;).fire($(previewbox));&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/** Hides the preview box and clears it. */&lt;br /&gt;
	this.closePreview = function() {&lt;br /&gt;
		$(previewbox).empty().hide();&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.wikitext **************** */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Wikitext manipulation.&lt;br /&gt;
 *&lt;br /&gt;
 * @namespace Morebits.wikitext&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wikitext = {};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Get the value of every parameter found in the wikitext of a given template.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.wikitext&lt;br /&gt;
 * @param {string} text - Wikitext containing a template.&lt;br /&gt;
 * @param {number} [start=0] - Index noting where in the text the template begins.&lt;br /&gt;
 * @return {Object} `{name: templateName, parameters: {key: value}}`.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wikitext.parseTemplate = function(text, start) {&lt;br /&gt;
	start = start || 0;&lt;br /&gt;
&lt;br /&gt;
	const level = []; // Track of how deep we are ({{, {{{, or [[)&lt;br /&gt;
	let count = -1; // Number of parameters found&lt;br /&gt;
	let unnamed = 0; // Keep track of what number an unnamed parameter should receive&lt;br /&gt;
	let equals = -1; // After finding &amp;quot;=&amp;quot; before a parameter, the index; otherwise, -1&lt;br /&gt;
	let current = &#039;&#039;;&lt;br /&gt;
	const result = {&lt;br /&gt;
		name: &#039;&#039;,&lt;br /&gt;
		parameters: {}&lt;br /&gt;
	};&lt;br /&gt;
	let key, value;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Function to handle finding parameter values.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {boolean} [final=false] - Whether this is the final&lt;br /&gt;
	 * parameter and we need to remove the trailing `}}`.&lt;br /&gt;
	 */&lt;br /&gt;
	function findParam(final) {&lt;br /&gt;
		// Nothing found yet, this must be the template name&lt;br /&gt;
		if (count === -1) {&lt;br /&gt;
			result.name = current.slice(2).trim();&lt;br /&gt;
			++count;&lt;br /&gt;
		} else {&lt;br /&gt;
			// In a parameter&lt;br /&gt;
			if (equals !== -1) {&lt;br /&gt;
				// We found an equals, so save the parameter as key: value&lt;br /&gt;
				key = current.substring(0, equals).trim();&lt;br /&gt;
				value = final ? current.substring(equals + 1, current.length - 2).trim() : current.substring(equals + 1).trim();&lt;br /&gt;
				result.parameters[key] = value;&lt;br /&gt;
				equals = -1;&lt;br /&gt;
			} else {&lt;br /&gt;
				// No equals, so it must be unnamed; no trim since whitespace allowed&lt;br /&gt;
				const param = final ? current.substring(equals + 1, current.length - 2) : current;&lt;br /&gt;
				if (param) {&lt;br /&gt;
					result.parameters[++unnamed] = param;&lt;br /&gt;
					++count;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for (let i = start; i &amp;lt; text.length; ++i) {&lt;br /&gt;
		const test3 = text.substr(i, 3);&lt;br /&gt;
		if (test3 === &#039;{{{&#039; || (test3 === &#039;}}}&#039; &amp;amp;&amp;amp; level[level.length - 1] === 3)) {&lt;br /&gt;
			current += test3;&lt;br /&gt;
			i += 2;&lt;br /&gt;
			if (test3 === &#039;{{{&#039;) {&lt;br /&gt;
				level.push(3);&lt;br /&gt;
			} else {&lt;br /&gt;
				level.pop();&lt;br /&gt;
			}&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		const test2 = text.substr(i, 2);&lt;br /&gt;
		// Entering a template (or link)&lt;br /&gt;
		if (test2 === &#039;{{&#039; || test2 === &#039;[[&#039;) {&lt;br /&gt;
			current += test2;&lt;br /&gt;
			++i;&lt;br /&gt;
			if (test2 === &#039;{{&#039;) {&lt;br /&gt;
				level.push(2);&lt;br /&gt;
			} else {&lt;br /&gt;
				level.push(&#039;wl&#039;);&lt;br /&gt;
			}&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		// Either leaving a link or template/parser function&lt;br /&gt;
		if ((test2 === &#039;}}&#039; &amp;amp;&amp;amp; level[level.length - 1] === 2) ||&lt;br /&gt;
			(test2 === &#039;]]&#039; &amp;amp;&amp;amp; level[level.length - 1] === &#039;wl&#039;)) {&lt;br /&gt;
			current += test2;&lt;br /&gt;
			++i;&lt;br /&gt;
			level.pop();&lt;br /&gt;
&lt;br /&gt;
			// Find the final parameter if this really is the end&lt;br /&gt;
			if (test2 === &#039;}}&#039; &amp;amp;&amp;amp; level.length === 0) {&lt;br /&gt;
				findParam(true);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (text.charAt(i) === &#039;|&#039; &amp;amp;&amp;amp; level.length === 1) {&lt;br /&gt;
			// Another pipe found, toplevel, so parameter coming up!&lt;br /&gt;
			findParam();&lt;br /&gt;
			current = &#039;&#039;;&lt;br /&gt;
		} else if (equals === -1 &amp;amp;&amp;amp; text.charAt(i) === &#039;=&#039; &amp;amp;&amp;amp; level.length === 1) {&lt;br /&gt;
			// Equals found, toplevel&lt;br /&gt;
			equals = current.length;&lt;br /&gt;
			current += text.charAt(i);&lt;br /&gt;
		} else {&lt;br /&gt;
			// Just advance the position&lt;br /&gt;
			current += text.charAt(i);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Adjust and manipulate the wikitext of a page.&lt;br /&gt;
 *&lt;br /&gt;
 * @class&lt;br /&gt;
 * @memberof Morebits.wikitext&lt;br /&gt;
 * @param {string} text - Wikitext to be manipulated.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.wikitext.Page = function mediawikiPage(text) {&lt;br /&gt;
	this.text = text;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Morebits.wikitext.Page.prototype = {&lt;br /&gt;
	text: &#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Removes links to `link_target` from the page text.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} link_target&lt;br /&gt;
	 * @return {Morebits.wikitext.Page}&lt;br /&gt;
	 */&lt;br /&gt;
	removeLink: function(link_target) {&lt;br /&gt;
		const mwTitle = mw.Title.newFromText(link_target);&lt;br /&gt;
		const namespaceID = mwTitle.getNamespaceId();&lt;br /&gt;
		const title = mwTitle.getMainText();&lt;br /&gt;
&lt;br /&gt;
		let link_regex_string = &#039;&#039;;&lt;br /&gt;
		if (namespaceID !== 0) {&lt;br /&gt;
			link_regex_string = Morebits.namespaceRegex(namespaceID) + &#039;:&#039;;&lt;br /&gt;
		}&lt;br /&gt;
		link_regex_string += Morebits.pageNameRegex(title);&lt;br /&gt;
&lt;br /&gt;
		// For most namespaces, unlink both [[User:Test]] and [[:User:Test]]&lt;br /&gt;
		// For files and categories, only unlink [[:Category:Test]]. Do not unlink [[Category:Test]]&lt;br /&gt;
		const isFileOrCategory = [6, 14].includes(namespaceID);&lt;br /&gt;
		const colon = isFileOrCategory ? &#039;:&#039; : &#039;:?&#039;;&lt;br /&gt;
&lt;br /&gt;
		const simple_link_regex = new RegExp(&#039;\\[\\[&#039; + colon + &#039;(&#039; + link_regex_string + &#039;)\\]\\]&#039;, &#039;g&#039;);&lt;br /&gt;
		const piped_link_regex = new RegExp(&#039;\\[\\[&#039; + colon + link_regex_string + &#039;\\|(.+?)\\]\\]&#039;, &#039;g&#039;);&lt;br /&gt;
		this.text = this.text.replace(simple_link_regex, &#039;$1&#039;).replace(piped_link_regex, &#039;$1&#039;);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Comments out images from page text; if used in a gallery, deletes the whole line.&lt;br /&gt;
	 * If used as a template argument (not necessarily with `File:` prefix), the template parameter is commented out.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} image - Image name without `File:` prefix.&lt;br /&gt;
	 * @param {string} [reason] - Reason to be included in comment, alongside the commented-out image.&lt;br /&gt;
	 * @return {Morebits.wikitext.Page}&lt;br /&gt;
	 */&lt;br /&gt;
	commentOutImage: function(image, reason) {&lt;br /&gt;
		const unbinder = new Morebits.Unbinder(this.text);&lt;br /&gt;
		unbinder.unbind(&#039;&amp;lt;!--&#039;, &#039;--&amp;gt;&#039;);&lt;br /&gt;
&lt;br /&gt;
		reason = reason ? reason + &#039;: &#039; : &#039;&#039;;&lt;br /&gt;
		const image_re_string = Morebits.pageNameRegex(image);&lt;br /&gt;
&lt;br /&gt;
		// Check for normal image links, i.e. [[File:Foobar.png|...]]&lt;br /&gt;
		// Will eat the whole link&lt;br /&gt;
		const links_re = new RegExp(&#039;\\[\\[&#039; + Morebits.namespaceRegex(6) + &#039;:\\s*&#039; + image_re_string + &#039;\\s*[\\|(?:\\]\\])]&#039;);&lt;br /&gt;
		const allLinks = Morebits.string.splitWeightedByKeys(unbinder.content, &#039;[[&#039;, &#039;]]&#039;);&lt;br /&gt;
		for (let i = 0; i &amp;lt; allLinks.length; ++i) {&lt;br /&gt;
			if (links_re.test(allLinks[i])) {&lt;br /&gt;
				const replacement = &#039;&amp;lt;!-- &#039; + reason + allLinks[i] + &#039; --&amp;gt;&#039;;&lt;br /&gt;
				unbinder.content = unbinder.content.replace(allLinks[i], replacement);&lt;br /&gt;
				// unbind the newly created comments&lt;br /&gt;
				unbinder.unbind(&#039;&amp;lt;!--&#039;, &#039;--&amp;gt;&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Check for gallery images, i.e. instances that must start on a new line,&lt;br /&gt;
		// eventually preceded with some space, and must include File: prefix&lt;br /&gt;
		// Will eat the whole line.&lt;br /&gt;
		const gallery_image_re = new RegExp(&#039;(^\\s*&#039; + Morebits.namespaceRegex(6) + &#039;:\\s*&#039; + image_re_string + &#039;\\s*(?:\\|.*?$|$))&#039;, &#039;mg&#039;);&lt;br /&gt;
		unbinder.content = unbinder.content.replace(gallery_image_re, &#039;&amp;lt;!-- &#039; + reason + &#039;$1 --&amp;gt;&#039;);&lt;br /&gt;
&lt;br /&gt;
		// unbind the newly created comments&lt;br /&gt;
		unbinder.unbind(&#039;&amp;lt;!--&#039;, &#039;--&amp;gt;&#039;);&lt;br /&gt;
&lt;br /&gt;
		// Check free image usages, for example as template arguments, might have the File: prefix excluded, but must be preceded by an |&lt;br /&gt;
		// Will only eat the image name and the preceding bar and an eventual named parameter&lt;br /&gt;
		const free_image_re = new RegExp(&#039;(\\|\\s*(?:[\\w\\s]+\\=)?\\s*(?:&#039; + Morebits.namespaceRegex(6) + &#039;:\\s*)?&#039; + image_re_string + &#039;)&#039;, &#039;mg&#039;);&lt;br /&gt;
		unbinder.content = unbinder.content.replace(free_image_re, &#039;&amp;lt;!-- &#039; + reason + &#039;$1 --&amp;gt;&#039;);&lt;br /&gt;
		// Rebind the content now, we are done!&lt;br /&gt;
		this.text = unbinder.rebind();&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Converts uses of [[File:`image`]] to [[File:`image`|`data`]].&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} image - Image name without File: prefix.&lt;br /&gt;
	 * @param {string} data - The display options.&lt;br /&gt;
	 * @return {Morebits.wikitext.Page}&lt;br /&gt;
	 */&lt;br /&gt;
	addToImageComment: function(image, data) {&lt;br /&gt;
		const image_re_string = Morebits.pageNameRegex(image);&lt;br /&gt;
		const links_re = new RegExp(&#039;\\[\\[&#039; + Morebits.namespaceRegex(6) + &#039;:\\s*&#039; + image_re_string + &#039;\\s*[\\|(?:\\]\\])]&#039;);&lt;br /&gt;
		const allLinks = Morebits.string.splitWeightedByKeys(this.text, &#039;[[&#039;, &#039;]]&#039;);&lt;br /&gt;
		for (let i = 0; i &amp;lt; allLinks.length; ++i) {&lt;br /&gt;
			if (links_re.test(allLinks[i])) {&lt;br /&gt;
				let replacement = allLinks[i];&lt;br /&gt;
				// just put it at the end?&lt;br /&gt;
				replacement = replacement.replace(/\]\]$/, &#039;|&#039; + data + &#039;]]&#039;);&lt;br /&gt;
				this.text = this.text.replace(allLinks[i], replacement);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		const gallery_re = new RegExp(&#039;^(\\s*&#039; + image_re_string + &#039;.*?)\\|?(.*?)$&#039;, &#039;mg&#039;);&lt;br /&gt;
		const newtext = &#039;$1|$2 &#039; + data;&lt;br /&gt;
		this.text = this.text.replace(gallery_re, newtext);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Remove all transclusions of a template from page text.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} template - Page name whose transclusions are to be removed,&lt;br /&gt;
	 * include namespace prefix only if not in template namespace.&lt;br /&gt;
	 * @return {Morebits.wikitext.Page}&lt;br /&gt;
	 */&lt;br /&gt;
	removeTemplate: function(template) {&lt;br /&gt;
		const template_re_string = Morebits.pageNameRegex(template);&lt;br /&gt;
		const links_re = new RegExp(&#039;\\{\\{(?:&#039; + Morebits.namespaceRegex(10) + &#039;:)?\\s*&#039; + template_re_string + &#039;\\s*[\\|(?:\\}\\})]&#039;);&lt;br /&gt;
		const allTemplates = Morebits.string.splitWeightedByKeys(this.text, &#039;{{&#039;, &#039;}}&#039;, [&#039;{{{&#039;, &#039;}}}&#039;]);&lt;br /&gt;
		for (let i = 0; i &amp;lt; allTemplates.length; ++i) {&lt;br /&gt;
			if (links_re.test(allTemplates[i])) {&lt;br /&gt;
				this.text = this.text.replace(allTemplates[i], &#039;&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Smartly insert a tag atop page text but after specified templates,&lt;br /&gt;
	 * such as hatnotes, short description, or deletion and protection templates.&lt;br /&gt;
	 * Notably, does *not* insert a newline after the tag.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} tag - The tag to be inserted.&lt;br /&gt;
	 * @param {string|string[]} regex - Templates after which to insert tag,&lt;br /&gt;
	 * given as either as a (regex-valid) string or an array to be joined by pipes.&lt;br /&gt;
	 * @param {string} [flags=i] - Regex flags to apply.  `&#039;&#039;` to provide no flags;&lt;br /&gt;
	 * other falsey values will default to `i`.&lt;br /&gt;
	 * @param {string|string[]} [preRegex] - Optional regex string or array to match&lt;br /&gt;
	 * before any template matches (i.e. before `{{`), such as html comments.&lt;br /&gt;
	 * @return {Morebits.wikitext.Page}&lt;br /&gt;
	 */&lt;br /&gt;
	insertAfterTemplates: function(tag, regex, flags, preRegex) {&lt;br /&gt;
		if (typeof tag === &#039;undefined&#039;) {&lt;br /&gt;
			throw new Error(&#039;No tag provided&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// .length is only a property of strings and arrays so we&lt;br /&gt;
		// shouldn&#039;t need to check type&lt;br /&gt;
		if (typeof regex === &#039;undefined&#039; || !regex.length) {&lt;br /&gt;
			throw new Error(&#039;No regex provided&#039;);&lt;br /&gt;
		} else if (Array.isArray(regex)) {&lt;br /&gt;
			regex = regex.join(&#039;|&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (typeof flags !== &#039;string&#039;) {&lt;br /&gt;
			flags = &#039;i&#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!preRegex || !preRegex.length) {&lt;br /&gt;
			preRegex = &#039;&#039;;&lt;br /&gt;
		} else if (Array.isArray(preRegex)) {&lt;br /&gt;
			preRegex = preRegex.join(&#039;|&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Regex is extra complicated to allow for templates with&lt;br /&gt;
		// parameters and to handle whitespace properly&lt;br /&gt;
		this.text = this.text.replace(&lt;br /&gt;
			new RegExp(&lt;br /&gt;
				// leading whitespace&lt;br /&gt;
				&#039;^\\s*&#039; +&lt;br /&gt;
				// capture template(s)&lt;br /&gt;
				&#039;(?:((?:\\s*&#039; +&lt;br /&gt;
				// Pre-template regex, such as leading html comments&lt;br /&gt;
				preRegex + &#039;|&#039; +&lt;br /&gt;
				// begin template format&lt;br /&gt;
				&#039;\\{\\{\\s*(?:&#039; +&lt;br /&gt;
				// Template regex&lt;br /&gt;
				regex +&lt;br /&gt;
				// end main template name, optionally with a number&lt;br /&gt;
				// Probably remove the (?:) though&lt;br /&gt;
				&#039;)\\d*\\s*&#039; +&lt;br /&gt;
				// template parameters&lt;br /&gt;
				&#039;(\\|(?:\\{\\{[^{}]*\\}\\}|[^{}])*)?&#039; +&lt;br /&gt;
				// end template format&lt;br /&gt;
				&#039;\\}\\})+&#039; +&lt;br /&gt;
				// end capture&lt;br /&gt;
				&#039;(?:\\s*\\n)?)&#039; +&lt;br /&gt;
				// trailing whitespace&lt;br /&gt;
				&#039;\\s*)?&#039;,&lt;br /&gt;
				flags), &#039;$1&#039; + tag&lt;br /&gt;
		);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the manipulated wikitext.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {string}&lt;br /&gt;
	 */&lt;br /&gt;
	getText: function() {&lt;br /&gt;
		return this.text;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* *********** Morebits.UserspaceLogger ************ */&lt;br /&gt;
/**&lt;br /&gt;
 * Handles logging actions to a userspace log.&lt;br /&gt;
 * Used in CSD, PROD, and XFD.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {string} logPageName - Title of the subpage of the current user&#039;s log.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.UserspaceLogger = function(logPageName) {&lt;br /&gt;
	if (!logPageName) {&lt;br /&gt;
		throw new Error(&#039;no log page name specified&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	/**&lt;br /&gt;
	 * The text to prefix the log with upon creation, defaults to empty.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @type {string}&lt;br /&gt;
	 */&lt;br /&gt;
	this.initialText = &#039;&#039;;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The header level to use for months, defaults to 3 (`===`).&lt;br /&gt;
	 *&lt;br /&gt;
	 * @type {number}&lt;br /&gt;
	 */&lt;br /&gt;
	this.headerLevel = 3;&lt;br /&gt;
	this.changeTags = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Log the entry.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} logText - Doesn&#039;t include leading `#` or `*`.&lt;br /&gt;
	 * @param {string} summaryText - Edit summary.&lt;br /&gt;
	 * @return {jQuery.Promise}&lt;br /&gt;
	 */&lt;br /&gt;
	this.log = function(logText, summaryText) {&lt;br /&gt;
		const def = $.Deferred();&lt;br /&gt;
		if (!logText) {&lt;br /&gt;
			return def.reject();&lt;br /&gt;
		}&lt;br /&gt;
		const page = new Morebits.wiki.Page(&#039;User:&#039; + mw.config.get(&#039;wgUserName&#039;) + &#039;/&#039; + logPageName,&lt;br /&gt;
			&#039;Adding entry to userspace log&#039;); // make this &#039;... to &#039; + logPageName ?&lt;br /&gt;
		page.load((pageobj) =&amp;gt; {&lt;br /&gt;
			// add blurb if log page doesn&#039;t exist or is blank&lt;br /&gt;
			let text = pageobj.getPageText() || this.initialText;&lt;br /&gt;
&lt;br /&gt;
			// create monthly header if it doesn&#039;t exist already&lt;br /&gt;
			const date = new Morebits.Date(pageobj.getLoadTime());&lt;br /&gt;
			if (!date.monthHeaderRegex().exec(text)) {&lt;br /&gt;
				text += &#039;\n\n&#039; + date.monthHeader(this.headerLevel);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			pageobj.setPageText(text + &#039;\n&#039; + logText);&lt;br /&gt;
			pageobj.setEditSummary(summaryText);&lt;br /&gt;
			pageobj.setChangeTags(this.changeTags);&lt;br /&gt;
			pageobj.setCreateOption(&#039;recreate&#039;);&lt;br /&gt;
			pageobj.save(def.resolve, def.reject);&lt;br /&gt;
		});&lt;br /&gt;
		return def;&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.Status **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * Create and show status messages of varying urgency.&lt;br /&gt;
 * {@link Morebits.Status.init|Morebits.Status.init()} must be called before&lt;br /&gt;
 * any status object is created, otherwise those statuses won&#039;t be visible.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {string} text - Text before the the colon `:`.&lt;br /&gt;
 * @param {string} stat - Text after the colon `:`.&lt;br /&gt;
 * @param {string} [type=status] - Determine the font color of the status&lt;br /&gt;
 * line, allowable values are: `status` (blue), `info` (green), `warn` (red),&lt;br /&gt;
 * or `error` (bold red).&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Morebits.Status = function Status(text, stat, type) {&lt;br /&gt;
	this.textRaw = text;&lt;br /&gt;
	this.text = Morebits.createHtml(text);&lt;br /&gt;
	this.type = type || &#039;status&#039;;&lt;br /&gt;
	this.generate();&lt;br /&gt;
	if (stat) {&lt;br /&gt;
		this.update(stat, type);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Specify an area for status message elements to be added to.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.Status&lt;br /&gt;
 * @param {HTMLElement} root - Usually a div element.&lt;br /&gt;
 * @throws {Error} If `root` is not an `HTMLElement`.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Status.init = function(root) {&lt;br /&gt;
	if (!(root instanceof Element)) {&lt;br /&gt;
		throw new Error(&#039;object not an instance of Element&#039;);&lt;br /&gt;
	}&lt;br /&gt;
	while (root.hasChildNodes()) {&lt;br /&gt;
		root.removeChild(root.firstChild);&lt;br /&gt;
	}&lt;br /&gt;
	Morebits.Status.root = root;&lt;br /&gt;
	Morebits.Status.errorEvent = null;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Morebits.Status.root = null;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * @memberof Morebits.Status&lt;br /&gt;
 * @param {Function} handler - Function to execute on error.&lt;br /&gt;
 * @throws {Error} When `handler` is not a function.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Status.onError = function(handler) {&lt;br /&gt;
	if (typeof handler === &#039;function&#039;) {&lt;br /&gt;
		Morebits.Status.errorEvent = handler;&lt;br /&gt;
	} else {&lt;br /&gt;
		throw new Error(&#039;Morebits.Status.onError: handler is not a function&#039;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Morebits.Status.prototype = {&lt;br /&gt;
	stat: null,&lt;br /&gt;
	statRaw: null,&lt;br /&gt;
	text: null,&lt;br /&gt;
	textRaw: null,&lt;br /&gt;
	type: &#039;status&#039;,&lt;br /&gt;
	target: null,&lt;br /&gt;
	node: null,&lt;br /&gt;
	linked: false,&lt;br /&gt;
&lt;br /&gt;
	/** Add the status element node to the DOM. */&lt;br /&gt;
	link: function() {&lt;br /&gt;
		if (!this.linked &amp;amp;&amp;amp; Morebits.Status.root) {&lt;br /&gt;
			Morebits.Status.root.appendChild(this.node);&lt;br /&gt;
			this.linked = true;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/** Remove the status element node from the DOM. */&lt;br /&gt;
	unlink: function() {&lt;br /&gt;
		if (this.linked) {&lt;br /&gt;
			Morebits.Status.root.removeChild(this.node);&lt;br /&gt;
			this.linked = false;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Update the status.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} status - Part of status message after colon.&lt;br /&gt;
	 * @param {string} type - &#039;status&#039; (blue), &#039;info&#039; (green), &#039;warn&#039;&lt;br /&gt;
	 * (red), or &#039;error&#039; (bold red).&lt;br /&gt;
	 */&lt;br /&gt;
	update: function(status, type) {&lt;br /&gt;
		this.statRaw = status;&lt;br /&gt;
		this.stat = Morebits.createHtml(status);&lt;br /&gt;
		if (type) {&lt;br /&gt;
			this.type = type;&lt;br /&gt;
			if (type === &#039;error&#039;) {&lt;br /&gt;
				// hack to force the page not to reload when an error is output - see also Morebits.Status() above&lt;br /&gt;
				Morebits.wiki.numberOfActionsLeft = 1000;&lt;br /&gt;
&lt;br /&gt;
				// call error callback&lt;br /&gt;
				if (Morebits.Status.errorEvent) {&lt;br /&gt;
					Morebits.Status.errorEvent();&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// also log error messages in the browser console&lt;br /&gt;
				console.error(this.textRaw + &#039;: &#039; + this.statRaw); // eslint-disable-line no-console&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.render();&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/** Produce the html for first part of the status message. */&lt;br /&gt;
	generate: function() {&lt;br /&gt;
		this.node = document.createElement(&#039;div&#039;);&lt;br /&gt;
		this.node.appendChild(document.createElement(&#039;span&#039;)).appendChild(this.text);&lt;br /&gt;
		this.node.appendChild(document.createElement(&#039;span&#039;)).appendChild(document.createTextNode(&#039;: &#039;));&lt;br /&gt;
		this.target = this.node.appendChild(document.createElement(&#039;span&#039;));&lt;br /&gt;
		this.target.appendChild(document.createTextNode(&#039;&#039;)); // dummy node&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/** Complete the html, for the second part of the status message. */&lt;br /&gt;
	render: function() {&lt;br /&gt;
		this.node.className = &#039;morebits_status_&#039; + this.type;&lt;br /&gt;
		while (this.target.hasChildNodes()) {&lt;br /&gt;
			this.target.removeChild(this.target.firstChild);&lt;br /&gt;
		}&lt;br /&gt;
		this.target.appendChild(this.stat);&lt;br /&gt;
		this.link();&lt;br /&gt;
	},&lt;br /&gt;
	status: function(status) {&lt;br /&gt;
		this.update(status, &#039;status&#039;);&lt;br /&gt;
	},&lt;br /&gt;
	info: function(status) {&lt;br /&gt;
		this.update(status, &#039;info&#039;);&lt;br /&gt;
	},&lt;br /&gt;
	warn: function(status) {&lt;br /&gt;
		this.update(status, &#039;warn&#039;);&lt;br /&gt;
	},&lt;br /&gt;
	error: function(status) {&lt;br /&gt;
		this.update(status, &#039;error&#039;);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * @memberof Morebits.Status&lt;br /&gt;
 * @param {string} text - Before colon&lt;br /&gt;
 * @param {string} status - After colon&lt;br /&gt;
 * @return {Morebits.Status} - `status`-type (blue)&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Status.status = function(text, status) {&lt;br /&gt;
	return new Morebits.Status(text, status);&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * @memberof Morebits.Status&lt;br /&gt;
 * @param {string} text - Before colon&lt;br /&gt;
 * @param {string} status - After colon&lt;br /&gt;
 * @return {Morebits.Status} - `info`-type (green)&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Status.info = function(text, status) {&lt;br /&gt;
	return new Morebits.Status(text, status, &#039;info&#039;);&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * @memberof Morebits.Status&lt;br /&gt;
 * @param {string} text - Before colon&lt;br /&gt;
 * @param {string} status - After colon&lt;br /&gt;
 * @return {Morebits.Status} - `warn`-type (red)&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Status.warn = function(text, status) {&lt;br /&gt;
	return new Morebits.Status(text, status, &#039;warn&#039;);&lt;br /&gt;
};&lt;br /&gt;
/**&lt;br /&gt;
 * @memberof Morebits.Status&lt;br /&gt;
 * @param {string} text - Before colon&lt;br /&gt;
 * @param {string} status - After colon&lt;br /&gt;
 * @return {Morebits.Status} - `error`-type (bold red)&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Status.error = function(text, status) {&lt;br /&gt;
	return new Morebits.Status(text, status, &#039;error&#039;);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * For the action complete message at the end, create a status line without&lt;br /&gt;
 * a colon separator.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.Status&lt;br /&gt;
 * @param {string} text&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Status.actionCompleted = function(text) {&lt;br /&gt;
	const node = document.createElement(&#039;div&#039;);&lt;br /&gt;
	node.appendChild(document.createElement(&#039;b&#039;)).appendChild(document.createTextNode(text));&lt;br /&gt;
	node.className = &#039;morebits_status_info morebits_action_complete&#039;;&lt;br /&gt;
	if (Morebits.Status.root) {&lt;br /&gt;
		Morebits.Status.root.appendChild(node);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Display the user&#039;s rationale, comments, etc. Back to them after a failure,&lt;br /&gt;
 * so that they may re-use it.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.Status&lt;br /&gt;
 * @param {string} comments&lt;br /&gt;
 * @param {string} message&lt;br /&gt;
 */&lt;br /&gt;
Morebits.Status.printUserText = function(comments, message) {&lt;br /&gt;
	const p = document.createElement(&#039;p&#039;);&lt;br /&gt;
	p.innerHTML = message;&lt;br /&gt;
	const div = document.createElement(&#039;div&#039;);&lt;br /&gt;
	div.className = &#039;morebits-usertext&#039;;&lt;br /&gt;
	div.style.marginTop = &#039;0&#039;;&lt;br /&gt;
	div.style.whiteSpace = &#039;pre-wrap&#039;;&lt;br /&gt;
	div.textContent = comments;&lt;br /&gt;
	p.appendChild(div);&lt;br /&gt;
	Morebits.Status.root.appendChild(p);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Simple helper function to create a simple node.&lt;br /&gt;
 *&lt;br /&gt;
 * @param {string} type - Type of HTML element.&lt;br /&gt;
 * @param {string} content - Text content.&lt;br /&gt;
 * @param {string} [color] - Font color.&lt;br /&gt;
 * @return {HTMLElement}&lt;br /&gt;
 */&lt;br /&gt;
Morebits.htmlNode = function(type, content, color) {&lt;br /&gt;
	const node = document.createElement(type);&lt;br /&gt;
	if (color) {&lt;br /&gt;
		node.style.color = color;&lt;br /&gt;
	}&lt;br /&gt;
	node.appendChild(document.createTextNode(content));&lt;br /&gt;
	return node;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add shift-click support for checkboxes. The wikibits version&lt;br /&gt;
 * (`window.addCheckboxClickHandlers`) has some restrictions, and doesn&#039;t work&lt;br /&gt;
 * with checkboxes inside a sortable table, so let&#039;s build our own.&lt;br /&gt;
 *&lt;br /&gt;
 * @param {jQuery} jQuerySelector&lt;br /&gt;
 * @param {jQuery} jQueryContext&lt;br /&gt;
 */&lt;br /&gt;
Morebits.checkboxShiftClickSupport = function(jQuerySelector, jQueryContext) {&lt;br /&gt;
	let lastCheckbox = null;&lt;br /&gt;
&lt;br /&gt;
	function clickHandler(event) {&lt;br /&gt;
		const thisCb = this;&lt;br /&gt;
		if (event.shiftKey &amp;amp;&amp;amp; lastCheckbox !== null) {&lt;br /&gt;
			const $cbs = $(jQuerySelector, jQueryContext); // can&#039;t cache them, obviously, if we want to support re-sorting&lt;br /&gt;
			let index = -1, lastIndex = -1, i;&lt;br /&gt;
			for (i = 0; i &amp;lt; $cbs.length; i++) {&lt;br /&gt;
				if ($cbs[i] === thisCb) {&lt;br /&gt;
					index = i;&lt;br /&gt;
					if (lastIndex &amp;gt; -1) {&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				if ($cbs[i] === lastCheckbox) {&lt;br /&gt;
					lastIndex = i;&lt;br /&gt;
					if (index &amp;gt; -1) {&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if (index &amp;gt; -1 &amp;amp;&amp;amp; lastIndex &amp;gt; -1) {&lt;br /&gt;
				// inspired by wikibits&lt;br /&gt;
				const endState = thisCb.checked;&lt;br /&gt;
				let start, finish;&lt;br /&gt;
				if (index &amp;lt; lastIndex) {&lt;br /&gt;
					start = index + 1;&lt;br /&gt;
					finish = lastIndex;&lt;br /&gt;
				} else {&lt;br /&gt;
					start = lastIndex;&lt;br /&gt;
					finish = index - 1;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				for (i = start; i &amp;lt;= finish; i++) {&lt;br /&gt;
					if ($cbs[i].checked !== endState) {&lt;br /&gt;
						$cbs[i].click();&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		lastCheckbox = thisCb;&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$(jQuerySelector, jQueryContext).on(&#039;click&#039;, clickHandler);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* **************** Morebits.BatchOperation **************** */&lt;br /&gt;
/**&lt;br /&gt;
 * Iterates over a group of pages (or arbitrary objects) and executes a worker function&lt;br /&gt;
 * for each.&lt;br /&gt;
 *&lt;br /&gt;
 * `setPageList(pageList)`: Sets the list of pages to work on. It should be an&lt;br /&gt;
 * array of page names strings.&lt;br /&gt;
 *&lt;br /&gt;
 * `setOption(optionName, optionValue)`: Sets a known option:&lt;br /&gt;
 * - `chunkSize` (integer): The size of chunks to break the array into (default&lt;br /&gt;
 * 50). Setting this to a small value (&amp;lt;5) can cause problems.&lt;br /&gt;
 * - `preserveIndividualStatusLines` (boolean): Keep each page&#039;s status element&lt;br /&gt;
 * visible when worker is complete? See note below.&lt;br /&gt;
 *&lt;br /&gt;
 * `run(worker, postFinish)`: Runs the callback `worker` for each page in the&lt;br /&gt;
 * list.  The callback must call `workerSuccess` when succeeding, or&lt;br /&gt;
 * `workerFailure` when failing.  If using {@link Morebits.wiki.Api} or&lt;br /&gt;
 * {@link Morebits.wiki.Page}, this is easily done by passing these two&lt;br /&gt;
 * functions as parameters to the methods on those objects: for instance,&lt;br /&gt;
 * `page.save(batchOp.workerSuccess, batchOp.workerFailure)`.  Make sure the&lt;br /&gt;
 * methods are called directly if special success/failure cases arise.  If you&lt;br /&gt;
 * omit to call these methods, the batch operation will stall after the first&lt;br /&gt;
 * chunk!  Also ensure that either workerSuccess or workerFailure is called no&lt;br /&gt;
 * more than once.  The second callback `postFinish` is executed when the&lt;br /&gt;
 * entire batch has been processed.&lt;br /&gt;
 *&lt;br /&gt;
 * If using `preserveIndividualStatusLines`, you should try to ensure that the&lt;br /&gt;
 * `workerSuccess` callback has access to the page title.  This is no problem for&lt;br /&gt;
 * {@link Morebits.wiki.Page} objects.  But when using the API, please set the&lt;br /&gt;
 * |pageName| property on the {@link Morebits.wiki.Api} object.&lt;br /&gt;
 *&lt;br /&gt;
 * There are sample batchOperation implementations using Morebits.wiki.Page in&lt;br /&gt;
 * twinklebatchdelete.js, twinklebatchundelete.js, and twinklebatchprotect.js.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {string} [currentAction]&lt;br /&gt;
 */&lt;br /&gt;
Morebits.BatchOperation = function(currentAction) {&lt;br /&gt;
	const ctx = {&lt;br /&gt;
		// backing fields for public properties&lt;br /&gt;
		pageList: null,&lt;br /&gt;
		options: {&lt;br /&gt;
			chunkSize: 50,&lt;br /&gt;
			preserveIndividualStatusLines: false&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		// internal counters, etc.&lt;br /&gt;
		statusElement: new Morebits.Status(currentAction || &#039;Performing batch operation&#039;),&lt;br /&gt;
		worker: null, // function that executes for each item in pageList&lt;br /&gt;
		postFinish: null, // function that executes when the whole batch has been processed&lt;br /&gt;
		countStarted: 0,&lt;br /&gt;
		countFinished: 0,&lt;br /&gt;
		countFinishedSuccess: 0,&lt;br /&gt;
		currentChunkIndex: -1,&lt;br /&gt;
		pageChunks: [],&lt;br /&gt;
		running: false&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// shouldn&#039;t be needed by external users, but provided anyway for maximum flexibility&lt;br /&gt;
	this.getStatusElement = function() {&lt;br /&gt;
		return ctx.statusElement;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the list of pages to work on.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Array} pageList - Array of objects over which you wish to execute the worker function&lt;br /&gt;
	 * This is usually the list of page names (strings).&lt;br /&gt;
	 */&lt;br /&gt;
	this.setPageList = function(pageList) {&lt;br /&gt;
		ctx.pageList = pageList;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets a known option.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} optionName - Name of the option:&lt;br /&gt;
	 * - chunkSize (integer): The size of chunks to break the array into&lt;br /&gt;
	 * (default 50). Setting this to a small value (&amp;lt;5) can cause problems.&lt;br /&gt;
	 * - preserveIndividualStatusLines (boolean): Keep each page&#039;s status&lt;br /&gt;
	 * element visible when worker is complete?&lt;br /&gt;
	 * @param {number|boolean} optionValue - Value to which the option is&lt;br /&gt;
	 * to be set. Should be an integer for chunkSize and a boolean for&lt;br /&gt;
	 * preserveIndividualStatusLines.&lt;br /&gt;
	 */&lt;br /&gt;
	this.setOption = function(optionName, optionValue) {&lt;br /&gt;
		ctx.options[optionName] = optionValue;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Runs the first callback for each page in the list.&lt;br /&gt;
	 * The callback must call workerSuccess when succeeding, or workerFailure when failing.&lt;br /&gt;
	 * Runs the optional second callback when the whole batch has been processed.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} worker&lt;br /&gt;
	 * @param {Function} [postFinish]&lt;br /&gt;
	 */&lt;br /&gt;
	this.run = function(worker, postFinish) {&lt;br /&gt;
		if (ctx.running) {&lt;br /&gt;
			ctx.statusElement.error(&#039;Batch operation is already running&#039;);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		ctx.running = true;&lt;br /&gt;
&lt;br /&gt;
		ctx.worker = worker;&lt;br /&gt;
		ctx.postFinish = postFinish;&lt;br /&gt;
		ctx.countStarted = 0;&lt;br /&gt;
		ctx.countFinished = 0;&lt;br /&gt;
		ctx.countFinishedSuccess = 0;&lt;br /&gt;
		ctx.currentChunkIndex = -1;&lt;br /&gt;
		ctx.pageChunks = [];&lt;br /&gt;
&lt;br /&gt;
		const total = ctx.pageList.length;&lt;br /&gt;
		if (!total) {&lt;br /&gt;
			ctx.statusElement.info(&#039;no pages specified&#039;);&lt;br /&gt;
			ctx.running = false;&lt;br /&gt;
			if (ctx.postFinish) {&lt;br /&gt;
				ctx.postFinish();&lt;br /&gt;
			}&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// chunk page list into more manageable units&lt;br /&gt;
		ctx.pageChunks = Morebits.array.chunk(ctx.pageList, ctx.options.chunkSize);&lt;br /&gt;
&lt;br /&gt;
		// start the process&lt;br /&gt;
		Morebits.wiki.addCheckpoint();&lt;br /&gt;
		ctx.statusElement.status(&#039;0%&#039;);&lt;br /&gt;
		fnStartNewChunk();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * To be called by worker before it terminates successfully.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {(Morebits.wiki.Page|Morebits.wiki.Api|string)} arg -&lt;br /&gt;
	 * This should be the `Morebits.wiki.Page` or `Morebits.wiki.Api` object used by worker&lt;br /&gt;
	 * (for the adjustment of status lines emitted by them).&lt;br /&gt;
	 * If no Morebits.wiki.* object is used (e.g. you&#039;re using `mw.Api()` or something else), and&lt;br /&gt;
	 * `preserveIndividualStatusLines` option is on, give the page name (string) as argument.&lt;br /&gt;
	 */&lt;br /&gt;
	this.workerSuccess = function(arg) {&lt;br /&gt;
&lt;br /&gt;
		if (arg instanceof Morebits.wiki.Api || arg instanceof Morebits.wiki.Page) {&lt;br /&gt;
			// update or remove status line&lt;br /&gt;
			const statelem = arg.getStatusElement();&lt;br /&gt;
			if (ctx.options.preserveIndividualStatusLines) {&lt;br /&gt;
				if (arg.getPageName || arg.pageName || (arg.query &amp;amp;&amp;amp; arg.query.title)) {&lt;br /&gt;
					// we know the page title - display a relevant message&lt;br /&gt;
					const pageName = arg.getPageName ? arg.getPageName() : arg.pageName || arg.query.title;&lt;br /&gt;
					statelem.info(&#039;completed ([[&#039; + pageName + &#039;]])&#039;);&lt;br /&gt;
				} else {&lt;br /&gt;
					// we don&#039;t know the page title - just display a generic message&lt;br /&gt;
					statelem.info(&#039;done&#039;);&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				// remove the status line automatically produced by Morebits.wiki.*&lt;br /&gt;
				statelem.unlink();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
		} else if (typeof arg === &#039;string&#039; &amp;amp;&amp;amp; ctx.options.preserveIndividualStatusLines) {&lt;br /&gt;
			new Morebits.Status(arg, &#039;completed ([[&#039; + arg + &#039;]])&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		ctx.countFinishedSuccess++;&lt;br /&gt;
		fnDoneOne();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	this.workerFailure = function() {&lt;br /&gt;
		fnDoneOne();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// private functions&lt;br /&gt;
&lt;br /&gt;
	const thisProxy = this;&lt;br /&gt;
&lt;br /&gt;
	var fnStartNewChunk = function() {&lt;br /&gt;
		const chunk = ctx.pageChunks[++ctx.currentChunkIndex];&lt;br /&gt;
		if (!chunk) {&lt;br /&gt;
			return; // done! yay&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// start workers for the current chunk&lt;br /&gt;
		ctx.countStarted += chunk.length;&lt;br /&gt;
		chunk.forEach((page) =&amp;gt; {&lt;br /&gt;
			ctx.worker(page, thisProxy);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var fnDoneOne = function() {&lt;br /&gt;
		ctx.countFinished++;&lt;br /&gt;
&lt;br /&gt;
		// update overall status line&lt;br /&gt;
		const total = ctx.pageList.length;&lt;br /&gt;
		if (ctx.countFinished &amp;lt; total) {&lt;br /&gt;
			const progress = Math.round(100 * ctx.countFinished / total);&lt;br /&gt;
			ctx.statusElement.status(progress + &#039;%&#039;);&lt;br /&gt;
&lt;br /&gt;
			// start a new chunk if we&#039;re close enough to the end of the previous chunk, and&lt;br /&gt;
			// we haven&#039;t already started the next one&lt;br /&gt;
			if (ctx.countFinished &amp;gt;= (ctx.countStarted - Math.max(ctx.options.chunkSize / 10, 2)) &amp;amp;&amp;amp;&lt;br /&gt;
				Math.floor(ctx.countFinished / ctx.options.chunkSize) &amp;gt; ctx.currentChunkIndex) {&lt;br /&gt;
				fnStartNewChunk();&lt;br /&gt;
			}&lt;br /&gt;
		} else if (ctx.countFinished === total) {&lt;br /&gt;
			const statusString = &#039;Done (&#039; + ctx.countFinishedSuccess + &#039;/&#039; + ctx.countFinished + &#039; actions completed successfully)&#039;;&lt;br /&gt;
			if (ctx.countFinishedSuccess &amp;lt; ctx.countFinished) {&lt;br /&gt;
				ctx.statusElement.warn(statusString);&lt;br /&gt;
			} else {&lt;br /&gt;
				ctx.statusElement.info(statusString);&lt;br /&gt;
			}&lt;br /&gt;
			if (ctx.postFinish) {&lt;br /&gt;
				ctx.postFinish();&lt;br /&gt;
			}&lt;br /&gt;
			Morebits.wiki.removeCheckpoint();&lt;br /&gt;
			ctx.running = false;&lt;br /&gt;
		} else {&lt;br /&gt;
			// ctx.countFinished &amp;gt; total&lt;br /&gt;
			// just for giggles! (well, serious debugging, actually)&lt;br /&gt;
			ctx.statusElement.warn(&#039;Done (overshot by &#039; + (ctx.countFinished - total) + &#039;)&#039;);&lt;br /&gt;
			Morebits.wiki.removeCheckpoint();&lt;br /&gt;
			ctx.running = false;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Given a set of asynchronous functions to run along with their dependencies,&lt;br /&gt;
 * run them in an efficient sequence so that multiple functions&lt;br /&gt;
 * that don&#039;t depend on each other are triggered simultaneously. Where&lt;br /&gt;
 * dependencies exist, it ensures that the dependency functions finish running&lt;br /&gt;
 * before the dependent function runs. The values resolved by the dependencies&lt;br /&gt;
 * are made available to the dependant as arguments.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @class&lt;br /&gt;
 */&lt;br /&gt;
Morebits.TaskManager = function(context) {&lt;br /&gt;
	this.taskDependencyMap = new Map();&lt;br /&gt;
	this.failureCallbackMap = new Map();&lt;br /&gt;
	this.deferreds = new Map();&lt;br /&gt;
	this.context = context || window;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Register a task along with its dependencies (tasks which should have finished&lt;br /&gt;
	 * execution before we can begin this one). Each task is a function that must return&lt;br /&gt;
	 * a promise. The function will get the values resolved by the dependency functions&lt;br /&gt;
	 * as arguments.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {Function} func - A task.&lt;br /&gt;
	 * @param {Function[]} deps - Its dependencies.&lt;br /&gt;
	 * @param {Function} [onFailure] - a failure callback that&#039;s run if the task or any one&lt;br /&gt;
	 * of its dependencies fail.&lt;br /&gt;
	 */&lt;br /&gt;
	this.add = function(func, deps, onFailure) {&lt;br /&gt;
		this.taskDependencyMap.set(func, deps);&lt;br /&gt;
		this.failureCallbackMap.set(func, onFailure || (() =&amp;gt; {}));&lt;br /&gt;
		const deferred = $.Deferred();&lt;br /&gt;
		this.deferreds.set(func, deferred);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Run all the tasks. Multiple tasks may be run at once.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {jQuery.Promise} - Resolved if all tasks succeed, rejected otherwise.&lt;br /&gt;
	 */&lt;br /&gt;
	this.execute = function() {&lt;br /&gt;
		const self = this; // proxy for `this` for use inside functions where `this` is something else&lt;br /&gt;
		this.taskDependencyMap.forEach((deps, task) =&amp;gt; {&lt;br /&gt;
			const dependencyPromisesArray = deps.map((dep) =&amp;gt; self.deferreds.get(dep));&lt;br /&gt;
			$.when.apply(self.context, dependencyPromisesArray).then(function() {&lt;br /&gt;
				const result = task.apply(self.context, arguments);&lt;br /&gt;
				if (result === undefined) { // maybe the function threw, or it didn&#039;t return anything&lt;br /&gt;
					mw.log.error(&#039;Morebits.TaskManager: task returned undefined&#039;);&lt;br /&gt;
					self.deferreds.get(task).reject.apply(self.context, arguments);&lt;br /&gt;
					self.failureCallbackMap.get(task).apply(self.context, []);&lt;br /&gt;
				}&lt;br /&gt;
				result.then(function() {&lt;br /&gt;
					self.deferreds.get(task).resolve.apply(self.context, arguments);&lt;br /&gt;
				}, function() { // task failed&lt;br /&gt;
					self.deferreds.get(task).reject.apply(self.context, arguments);&lt;br /&gt;
					self.failureCallbackMap.get(task).apply(self.context, arguments);&lt;br /&gt;
				});&lt;br /&gt;
			}, function() { // one or more of the dependencies failed&lt;br /&gt;
				self.failureCallbackMap.get(task).apply(self.context, arguments);&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
		return $.when.apply(null, [...this.deferreds.values()]); // resolved when everything is done!&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * A simple draggable window. No longer uses jQuery UI.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits&lt;br /&gt;
 * @class&lt;br /&gt;
 * @param {number} width&lt;br /&gt;
 * @param {number} height - The maximum allowable height for the content area.&lt;br /&gt;
 */&lt;br /&gt;
Morebits.SimpleWindow = function SimpleWindow(width, height) {&lt;br /&gt;
	const $dialog = $(&#039;&amp;lt;div&amp;gt;&#039;).addClass(&#039;morebits-dialog&#039;).attr(&#039;role&#039;, &#039;dialog&#039;).attr(&#039;tabindex&#039;, -1);&lt;br /&gt;
&lt;br /&gt;
	const $titleBar = $(&#039;&amp;lt;div&amp;gt;&#039;).addClass(&#039;morebits-dialog-titlebar&#039;).append(&lt;br /&gt;
		$(&#039;&amp;lt;span&amp;gt;&#039;).addClass(&#039;morebits-dialog-title&#039;),&lt;br /&gt;
		$(&#039;&amp;lt;button&amp;gt;&#039;)&lt;br /&gt;
			.addClass(&#039;morebits-dialog-close&#039;)&lt;br /&gt;
			.text(&#039;\u00D7&#039;)&lt;br /&gt;
			.on(&#039;click&#039;, () =&amp;gt; this.close())&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	const $content = $(&#039;&amp;lt;div&amp;gt;&#039;)&lt;br /&gt;
		.addClass(&#039;morebits-dialog-content&#039;)&lt;br /&gt;
		.attr(&#039;id&#039;, &#039;morebits-dialog-content-&#039; + Math.round(Math.random() * 1e15));&lt;br /&gt;
&lt;br /&gt;
	const $buttonPane = $(&#039;&amp;lt;div&amp;gt;&#039;).addClass(&#039;morebits-dialog-buttonpane&#039;).append(&lt;br /&gt;
		$(&#039;&amp;lt;span&amp;gt;&#039;).addClass(&#039;morebits-dialog-buttons&#039;),&lt;br /&gt;
		$(&#039;&amp;lt;span&amp;gt;&#039;).addClass(&#039;morebits-dialog-footerlinks&#039;)&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	const $resizer = $(&#039;&amp;lt;div&amp;gt;&#039;).addClass(&#039;morebits-dialog-resizer&#039;);&lt;br /&gt;
&lt;br /&gt;
	$dialog.append($titleBar, $content, $buttonPane, $resizer)&lt;br /&gt;
		.css(&#039;width&#039;, Math.min(parseInt(width || 800, 10), $(window).width()))&lt;br /&gt;
		.css(&#039;height&#039;, &#039;auto&#039;)&lt;br /&gt;
		.css(&#039;max-height&#039;, height + 20)&lt;br /&gt;
		.css(&#039;top&#039;, Math.max(0, window.scrollY + $(window).height() / 2 - (height + 20) / 2)) // Centre it (assume max height)&lt;br /&gt;
		.css(&#039;left&#039;, Math.max(0, window.scrollX + $(window).width() / 2 - $dialog.width() / 2)); // Centre it&lt;br /&gt;
&lt;br /&gt;
	$dialog.on(&#039;focus&#039;, () =&amp;gt; this.focus()).on(&#039;keydown&#039;, (e) =&amp;gt; {&lt;br /&gt;
		if (e.key === &#039;Escape&#039;) {&lt;br /&gt;
			this.close();&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	// Make dialog draggable and resizable&lt;br /&gt;
	let isDragging = false, isResizing = false, initialX, initialY, initialWidth, initialHeight;&lt;br /&gt;
	$titleBar.on(&#039;mousedown&#039;, (e) =&amp;gt; {&lt;br /&gt;
		isDragging = true;&lt;br /&gt;
		initialX = e.clientX - $dialog.offset().left;&lt;br /&gt;
		initialY = e.clientY - $dialog.offset().top;&lt;br /&gt;
	});&lt;br /&gt;
	$resizer.on(&#039;mousedown&#039;, (e) =&amp;gt; {&lt;br /&gt;
		isResizing = true;&lt;br /&gt;
		$dialog.css(&#039;height&#039;, $dialog.height());&lt;br /&gt;
		$dialog.css(&#039;max-height&#039;, &#039;none&#039;);&lt;br /&gt;
&lt;br /&gt;
		initialWidth = $dialog.width();&lt;br /&gt;
		initialHeight = $dialog.height();&lt;br /&gt;
		initialX = e.clientX;&lt;br /&gt;
		initialY = e.clientY;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	$(document).on(&#039;mousemove&#039;, (e) =&amp;gt; {&lt;br /&gt;
		if (isDragging) {&lt;br /&gt;
			$dialog.css(&#039;left&#039;, Math.max(0, e.clientX - initialX))&lt;br /&gt;
				.css(&#039;top&#039;, Math.max(0, e.clientY - initialY));&lt;br /&gt;
		} else if (isResizing) {&lt;br /&gt;
			$dialog.css(&#039;width&#039;, initialWidth + (e.clientX - initialX))&lt;br /&gt;
				.css(&#039;height&#039;, initialHeight + (e.clientY - initialY));&lt;br /&gt;
		}&lt;br /&gt;
	}).on(&#039;mouseup&#039;, () =&amp;gt; {&lt;br /&gt;
		isDragging = false;&lt;br /&gt;
		isResizing = false;&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	this.$dialog = $dialog;&lt;br /&gt;
	this.content = $content[0];&lt;br /&gt;
	this.height = height;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Morebits.SimpleWindow.prototype = {&lt;br /&gt;
	buttons: [],&lt;br /&gt;
	height: 600,&lt;br /&gt;
	hasFooterLinks: false,&lt;br /&gt;
	scriptName: null,&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Bring a dialog to the top, when there are other overlapping dialogs open.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	focus: function() {&lt;br /&gt;
		if (!this.$dialog.hasClass(&#039;morebits-dialog-modal&#039;)) {&lt;br /&gt;
			$(&#039;.morebits-dialog:not(.morebits-dialog-modal)&#039;).get()&lt;br /&gt;
				.filter((dialog) =&amp;gt; dialog !== this.$dialog[0])&lt;br /&gt;
				.concat(this.$dialog[0])&lt;br /&gt;
				.forEach((dialog, idx) =&amp;gt; {&lt;br /&gt;
					dialog.style.zIndex = 501 + idx;&lt;br /&gt;
				});&lt;br /&gt;
		}&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Closes the dialog. If this is set as an event handler, it will stop the event&lt;br /&gt;
	 * from doing anything more.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {event} [event]&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	close: function(event) {&lt;br /&gt;
		if (event) {&lt;br /&gt;
			event.preventDefault();&lt;br /&gt;
		}&lt;br /&gt;
		this.setModality(false);&lt;br /&gt;
		this.$dialog.remove();&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Shows the dialog. Calling display() on a dialog that has previously been closed&lt;br /&gt;
	 * might work, but it is not guaranteed.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	display: function() {&lt;br /&gt;
		if (this.scriptName) {&lt;br /&gt;
			const $titleBar = this.$dialog.find(&#039;.morebits-dialog-title&#039;);&lt;br /&gt;
			$titleBar.find(&#039;.morebits-dialog-scriptname&#039;).remove();&lt;br /&gt;
			$titleBar.prepend($(&#039;&amp;lt;span&amp;gt;&#039;)&lt;br /&gt;
				.addClass(&#039;morebits-dialog-scriptname&#039;)&lt;br /&gt;
				.text(this.scriptName + &#039; \u00B7 &#039;) // U+00B7 MIDDLE DOT = &amp;amp;middot;&lt;br /&gt;
			);&lt;br /&gt;
		}&lt;br /&gt;
		if (this.$dialog.find(&#039;.morebits-scrollbox&#039;).length) {&lt;br /&gt;
			// quickform needs some extra CSS if it happens to contain a scrollbox.&lt;br /&gt;
			// CSS :has() selector can be used in the future which is easier and more reliable.&lt;br /&gt;
			this.$dialog.find(&#039;.quickform&#039;).addClass(&#039;has-scrollbox&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		this.$dialog.appendTo(document.body);&lt;br /&gt;
		// Put focus on the first form element in the dialog, or on dialog itself.&lt;br /&gt;
		const $firstField = this.$dialog.find(&#039;input, select, textarea&#039;).first();&lt;br /&gt;
		const $firstFieldOrDialog = $firstField.length ? $firstField : this.$dialog;&lt;br /&gt;
		$firstFieldOrDialog.trigger(&#039;focus&#039;);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the dialog title.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} title&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	setTitle: function(title) {&lt;br /&gt;
		this.$dialog.find(&#039;.morebits-dialog-title&#039;).text(title);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the script name, appearing as a prefix to the title to help users determine which&lt;br /&gt;
	 * user script is producing which dialog. For instance, Twinkle modules set this to &amp;quot;Twinkle&amp;quot;.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} name&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	setScriptName: function(name) {&lt;br /&gt;
		this.scriptName = name;&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the dialog width.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {number} width&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	setWidth: function(width) {&lt;br /&gt;
		this.$dialog.css(&#039;width&#039;, width + &#039;px&#039;);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the dialog&#039;s maximum height. The dialog will auto-size to fit its contents.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {number} height&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	setHeight: function(height) {&lt;br /&gt;
		this.$dialog.css(&#039;height&#039;, &#039;auto&#039;);&lt;br /&gt;
		this.$dialog.css(&#039;max-height&#039;, (height + 20) + &#039;px&#039;);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the content of the dialog to the given element node, usually from rendering&lt;br /&gt;
	 * a {@link Morebits.QuickForm}.&lt;br /&gt;
	 * Re-enumerates the footer buttons, but leaves the footer links as they are.&lt;br /&gt;
	 * Be sure to call this at least once before the dialog is displayed...&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {HTMLElement} content&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	setContent: function(content) {&lt;br /&gt;
		this.purgeContent();&lt;br /&gt;
		this.addContent(content);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Adds the given element node to the dialog content.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {HTMLElement} content&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	addContent: function(content) {&lt;br /&gt;
		this.content.appendChild(content);&lt;br /&gt;
&lt;br /&gt;
		// look for submit buttons in the content, hide them, and add a proxy button to the button pane&lt;br /&gt;
		$(this.content).find(&#039;input[type=&amp;quot;submit&amp;quot;], button[type=&amp;quot;submit&amp;quot;]&#039;).get().forEach((node) =&amp;gt; {&lt;br /&gt;
			node.style.display = &#039;none&#039;;&lt;br /&gt;
			const button = document.createElement(&#039;button&#039;);&lt;br /&gt;
			button.textContent = node.getAttribute(&#039;value&#039;) || node.textContent || &#039;Submit&#039;;&lt;br /&gt;
			button.className = node.className || &#039;submitButtonProxy&#039;;&lt;br /&gt;
			button.addEventListener(&#039;click&#039;, () =&amp;gt; node.click(), false);&lt;br /&gt;
			this.buttons.push(button);&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		// remove all buttons from the button pane and re-add them&lt;br /&gt;
		this.$dialog.find(&#039;.morebits-dialog-buttons&#039;)&lt;br /&gt;
			.empty()&lt;br /&gt;
			.append(...this.buttons)&lt;br /&gt;
			// Set data-empty attribute only if there are no buttons. Used by CSS.&lt;br /&gt;
			.attr(&#039;data-empty&#039;, this.buttons.length ? null : &#039;data-empty&#039;);&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Removes all contents from the dialog, barring any footer links.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	purgeContent: function() {&lt;br /&gt;
		this.buttons = [];&lt;br /&gt;
		// delete all buttons in the buttonpane&lt;br /&gt;
		this.$dialog.find(&#039;.morebits-dialog-buttons&#039;).empty();&lt;br /&gt;
		$(this.content).empty();&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Adds a link in the bottom-right corner of the dialog.&lt;br /&gt;
	 * This can be used to provide help or policy links.&lt;br /&gt;
	 * For example, Twinkle&#039;s CSD module adds a link to the CSD policy page,&lt;br /&gt;
	 * as well as a link to Twinkle&#039;s documentation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {string} text - Display text.&lt;br /&gt;
	 * @param {string} wikiPage - Link target.&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	addFooterLink: function(text, wikiPage) {&lt;br /&gt;
		const $footerlinks = this.$dialog.find(&#039;.morebits-dialog-footerlinks&#039;);&lt;br /&gt;
		if (this.hasFooterLinks) {&lt;br /&gt;
			const bullet = document.createElement(&#039;span&#039;);&lt;br /&gt;
			bullet.textContent = &#039; \u2022 &#039;; // U+2022 BULLET&lt;br /&gt;
			$footerlinks.append(bullet);&lt;br /&gt;
		}&lt;br /&gt;
		const link = document.createElement(&#039;a&#039;);&lt;br /&gt;
		link.setAttribute(&#039;href&#039;, mw.util.getUrl(wikiPage));&lt;br /&gt;
		link.setAttribute(&#039;title&#039;, wikiPage);&lt;br /&gt;
		link.setAttribute(&#039;target&#039;, &#039;_blank&#039;);&lt;br /&gt;
		link.textContent = text;&lt;br /&gt;
		$footerlinks.append(link);&lt;br /&gt;
		this.hasFooterLinks = true;&lt;br /&gt;
		return this;&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets whether the window should be modal or not. Modal dialogs create&lt;br /&gt;
	 * an overlay below the dialog but above other page elements. This&lt;br /&gt;
	 * must be used (if necessary) before calling display().&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {boolean} [modal=false] - If set to true, other items on the&lt;br /&gt;
	 * page will be disabled, i.e., cannot be interacted with.&lt;br /&gt;
	 * @return {Morebits.SimpleWindow}&lt;br /&gt;
	 */&lt;br /&gt;
	setModality: function(modal) {&lt;br /&gt;
		if (modal) {&lt;br /&gt;
			$(&#039;&amp;lt;div&amp;gt;&#039;).addClass(&#039;morebits-dialog-overlay&#039;).appendTo(document.body);&lt;br /&gt;
			this.$dialog.addClass(&#039;morebits-dialog-modal&#039;);&lt;br /&gt;
		} else {&lt;br /&gt;
			$(&#039;.morebits-dialog-overlay&#039;).remove();&lt;br /&gt;
			this.$dialog.removeClass(&#039;morebits-dialog-modal&#039;);&lt;br /&gt;
		}&lt;br /&gt;
		return this;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Enables or disables all footer buttons on all {@link Morebits.SimpleWindow}s in the current page.&lt;br /&gt;
 * This should be called with `false` when the button(s) become irrelevant (e.g. just before&lt;br /&gt;
 * {@link Morebits.Status.init} is called).&lt;br /&gt;
 * This is not an instance method so that consumers don&#039;t have to keep a reference to the&lt;br /&gt;
 * original `Morebits.SimpleWindow` object sitting around somewhere. Anyway, most of the time&lt;br /&gt;
 * there will only be one `Morebits.SimpleWindow` open, so this shouldn&#039;t matter.&lt;br /&gt;
 *&lt;br /&gt;
 * @memberof Morebits.SimpleWindow&lt;br /&gt;
 * @param {boolean} enabled&lt;br /&gt;
 */&lt;br /&gt;
Morebits.SimpleWindow.setButtonsEnabled = function(enabled) {&lt;br /&gt;
	$(&#039;.morebits-dialog-buttons button&#039;).prop(&#039;disabled&#039;, !enabled);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Deprecated class name aliases in camelCase. Please use the PascalCase names instead.&lt;br /&gt;
Morebits.batchOperation = Morebits.BatchOperation;&lt;br /&gt;
Morebits.date = Morebits.Date;&lt;br /&gt;
Morebits.quickForm = Morebits.QuickForm;&lt;br /&gt;
Morebits.quickForm.element = Morebits.QuickForm.Element;&lt;br /&gt;
Morebits.simpleWindow = Morebits.SimpleWindow;&lt;br /&gt;
Morebits.status = Morebits.Status;&lt;br /&gt;
Morebits.taskManager = Morebits.TaskManager;&lt;br /&gt;
Morebits.unbinder = Morebits.Unbinder;&lt;br /&gt;
Morebits.userspaceLogger = Morebits.UserspaceLogger;&lt;br /&gt;
Morebits.wiki.api = Morebits.wiki.Api;&lt;br /&gt;
Morebits.wiki.page = Morebits.wiki.Page;&lt;br /&gt;
Morebits.wiki.preview = Morebits.wiki.Preview;&lt;br /&gt;
Morebits.wikitext.page = Morebits.wikitext.Page;&lt;br /&gt;
&lt;br /&gt;
}());&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * If this script is being executed outside a ResourceLoader context, we add some&lt;br /&gt;
 * global assignments for legacy scripts, hopefully these can be removed down the line.&lt;br /&gt;
 *&lt;br /&gt;
 * IMPORTANT NOTE:&lt;br /&gt;
 * PLEASE DO NOT USE THESE ALIASES IN NEW CODE!&lt;br /&gt;
 * Thanks.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
if (typeof arguments === &#039;undefined&#039;) { // typeof is here for a reason...&lt;br /&gt;
	/* global Morebits */&lt;br /&gt;
	window.SimpleWindow = Morebits.SimpleWindow;&lt;br /&gt;
	window.QuickForm = Morebits.QuickForm;&lt;br /&gt;
	window.Wikipedia = Morebits.wiki;&lt;br /&gt;
	window.Status = Morebits.Status;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Citoid-template-type-map.json&amp;diff=1126</id>
		<title>MediaWiki:Citoid-template-type-map.json</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Citoid-template-type-map.json&amp;diff=1126"/>
		<updated>2026-09-10T15:05:40Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Ny side: { 	&amp;quot;artwork&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;audioRecording&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;bill&amp;quot;: &amp;quot;Cite web&amp;quot;, 	&amp;quot;blogPost&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;book&amp;quot;: &amp;quot;Cite book&amp;quot;, &amp;quot;bookSection&amp;quot;: &amp;quot;Cite book&amp;quot;, 	&amp;quot;case&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;computerProgram&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;conferencePaper&amp;quot;: &amp;quot;Cite journal&amp;quot;, 	&amp;quot;dataset&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;dictionaryEntry&amp;quot;: &amp;quot;Cite book&amp;quot;, &amp;quot;document&amp;quot;: &amp;quot;Cite web&amp;quot;, 	&amp;quot;email&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;encyclopediaArticle&amp;quot;: &amp;quot;Cite book&amp;quot;, &amp;quot;film&amp;quot;: &amp;quot;Cite web&amp;quot;, 	&amp;quot;forumPost&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;hearing&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;instantMessage&amp;quot;: &amp;quot;Cite web&amp;quot;, 	&amp;quot;interview&amp;quot;…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{&lt;br /&gt;
	&amp;quot;artwork&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;audioRecording&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;bill&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;blogPost&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;book&amp;quot;: &amp;quot;Cite book&amp;quot;,&lt;br /&gt;
	&amp;quot;bookSection&amp;quot;: &amp;quot;Cite book&amp;quot;,&lt;br /&gt;
	&amp;quot;case&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;computerProgram&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;conferencePaper&amp;quot;: &amp;quot;Cite journal&amp;quot;,&lt;br /&gt;
	&amp;quot;dataset&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;dictionaryEntry&amp;quot;: &amp;quot;Cite book&amp;quot;,&lt;br /&gt;
	&amp;quot;document&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;email&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;encyclopediaArticle&amp;quot;: &amp;quot;Cite book&amp;quot;,&lt;br /&gt;
	&amp;quot;film&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;forumPost&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;hearing&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;instantMessage&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;interview&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;journalArticle&amp;quot;: &amp;quot;Cite journal&amp;quot;,&lt;br /&gt;
	&amp;quot;letter&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;magazineArticle&amp;quot;: &amp;quot;Cite news&amp;quot;,&lt;br /&gt;
	&amp;quot;manuscript&amp;quot;: &amp;quot;Cite book&amp;quot;,&lt;br /&gt;
	&amp;quot;map&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;newspaperArticle&amp;quot;: &amp;quot;Cite news&amp;quot;,&lt;br /&gt;
	&amp;quot;patent&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;podcast&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;preprint&amp;quot;: &amp;quot;Cite journal&amp;quot;,&lt;br /&gt;
	&amp;quot;presentation&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;radioBroadcast&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;report&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;standard&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;statute&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;thesis&amp;quot;: &amp;quot;Cite book&amp;quot;,&lt;br /&gt;
	&amp;quot;tvBroadcast&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;videoRecording&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
	&amp;quot;webpage&amp;quot;: &amp;quot;Cite web&amp;quot;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Visualeditor-cite-tool-definition.json&amp;diff=1125</id>
		<title>MediaWiki:Visualeditor-cite-tool-definition.json</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Visualeditor-cite-tool-definition.json&amp;diff=1125"/>
		<updated>2026-09-10T14:59:45Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Ny side: [ 	{ &amp;quot;name&amp;quot;: &amp;quot;web&amp;quot;, &amp;quot;icon&amp;quot;: &amp;quot;ref-cite-web&amp;quot;, &amp;quot;template&amp;quot;: &amp;quot;Cite web&amp;quot;, &amp;quot;title&amp;quot;: &amp;quot;Website&amp;quot; }, 	{ &amp;quot;name&amp;quot;: &amp;quot;news&amp;quot;, &amp;quot;icon&amp;quot;: &amp;quot;ref-cite-news&amp;quot;, &amp;quot;template&amp;quot;: &amp;quot;Cite news&amp;quot;, &amp;quot;title&amp;quot;: &amp;quot;News&amp;quot; }, 	{ &amp;quot;name&amp;quot;: &amp;quot;book&amp;quot;, &amp;quot;icon&amp;quot;: &amp;quot;ref-cite-book&amp;quot;, &amp;quot;template&amp;quot;: &amp;quot;Cite book&amp;quot;, &amp;quot;title&amp;quot;: &amp;quot;Book&amp;quot; }, 	{ &amp;quot;name&amp;quot;: &amp;quot;journal&amp;quot;, &amp;quot;icon&amp;quot;: &amp;quot;ref-cite-journal&amp;quot;, &amp;quot;template&amp;quot;: &amp;quot;Cite journal&amp;quot;, &amp;quot;title&amp;quot;: &amp;quot;Journal&amp;quot; } ]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[&lt;br /&gt;
	{&lt;br /&gt;
		&amp;quot;name&amp;quot;: &amp;quot;web&amp;quot;,&lt;br /&gt;
		&amp;quot;icon&amp;quot;: &amp;quot;ref-cite-web&amp;quot;,&lt;br /&gt;
		&amp;quot;template&amp;quot;: &amp;quot;Cite web&amp;quot;,&lt;br /&gt;
		&amp;quot;title&amp;quot;: &amp;quot;Website&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		&amp;quot;name&amp;quot;: &amp;quot;news&amp;quot;,&lt;br /&gt;
		&amp;quot;icon&amp;quot;: &amp;quot;ref-cite-news&amp;quot;,&lt;br /&gt;
		&amp;quot;template&amp;quot;: &amp;quot;Cite news&amp;quot;,&lt;br /&gt;
		&amp;quot;title&amp;quot;: &amp;quot;News&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		&amp;quot;name&amp;quot;: &amp;quot;book&amp;quot;,&lt;br /&gt;
		&amp;quot;icon&amp;quot;: &amp;quot;ref-cite-book&amp;quot;,&lt;br /&gt;
		&amp;quot;template&amp;quot;: &amp;quot;Cite book&amp;quot;,&lt;br /&gt;
		&amp;quot;title&amp;quot;: &amp;quot;Book&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		&amp;quot;name&amp;quot;: &amp;quot;journal&amp;quot;,&lt;br /&gt;
		&amp;quot;icon&amp;quot;: &amp;quot;ref-cite-journal&amp;quot;,&lt;br /&gt;
		&amp;quot;template&amp;quot;: &amp;quot;Cite journal&amp;quot;,&lt;br /&gt;
		&amp;quot;title&amp;quot;: &amp;quot;Journal&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
]&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Cite_web/doc&amp;diff=1124</id>
		<title>Mal:Cite web/doc</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Cite_web/doc&amp;diff=1124"/>
		<updated>2026-09-10T14:03:43Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{pp-template}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{Documentation subpage}}&lt;br /&gt;
{{High-use}}&lt;br /&gt;
{{cascade-protected template}}&lt;br /&gt;
{{AWB standard installation}}&lt;br /&gt;
{{Bot use warning|bots=[[User:KiranBOT|KiranBOT]]}}&lt;br /&gt;
{{csdoc|lua}}&lt;br /&gt;
{{csdoc|cs1}}&lt;br /&gt;
{{csdoc|lead|web sources that are not characterized by another [[Help:Citation Style 1|CS1]] template. Do not use this template in the &amp;quot;[[WP:ELCITE|External links]]&amp;quot; section of articles}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
{{csdoc|usage}}&lt;br /&gt;
{{csdoc|usage common}}&lt;br /&gt;
;To cite a web page with a credited author&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;{{cite web |last= |first= |date= |title= |url= |website= |location= |publisher= |access-date=}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;To cite a web page with no credited author&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;{{cite web |author=&amp;lt;!-- not stated --&amp;gt; |date= |title= |url= |website= |location= |publisher= |access-date=}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;To cite an online web page that has been archived&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;{{cite web |last= |first= |date= |title= |url= |website= |location= |publisher= |url-status= |archive-url= |archive-date= |access-date=}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;To cite a web page written in a foreign language&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;{{cite web |last= |first= |date= |title= |url= |trans-title= |website= |language= |location= |publisher= |access-date=}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;To cite and quote an archived, two-author, foreign-language web page re-published as a PDF on an information aggregation service requiring a subscription&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;{{cite web |last1= |first1= |last2= |first2= |date= |title= |url= |url-access= |trans-title= |format= |website= |language= |location= |publisher= |url-status= |archive-url= |archive-date= |access-date= |via= |quote=}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{end}}&lt;br /&gt;
&lt;br /&gt;
{{csdoc|usage full}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;{{cite web |last1= |first1= |author-link1= |last2= |first2= |author-link2= |display-authors= |author-mask1= |author-mask2= |collaboration= |df= |date= |year= |orig-date= |orig-year= |location= |editor-last1= |editor-first1= |editor-link1= |editor-last2= |editor-first2= |editor-link2= |display-editors= |editor-mask1= |editor-mask2= |title= |script-title= |title-link= |url= |url-access= |trans-title= |format= |department= |website= |script-website= |trans-website= |type= |series= |language= |interviewer-last1= |interviewer-first1= |interviewer-link1= |interviewer-last2= |interviewer-first2= |interviewer-link2= |display-interviewers= |interviewer-mask1= |interviewer-mask2= |translator-last1= |translator-first1= |translator-link1= |translator-last2= |translator-first2= |translator-link2= |display-translators= |translator-mask1= |translator-mask2= |others= |name-list-style= |edition= |publication-place= |publisher= |publication-date= |agency= |minutes= |time-caption= |time= |page= |pages= |at= |no-pp= |arxiv= |asin= |asin-tld= |bibcode= |bibcode-access= |biorxiv= |doi= |doi-access= |doi-broken-date= |eissn= |hdl= |hdl-access= |isbn= |ismn= |issn= |jfm= |jstor= |jstor-access= |lccn= |medrxiv= |mr= |oclc= |ol= |ol-access= |osti= |osti-access= |pmc= |pmc-embargo-date= |pmid= |rfc= |sbn= |ssrn= |s2cid= |s2cid-access= |zbl= |id= |url-status= |archive-url= |archive-format= |archive-date= |access-date= |via= |quote-page= |quote-pages= |quote= |script-quote= |trans-quote= |mode= |ref= |postscript=}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{end}}&lt;br /&gt;
&lt;br /&gt;
{{csdoc|usage vertical common}}&lt;br /&gt;
&amp;lt;!-- Please synchronize this list with the corresponding one at the overview page [[Wikipedia:Citation templates#Examples]] --&amp;gt;&lt;br /&gt;
;To cite a web page with a credited author&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{{cite web&lt;br /&gt;
|last        = &lt;br /&gt;
|first       = &lt;br /&gt;
|date        = &lt;br /&gt;
|title       = &lt;br /&gt;
|url         = &lt;br /&gt;
|website     = &lt;br /&gt;
|location    = &lt;br /&gt;
|publisher   = &lt;br /&gt;
|access-date = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;To cite a web page with no credited author&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{{cite web&lt;br /&gt;
|author      = &amp;lt;!-- not stated --&amp;gt;&lt;br /&gt;
|date        = &lt;br /&gt;
|title       = &lt;br /&gt;
|url         = &lt;br /&gt;
|website     = &lt;br /&gt;
|location    = &lt;br /&gt;
|publisher   = &lt;br /&gt;
|access-date = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;To cite a web page article that has been archived&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{{cite web&lt;br /&gt;
|last         = &lt;br /&gt;
|first        = &lt;br /&gt;
|date         = &lt;br /&gt;
|title        = &lt;br /&gt;
|url          = &lt;br /&gt;
|website      = &lt;br /&gt;
|location     = &lt;br /&gt;
|publisher    = &lt;br /&gt;
|url-status   = &lt;br /&gt;
|archive-url  = &lt;br /&gt;
|archive-date = &lt;br /&gt;
|access-date  = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;To cite a web page written in a foreign language&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{{cite web&lt;br /&gt;
|last        = &lt;br /&gt;
|first       = &lt;br /&gt;
|date        = &lt;br /&gt;
|title       = &lt;br /&gt;
|url         = &lt;br /&gt;
|trans-title = &lt;br /&gt;
|website     = &lt;br /&gt;
|language    = &lt;br /&gt;
|location    = &lt;br /&gt;
|publisher   = &lt;br /&gt;
|access-date = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;To cite and quote an archived, two-author, foreign-language web page re-published as a PDF on an information aggregation service requiring a subscription&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{{cite web&lt;br /&gt;
|last1        = &lt;br /&gt;
|first1       = &lt;br /&gt;
|last2        = &lt;br /&gt;
|first2       = &lt;br /&gt;
|date         = &lt;br /&gt;
|title        = &lt;br /&gt;
|url          = &lt;br /&gt;
|url-access   = &lt;br /&gt;
|trans-title  = &lt;br /&gt;
|format       = &lt;br /&gt;
|website      = &lt;br /&gt;
|language     = &lt;br /&gt;
|location     = &lt;br /&gt;
|publisher    = &lt;br /&gt;
|url-status   = &lt;br /&gt;
|archive-url  = &lt;br /&gt;
|archive-date = &lt;br /&gt;
|access-date  = &lt;br /&gt;
|via          = &lt;br /&gt;
|quote        = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{end}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Full parameter set in vertical format&lt;br /&gt;
! Parameters !! Prerequisites !! Brief instructions / notes !! Vertical list&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|last1}}|or any of its aliases, including: last; surname1; surname; author-last1; author1-last; author-last; author-surname1; author1-surname; author-surname; author1; author; subject-last1; subject1-last; subject-last; subject-surname1; subject1-surname; subject-surname; subject1; subject; host1; and host}}&lt;br /&gt;
|&lt;br /&gt;
| Author&#039;s last name or single name author. Don&#039;t link.&lt;br /&gt;
| rowspan=&amp;quot;121&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; | &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{{cite web&lt;br /&gt;
|last1                = &lt;br /&gt;
|first1               = &lt;br /&gt;
|author-link1         = &lt;br /&gt;
|last2                = &lt;br /&gt;
|first2               = &lt;br /&gt;
|author-link2         = &lt;br /&gt;
|display-authors      = &lt;br /&gt;
|author-mask1         = &lt;br /&gt;
|author-mask2         = &lt;br /&gt;
|collaboration        = &lt;br /&gt;
|df                   = &lt;br /&gt;
|date                 = &lt;br /&gt;
|year                 = &lt;br /&gt;
|orig-date            = &lt;br /&gt;
|orig-year            = &lt;br /&gt;
|location             = &lt;br /&gt;
|editor-last1         = &lt;br /&gt;
|editor-first1        = &lt;br /&gt;
|editor-link1         = &lt;br /&gt;
|editor-last2         = &lt;br /&gt;
|editor-first2        = &lt;br /&gt;
|editor-link2         = &lt;br /&gt;
|display-editors      = &lt;br /&gt;
|editor-mask1         = &lt;br /&gt;
|editor-mask2         = &lt;br /&gt;
|title                = &lt;br /&gt;
|script-title         = &lt;br /&gt;
|title-link           = &lt;br /&gt;
|url                  = &lt;br /&gt;
|url-access           = &lt;br /&gt;
|trans-title          = &lt;br /&gt;
|format               = &lt;br /&gt;
|department           = &lt;br /&gt;
|website              = &lt;br /&gt;
|script-website       = &lt;br /&gt;
|trans-website        = &lt;br /&gt;
|type                 = &lt;br /&gt;
|series               = &lt;br /&gt;
|language             = &lt;br /&gt;
|interviewer-last1    = &lt;br /&gt;
|interviewer-first1   = &lt;br /&gt;
|interviewer-link1    = &lt;br /&gt;
|interviewer-last2    = &lt;br /&gt;
|interviewer-first2   = &lt;br /&gt;
|interviewer-link2    = &lt;br /&gt;
|display-interviewers = &lt;br /&gt;
|interviewer-mask1    = &lt;br /&gt;
|interviewer-mask2    = &lt;br /&gt;
|translator-last1     = &lt;br /&gt;
|translator-first1    = &lt;br /&gt;
|translator-link1     = &lt;br /&gt;
|translator-last2     = &lt;br /&gt;
|translator-first2    = &lt;br /&gt;
|translator-link2     = &lt;br /&gt;
|display-translators  = &lt;br /&gt;
|translator-mask1     = &lt;br /&gt;
|translator-mask2     = &lt;br /&gt;
|others               = &lt;br /&gt;
|name-list-style      = &lt;br /&gt;
|edition              = &lt;br /&gt;
|publication-place    = &lt;br /&gt;
|publisher            = &lt;br /&gt;
|publication-date     = &lt;br /&gt;
|agency               = &lt;br /&gt;
|minutes              = &lt;br /&gt;
|time-caption         = &lt;br /&gt;
|time                 = &lt;br /&gt;
|page                 = &lt;br /&gt;
|pages                = &lt;br /&gt;
|at                   = &lt;br /&gt;
|no-pp                = &lt;br /&gt;
|arxiv                = &lt;br /&gt;
|asin                 = &lt;br /&gt;
|asin-tld             = &lt;br /&gt;
|bibcode              = &lt;br /&gt;
|bibcode-access       = &lt;br /&gt;
|biorxiv              = &lt;br /&gt;
|doi                  = &lt;br /&gt;
|doi-access           = &lt;br /&gt;
|doi-broken-date      = &lt;br /&gt;
|eissn                = &lt;br /&gt;
|hdl                  = &lt;br /&gt;
|hdl-access           = &lt;br /&gt;
|isbn                 = &lt;br /&gt;
|ismn                 = &lt;br /&gt;
|issn                 = &lt;br /&gt;
|jfm                  = &lt;br /&gt;
|jstor                = &lt;br /&gt;
|jstor-access         = &lt;br /&gt;
|lccn                 = &lt;br /&gt;
|medrxiv              = &lt;br /&gt;
|mr                   = &lt;br /&gt;
|oclc                 = &lt;br /&gt;
|ol                   = &lt;br /&gt;
|ol-access            = &lt;br /&gt;
|osti                 = &lt;br /&gt;
|osti-access          = &lt;br /&gt;
|pmc                  = &lt;br /&gt;
|pmc-embargo-date     = &lt;br /&gt;
|pmid                 = &lt;br /&gt;
|rfc                  = &lt;br /&gt;
|sbn                  = &lt;br /&gt;
|ssrn                 = &lt;br /&gt;
|s2cid                = &lt;br /&gt;
|s2cid-access         = &lt;br /&gt;
|zbl                  = &lt;br /&gt;
|id                   = &lt;br /&gt;
|url-status           = &lt;br /&gt;
|archive-url          = &lt;br /&gt;
|archive-format       = &lt;br /&gt;
|archive-date         = &lt;br /&gt;
|access-date          = &lt;br /&gt;
|via                  = &lt;br /&gt;
|quote-page           = &lt;br /&gt;
|quote-pages          = &lt;br /&gt;
|quote                = &lt;br /&gt;
|script-quote         = &lt;br /&gt;
|trans-quote          = &lt;br /&gt;
|mode                 = &lt;br /&gt;
|ref                  = &lt;br /&gt;
|postscript           = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|first1}}|or any of its aliases, including: first; given1; given; author-first1; author1-first; author-first; author-given1; author1-given; author-given; subject-first1; subject1-first; subject-first; subject-given1; subject1-given; and subject-given}}&lt;br /&gt;
| {{tooltip|{{codett|last1}}|or any of its aliases, including: last; surname1; surname; author-last1; author1-last; author-last; author-surname1; author1-surname; author-surname; author1; author; subject-last1; subject1-last; subject-last; subject-surname1; subject1-surname; subject-surname; subject1; and subject}}&lt;br /&gt;
| Author&#039;s first name. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|author-link1}}|or any of its aliases, including: author1-link; author-link; authorlink1; author1link; authorlink; subject-link1; subject1-link; and subject-link}}&lt;br /&gt;
| {{tooltip|{{codett|last1}}|or any of its aliases, including: last; surname1; surname; author-last1; author1-last; author-last; author-surname1; author1-surname; author-surname; author1; author; subject-last1; subject1-last; subject-last; subject-surname1; subject1-surname; subject-surname; subject1; and subject}}&lt;br /&gt;
| Title of Wikipedia article about the first author. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|last2}}|or any of its aliases, including: surname2; author-last2; author2-last; author-surname2; author2-surname; author2; subject-last2; subject2-last; subject-surname2; subject2-surname; subject2; and host2}}&lt;br /&gt;
| {{tooltip|{{codett|last1}}|or any of its aliases, including: last; surname1; surname; author-last1; author1-last; author-last; author-surname1; author1-surname; author-surname; author1; author; subject-last1; subject1-last; subject-last; subject-surname1; subject1-surname; subject-surname; subject1; and subject}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;last1&amp;lt;/code&amp;gt;, but for 2nd author. Don&#039;t link. Similar: &amp;lt;code&amp;gt;last3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|first2}}|or any of its aliases, including: given2; author-first2; author2-first; author-given2; author2-given; subject-first2; subject2-first; subject-given2 and subject2-given}}&lt;br /&gt;
| {{tooltip|{{codett|last2}}|or any of its aliases, including: surname2; author-last2; author2-last; author-surname2; author2-surname; author2; subject-last2; subject2-last; subject-surname2; subject2-surname; and subject2}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;first1&amp;lt;/code&amp;gt;, but for 2nd author. Don&#039;t link. Similar: &amp;lt;code&amp;gt;first3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|author-link2}}|or any of its aliases, including: author2-link; authorlink2; author2link; subject-link2; and subject2-link}}&lt;br /&gt;
| {{tooltip|{{codett|last2}}|or any of its aliases, including: surname2; author-last2; author2-last; author-surname2; author2-surname; author2; subject-last2; subject2-last; subject-surname2; subject2-surname; and subject2}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;author-link1&amp;lt;/code&amp;gt;, but for 2nd author. Don&#039;t link. Similar: &amp;lt;code&amp;gt;author-link3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|display-authors}}|or alias display-subjects}}&lt;br /&gt;
| {{tooltip|{{codett|last1}}|or any of its aliases, including: last; surname1; surname; author-last1; author1-last; author-last; author-surname1; author1-surname; author-surname; author1; author; subject-last1; subject1-last; subject-last; subject-surname1; subject1-surname; subject-surname; subject1; and subject}}&lt;br /&gt;
| Number (number of authors displayed) or &amp;lt;code&amp;gt;etal&amp;lt;/code&amp;gt; (more authors)&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|author-mask1}}|or any of its aliases, including: author1-mask; author-mask; subject-mask1; subject1-mask; and subject-mask}}&lt;br /&gt;
| {{tooltip|{{codett|last1}}|or any of its aliases, including: last; surname1; surname; author-last1; author1-last; author-last; author-surname1; author1-surname; author-surname; author1; author; subject-last1; subject1-last; subject-last; subject-surname1; subject1-surname; subject-surname; subject1; and subject}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | See [[#Display options|Display options]] below; not for lists of cited works&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|author-mask2}}|or any of its aliases, including: author2-mask; subject-mask2; and subject2-mask}}&lt;br /&gt;
| {{tooltip|{{codett|last2}}|or any of its aliases, including: surname2; author-last2; author2-last; author-surname2; author2-surname; author2; subject-last2; subject2-last; subject-surname2; subject2-surname; and subject2}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;collaboration&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{tooltip|{{codett|last1}}|or any of its aliases, including: last; surname1; surname; author-last1; author1-last; author-last; author-surname1; author1-surname; author-surname; author1; author; subject-last1; subject1-last; subject-last; subject-surname1; subject1-surname; subject-surname; subject1; and subject}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;orig-date&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;orig-year&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|location}}|or alias place}} || {{tooltip|{{codett|publisher}}|or alias institution}} || can be used for written-at location when &amp;lt;code&amp;gt;publication-place&amp;lt;/code&amp;gt; is used for publication place&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|editor-last1}}|or any of its aliases, including: editor1-last; editor-last; editor1; editor; editor-surname1; editor1-surname; and editor-surname}}&lt;br /&gt;
|&lt;br /&gt;
| Like &amp;lt;code&amp;gt;last1&amp;lt;/code&amp;gt;, but for editor. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|editor-first1}}|or any of its aliases, including: editor1-first; editor-first; editor-given1; editor1-given; and editor-given}}&lt;br /&gt;
| {{tooltip|{{codett|editor-last1}}|or any of its aliases, including: editor1-last; editor-last; editor1; editor; editor-surname1; editor1-surname; and editor-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;first1&amp;lt;/code&amp;gt;, but for editor. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|editor-link1}}|or any of its aliases, including: editor1-link; and editor-link}}&lt;br /&gt;
| {{tooltip|{{codett|editor-last1}}|or any of its aliases, including: editor1-last; editor-last; editor1; editor; editor-surname1; editor1-surname; and editor-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;author-link1&amp;lt;/code&amp;gt;, but for editor. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|editor-last2}}|or any of its aliases, including: editor2-last; editor2; editor-surname2; and editor2-surname}}&lt;br /&gt;
| {{tooltip|{{codett|editor-last1}}|or any of its aliases, including: editor1-last; editor-last; editor1; editor; editor-surname1; editor1-surname; and editor-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;last1&amp;lt;/code&amp;gt;, but for 2nd editor. Don&#039;t link. Similar: &amp;lt;code&amp;gt;editor-last3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|editor-first2}}|or any of its aliases, including: editor2-first; editor-given2; and editor2-given}}&lt;br /&gt;
| {{tooltip|{{codett|editor-last2}}|or any of its aliases, including: editor2-last; editor2; editor-surname2; and editor2-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;first1&amp;lt;/code&amp;gt;, but for 2nd editor. Don&#039;t link. Similar: &amp;lt;code&amp;gt;editor-first3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|editor-link2}}|or alias editor2-link}}&lt;br /&gt;
| {{tooltip|{{codett|editor-last2}}|or any of its aliases, including: editor2-last; editor2; editor-surname2; and editor2-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;author-link1&amp;lt;/code&amp;gt;, but for 2nd editor. Don&#039;t link. Similar: &amp;lt;code&amp;gt;editor-link3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;display-editors&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{tooltip|{{codett|editor-last1}}|or any of its aliases, including: editor1-last; editor-last; editor1; editor; editor-surname1; editor1-surname; and editor-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;display-authors&amp;lt;/code&amp;gt;, but for editors&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|editor-mask1}}|or any of its aliases, including: editor1-mask; and editor-mask}}&lt;br /&gt;
| {{tooltip|{{codett|editor-last1}}|or any of its aliases, including: editor1-last; editor-last; editor1; editor; editor-surname1; editor1-surname; and editor-surname}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | See [[#Display options|Display options]] below; not for lists of cited works&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|editor-mask2}}|or alias editor2-mask}}&lt;br /&gt;
| {{tooltip|{{codett|editor-last2}}|or any of its aliases, including: editor2-last; editor2; editor-surname2; and editor2-surname}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; || || This parameter is required.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;script-title&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;title-link&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;script-title&amp;lt;/code&amp;gt; || Name of a Wikipedia article about the work. Do not use if &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; is provided&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;script-title&amp;lt;/code&amp;gt; || This parameter is required. Do not use if &amp;lt;code&amp;gt;title-link&amp;lt;/code&amp;gt; is provided&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url-access&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trans-title&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;script-title&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;department&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|website}}|or any of its aliases, including: journal; magazine; newspaper; periodical; and work}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|script-website}}|or any of its aliases, including: script-journal; script-magazine; script-newspaper; script-periodical; and script-work}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|trans-website}}|or any of its aliases, including: trans-journal; trans-magazine; trans-newspaper; trans-periodical; and trans-work}} || {{tooltip|{{codett|website}}|or any of its aliases, including: journal; magazine; newspaper; periodical; and work}} or {{tooltip|{{codett|script-website}}|or any of its aliases, including: script-journal; script-magazine; script-newspaper; script-periodical; and script-work}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|type}}|or alias medium}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;series&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|language}}|or alias lang}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last1}}|or any of its aliases, including: interviewer1-last; interviewer-last; interviewer1; interviewer; interviewer-surname1; interviewer1-surname; and interviewer-surname}}&lt;br /&gt;
|&lt;br /&gt;
| Like &amp;lt;code&amp;gt;last1&amp;lt;/code&amp;gt;, but for interviewer. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|interviewer-first1}}|or any of its aliases, including: interviewer1-first; interviewer-first; interviewer-given1; interviewer1-given; and interviewer-given}}&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last1}}|or any of its aliases, including: interviewer1-last; interviewer-last; interviewer1; interviewer; interviewer-surname1; interviewer1-surname; and interviewer-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;first1&amp;lt;/code&amp;gt;, but for interviewer. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|interviewer-link1}}|or any of its aliases, including: interviewer1-link; and interviewer-link}}&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last1}}|or any of its aliases, including: interviewer1-last; interviewer-last; interviewer1; interviewer; interviewer-surname1; interviewer1-surname; and interviewer-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;author-link1&amp;lt;/code&amp;gt;, but for interviewer. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last2}}|or any of its aliases, including: interviewer2-last; interviewer2; interviewer-surname2; and interviewer2-surname}}&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last1}}|or any of its aliases, including: interviewer1-last; interviewer-last; interviewer1; interviewer; interviewer-surname1; interviewer1-surname; and interviewer-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;last1&amp;lt;/code&amp;gt;, but for 2nd interviewer. Don&#039;t link. Similar: &amp;lt;code&amp;gt;interviewer-last3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|interviewer-first2}}|or any of its aliases, including: interviewer2-first; interviewer-given2; and interviewer2-given}}&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last2}}|or any of its aliases, including: interviewer2-last; interviewer2; interviewer-surname2; and interviewer2-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;first1&amp;lt;/code&amp;gt;, but for 2nd interviewer. Don&#039;t link. Similar: &amp;lt;code&amp;gt;interviewer-first3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|interviewer-link2}}|or alias interviewer2-link}}&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last2}}|or any of its aliases, including: interviewer2-last; interviewer2; interviewer-surname2; and interviewer2-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;author-link1&amp;lt;/code&amp;gt;, but for 2nd interviewer. Don&#039;t link. Similar: &amp;lt;code&amp;gt;interviewer-link3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;display-interviewers&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last1}}|or any of its aliases, including: interviewer1-last; interviewer-last; interviewer1; interviewer; interviewer-surname1; interviewer1-surname; and interviewer-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;display-authors&amp;lt;/code&amp;gt;, but for interviewers&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|interviewer-mask1}}|or any of its aliases, including: interviewer1-mask; and interviewer-mask}}&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last1}}|or any of its aliases, including: interviewer1-last; interviewer-last; interviewer1; interviewer; interviewer-surname1; interviewer1-surname; and interviewer-surname}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | See [[#Display options|Display options]] below; not for lists of cited works&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|interviewer-mask2}}|or alias interviewer2-mask}}&lt;br /&gt;
| {{tooltip|{{codett|interviewer-last2}}|or any of its aliases, including: interviewer2-last; interviewer2; interviewer-surname2; and interviewer2-surname}}&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|translator-last1}}|or any of its aliases, including: translator1-last; translator-last; translator1; translator; translator-surname1; translator1-surname; and translator-surname}}&lt;br /&gt;
|&lt;br /&gt;
| Like &amp;lt;code&amp;gt;last1&amp;lt;/code&amp;gt;, but for translator. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|translator-first1}}|or any of its aliases, including: translator1-first; translator-first; translator-given1; translator1-given; and translator-given}}&lt;br /&gt;
| {{tooltip|{{codett|translator-last1}}|or any of its aliases, including: translator1-last; translator-last; translator1; translator; translator-surname1; translator1-surname; and translator-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;first1&amp;lt;/code&amp;gt;, but for translator. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|translator-link1}}|or any of its aliases, including: translator1-link; and translator-link}}&lt;br /&gt;
| {{tooltip|{{codett|translator-last1}}|or any of its aliases, including: translator1-last; translator-last; translator1; translator; translator-surname1; translator1-surname; and translator-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;author-link1&amp;lt;/code&amp;gt;, but for translator. Don&#039;t link.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|translator-last2}}|or any of its aliases, including: translator2-last; translator2; translator-surname2; and translator2-surname}}&lt;br /&gt;
| {{tooltip|{{codett|translator-last1}}|or any of its aliases, including: translator1-last; translator-last; translator1; translator; translator-surname1; translator1-surname; and translator-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;last1&amp;lt;/code&amp;gt;, but for 2nd translator. Don&#039;t link. Similar: &amp;lt;code&amp;gt;translator-last3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|translator-first2}}|or any of its aliases, including: translator2-first; translator-given2; and translator2-given}}&lt;br /&gt;
| {{tooltip|{{codett|translator-last2}}|or any of its aliases, including: translator2-last; translator2; translator-surname2; and translator2-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;first1&amp;lt;/code&amp;gt;, but for 2nd translator. Don&#039;t link. Similar: &amp;lt;code&amp;gt;translator-first3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|translator-link2}}|or alias translator2-link}}&lt;br /&gt;
| {{tooltip|{{codett|translator-last2}}|or any of its aliases, including: translator2-last; translator2; translator-surname2; and translator2-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;author-link1&amp;lt;/code&amp;gt;, but for 2nd translator. Don&#039;t link. Similar: &amp;lt;code&amp;gt;translator-link3&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;display-translators&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{tooltip|{{codett|translator-last1}}|or any of its aliases, including: translator1-last; translator-last; translator1; translator; translator-surname1; translator1-surname; and translator-surname}}&lt;br /&gt;
| Like &amp;lt;code&amp;gt;display-authors&amp;lt;/code&amp;gt;, but for translators&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|translator-mask1}}|or any of its aliases, including: translator1-mask; and translator-mask}}&lt;br /&gt;
| {{tooltip|{{codett|translator-last1}}|or any of its aliases, including: translator1-last; translator-last; translator1; translator; translator-surname1; translator1-surname; and translator-surname}}&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | See [[#Display options|Display options]] below; not for lists of cited works&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|translator-mask2}}|or alias translator2-mask}}&lt;br /&gt;
| {{tooltip|{{codett|translator-last2}}|or any of its aliases, including: translator2-last; translator2; translator-surname2; and translator2-surname}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;others&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name-list-style&amp;lt;/code&amp;gt;&lt;br /&gt;
| {{tooltip|{{codett|last2}}|or any of its aliases, including: surname2; author-last2; author2-last; author-surname2; author2-surname; author2; subject-last2; subject2-last; subject-surname2; subject2-surname; and subject2}}&lt;br /&gt;
| Set to &amp;lt;code&amp;gt;amp&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ampersand&amp;lt;/code&amp;gt; to separate the last author with {{nowrap|&amp;quot;&amp;lt;code&amp;gt; &amp;amp; &amp;lt;/code&amp;gt;&amp;quot;}}; set to &amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt; to separate with {{nowrap|&amp;quot;&amp;lt;code&amp;gt; and &amp;lt;/code&amp;gt;&amp;quot;}}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;edition&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;publication-place&amp;lt;/code&amp;gt; || {{tooltip|{{codett|publisher}}|or alias institution}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|publisher}}|or alias institution}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;publication-date&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;agency&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;minutes&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;time-caption&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|page}}|or alias p}} || || choose one: &amp;lt;code&amp;gt;page&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pages&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|pages}}|or alias pp}} || || choose one: &amp;lt;code&amp;gt;page&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pages&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt;. Use when content on multiple pages supports the article text.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt; || || choose one: &amp;lt;code&amp;gt;page&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pages&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;at&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;no-pp&amp;lt;/code&amp;gt; || {{tooltip|{{codett|page}}|or alias p}} or {{tooltip|{{codett|pages}}|or alias pp}} || set to &amp;quot;yes&amp;quot; to suppress the &amp;quot;p.&amp;quot; or &amp;quot;pp.&amp;quot; before page numbers&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|arxiv}}|or alias eprint}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|asin}}|or alias ASIN}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;asin-tld&amp;lt;/code&amp;gt; || {{tooltip|{{codett|asin}}|or alias ASIN}} ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bibcode&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;biorxiv&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|doi}}|or alias DOI}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;doi-access&amp;lt;/code&amp;gt; || {{tooltip|{{codett|doi}}|or alias DOI}} ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;doi-broken-date&amp;lt;/code&amp;gt; || {{tooltip|{{codett|doi}}|or alias DOI}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|eissn}}|or alias EISSN}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|hdl}}|or alias HDL}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hdl-access&amp;lt;/code&amp;gt; || {{tooltip|{{codett|hdl}}|or alias HDL}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|isbn}}|or alias ISBN}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|ismn}}|or alias ISMN}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|issn}}|or alias ISSN}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|jfm}}|or alias JFM}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|jstor}}|or alias JSTOR}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;jstor-access&amp;lt;/code&amp;gt; || {{tooltip|{{codett|jstor}}|or alias JSTOR}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|lccn}}|or alias LCCN}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;medrxiv&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|mr}}|or alias MR}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|oclc}}|or alias OCLC}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|ol}}|or alias OL}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ol-access&amp;lt;/code&amp;gt; || {{tooltip|{{codett|ol}}|or alias OL}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|osti}}|or alias OSTI}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;osti-access&amp;lt;/code&amp;gt; || {{tooltip|{{codett|osti}}|or alias OSTI}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|pmc}}|or alias PMC}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pmc-embargo-date&amp;lt;/code&amp;gt; || {{tooltip|{{codett|pmc}}|or alias PMC}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|pmid}}|or alias PMID}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|rfc}}|or alias RFC}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|sbn}}|or alias SBN}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|ssrn}}|or alias SSRN}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|s2cid}}|or alias S2CID}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;s2cid-access&amp;lt;/code&amp;gt; || {{tooltip|{{codett|s2cid}}|or alias S2CID}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|zbl}}|or alias ZBL}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|id}}|or alias ID}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;url-status&amp;lt;/code&amp;gt; || {{tooltip|{{codett|archive-url}}|or alias archiveurl}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|archive-url}}|or alias archiveurl}} || {{tooltip|{{codett|archive-date}}|or alias archiveurl}}, &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;archive-format&amp;lt;/code&amp;gt; || {{tooltip|{{codett|archive-url}}|or alias archiveurl}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|archive-date}}|or alias archivedate}} || {{tooltip|{{codett|archive-url}}|or alias archiveurl}} ||&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|access-date}}|or alias accessdate}} || &amp;lt;code&amp;gt;url&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;via&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;quote-page&amp;lt;/code&amp;gt; || || choose one: &amp;lt;code&amp;gt;quote-page&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;quote-pages&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;quote-pages&amp;lt;/code&amp;gt; || || choose one: &amp;lt;code&amp;gt;quote-page&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;quote-pages&amp;lt;/code&amp;gt;. Use when quote contains contents from multiple pages.&lt;br /&gt;
|-&lt;br /&gt;
| {{tooltip|{{codett|quote}}|or alias quotation}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;script-quote&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trans-quote&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mode&amp;lt;/code&amp;gt; || || &amp;lt;code&amp;gt;cs1&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cs2&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ref&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;postscript&amp;lt;/code&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center&amp;quot; | If a field name is listed in the &#039;&#039;&#039;Prerequisites&#039;&#039;&#039; column, it is a prerequisite for the field to the left.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Choosing between [[Template:cite web]] and [[Template:cite news]]&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;Consistency&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;===&lt;br /&gt;
Previously, editors had to decide whether to use {{tl|cite web}} or {{tlf|cite news}} based on these templates&#039; features. In 2014, however, &#039;&#039;most of&#039;&#039; the differences between the two templates were eliminated.&lt;br /&gt;
&lt;br /&gt;
As of {{diff|Module:Citation/CS1|732205428|723907342|29 July 2016}}, {{tlf|cite web}} and {{tlf|cite news}} have the following differences:&lt;br /&gt;
* {{tlf|Cite news}} can be used for [[WP:OFFLINE|offline]] (paper) sources whereas {{tlf|cite web}} generates a missing URL error when no URL is provided&lt;br /&gt;
* {{tlf|Cite news}} accepts {{para|issue}} and {{para|volume}} parameters while {{tlf|cite web}} does not (see {{section link|Help:Citation Style 1#Pages}}, {{section link|1=Help talk:Citation Style 1/Archive 10|2=&amp;amp;#x7C;volume=, &amp;amp;#x7C;issue=, &amp;amp;#x7C;page(s)= and cite magazine}} and {{tl|cite magazine}}.)&lt;br /&gt;
But, given the same set of valid parameters, their output is exactly the same:&lt;br /&gt;
&amp;lt;!-- ATTENTION!&lt;br /&gt;
The following example only serves to demonstrate parameter rending results.&lt;br /&gt;
&lt;br /&gt;
Whether you must include all these parameters in actual articles is not a concern here.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| &#039;&#039;&#039;Cite web&#039;&#039;&#039;: || {{cite web |url=https://blog.chron.com/techblog/2011/07/microsoft-envisions-a-universal-os-but-it-might-not-be-called-windows/ |title=Microsoft envisions a universal OS, but it might not be called Windows |last=Silverman |first=Dwight |date=July 15, 2011 |work=Houston Chronicle |publisher=Hearst Corporation |access-date=May 26, 2015|ref=none}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Cite news&#039;&#039;&#039;: || {{cite news |url=https://blog.chron.com/techblog/2011/07/microsoft-envisions-a-universal-os-but-it-might-not-be-called-windows/ |title=Microsoft envisions a universal OS, but it might not be called Windows |last=Silverman |first=Dwight |date=July 15, 2011 |work=Houston Chronicle |publisher=Hearst Corporation |access-date=May 26, 2015|ref=none}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|publisher=Open Publishing&lt;br /&gt;
|date=April 30, 2005&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|mdy}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|publisher=Open Publishing&lt;br /&gt;
|date=April 30, 2005&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date={{date|{{date}}|mdy}}}}&lt;br /&gt;
}}&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|date=30 April 2005&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|date=30 April 2005&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date={{date}}}}&lt;br /&gt;
}}&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|date=2005-04-30&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|iso}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|date=2005-04-30&lt;br /&gt;
|access-date={{date|{{date}}|iso}}}}&lt;br /&gt;
}}&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|access-date={{date}}}}&lt;br /&gt;
}}&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|iso}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|access-date={{date|{{date}}|iso}}}}&lt;br /&gt;
}}&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://operations.nfl.com/the-rules/nfl-rules-digest/&lt;br /&gt;
|title=NFL Rules Digest&lt;br /&gt;
|website=NFL Football Operations&lt;br /&gt;
|publisher=[[National Football League]]&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|mdy}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://operations.nfl.com/the-rules/nfl-rules-digest/&lt;br /&gt;
|title=NFL Rules Digest&lt;br /&gt;
|website=NFL Football Operations&lt;br /&gt;
|publisher=[[National Football League]]&lt;br /&gt;
|access-date={{date|{{date}}|mdy}}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Using &amp;quot;format=&amp;quot;===&lt;br /&gt;
When this template detects a link whose URL includes an [[filename extension|extension]] of &amp;quot;.pdf&amp;quot; or &amp;quot;.PDF&amp;quot;, typical of [[PDF]] files, it automatically displays a PDF icon after the link (regardless of whether the link goes to a PDF file or to an HTML landing page, typical of paysites). It also internally acts as if {{para|format|PDF}} had been specified, which displays &amp;quot; (PDF)&amp;quot; after the icon. (In this case, an explicit {{para|format|PDF}} parameter would be redundant, so it &#039;&#039;is not&#039;&#039; recommended to add it. Users may remove it. Citation bot, when invoked, will remove it. ([[User talk:Citation bot/Archive 13#Remove format=pdf and variants when URLs end in .pdf|ref]]))&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:auto; overflow:scroll&amp;quot;&amp;gt;&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.indiapost.gov.in/MBE/DOP_PDFFiles/List_of_Psychotropic_Substances.pdf&lt;br /&gt;
|title=List of psychotropic substances under international control&lt;br /&gt;
|publisher=International Narcotics Control Board&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.indiapost.gov.in/MBE/DOP_PDFFiles/List_of_Psychotropic_Substances.pdf&lt;br /&gt;
|title=List of psychotropic substances under international control&lt;br /&gt;
|publisher=International Narcotics Control Board&lt;br /&gt;
|access-date={{date}}}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the link is to a PDF file that &#039;&#039;is not&#039;&#039; automatically recognizable by its extension, this template does not display the PDF icon. You may add the parameter {{para|format|PDF}}, which displays &amp;quot; (PDF)&amp;quot; after the link (but no PDF icon).&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:auto; overflow:scroll&amp;quot;&amp;gt;&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.sample.com/somePDFdocument.000&lt;br /&gt;
|title=Some PDF Document&lt;br /&gt;
|publisher=Sample Int&#039;l&lt;br /&gt;
|format=PDF&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.sample.com/somePDFdocument.000&lt;br /&gt;
|title=Some PDF Document&lt;br /&gt;
|publisher=Sample Int&#039;l&lt;br /&gt;
|format=PDF&lt;br /&gt;
|access-date={{date}}}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For links to files in other formats, no icon is displayed. For example, for an [[.odt]] file, you may add the parameter {{para|format|ODT}}, which displays &amp;quot; (ODT)&amp;quot; after the link.&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:auto; overflow:scroll&amp;quot;&amp;gt;&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.sample.com/someODTdocument.odt&lt;br /&gt;
|title=Some ODT Document&lt;br /&gt;
|publisher=Sample Int&#039;l&lt;br /&gt;
|format=ODT&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.sample.com/someODTdocument.odt&lt;br /&gt;
|title=Some ODT Document&lt;br /&gt;
|publisher=Sample Int&#039;l&lt;br /&gt;
|format=ODT&lt;br /&gt;
|access-date={{date}}}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Foreign-language and translated title===&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Honi soit qui mal y pense&lt;br /&gt;
|last=Joliet&lt;br /&gt;
|first=François&lt;br /&gt;
|date=30 April 2005&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
|language=fr&lt;br /&gt;
|trans-title=Shame on those who think evil of it}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Honi soit qui mal y pense&lt;br /&gt;
|last=Joliet&lt;br /&gt;
|first=François&lt;br /&gt;
|date=30 April 2005&lt;br /&gt;
|access-date={{date}}&lt;br /&gt;
|language=fr&lt;br /&gt;
|trans-title=Shame on those who think evil of it}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Using author-link===&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|author-link=John Doe&lt;br /&gt;
|publisher=Open Publishing&lt;br /&gt;
|date=April 30, 2005&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|mdy}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=My Favorite Things, Part II&lt;br /&gt;
|last=Doe&lt;br /&gt;
|first=John&lt;br /&gt;
|author-link=John Doe&lt;br /&gt;
|publisher=Open Publishing&lt;br /&gt;
|date=April 30, 2005&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date={{date|{{date}}|mdy}}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Multiple authors===&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Our Favourite Things&lt;br /&gt;
|last1=Doe&lt;br /&gt;
|first1=John&lt;br /&gt;
|last2=Smith&lt;br /&gt;
|first2=Peter&lt;br /&gt;
|last3=Smythe&lt;br /&gt;
|first3=Jim&lt;br /&gt;
|publisher=Open Publishing&lt;br /&gt;
|date=30 April 2005&lt;br /&gt;
|website=Encyclopaedia of Things&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Our Favourite Things&lt;br /&gt;
|last1=Doe&lt;br /&gt;
|first1=John&lt;br /&gt;
|last2=Smith&lt;br /&gt;
|first2=Peter&lt;br /&gt;
|last3=Smythe&lt;br /&gt;
|first3=Jim&lt;br /&gt;
|publisher=Open Publishing&lt;br /&gt;
|date=30 April 2005&lt;br /&gt;
|website=Encyclopaedia of Things&lt;br /&gt;
|access-date={{date}}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===No author===&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Index of Sharp Things&lt;br /&gt;
|publisher=Open Publishing&lt;br /&gt;
|date=2005-04-30&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|iso}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Index of Sharp Things&lt;br /&gt;
|publisher=Open Publishing&lt;br /&gt;
|date=2005-04-30&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date={{date|{{date}}|iso}}}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===No author, no publisher===&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Index of Sharp Things&lt;br /&gt;
|date=30 April 2005&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Index of Sharp Things&lt;br /&gt;
|date=30 April 2005&lt;br /&gt;
|website=Encyclopedia of Things&lt;br /&gt;
|access-date={{date}}}}&lt;br /&gt;
}}&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Index of Sharp Things&lt;br /&gt;
|date=April 30, 2005&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|mdy}}&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.example.org/&lt;br /&gt;
|title=Index of Sharp Things&lt;br /&gt;
|date=April 30, 2005&lt;br /&gt;
|access-date={{date|{{date}}|mdy}}}}&lt;br /&gt;
}}&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.incb.org/documents/Psychotropics/forms/greenlist/2024/2311984R.pdf&lt;br /&gt;
|title=List of psychotropic substances under international control&lt;br /&gt;
|date=December 2023&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|iso}}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
|language=ru}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.incb.org/documents/Psychotropics/forms/greenlist/2024/2311984R.pdf&lt;br /&gt;
|title=List of psychotropic substances under international control&lt;br /&gt;
|date=December 2023&lt;br /&gt;
|access-date={{date|{{date}}|iso}}&lt;br /&gt;
|language=ru}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Using &amp;quot;archive-url&amp;quot; and &amp;quot;archive-date&amp;quot; (and optionally &amp;quot;url-status&amp;quot;) for webpages that have been archived&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;archive-url&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;===&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:auto; overflow:scroll&amp;quot;&amp;gt;By default, if &amp;quot;archive-url&amp;quot; is used, the parameter {{para|url-status|dead}} is assumed and the resulting main link is to the archived version:&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.incb.org/pdf/e/list/green.pdf&lt;br /&gt;
|title=List of psychotropic substances under international control&lt;br /&gt;
|date=2005-04-30&lt;br /&gt;
|publisher=International Narcotics Control Board&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date|{{date}}|iso}}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
|archive-url=https://web.archive.org/web/20050907150136/https://www.incb.org/pdf/e/list/green.pdf&lt;br /&gt;
|archive-date=2005-09-07}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.incb.org/pdf/e/list/green.pdf&lt;br /&gt;
|title=List of psychotropic substances under international control&lt;br /&gt;
|date=2005-04-30&lt;br /&gt;
|publisher=International Narcotics Control Board&lt;br /&gt;
|access-date={{date|{{date}}|iso}}&lt;br /&gt;
|archive-url=https://web.archive.org/web/20050907150136/https://www.incb.org/pdf/e/list/green.pdf&lt;br /&gt;
|archive-date=2005-09-07}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:auto; overflow:scroll&amp;quot;&amp;gt;When {{para|url-status|live}} is specified, the resulting main link is to the original page:&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.hollywoodreporter.com/heat-vision/dc-entertainment-give-classic-batman-824572&lt;br /&gt;
|title=DC Entertainment To Give Classic Batman Writer Credit in &#039;Gotham&#039; and &#039;Batman v Superman&#039; (Exclusive)&lt;br /&gt;
|website=The Hollywood Reporter&lt;br /&gt;
|date=September 18, 2015&lt;br /&gt;
|access-date=September 21, 2015&lt;br /&gt;
|url-status=live&lt;br /&gt;
|archive-url=https://web.archive.org/web/20151022181821/https://www.hollywoodreporter.com/heat-vision/dc-entertainment-give-classic-batman-824572&lt;br /&gt;
|archive-date=October 22, 2015}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.hollywoodreporter.com/heat-vision/dc-entertainment-give-classic-batman-824572&lt;br /&gt;
|title=DC Entertainment To Give Classic Batman Writer Credit in &#039;Gotham&#039; and &#039;Batman v Superman&#039; (Exclusive)&lt;br /&gt;
|website=The Hollywood Reporter&lt;br /&gt;
|date=September 18, 2015&lt;br /&gt;
|access-date=September 21, 2015&lt;br /&gt;
|url-status=live&lt;br /&gt;
|archive-url=https://web.archive.org/web/20151022181821/https://www.hollywoodreporter.com/heat-vision/dc-entertainment-give-classic-batman-824572&lt;br /&gt;
|archive-date=October 22, 2015}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:auto; overflow:scroll&amp;quot;&amp;gt;With {{para|url-status|unfit}} or {{code|usurped}}, the original is not linked at all:&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.wunderground.com/global/stations/03772.html&lt;br /&gt;
|title=London, United Kingdom Forecast: Weather Underground (weather and elevation at Heathrow Airport)&lt;br /&gt;
|publisher=The Weather Underground&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
|url-status=unfit |archive-url=https://web.archive.org/web/20110522171657/https://www.wunderground.com/global/stations/03772.html |archive-date=22 May 2011}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.wunderground.com/global/stations/03772.html&lt;br /&gt;
|title=London, United Kingdom Forecast: Weather Underground (weather and elevation at Heathrow Airport)&lt;br /&gt;
|publisher=The Weather Underground&lt;br /&gt;
|access-date={{date}}&lt;br /&gt;
|url-status=unfit |archive-url=https://web.archive.org/web/20110522171657/https://www.wunderground.com/global/stations/03772.html |archive-date=22 May 2011}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using &amp;quot;quote&amp;quot;===&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:auto; overflow:scroll&amp;quot;&amp;gt;&lt;br /&gt;
{{markup2|&lt;br /&gt;
|m=&amp;lt;nowiki&amp;gt;{{cite web&lt;br /&gt;
|url=https://www.webexhibits.org/daylightsaving/c.html&lt;br /&gt;
|title=Daylight saving time: rationale and original idea&lt;br /&gt;
|website=WebExhibits&lt;br /&gt;
|date=2008&lt;br /&gt;
|access-date=&amp;lt;/nowiki&amp;gt;{{date}}&amp;lt;nowiki&amp;gt;&lt;br /&gt;
|quote=...&amp;amp;amp;nbsp;Lord Balfour came forward with a unique concern: &#039;Supposing some unfortunate lady was confined with twins&amp;amp;amp;nbsp;...&#039;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|r={{cite web&lt;br /&gt;
|url=https://www.webexhibits.org/daylightsaving/c.html&lt;br /&gt;
|title=Daylight saving time: rationale and original idea&lt;br /&gt;
|website=WebExhibits&lt;br /&gt;
|date=2008&lt;br /&gt;
|access-date={{date}}&lt;br /&gt;
|quote=...&amp;amp;nbsp;Lord Balfour came forward with a unique concern: &#039;Supposing some unfortunate lady was confined with twins&amp;amp;nbsp;...&#039;}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
===Syntax===&lt;br /&gt;
{{csdoc|syntax}}&lt;br /&gt;
{{csdoc|sep_period}}&lt;br /&gt;
&lt;br /&gt;
===COinS===&lt;br /&gt;
{{csdoc|coins}}&lt;br /&gt;
&lt;br /&gt;
===What&#039;s new===&lt;br /&gt;
{{csdoc|whats new}}&lt;br /&gt;
&lt;br /&gt;
===Deprecated===&lt;br /&gt;
{{csdoc|deprecated}}&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
====Authors====&lt;br /&gt;
{{csdoc|author|others=yes}}&lt;br /&gt;
&lt;br /&gt;
====Date====&lt;br /&gt;
{{csdoc|date}}&lt;br /&gt;
&lt;br /&gt;
====Editors====&lt;br /&gt;
{{csdoc|editor}}&lt;br /&gt;
&lt;br /&gt;
====Title====&lt;br /&gt;
{{csdoc|web}}&lt;br /&gt;
{{csdoc|type}}&lt;br /&gt;
{{csdoc|language}}&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;span class=&amp;quot;anchor&amp;quot; id=&amp;quot;url&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;URL====&lt;br /&gt;
{{csdoc|url}}&lt;br /&gt;
&lt;br /&gt;
====Website====&lt;br /&gt;
{{csdoc|journal|issue=no|department=yes}}&lt;br /&gt;
&lt;br /&gt;
====Edition, series====&lt;br /&gt;
{{csdoc|edition}}&lt;br /&gt;
{{csdoc|series}}&lt;br /&gt;
&lt;br /&gt;
====Publisher====&lt;br /&gt;
{{csdoc|publisher}}&lt;br /&gt;
{{csdoc|agency}}&lt;br /&gt;
&lt;br /&gt;
====In-source locations====&lt;br /&gt;
{{csdoc|time}}&lt;br /&gt;
{{csdoc|pages}}&lt;br /&gt;
&lt;br /&gt;
====Identifiers====&lt;br /&gt;
{{distinguish|#Anchor}}&lt;br /&gt;
{{csdoc|id1}}&lt;br /&gt;
{{csdoc|id2}}&lt;br /&gt;
&lt;br /&gt;
====Subscription or registration required====&lt;br /&gt;
{{csdoc|registration}}&lt;br /&gt;
&lt;br /&gt;
====Quote====&lt;br /&gt;
{{csdoc|quote}}&lt;br /&gt;
&lt;br /&gt;
====Anchor====&lt;br /&gt;
{{distinguish|#Identifiers}}&lt;br /&gt;
{{csdoc|ref}}&lt;br /&gt;
&lt;br /&gt;
====Display options====&lt;br /&gt;
{{csdoc|display}}&lt;br /&gt;
&lt;br /&gt;
==TemplateData==&lt;br /&gt;
{{Warning |image=Stop hand nuvola.svg |This section contains configuration data used by editing tools and automated bots. Changes to this data can result in widespread and unintended effects. For more information see {{slink|Help:Citation Style 1#TemplateData}}}}&lt;br /&gt;
{{TemplateData header}}&lt;br /&gt;
{{#invoke:cs1 documentation support|template_data_validate|{{ROOTPAGENAME}}}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Formats a citation to a website using the provided information such as URL and title. Used only for sources that are not correctly described by the specific citation templates for books, journals, news sources, etc.&amp;quot;,&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;url&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;URL&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The URL (web address) of the source containing the cited information. Starts with \&amp;quot;https://...\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;URL&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;https://www.metacritic.com/...&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;title&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Title&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The title of the source page on the website; will display with quotation marks added. Usually found at the top of your web browser. Not the name of the website.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Source date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Full date when the source was published; if unknown, use access-date instead; do not wikilink&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;access-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;URL access date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The full date when the original URL was accessed; do not wikilink&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;accessdate&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;website&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Name of the website&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title (name) of the website (or its short URL if no plain-language title is discernible); may be wikilinked; will display in italics. Having both &#039;publisher&#039; and &#039;website&#039; is redundant in many cases.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;work&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;[[Rotten Tomatoes]]&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;publisher&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the publisher; may be wikilinked. Having both &#039;publisher&#039; and &#039;website&#039; (a.k.a. &#039;work&#039;) is redundant in many cases.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;[[Fandom, Inc.]] (which owns \&amp;quot;Metacritic.com\&amp;quot;)&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the author or given name of a single-name author; don&#039;t wikilink, use &#039;author-link&#039;; can suffix with a numeral to add additional authors&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;last1&amp;quot;,&lt;br /&gt;
				&amp;quot;author&amp;quot;,&lt;br /&gt;
				&amp;quot;author1&amp;quot;,&lt;br /&gt;
				&amp;quot;author1-last&amp;quot;,&lt;br /&gt;
				&amp;quot;author-last&amp;quot;,&lt;br /&gt;
				&amp;quot;surname1&amp;quot;,&lt;br /&gt;
				&amp;quot;author-last1&amp;quot;,&lt;br /&gt;
				&amp;quot;subject1&amp;quot;,&lt;br /&gt;
				&amp;quot;surname&amp;quot;,&lt;br /&gt;
				&amp;quot;subject&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the author; don&#039;t wikilink, use &#039;author-link&#039;; can suffix with a numeral to add additional authors&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given&amp;quot;,&lt;br /&gt;
				&amp;quot;author-first&amp;quot;,&lt;br /&gt;
				&amp;quot;first1&amp;quot;,&lt;br /&gt;
				&amp;quot;given1&amp;quot;,&lt;br /&gt;
				&amp;quot;author-first1&amp;quot;,&lt;br /&gt;
				&amp;quot;author1-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the author; can suffix with a numeral to add additional authors&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author-link1&amp;quot;,&lt;br /&gt;
				&amp;quot;author1-link&amp;quot;,&lt;br /&gt;
				&amp;quot;subject-link&amp;quot;,&lt;br /&gt;
				&amp;quot;subject-link1&amp;quot;,&lt;br /&gt;
				&amp;quot;subject1-link&amp;quot;,&lt;br /&gt;
				&amp;quot;authorlink&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the second author; don&#039;t wikilink, use &#039;author-link2&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author2&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the second author; don&#039;t wikilink.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the second author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author2-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;others&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Others&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Used to record other (non-author) contributions to the work, such as &#039;Illustrated by John Smith&#039; or &#039;Translated by John Smith&#039;. Only one &#039;&#039;others&#039;&#039; parameter is allowed: e.g., &#039;Illustrated by Jane Doe; Translated by John Smith&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;year&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Year of publication&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Year of the source being referenced; deprecated in favor of &#039;date&#039;, except for the special case of ISO dates with disambiguating letter&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;orig-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Original date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Original date of publication; provide specifics&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the editor; don&#039;t wikilink, use &#039;editor-link&#039;; can suffix with a numeral to add additional editors.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor1-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the editor; don&#039;t wikilink, use &#039;editor-link&#039;; can suffix with a numeral to add additional editors; alias of &#039;editor1-first&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor1-first&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the editor; can suffix with a numeral to add additional editors&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor1-link&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Series identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Series identifier when the source is part of a series, such as a book series or a journal&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;publication-place&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Place of publication&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Publication place shows after title; if &#039;place&#039; or &#039;location&#039; are also given, they are displayed before the title prefixed with &#039;written at&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;publication-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Publication date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Date of publication when different from the date the work was written; do not wikilink&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Page in the source that supports the content; displays after &#039;p.&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;pages&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Pages&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Pages in the source that support the content (not an indication of the number of pages in the source); displays after &#039;pp.&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;no-pp&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;No pp&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to &#039;y&#039; to suppress the &#039;p.&#039; or &#039;pp.&#039; display with &#039;page&#039; or &#039;pages&#039; when inappropriate (such as &#039;Front cover&#039;)&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;y&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;at&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;At&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;May be used instead of &#039;page&#039; or &#039;pages&#039; where a page number is inappropriate or insufficient&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;language&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Language&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The language in which the source is written, if not English; use a two-letter language code or the full language name. Do not use icons or templates. Separate multiple languages with commas&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;lang&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;de, fr, es&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;script-title&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Script title&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;For titles in languages that do not use a Latin-based alphabet (Arabic, Chinese, Cyrillic, Greek, Hebrew, Japanese, Korean, etc.). Prefix with two-character ISO639-1 language code followed by a colon.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;For Japanese use: |script-title=ja:...&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;trans-title&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translated title&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An English language title, if the source cited is in a foreign language; &#039;language&#039; is recommended&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Type&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Additional information about the media type of the source; format in sentence case&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Format&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Format of the work referred to by &#039;url&#039;; examples: PDF, DOC, XLS; do not specify HTML&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;arxiv&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;arXiv identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An identifier for arXive electronic preprints of scientific papers&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;asin&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ASIN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Amazon Standard Identification Number; 10 characters&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;asin-tld&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ASIN TLD&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;ASIN top-level domain for Amazon sites other than the US&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;bibcode&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Bibcode&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Bibliographic Reference Code (REFCODE); 19 characters&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;biorxiv&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;biorXiv&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;biorXiv identifier; 6 digits&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;doi&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;DOI&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Digital Object Identifier; begins with &#039;10.&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;doi-broken-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;DOI broken date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The date that the DOI was determined to be broken&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;isbn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ISBN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;International Standard Book Number; use the 13-digit ISBN where possible&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;issn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ISSN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;International Standard Serial Number; 8 characters; may be split into two groups of four using a hyphen&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;jfm&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;jfm code&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Jahrbuch über die Fortschritte der Mathematik classification code&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;jstor&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;JSTOR&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;JSTOR identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;lccn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;LCCN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Library of Congress Control Number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;mr&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;MR&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Mathematical Reviews identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;oclc&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;OCLC&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Online Computer Library Center number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ol&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;OL&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Open Library identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;osti&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;OSTI&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Office of Scientific and Technical Information identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;pmc&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;PMC&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;PubMed Center article number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;pmid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;PMID&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;PubMed Unique Identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;rfc&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;RFC&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Request for Comments number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ssrn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;SSRN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Social Science Research Network&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;zbl&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Zbl&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Zentralblatt MATH journal identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;id&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;id&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;A unique identifier used where none of the specialized ones are applicable&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;archive-url&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Archive URL&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The URL of an archived copy of a web page, if or in case the URL becomes unavailable; requires &#039;archive-date&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;archiveurl&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;archive-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Archive date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Date when the original URL was archived; do not wikilink&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;archivedate&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;archive-format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Archive format&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Format of the archived copy; do not specify HTML&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;PDF, DOC, XLS&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;quote&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Quote&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Relevant text quoted from the source; displays last, enclosed in quotes; must include terminating punctuation&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;trans-quote&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translated quote&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;English translation of the quotation if the source quoted is in a foreign language. Displays in square brackets.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ref&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Ref&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An anchor identifier; can be made the target of wikilinks to full references&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;postscript&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Postscript&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The closing punctuation for the citation; ignored if &#039;quote&#039; is defined&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the first author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the third author; don&#039;t wikilink, use &#039;author-link3&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author3&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the third author; don&#039;t wikilink.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the third author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author3-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fourth author; don&#039;t wikilink, use &#039;author-link4&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author4&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fourth author; don&#039;t wikilink.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fourth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author4-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fifth author; don&#039;t wikilink, use &#039;author-link5&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author5&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fifth author; don&#039;t wikilink.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fifth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author5-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the sixth author; don&#039;t wikilink, use &#039;author-link6&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author6&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the sixth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the sixth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author6-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the seventh author; don&#039;t wikilink, use &#039;author-link7&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author7&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the seventh author; don&#039;t wikilink.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the seventh author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author7-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the eighth author; don&#039;t wikilink, use &#039;author-link8&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author8&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the eighth author; don&#039;t wikilink.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the eighth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author8-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the ninth author; don&#039;t wikilink, use &#039;author-link9&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author9&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the ninth author; don&#039;t wikilink.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the ninth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author9-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;display-authors&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Display authors&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Number of authors to display before &#039;et al.&#039; is used. By default, all authors are displayed. Examples: |display-authors=2 will display only the first two authors in a citation followed by et al. |display-authors=etal displays all authors in the list followed by et al.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;name-list-style&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Name list style&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to &#039;amp&#039; or &#039;and&#039; to change the separator between the last two names of the name list to &#039; &amp;amp; &#039; or &#039; and &#039;, respectively. Set to &#039;vanc&#039; to display name lists in Vancouver style.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;amp&amp;quot;,&lt;br /&gt;
				&amp;quot;and&amp;quot;,&lt;br /&gt;
				&amp;quot;vanc&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor2-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the second editor; don&#039;t wikilink, use &#039;editor2-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor2&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor2-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the second editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor3-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the third editor; don&#039;t wikilink, use &#039;editor3-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor3&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor3-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the third editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor4-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fourth editor; don&#039;t wikilink, use &#039;editor4-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor4&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor4-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fourth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor5-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fifth editor; don&#039;t wikilink, use &#039;editor5-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor5&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor5-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fifth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor6-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the sixth editor; don&#039;t wikilink, use &#039;editor6-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor6&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor6-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the sixth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor7-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the seventh editor; don&#039;t wikilink, use &#039;editor7-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor7&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor7-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the seventh editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor8-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the eighth editor; don&#039;t wikilink, use &#039;editor8-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor8&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor8-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the eighth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor9-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the ninth editor; don&#039;t wikilink, use &#039;editor9-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor9&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor9-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the ninth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor2-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the second editor.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor3-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the third editor.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor4-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fourth editor.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor5-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fifth editor.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor6-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the sixth editor.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor7-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the seventh editor.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor8-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the eighth editor.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor9-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor link 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the ninth editor.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;edition&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Edition&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Specify the edition or revision of the source, when applicable. For example: &#039;2nd&#039; or &#039;5.1&#039;. What you supply here is suffixed by &#039; ed.&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;2nd&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;url-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;URL access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Classification of the access restrictions on the URL&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;registration&amp;quot;,&lt;br /&gt;
				&amp;quot;subscription&amp;quot;,&lt;br /&gt;
				&amp;quot;limited&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;&#039;registration&#039;, &#039;subscription&#039; or &#039;limited&#039;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;bibcode-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Bibcode access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is available from ADS via this Bibcode, type &#039;free&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;free&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;doi-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;DOI access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is free to read via the DOI, type &#039;free&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;free&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;hdl-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;HDL access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is free to read via the HDL, type &#039;free&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;free&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;jstor-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Jstor access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is free to read on Jstor, type &#039;free&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;free&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ol-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;OpenLibrary access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is free to read on OpenLibrary, type &#039;free&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;free&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;osti-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;OSTI access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is free to read on OSTI, type &#039;free&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;free&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;via&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Published via&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the entity hosting the original copy of the work, if different from the publisher. This entity is committed not to alter the work.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;[[GitHub]], [[SourceForge]], [[CodePlex]], [[YouTube]], [[Vimeo]], [[Dailymotion]], [[Netflix]], [[Archive.org]], [[Wikimedia Commons]], [[grc.com]]&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;url-status&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;URL status&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If set to &#039;live&#039;, the title display is adjusted; useful for when the URL is archived preemptively but still live. Set to \&amp;quot;dead\&amp;quot; or &#039;usurped&#039; for broken links. Entering &#039;unfit&#039; or &#039;usurped&#039; makes the original link not appear at all.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;&#039;dead&#039; or &#039;live&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;&#039;dead&#039; if an Archive URL is entered&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;dead&amp;quot;,&lt;br /&gt;
				&amp;quot;live&amp;quot;,&lt;br /&gt;
				&amp;quot;usurped&amp;quot;,&lt;br /&gt;
				&amp;quot;unfit&amp;quot;,&lt;br /&gt;
				&amp;quot;deviated&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;agency&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Agency&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The news agency (wire service) that provided the content; examples: Associated Press, Reuters, Agence France-Presse&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;place&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Place&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;For news stories with a dateline, the location where the story was written; will be treated as the publication place if publication place is absent; alias of &#039;location&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link10&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author10-link&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 10&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the tenth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link11&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author11-link&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 11&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the eleventh author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last10&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author10&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 10&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the tenth author; don&#039;t wikilink, use &#039;author-link10&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first10&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 10&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the tenth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first11&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 11&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the eleventh author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last11&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author11&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 11&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the eleventh author; don&#039;t wikilink, use &#039;author-link11&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last12&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author12&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 12&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the twelfth author; don&#039;t wikilink, use &#039;author-link12&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first12&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 12&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the twelfth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link12&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author12-link&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 12&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the twelfth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last13&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author13&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 13&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the thirteenth author; don&#039;t wikilink, use &#039;author-link13&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first13&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 13&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the thirteenth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link13&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author13-link&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 13&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the thirteenth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last14&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author14&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 14&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fourteenth author; don&#039;t wikilink, use &#039;author-link14&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first14&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 14&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fourteenth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link14&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author14-link&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 14&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fourteenth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last15&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author15&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 15&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fifteenth author; don&#039;t wikilink, use &#039;author-link15&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first15&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 15&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fifteenth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link15&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author15-link&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 15&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fifteenth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;df&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Date format&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Sets rendered dates to the specified format&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the translator; don&#039;t wikilink, use &#039;translator-link&#039;; can suffix with a numeral to add additional translators.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the translator; don&#039;t wikilink, use &#039;translator-link1&#039;; can suffix with a numeral to add additional editors&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the translator; can suffix with a numeral to add additional translators&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;location&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Location&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Location of publisher/publication; not the specific story byline&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;maps&amp;quot;: {&lt;br /&gt;
		&amp;quot;citoid&amp;quot;: {&lt;br /&gt;
			&amp;quot;title&amp;quot;: &amp;quot;title&amp;quot;,&lt;br /&gt;
			&amp;quot;url&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;subject&amp;quot;: &amp;quot;title&amp;quot;,&lt;br /&gt;
			&amp;quot;publicationTitle&amp;quot;: &amp;quot;website&amp;quot;,&lt;br /&gt;
			&amp;quot;blogTitle&amp;quot;: &amp;quot;website&amp;quot;,&lt;br /&gt;
			&amp;quot;forumTitle&amp;quot;: &amp;quot;website&amp;quot;,&lt;br /&gt;
			&amp;quot;seriesTitle&amp;quot;: &amp;quot;website&amp;quot;,&lt;br /&gt;
			&amp;quot;websiteTitle&amp;quot;: &amp;quot;website&amp;quot;,&lt;br /&gt;
			&amp;quot;publisher&amp;quot;: &amp;quot;publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;date&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;PMCID&amp;quot;: &amp;quot;pmc&amp;quot;,&lt;br /&gt;
			&amp;quot;PMID&amp;quot;: &amp;quot;pmid&amp;quot;,&lt;br /&gt;
			&amp;quot;oclc&amp;quot;: &amp;quot;oclc&amp;quot;,&lt;br /&gt;
			&amp;quot;pages&amp;quot;: &amp;quot;pages&amp;quot;,&lt;br /&gt;
			&amp;quot;series&amp;quot;: &amp;quot;series&amp;quot;,&lt;br /&gt;
			&amp;quot;accessDate&amp;quot;: &amp;quot;access-date&amp;quot;,&lt;br /&gt;
			&amp;quot;archiveUrl&amp;quot;: &amp;quot;archive-url&amp;quot;,&lt;br /&gt;
			&amp;quot;archiveDate&amp;quot;: &amp;quot;archive-date&amp;quot;,&lt;br /&gt;
			&amp;quot;DOI&amp;quot;: &amp;quot;doi&amp;quot;,&lt;br /&gt;
			&amp;quot;language&amp;quot;: &amp;quot;language&amp;quot;,&lt;br /&gt;
			&amp;quot;contributor&amp;quot;: &amp;quot;others&amp;quot;,&lt;br /&gt;
			&amp;quot;author&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;editor&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor2-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor2-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor3-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor3-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor4-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor4-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor5-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor5-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor6-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor6-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor7-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor7-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor8-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor8-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor9-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor9-last&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;last&amp;quot;,&lt;br /&gt;
		&amp;quot;first&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link&amp;quot;,&lt;br /&gt;
		&amp;quot;last2&amp;quot;,&lt;br /&gt;
		&amp;quot;first2&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link2&amp;quot;,&lt;br /&gt;
		&amp;quot;last3&amp;quot;,&lt;br /&gt;
		&amp;quot;first3&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link3&amp;quot;,&lt;br /&gt;
		&amp;quot;last4&amp;quot;,&lt;br /&gt;
		&amp;quot;first4&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link4&amp;quot;,&lt;br /&gt;
		&amp;quot;last5&amp;quot;,&lt;br /&gt;
		&amp;quot;first5&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link5&amp;quot;,&lt;br /&gt;
		&amp;quot;last6&amp;quot;,&lt;br /&gt;
		&amp;quot;first6&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link6&amp;quot;,&lt;br /&gt;
		&amp;quot;last7&amp;quot;,&lt;br /&gt;
		&amp;quot;first7&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link7&amp;quot;,&lt;br /&gt;
		&amp;quot;last8&amp;quot;,&lt;br /&gt;
		&amp;quot;first8&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link8&amp;quot;,&lt;br /&gt;
		&amp;quot;last9&amp;quot;,&lt;br /&gt;
		&amp;quot;first9&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link9&amp;quot;,&lt;br /&gt;
		&amp;quot;last10&amp;quot;,&lt;br /&gt;
		&amp;quot;first10&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link10&amp;quot;,&lt;br /&gt;
		&amp;quot;last11&amp;quot;,&lt;br /&gt;
		&amp;quot;first11&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link11&amp;quot;,&lt;br /&gt;
		&amp;quot;last12&amp;quot;,&lt;br /&gt;
		&amp;quot;first12&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link12&amp;quot;,&lt;br /&gt;
		&amp;quot;last13&amp;quot;,&lt;br /&gt;
		&amp;quot;first13&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link13&amp;quot;,&lt;br /&gt;
		&amp;quot;last14&amp;quot;,&lt;br /&gt;
		&amp;quot;first14&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link14&amp;quot;,&lt;br /&gt;
		&amp;quot;last15&amp;quot;,&lt;br /&gt;
		&amp;quot;first15&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link15&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask&amp;quot;,&lt;br /&gt;
		&amp;quot;display-authors&amp;quot;,&lt;br /&gt;
		&amp;quot;name-list-style&amp;quot;,&lt;br /&gt;
		&amp;quot;date&amp;quot;,&lt;br /&gt;
		&amp;quot;year&amp;quot;,&lt;br /&gt;
		&amp;quot;orig-date&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor2-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor2-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor2-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor3-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor3-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor3-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor4-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor4-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor4-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor5-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor5-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor5-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor6-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor6-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor6-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor7-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor7-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor7-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor8-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor8-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor8-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor9-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor9-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor9-link&amp;quot;,&lt;br /&gt;
		&amp;quot;others&amp;quot;,&lt;br /&gt;
		&amp;quot;title&amp;quot;,&lt;br /&gt;
		&amp;quot;script-title&amp;quot;,&lt;br /&gt;
		&amp;quot;trans-title&amp;quot;,&lt;br /&gt;
		&amp;quot;url&amp;quot;,&lt;br /&gt;
		&amp;quot;url-access&amp;quot;,&lt;br /&gt;
		&amp;quot;url-status&amp;quot;,&lt;br /&gt;
		&amp;quot;archive-url&amp;quot;,&lt;br /&gt;
		&amp;quot;archive-date&amp;quot;,&lt;br /&gt;
		&amp;quot;archive-format&amp;quot;,&lt;br /&gt;
		&amp;quot;access-date&amp;quot;,&lt;br /&gt;
		&amp;quot;website&amp;quot;,&lt;br /&gt;
		&amp;quot;series&amp;quot;,&lt;br /&gt;
		&amp;quot;publisher&amp;quot;,&lt;br /&gt;
		&amp;quot;place&amp;quot;,&lt;br /&gt;
		&amp;quot;page&amp;quot;,&lt;br /&gt;
		&amp;quot;pages&amp;quot;,&lt;br /&gt;
		&amp;quot;at&amp;quot;,&lt;br /&gt;
		&amp;quot;language&amp;quot;,&lt;br /&gt;
		&amp;quot;type&amp;quot;,&lt;br /&gt;
		&amp;quot;format&amp;quot;,&lt;br /&gt;
		&amp;quot;location&amp;quot;,&lt;br /&gt;
		&amp;quot;publication-place&amp;quot;,&lt;br /&gt;
		&amp;quot;publication-date&amp;quot;,&lt;br /&gt;
		&amp;quot;df&amp;quot;,&lt;br /&gt;
		&amp;quot;via&amp;quot;,&lt;br /&gt;
		&amp;quot;no-pp&amp;quot;,&lt;br /&gt;
		&amp;quot;arxiv&amp;quot;,&lt;br /&gt;
		&amp;quot;asin&amp;quot;,&lt;br /&gt;
		&amp;quot;asin-tld&amp;quot;,&lt;br /&gt;
		&amp;quot;bibcode&amp;quot;,&lt;br /&gt;
		&amp;quot;biorxiv&amp;quot;,&lt;br /&gt;
		&amp;quot;doi&amp;quot;,&lt;br /&gt;
		&amp;quot;doi-broken-date&amp;quot;,&lt;br /&gt;
		&amp;quot;isbn&amp;quot;,&lt;br /&gt;
		&amp;quot;issn&amp;quot;,&lt;br /&gt;
		&amp;quot;jfm&amp;quot;,&lt;br /&gt;
		&amp;quot;jstor&amp;quot;,&lt;br /&gt;
		&amp;quot;lccn&amp;quot;,&lt;br /&gt;
		&amp;quot;mr&amp;quot;,&lt;br /&gt;
		&amp;quot;oclc&amp;quot;,&lt;br /&gt;
		&amp;quot;ol&amp;quot;,&lt;br /&gt;
		&amp;quot;osti&amp;quot;,&lt;br /&gt;
		&amp;quot;pmc&amp;quot;,&lt;br /&gt;
		&amp;quot;pmid&amp;quot;,&lt;br /&gt;
		&amp;quot;rfc&amp;quot;,&lt;br /&gt;
		&amp;quot;ssrn&amp;quot;,&lt;br /&gt;
		&amp;quot;zbl&amp;quot;,&lt;br /&gt;
		&amp;quot;id&amp;quot;,&lt;br /&gt;
		&amp;quot;quote&amp;quot;,&lt;br /&gt;
		&amp;quot;trans-quote&amp;quot;,&lt;br /&gt;
		&amp;quot;ref&amp;quot;,&lt;br /&gt;
		&amp;quot;postscript&amp;quot;,&lt;br /&gt;
		&amp;quot;edition&amp;quot;,&lt;br /&gt;
		&amp;quot;bibcode-access&amp;quot;,&lt;br /&gt;
		&amp;quot;doi-access&amp;quot;,&lt;br /&gt;
		&amp;quot;hdl-access&amp;quot;,&lt;br /&gt;
		&amp;quot;jstor-access&amp;quot;,&lt;br /&gt;
		&amp;quot;ol-access&amp;quot;,&lt;br /&gt;
		&amp;quot;osti-access&amp;quot;,&lt;br /&gt;
		&amp;quot;agency&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last1&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first1&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link1&amp;quot;&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;{{_ |_=_}}&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Citation Style 1}}&lt;br /&gt;
{{Wikipedia referencing}}&lt;br /&gt;
{{UF-COinS}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
[[Category:Citation Style 1 templates|W]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Markup/styles.css&amp;diff=1123</id>
		<title>Mal:Markup/styles.css</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Markup/styles.css&amp;diff=1123"/>
		<updated>2026-09-10T13:59:13Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template|small=yes}} */&lt;br /&gt;
.markup {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	margin-bottom: 0.5em;&lt;br /&gt;
	border-width: medium;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.markup &amp;gt; caption {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.markup &amp;gt; tbody &amp;gt; tr &amp;gt; th[scope=col] {&lt;br /&gt;
	width: 50%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.markup &amp;gt; tbody &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	background: var(--background-color-interactive-subtle, #f8f9fa);&lt;br /&gt;
    color:inherit;&lt;br /&gt;
	border: 1px solid #eaecf0;&lt;br /&gt;
	padding: 5px;&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.markup-wrapper &amp;gt; :first-child {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.markup-wrapper &amp;gt; :last-child {&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.markup-markup {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	overflow-wrap: break-word;&lt;br /&gt;
	white-space: pre-wrap;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
code.markup-markup {&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.markup-markup {&lt;br /&gt;
	padding: 2px 0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* These are for the anti-pattern of using &amp;amp;lt;syntaxhighlight&amp;amp;gt; inside {{Markup}},&lt;br /&gt;
   use |tag=syntaxhighlight instead */&lt;br /&gt;
.markup-markup .mw-highlight {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.markup-markup .mw-highlight pre {&lt;br /&gt;
	border: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* These are for |tag=syntaxhighlight */&lt;br /&gt;
div.markup-markup.mw-highlight &amp;gt; pre {&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Citation/doc&amp;diff=1121</id>
		<title>Mal:Citation/doc</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Citation/doc&amp;diff=1121"/>
		<updated>2026-09-10T13:59:11Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{For-text|the{{nbsp}} &#039;&#039;{{fake citation needed}}&#039;&#039; template|{{tl|citation needed}}}}&lt;br /&gt;
{{redirect|Template:Cite gazette|citations to &#039;&#039;The London, Belfast &amp;amp; Edinburgh Gazettes&#039;&#039; (&amp;quot;&#039;&#039;The Gazette&#039;&#039;&amp;quot;)|Template:London Gazette}}&lt;br /&gt;
{{Documentation subpage}}&amp;lt;!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]).&lt;br /&gt;
--&amp;gt;{{#ifeq: {{PAGENAME}}|{{ROOTPAGENAME}}|{{Cascade-protected template}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq: {{PAGENAME}}|{{ROOTPAGENAME}}|{{High-risk|189000+}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{csdoc|lua|lua=yes}}&lt;br /&gt;
The &#039;&#039;&#039;Citation&#039;&#039;&#039;, &#039;&#039;&#039;Cite&#039;&#039;&#039;, or &#039;&#039;&#039;cite&#039;&#039;&#039; template generates a citation for a book, periodical, contribution in a collective work, or a web page. It determines the citation type by examining which parameters are used. As with other citation templates, this template can be used either in a footnote (between {{tag|ref}} tags) or in a section that lists sources. This template uses the same [[WP:Lua|Lua]] code as [[help:Citation Style 1|citation style 1 (CS1)]] templates with parameters to change the displayed format to [[help:Citation Style 2|citation style 2 (CS2)]].&lt;br /&gt;
&lt;br /&gt;
If the correct parameters are used, this template produces output identical to that of the Cite templates, such as {{Tl|Cite book}} and {{Tl|Cite web}}, with one important exception: By default, this Citation template uses commas in places where the Cite templates use periods (full stops) by default; either type of template can use periods (full stops) or commas by using an optional parameter.&lt;br /&gt;
&lt;br /&gt;
Regardless of which citation templates are used or even if none are used at all, all citations should have the same format throughout an article in the saved, rendered text.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* All parameter names must be [[lowercase]].&lt;br /&gt;
* Invisible unicode space characters (see [[Help:CS1 errors#invisible char|list]]) will return an error message. Non-intentional invisible characters should be removed; intentional ones should be replaced with their corresponding HTML entity (e.g. &amp;lt;code&amp;gt;&amp;amp;amp;ZeroWidthSpace;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Simple citations==&lt;br /&gt;
This section covers the most commonly used parameters. You can copy the horizontal form or vertical form below and then add in extra parameters from the full list. Spacing and ordering of the parameters within the template is irrelevant and does not affect the final, rendered text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy&amp;gt;{{Citation&lt;br /&gt;
| last              =&lt;br /&gt;
| first             =&lt;br /&gt;
| year              =&lt;br /&gt;
| title             =&lt;br /&gt;
| publisher         =&lt;br /&gt;
| publication-place =&lt;br /&gt;
| page              =&lt;br /&gt;
| url               =&lt;br /&gt;
| access-date       =&lt;br /&gt;
}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;last&#039;&#039;&#039;: The author&#039;s surname or last name. Don&#039;t use with the &#039;&#039;&#039;author&#039;&#039;&#039; parameter.&lt;br /&gt;
* &#039;&#039;&#039;first&#039;&#039;&#039;: The author&#039;s first or given name(s).&lt;br /&gt;
* &#039;&#039;&#039;year&#039;&#039;&#039;: Year of authorship or publication. Mandatory for use with links from [[:Template:Harvard citation]], unless {{para|date}} specifies both month and year.&lt;br /&gt;
* &#039;&#039;&#039;title&#039;&#039;&#039;: Title of the work. Mandatory for web references.&lt;br /&gt;
* &#039;&#039;&#039;publisher&#039;&#039;&#039;: The name of the publisher. Omit terms such as &#039;&#039;Publishers&#039;&#039;, &#039;&#039;Co.&#039;&#039;, &#039;&#039;Inc.&#039;&#039;, &#039;&#039;Ltd.&#039;&#039;, etc., but retain the words &#039;&#039;Books&#039;&#039; or &#039;&#039;Press&#039;&#039;. Not normally included where the publication is a periodical which has its own Wikipedia article (e.g. &#039;&#039;[[Newsweek]]&#039;&#039;, &#039;&#039;[[Billboard (magazine)|Billboard]]&#039;&#039;).&lt;br /&gt;
** &#039;&#039;&#039;publication-place&#039;&#039;&#039; (or &#039;&#039;&#039;place&#039;&#039;&#039; or &#039;&#039;&#039;location&#039;&#039;&#039;): The city of publication. If more than one town/city is listed on the title page, give the first one or the location of the publisher&#039;s head office. Omit when the publication is a periodical whose name specifies the location (e.g. &#039;&#039;The New York Times&#039;&#039;, &#039;&#039;The Times of India&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;page&#039;&#039;&#039;: For use when one page is cited. Adds &amp;quot;p.&amp;quot; before the page number. Do not use with &#039;&#039;&#039;pages&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;url&#039;&#039;&#039;: A [[Uniform resource locator|url]] of an online location where the item can be found. If the url includes double quotes, these must be encoded as &amp;quot;%22&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;access-date&#039;&#039;&#039;: Date&amp;lt;ref group=&amp;quot;n&amp;quot; name=&amp;quot;dates&amp;quot; /&amp;gt; when the url was accessed.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
{{markup|tag=syntaxhighlight|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{Citation&lt;br /&gt;
  | last = Turner&lt;br /&gt;
  | first = Orsamus&lt;br /&gt;
  | title = History of the pioneer settlement of Phelps and Gorham&#039;s purchase, and Morris&#039; reserve&lt;br /&gt;
  | publisher = William Alling&lt;br /&gt;
  | place = Rochester, New York&lt;br /&gt;
  | year = 1851&lt;br /&gt;
  | ol = 7120924W&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last      = Turner&lt;br /&gt;
| first     = Orsamus&lt;br /&gt;
| title     = History of the pioneer settlement of Phelps and Gorham&#039;s purchase, and Morris&#039; reserve&lt;br /&gt;
| publisher = William Alling&lt;br /&gt;
| place     = Rochester, New York&lt;br /&gt;
| year      = 1851&lt;br /&gt;
| ol        = 7120924W&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Full citation parameters==&lt;br /&gt;
These can be used for all types of publication. All are optional and indentation is used simply to group related items&amp;amp;nbsp;— these may be mutually exclusive where indicated. Some hyphenated names can also be placed without hyphens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; copy&amp;gt;&lt;br /&gt;
{{Citation&lt;br /&gt;
| last1                = &lt;br /&gt;
| first1               = &lt;br /&gt;
| author-link1         = &lt;br /&gt;
| last2                = &lt;br /&gt;
| first2               = &lt;br /&gt;
| author-link2         = &lt;br /&gt;
| display-authors      = &lt;br /&gt;
| author-mask1         = &lt;br /&gt;
| author-mask2         = &lt;br /&gt;
| collaboration        = &lt;br /&gt;
| date                 = &lt;br /&gt;
| year                 = &lt;br /&gt;
| orig-date            = &lt;br /&gt;
| location             = &lt;br /&gt;
| editor-last1         = &lt;br /&gt;
| editor-first1        = &lt;br /&gt;
| editor-link1         = &lt;br /&gt;
| editor-last2         = &lt;br /&gt;
| editor-first2        = &lt;br /&gt;
| editor-link2         = &lt;br /&gt;
| display-editors      = &lt;br /&gt;
| editor-mask1         = &lt;br /&gt;
| editor-mask2         = &lt;br /&gt;
| title                = &lt;br /&gt;
| script-title         = &lt;br /&gt;
| trans-title          = &lt;br /&gt;
| title-link           = &lt;br /&gt;
| url                  = &lt;br /&gt;
| url-access           = &lt;br /&gt;
| format               = &lt;br /&gt;
| department           = &lt;br /&gt;
| website              = &lt;br /&gt;
| script-website       = &lt;br /&gt;
| trans-website        = &lt;br /&gt;
| type                 = &lt;br /&gt;
| series               = &lt;br /&gt;
| language             = &lt;br /&gt;
| interviewer-last1    = &lt;br /&gt;
| interviewer-first1   = &lt;br /&gt;
| interviewer-link1    = &lt;br /&gt;
| interviewer-last2    = &lt;br /&gt;
| interviewer-first2   = &lt;br /&gt;
| interviewer-link2    = &lt;br /&gt;
| display-interviewers = &lt;br /&gt;
| interviewer-mask1    = &lt;br /&gt;
| interviewer-mask2    = &lt;br /&gt;
| translator-last1     = &lt;br /&gt;
| translator-first1    = &lt;br /&gt;
| translator-link1     = &lt;br /&gt;
| translator-last2     = &lt;br /&gt;
| translator-first2    = &lt;br /&gt;
| translator-link2     = &lt;br /&gt;
| display-translators  = &lt;br /&gt;
| translator-mask1     = &lt;br /&gt;
| translator-mask2     = &lt;br /&gt;
| others               = &lt;br /&gt;
| name-list-style      = &lt;br /&gt;
| edition              = &lt;br /&gt;
| publication-place    = &lt;br /&gt;
| publisher            = &lt;br /&gt;
| publication-date     = &lt;br /&gt;
| minutes              = &lt;br /&gt;
| time-caption         = &lt;br /&gt;
| time                 = &lt;br /&gt;
| page                 = &lt;br /&gt;
| pages                = &lt;br /&gt;
| at                   = &lt;br /&gt;
| no-pp                = &lt;br /&gt;
| arxiv                = &lt;br /&gt;
| asin                 = &lt;br /&gt;
| asin-tld             = &lt;br /&gt;
| bibcode              = &lt;br /&gt;
| bibcode-access       = &lt;br /&gt;
| biorxiv              = &lt;br /&gt;
| citeseerx            = &lt;br /&gt;
| doi                  = &lt;br /&gt;
| doi-access           = &lt;br /&gt;
| doi-broken-date      = &lt;br /&gt;
| eissn                = &lt;br /&gt;
| hdl                  = &lt;br /&gt;
| hdl-access           = &lt;br /&gt;
| isbn                 = &lt;br /&gt;
| ismn                 = &lt;br /&gt;
| issn                 = &lt;br /&gt;
| jfm                  = &lt;br /&gt;
| jstor                = &lt;br /&gt;
| jstor-access         = &lt;br /&gt;
| lccn                 = &lt;br /&gt;
| medrxiv              = &lt;br /&gt;
| mr                   = &lt;br /&gt;
| oclc                 = &lt;br /&gt;
| ol                   = &lt;br /&gt;
| ol-access            = &lt;br /&gt;
| osti                 = &lt;br /&gt;
| osti-access          = &lt;br /&gt;
| pmc                  = &lt;br /&gt;
| pmc-embargo-date     = &lt;br /&gt;
| pmid                 = &lt;br /&gt;
| rfc                  = &lt;br /&gt;
| sbn                  = &lt;br /&gt;
| ssrn                 = &lt;br /&gt;
| s2cid                = &lt;br /&gt;
| s2cid-access         = &lt;br /&gt;
| zbl                  = &lt;br /&gt;
| id                   = &lt;br /&gt;
| url-status           = &lt;br /&gt;
| archive-url          = &lt;br /&gt;
| archive-format       = &lt;br /&gt;
| archive-date         = &lt;br /&gt;
| access-date          = &lt;br /&gt;
| via                  = &lt;br /&gt;
| quote-page           = &lt;br /&gt;
| quote-pages          = &lt;br /&gt;
| quote                = &lt;br /&gt;
| script-quote         = &lt;br /&gt;
| trans-quote          = &lt;br /&gt;
| mode                 = &lt;br /&gt;
| ref                  = &lt;br /&gt;
| postscript           = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
===Syntax===&lt;br /&gt;
{{csdoc|syntax|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
{{csdoc|sep_comma|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
===COinS===&lt;br /&gt;
{{csdoc|coins|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
===What&#039;s new===&lt;br /&gt;
{{csdoc|whats new}}&lt;br /&gt;
&lt;br /&gt;
===Deprecated===&lt;br /&gt;
{{csdoc|deprecated|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
====Authors====&lt;br /&gt;
{{csdoc|author|lua=yes||contributor=yes|others=yes}}&lt;br /&gt;
&lt;br /&gt;
====Editors====&lt;br /&gt;
{{csdoc|editor|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====Title====&lt;br /&gt;
{{csdoc|title|lua=yes|title_format=italics}}&lt;br /&gt;
{{csdoc|chapter|lua=yes}}&lt;br /&gt;
{{csdoc|type|lua=yes}}&lt;br /&gt;
{{csdoc|language|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====Date====&lt;br /&gt;
{{csdoc|date|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====Work====&lt;br /&gt;
{{csdoc|journal|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====Publisher====&lt;br /&gt;
{{csdoc|publisher|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====Edition, series, volume====&lt;br /&gt;
{{csdoc|edition|lua=yes}}&lt;br /&gt;
{{csdoc|series|lua=yes}}&lt;br /&gt;
{{csdoc|volume|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====In-source locations====&lt;br /&gt;
{{csdoc|pages|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====URL====&lt;br /&gt;
{{anchor|url}}{{csdoc|url}}&lt;br /&gt;
&lt;br /&gt;
====Chapter URL====&lt;br /&gt;
{{anchor|chapterurl}}{{csdoc|chapterurl|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====Anchor====&lt;br /&gt;
{{distinguish|#Identifiers}}&lt;br /&gt;
{{further|#Anchored citations}}&lt;br /&gt;
{{csdoc|ref|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====Identifiers====&lt;br /&gt;
{{distinguish|#Anchor}}&lt;br /&gt;
{{anchor|id1}}{{csdoc|id1|lua=yes}}&lt;br /&gt;
{{anchor|id2}}{{csdoc|id2|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
====Quote====&lt;br /&gt;
{{csdoc|quote|lua=yes|cs2=yes}}&lt;br /&gt;
&lt;br /&gt;
====Display options====&lt;br /&gt;
{{csdoc|display|lua=yes|cs2=yes}}&lt;br /&gt;
&lt;br /&gt;
====Subscription or registration required====&lt;br /&gt;
{{csdoc|registration|lua=yes}}&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
===Books===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:30%;&amp;quot; | Three authors, a volume, and an edition. Ampersand (&amp;amp;amp;) forced before final author&#039;s name.&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last1  = Lincoln&lt;br /&gt;
| first1 = A.&lt;br /&gt;
| last2  = Washington&lt;br /&gt;
| first2 = G.&lt;br /&gt;
| last3  = Adams&lt;br /&gt;
| first3 = J.&lt;br /&gt;
| name-list-style = amp&lt;br /&gt;
| title     = All the Presidents&#039; Names&lt;br /&gt;
| publisher = The Pentagon&lt;br /&gt;
| place     = Home Base, New York&lt;br /&gt;
| volume  = XII&lt;br /&gt;
| edition = 2nd&lt;br /&gt;
| year    = 2007&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| style=&amp;quot;width:30%;&amp;quot; |{{Citation&lt;br /&gt;
| last1  = Lincoln&lt;br /&gt;
| first1 = A.&lt;br /&gt;
| last2  = Washington&lt;br /&gt;
| first2 = G.&lt;br /&gt;
| last3  = Adams&lt;br /&gt;
| first3 = J.&lt;br /&gt;
| name-list-style = amp&lt;br /&gt;
| title  = All the Presidents&#039; Names&lt;br /&gt;
| publisher = The Pentagon&lt;br /&gt;
| place   = Home Base, New York&lt;br /&gt;
| volume  = XII&lt;br /&gt;
| edition = 2nd&lt;br /&gt;
| year    = 2007&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Web===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Web page&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;{{Citation&lt;br /&gt;
| url   = http://nrhp.focus.nps.gov/&lt;br /&gt;
| title = NPS Focus&lt;br /&gt;
| work  = National Register of Historic Places&lt;br /&gt;
| publisher  = [[National Park Service]]&lt;br /&gt;
| access-date = November 30, 2010&lt;br /&gt;
| ref = none&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| url   = http://nrhp.focus.nps.gov/&lt;br /&gt;
| title = NPS Focus&lt;br /&gt;
| work  = National Register of Historic Places&lt;br /&gt;
| publisher  = [[National Park Service]]&lt;br /&gt;
| access-date = November 30, 2010&lt;br /&gt;
| ref = none&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| Archived page&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;{{Citation&lt;br /&gt;
| url = http://liftoff.msfc.nasa.gov/academy/space/atmosphere.html&lt;br /&gt;
| title = Earth&#039;s Atmosphere&lt;br /&gt;
| access-date = October 25, 2007&lt;br /&gt;
| publisher  = [[NASA|National Aeronautics and Space Administration]]&lt;br /&gt;
| year   = 1995&lt;br /&gt;
| author = NASA&lt;br /&gt;
| archive-url = https://web.archive.org/web/20071013232332/http://&lt;br /&gt;
liftoff.msfc.nasa.gov/academy/space/atmosphere.html&lt;br /&gt;
| archive-date = October 13, 2007&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| {{Citation | url = http://liftoff.msfc.nasa.gov/academy/space/atmosphere.html | title = Earth&#039;s Atmosphere | access-date = October 25, 2007 | publisher = [[NASA|National Aeronautics and Space Administration]] | year = 1995 | author = NASA | archive-url = https://web.archive.org/web/20071013232332/http://liftoff.msfc.nasa.gov/academy/space/atmosphere.html | archive-date = October 13, 2007}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Journals, newspapers, magazines, or other periodicals===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Journal article&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last  = Hill&lt;br /&gt;
| first = Marvin S.&lt;br /&gt;
| title = Joseph Smith and the 1826&lt;br /&gt;
Trial: New Evidence and New&lt;br /&gt;
Difficulties&lt;br /&gt;
| journal = BYU Studies&lt;br /&gt;
| volume  = 12&lt;br /&gt;
| issue   = 2&lt;br /&gt;
| year    = 1976&lt;br /&gt;
| pages   = 1–8&lt;br /&gt;
| url     = https://byustudies.byu.edu/shop/PDFSRC/12.2Hill.pdf&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last  = Hill&lt;br /&gt;
| first = Marvin S.&lt;br /&gt;
| title = Joseph Smith and the 1826 Trial: New Evidence and New Difficulties&lt;br /&gt;
| journal = BYU Studies&lt;br /&gt;
| volume  = 12&lt;br /&gt;
| issue   = 2&lt;br /&gt;
| year    = 1976&lt;br /&gt;
| pages   = 1–8&lt;br /&gt;
| url     = https://byustudies.byu.edu/shop/PDFSRC/12.2Hill.pdf&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| Journal article with multiple authors and identifier&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last1  = Mandelkern&lt;br /&gt;
| first1 = M&lt;br /&gt;
| last2  = Elias&lt;br /&gt;
| first2 = J&lt;br /&gt;
| last3  = Eden&lt;br /&gt;
| first3 = D&lt;br /&gt;
| last4  = Crothers&lt;br /&gt;
| first4 = D&lt;br /&gt;
| display-authors = 2&lt;br /&gt;
| title   = The dimensions of DNA in solution&lt;br /&gt;
| journal = J Mol Biol&lt;br /&gt;
| volume  = 152&lt;br /&gt;
| issue = 1&lt;br /&gt;
| pages = 153–161&lt;br /&gt;
| year  = 1981&lt;br /&gt;
| pmid  = 7338906&lt;br /&gt;
| doi   = 10.1016/0022-2836(81)90099-1&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last1  = Mandelkern&lt;br /&gt;
| first1 = M&lt;br /&gt;
| last2  = Elias&lt;br /&gt;
| first2 = J&lt;br /&gt;
| last3  = Eden&lt;br /&gt;
| first3 = D&lt;br /&gt;
| last4  = Crothers&lt;br /&gt;
| first4 = D&lt;br /&gt;
| display-authors = 2&lt;br /&gt;
| title   = The dimensions of DNA in solution&lt;br /&gt;
| journal = J Mol Biol&lt;br /&gt;
| volume  = 152&lt;br /&gt;
| issue = 1&lt;br /&gt;
| pages = 153–161&lt;br /&gt;
| year  = 1981&lt;br /&gt;
| pmid  = 7338906&lt;br /&gt;
| doi   = 10.1016/0022-2836(81)90099-1&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| Newspaper article&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last  = Smith&lt;br /&gt;
| first = Joseph III&lt;br /&gt;
| author-link = Joseph Smith III&lt;br /&gt;
| title = Last Testimony of Sister Emma&lt;br /&gt;
| newspaper = The Saints&#039; Herald&lt;br /&gt;
| location = Plano, IL&lt;br /&gt;
| volume = 26&lt;br /&gt;
| issue  = 19&lt;br /&gt;
| date   = October 1, 1879&lt;br /&gt;
| page   = 289&lt;br /&gt;
| url    = http://www.sidneyrigdon.com/dbroadhu/&lt;br /&gt;
IL/sain1872.htm#100179&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last  = Smith&lt;br /&gt;
| first = Joseph III&lt;br /&gt;
| author-link = Joseph Smith III&lt;br /&gt;
| title = Last Testimony of Sister Emma&lt;br /&gt;
| newspaper = The Saints&#039; Herald&lt;br /&gt;
| location = Plano, IL&lt;br /&gt;
| volume = 26&lt;br /&gt;
| issue  = 19&lt;br /&gt;
| date   = October 1, 1879&lt;br /&gt;
| page   = 289&lt;br /&gt;
| url    = http://www.sidneyrigdon.com/dbroadhu/IL/sain1872.htm#100179&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Conference papers and public lectures===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Conference paper&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last   = Sullivan&lt;br /&gt;
| first  = D.B.&lt;br /&gt;
| contribution = Time and frequency measurement&lt;br /&gt;
 at NIST: The first 100 years&lt;br /&gt;
| year   = 2001&lt;br /&gt;
| title  = 2001 IEEE Int&#039;l Frequency Control Symp.&lt;br /&gt;
| publisher = National Institute of Standards and Technology&lt;br /&gt;
| contribution-url = http://tf.nist.gov/timefreq/general/pdf/1485.pdf&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last  = Sullivan&lt;br /&gt;
| first = D.B.&lt;br /&gt;
| contribution = Time and frequency measurement at NIST: The first 100 years&lt;br /&gt;
| year   = 2001&lt;br /&gt;
| title  = 2001 IEEE Int&#039;l Frequency Control Symp.&lt;br /&gt;
| publisher = National Institute of Standards and Technology&lt;br /&gt;
| contribution-url = http://tf.nist.gov/timefreq/general/pdf/1485.pdf&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| Lecture&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last   = Habicht&lt;br /&gt;
| first  = Christian&lt;br /&gt;
| contribution = Hellenistic Athens and her Philosophers&lt;br /&gt;
| year   = 1988&lt;br /&gt;
| title  = David Magie Lecture, Princeton University Program in the History, Archaeology, and Religions of the Ancient World&lt;br /&gt;
| publisher = Princeton University&lt;br /&gt;
| page=14&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|{{Citation&lt;br /&gt;
| last   = Habicht&lt;br /&gt;
| first  = Christian&lt;br /&gt;
| contribution = Hellenistic Athens and her Philosophers&lt;br /&gt;
| year   = 1988&lt;br /&gt;
| title  = David Magie Lecture, Princeton University Program in the History, Archaeology, and Religions of the Ancient World&lt;br /&gt;
| publisher = Princeton University&lt;br /&gt;
| page=14&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Parts of books, including encyclopedia articles===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Manuscript published in an edited compilation&lt;br /&gt;
|&amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last  = Bidamon&lt;br /&gt;
| first = Emma Smith&lt;br /&gt;
| author-link = Emma Hale Smith&lt;br /&gt;
| chapter = Letter to Emma S. Pilgrim&lt;br /&gt;
| date = March 27, 1876&lt;br /&gt;
| editor-last  = Vogel&lt;br /&gt;
| editor-first = Dan&lt;br /&gt;
| title  = Early Mormon Documents&lt;br /&gt;
| volume = 1&lt;br /&gt;
| publisher = Signature Books&lt;br /&gt;
| publication-date = 1996&lt;br /&gt;
| isbn = 1-56085-072-8&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last  = Bidamon&lt;br /&gt;
| first = Emma Smith&lt;br /&gt;
| author-link = Emma Hale Smith&lt;br /&gt;
| chapter = Letter to Emma S. Pilgrim&lt;br /&gt;
| date = March 27, 1876&lt;br /&gt;
| editor-last  = Vogel&lt;br /&gt;
| editor-first = Dan&lt;br /&gt;
| title  = Early Mormon Documents&lt;br /&gt;
| volume = 1&lt;br /&gt;
| publisher = Signature Books&lt;br /&gt;
| publication-date = 1996&lt;br /&gt;
| isbn = 1-56085-072-8&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| Work with an editor but no author&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| editor-last  = Vogel&lt;br /&gt;
| editor-first = Dan&lt;br /&gt;
| title  = Early Mormon Documents&lt;br /&gt;
| volume = 1&lt;br /&gt;
| publisher = Signature Books&lt;br /&gt;
| date = 1996&lt;br /&gt;
| isbn = 1-56085-072-8&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| editor-last  = Vogel&lt;br /&gt;
| editor-first = Dan&lt;br /&gt;
| title  = Early Mormon Documents&lt;br /&gt;
| volume = 1&lt;br /&gt;
| publisher = Signature Books&lt;br /&gt;
| date = 1996&lt;br /&gt;
| isbn = 1-56085-072-8&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| Encyclopedia article by a named author&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last  = Kramer&lt;br /&gt;
| first = Martin&lt;br /&gt;
| author-link  = Martin Kramer&lt;br /&gt;
| year=1999&lt;br /&gt;
| title = Bernard Lewis&lt;br /&gt;
| editor-last  = Boyd&lt;br /&gt;
| editor-first = Kelley&lt;br /&gt;
| encyclopedia = Encyclopedia of Historians and Historical Writing&lt;br /&gt;
| volume = 1&lt;br /&gt;
| pages  = 719–720&lt;br /&gt;
| location = London&lt;br /&gt;
| publisher = Fitzroy Dearborn&lt;br /&gt;
| url = http://www.geocities.com/martinkramerorg/BernardLewis.htm&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last  = Kramer&lt;br /&gt;
| first = Martin&lt;br /&gt;
| author-link  = Martin Kramer&lt;br /&gt;
| year = 1999&lt;br /&gt;
| title = Bernard Lewis&lt;br /&gt;
| editor-last  = Boyd&lt;br /&gt;
| editor-first = Kelley&lt;br /&gt;
| encyclopedia  = Encyclopedia of Historians and Historical Writing&lt;br /&gt;
| volume = 1&lt;br /&gt;
| pages  = 719–720&lt;br /&gt;
| location = London&lt;br /&gt;
| publisher = Fitzroy Dearborn&lt;br /&gt;
| url = http://www.geocities.com/martinkramerorg/BernardLewis.htm&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| Encyclopedia article with no named author&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| title = Bernard Lewis&lt;br /&gt;
| editor-last = Boyd&lt;br /&gt;
| editor-first = Kelley&lt;br /&gt;
| year = 1999&lt;br /&gt;
| encyclopedia = Encyclopedia of Historians&lt;br /&gt;
and Historical Writing&lt;br /&gt;
| volume = 1&lt;br /&gt;
| pages = 719–720&lt;br /&gt;
| publisher = Fitzroy Dearborn&lt;br /&gt;
| location = London&lt;br /&gt;
| url = http://www.geocities.com/martinkramerorg/BernardLewis.htm&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| title = Bernard Lewis&lt;br /&gt;
| editor-last = Boyd&lt;br /&gt;
| editor-first = Kelley&lt;br /&gt;
| year = 1999&lt;br /&gt;
| encyclopedia = Encyclopedia of Historians and Historical Writing&lt;br /&gt;
| volume = 1&lt;br /&gt;
| pages = 719–720&lt;br /&gt;
| location = London&lt;br /&gt;
| publisher = Fitzroy Dearborn&lt;br /&gt;
| url = http://www.geocities.com/martinkramerorg/BernardLewis.htm&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Republications, or edited quotations in a periodical article===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Manuscript edited and published in a journal&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last = Knight&lt;br /&gt;
| first = Joseph Sr.&lt;br /&gt;
| year = 1833&lt;br /&gt;
| editor-last = Jessee&lt;br /&gt;
| editor-first = Dean&lt;br /&gt;
| title = Joseph Knight&#039;s Recollection&lt;br /&gt;
of Early Mormon History&lt;br /&gt;
| journal = BYU Studies&lt;br /&gt;
| volume = 17&lt;br /&gt;
| issue = 1&lt;br /&gt;
| publication-date = 1976&lt;br /&gt;
| page = 35&lt;br /&gt;
| url = https://byustudies.byu.edu/shop/PDFSRC/17.1Jessee.pdf&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last = Knight&lt;br /&gt;
| first = Joseph Sr.&lt;br /&gt;
| year = 1833&lt;br /&gt;
| editor-last = Jessee&lt;br /&gt;
| editor-first = Dean&lt;br /&gt;
| title = Joseph Knight&#039;s Recollection of Early Mormon History&lt;br /&gt;
| journal = BYU Studies&lt;br /&gt;
| volume = 17&lt;br /&gt;
| issue = 1&lt;br /&gt;
| publication-date = 1976&lt;br /&gt;
| page = 35&lt;br /&gt;
| url = https://byustudies.byu.edu/shop/PDFSRC/17.1Jessee.pdf&lt;br /&gt;
}}&lt;br /&gt;
|-&lt;br /&gt;
| Manuscript written at one date and place, then published in a periodical at a different date and place with commentary by the editor.&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| last = Klingensmith&lt;br /&gt;
| first = Philip&lt;br /&gt;
| type = Affidavit&lt;br /&gt;
| date = September 5, 1872&lt;br /&gt;
| place = Lincoln County, Nevada&lt;br /&gt;
| title = Mountain Meadows Massacre&lt;br /&gt;
| editor-last = Toohy&lt;br /&gt;
| editor-first = Dennis J.&lt;br /&gt;
| journal = Corinne Daily Reporter&lt;br /&gt;
| publication-date = September 24, 1872&lt;br /&gt;
| publication-place = Corinne, Utah&lt;br /&gt;
| volume = 5&lt;br /&gt;
| issue = 252&lt;br /&gt;
| page = 1&lt;br /&gt;
| url = http://udn.lib.utah.edu/u?/corinne,5359&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| last = Klingensmith&lt;br /&gt;
| first = Philip&lt;br /&gt;
| type = Affidavit&lt;br /&gt;
| date = September 5, 1872&lt;br /&gt;
| place = Lincoln County, Nevada&lt;br /&gt;
| title = Mountain Meadows Massacre&lt;br /&gt;
| editor-last = Toohy&lt;br /&gt;
| editor-first = Dennis J.&lt;br /&gt;
| journal = Corinne Daily Reporter&lt;br /&gt;
| publication-date = September 24, 1872&lt;br /&gt;
| publication-place = Corinne, Utah&lt;br /&gt;
| volume = 5&lt;br /&gt;
| issue = 252&lt;br /&gt;
| page = 1&lt;br /&gt;
| url = http://udn.lib.utah.edu/u?/corinne,5359&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Press release===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press release with quotation&lt;br /&gt;
| &amp;lt;pre&amp;gt;{{Citation&lt;br /&gt;
| url = https://www.apple.com/pr/library/2010/04/05ipad.html&lt;br /&gt;
| title = Apple Sells Over 300,000 iPads First Day&lt;br /&gt;
| publisher = Apple Inc&lt;br /&gt;
| access-date = April 10, 2010&lt;br /&gt;
| quote = in the US as of midnight Saturday, April 3&lt;br /&gt;
| ref = none}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| {{Citation&lt;br /&gt;
| url = https://www.apple.com/pr/library/2010/04/05ipad.html&lt;br /&gt;
| title = Apple Sells Over 300,000 iPads First Day&lt;br /&gt;
| publisher = Apple Inc&lt;br /&gt;
| access-date = April 10, 2010&lt;br /&gt;
| quote = in the US as of midnight Saturday, April 3&lt;br /&gt;
| ref = none}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Anchored citations==&lt;br /&gt;
{{distinguish|#Identifiers}}&lt;br /&gt;
This template can generate a citation that can be combined with [[WP:CITESHORT|shortened footnotes]] or [[Wikipedia:Parenthetical referencing|parenthetical referencing]]. It does this by creating an [[HTML element#Anchor|HTML anchor]] containing an ID. The special parameter {{para|ref}} generates an anchor ID suitable for [[Harvard referencing]] templates such as {{tl|harv}} as specified in the next section; an anchor ID is generated by default.&lt;br /&gt;
&lt;br /&gt;
To disable anchor generation, specify {{para|ref|none}}. You can also specify the ID directly, using the {{para|ref|&amp;lt;var&amp;gt;ID&amp;lt;/var&amp;gt;}} parameter. For example, suppose an article&#039;s &#039;&#039;References&#039;&#039; section contains the markup:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Citation |author=Sigmund Freud |title=Civilization and Its Discontents |date=1930 |ref=CivDis}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
which generates the citation:&lt;br /&gt;
* {{Citation |author=Sigmund Freud |title=Civilization and Its Discontents |date=1930 |ref=CivDis}}&lt;br /&gt;
Then, the markup &amp;quot;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;([[#CivDis|Freud 1930]])&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; generates a parenthetical reference &amp;quot;([[#CivDis|Freud 1930]])&amp;quot; containing a wikilink to the citation (try clicking on the wikilink).&lt;br /&gt;
&lt;br /&gt;
===Anchors for Harvard referencing templates===&lt;br /&gt;
IDs compatible with Harvard referencing templates such as {{tl|harv}} are computed from the last names of the authors (or editors, if no authors are given) and the year of the cited source. For example, the markup &amp;quot;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{harv|Wright|Evans|1851|p=ix}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; generates the Harvard reference &amp;quot;{{harv|Wright|Evans|1851|p=ix}}&amp;quot;, which wikilinks to the citation whose markup and appearance are shown below:&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Citation |last1=Wright |first1=Thomas |last2=Evans |first2=R. H. |title=Historical and Descriptive Account of the Caricatures of James Gillray |location=London |publisher=Henry G. Bohn |date=1851 |oclc=59510372}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* {{Citation |last1=Wright |first1=Thomas |last2=Evans |first2=R. H. |title=Historical and Descriptive Account of the Caricatures of James Gillray |location=London |publisher=Henry G. Bohn |date=1851 |oclc=59510372}}&lt;br /&gt;
In this example the {{tl|citation}} template defines, and the {{tl|harv}} template uses, the HTML ID &amp;quot;&amp;lt;code&amp;gt;CITEREFWrightEvans1851&amp;lt;/code&amp;gt;&amp;quot;, composed by concatenating the string &amp;quot;&amp;lt;code&amp;gt;CITEREF&amp;lt;/code&amp;gt;&amp;quot; with the last names of the authors and the year. The {{tl|harvid}} template can be used to generate such IDs, for example, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{harvid|Wright|Evans|1851}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; generates &amp;quot;&amp;lt;code&amp;gt;{{harvid|Wright|Evans|1851}}&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Related methods which leave only a number in the text are to use the {{tl|harvnb}} template enclosed in the &amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt; html code, or to use the {{tl|sfn}} template alone. The example above would be &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;{{harvnb|Wright|Evans|1851|p=ix}}&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{sfn|Wright|Evans|1851|p=ix}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; both of which generate a footnote, such as&lt;br /&gt;
:17. {{harvnb|Wright|Evans|1851|p=ix}}&lt;br /&gt;
&lt;br /&gt;
The names of only the first four authors are used; other author names are not concatenated to the ID. If no author names are given, editor names are used instead.&lt;br /&gt;
&lt;br /&gt;
Last names are used, as specified by the parameters {{para|last1}} (or {{para|last}}), {{para|last2}}, {{para|last3}}, and {{para|last4}}, and similarly for {{para|editor1-last}} etc. and for {{para|inventor1-last}} etc. If a full name is given but no last name is specified, this template falls back on the full name, but this usage is not recommended. For example, in &amp;quot;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Citation |author=Sigmund Freud |title=The Ego and the Id |date=1923}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;quot; no last name is given, so this citation cannot be combined with the Harvard reference &amp;quot;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{harv|Freud|1923}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;. To make these {{tl|citation}} and {{tl|harv}} invocations compatible, either replace &amp;quot;{{para|author|Sigmund Freud}}&amp;quot; with &amp;quot;{{para|first|Sigmund}} {{para|last|Freud}}&amp;quot;, or add &amp;quot;{{para|ref|&amp;lt;nowiki&amp;gt;{{harvid|Freud|1923}}&amp;lt;/nowiki&amp;gt;}}&amp;quot; to the {{tl|citation}} invocation, or add the same ref parameter (say, &amp;quot;{{para|ref|EgoId}}&amp;quot;) to both the {{tl|citation}} and the {{tl|harv}} invocations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- This paragraph appears to be outdated and probably needs to be updated to reflect current CS1/CS2 functionality: --&amp;gt;Similarly, the year is used, as specified by {{para|year}}. If no year is given, this template attempts to derive the year from {{para|date}} (or, if no date is given, from {{para|publication-date}}) by applying the [[mw:Help:Extension:ParserFunctions##time|MediaWiki §&amp;amp;nbsp;Time function]]. This heuristic works with most common date formats (American, International and [[ISO 8601#Calendar dates|ISO 8601 standard format]] YYYY-MM-DD as listed in [[WP:MOS]]), but may not work as expected with other formats, so when in doubt it may be safer to use {{para|year}}.&lt;br /&gt;
&lt;br /&gt;
===IDs must be unique===&lt;br /&gt;
Names, years, and hand-specified IDs must be chosen so that the IDs are unique within a page; otherwise the HTML will not conform to the W3C standards, and any references to the citations will not work reliably. For example, suppose a page contains the following two citations with {{tl|harv}}-compatible IDs:&lt;br /&gt;
* {{Citation |last1=Montes |first1=G. |last2=Halterman |first2=J. S. |date=2008a |journal=Pediatrics |volume=121 |issue=4 |pages=e821–e826 |title=Association of Childhood Autism Spectrum Disorders and Loss of Family Income |doi=10.1542/peds.2007-1594 |pmid=18381511 |url=http://pediatrics.aappublications.org/cgi/content/full/121/4/e821}}&lt;br /&gt;
* {{Citation |last1=Montes |first1=G. |last2=Halterman |first2=J. S. |date=2008b |journal=Pediatrics |volume=122 |issue=1 |pages=e202–e208 |title=Child Care Problems and Employment Among Families with Preschool-aged Children with Autism in the United States |doi=10.1542/peds.2007-3037 |pmid=18595965 |url=http://pediatrics.aappublications.org/cgi/content/full/122/1/e202}}&lt;br /&gt;
&lt;br /&gt;
If these citations were altered to say &amp;quot;2008&amp;quot; rather than &amp;quot;2008a&amp;quot; and &amp;quot;2008b&amp;quot;, the resulting page would not work, because the two different citations would both attempt to use the ID &amp;quot;&amp;lt;code&amp;gt;CITEREFMontesHalterman2008&amp;lt;/code&amp;gt;&amp;quot;. To avoid this problem, distinguish the citations by appending suffixes to the years, e.g. &amp;quot;{{para|date|2008a}}&amp;quot; and &amp;quot;{{para|date|2008b}}&amp;quot;, as was done above. Any Harvard references to these citations should use years with the same suffixes.&lt;br /&gt;
&lt;br /&gt;
It is good practice to verify that a page does not contain duplicate IDs by using the [[W3C Markup Validation Service]]; see &#039;&#039;[[#External links|External links]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Dates==&lt;br /&gt;
{{Reflist|group=&amp;quot;n&amp;quot;|refs=&amp;lt;ref name=&amp;quot;dates&amp;quot; group=&amp;quot;n&amp;quot;&amp;gt;The format of dates in the references of an article should use consistent and unambiguous styles. Example formats used in Wikipedia citations include:&lt;br /&gt;
* &#039;&#039;2009&#039;&#039;&lt;br /&gt;
* &#039;&#039;2009-09-14&#039;&#039; ([[ISO 8601#Calendar dates|ISO 8601 standard format]]: YYYY-MM-DD)&lt;br /&gt;
* &#039;&#039;14 September 2009&#039;&#039;&lt;br /&gt;
* &#039;&#039;September 14, 2009&#039;&#039; (with comma)&lt;br /&gt;
* &#039;&#039;September 2009&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dates should not be linked (say, to a Wikipedia article of the same name) in references.&lt;br /&gt;
&lt;br /&gt;
Please see [[Wikipedia:Manual of Style (dates and numbers)#Dates|Wikipedia:Manual of Style (dates and numbers) §&amp;amp;nbsp;Dates]] for more guidance about formatting dates.&lt;br /&gt;
&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
See [[Wikipedia:Citing sources#Citation templates and tools|Wikipedia:Citing sources §&amp;amp;nbsp;Citation templates and tools]] for a list of tools that can help create a reference in the &amp;quot;citation&amp;quot; format.&lt;br /&gt;
&lt;br /&gt;
==TemplateData==&lt;br /&gt;
{{TemplateData header}}&lt;br /&gt;
{{#invoke:cs1 documentation support|template_data_validate|{{ROOTPAGENAME}}}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;The Citation template generates a citation for a book, periodical, contribution in a collective work, or a web page. It determines the citation type by examining which parameters are used.&amp;quot;,&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the author; don&#039;t wikilink, use &#039;author-link&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;last1&amp;quot;,&lt;br /&gt;
				&amp;quot;author&amp;quot;,&lt;br /&gt;
				&amp;quot;author1&amp;quot;,&lt;br /&gt;
				&amp;quot;author1-last&amp;quot;,&lt;br /&gt;
				&amp;quot;author-last&amp;quot;,&lt;br /&gt;
				&amp;quot;surname1&amp;quot;,&lt;br /&gt;
				&amp;quot;author-last1&amp;quot;,&lt;br /&gt;
				&amp;quot;subject1&amp;quot;,&lt;br /&gt;
				&amp;quot;surname&amp;quot;,&lt;br /&gt;
				&amp;quot;host&amp;quot;,&lt;br /&gt;
				&amp;quot;subject&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the author; don&#039;t wikilink, use &#039;author-link&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given&amp;quot;,&lt;br /&gt;
				&amp;quot;author-first&amp;quot;,&lt;br /&gt;
				&amp;quot;first1&amp;quot;,&lt;br /&gt;
				&amp;quot;given1&amp;quot;,&lt;br /&gt;
				&amp;quot;author-first1&amp;quot;,&lt;br /&gt;
				&amp;quot;author1-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;interviewer&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Interviewer&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Full name of interviewer(s); separate interviewers with a semicolon (;); wikilink as desired.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;title&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Title of source&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of source. Works display in italics and articles surrounded in quotation marks.&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Date of source&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Full date of source being referenced; do not wikilink; use YYYY-MM-DD or other acceptable formats&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;url&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;URL of source&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;URL of an online location where the text of the publication can be found.&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;publication-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Publication date&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Date of publication when different from the date the work was written. Displays only if year or date are defined and only if different, else publication-date is used and displayed as date. Use the same format as other dates in the article; do not wikilink. Follows publisher; if work is not defined, then publication-date is preceded by \&amp;quot;published\&amp;quot; and enclosed in parenthesis.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;df&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Date format&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Sets rendered dates to the specified format&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;year&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Year of publication&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Year of the source being referenced; recommended only when date parameter format is YYYY-MM-DD and a CITEREF disambiguator is needed&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;postscript&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Postscript&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Controls the closing punctuation for a citation; defaults to a period (.); for no terminating punctuation, specify |postscript=none – leaving |postscript= empty is the same as omitting it, but is ambiguous. Ignored if quote is defined.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the first author with em dashes or text. Set author-mask to a numeric value n to set the dash n em spaces wide; set author-mask to a text value to display the text without a trailing author separator; for example, \&amp;quot;with\&amp;quot;. You must still include the values for all authors for metadata purposes. Primarily intended for use with bibliographies or bibliography styles where multiple works by a single author are listed sequentially such as shortened footnotes. Do not use in a list generated by {{reflist}}, &amp;lt;references /&amp;gt; or similar as there is no control of the order in which references are displayed. You can also use editor-mask and translator-mask in the same way.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the second author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author2-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the third author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author3-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the fourth author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author4-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the fifth author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author5-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the sixth author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author6-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the seventh author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author7-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the eighth author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author8-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-mask9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author mask 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the ninth author with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing author separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author9-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the second author; don&#039;t wikilink, use &#039;author-link2&#039; instead.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author2&amp;quot;,&lt;br /&gt;
				&amp;quot;surname2&amp;quot;,&lt;br /&gt;
				&amp;quot;author-last2&amp;quot;,&lt;br /&gt;
				&amp;quot;author2-last&amp;quot;,&lt;br /&gt;
				&amp;quot;subject2&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the second author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given2&amp;quot;,&lt;br /&gt;
				&amp;quot;author-first2&amp;quot;,&lt;br /&gt;
				&amp;quot;author2-first&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the third author; don&#039;t wikilink, use &#039;author-link3&#039; instead.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author3&amp;quot;,&lt;br /&gt;
				&amp;quot;surname3&amp;quot;,&lt;br /&gt;
				&amp;quot;author-last3&amp;quot;,&lt;br /&gt;
				&amp;quot;author3-last&amp;quot;,&lt;br /&gt;
				&amp;quot;subject3&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the third author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given3&amp;quot;,&lt;br /&gt;
				&amp;quot;author-first3&amp;quot;,&lt;br /&gt;
				&amp;quot;author3-first&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fourth author; don&#039;t wikilink, use &#039;author-link4&#039; instead.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author4&amp;quot;,&lt;br /&gt;
				&amp;quot;surname4&amp;quot;,&lt;br /&gt;
				&amp;quot;author-last4&amp;quot;,&lt;br /&gt;
				&amp;quot;author4-last&amp;quot;,&lt;br /&gt;
				&amp;quot;subject4&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fourth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given4&amp;quot;,&lt;br /&gt;
				&amp;quot;author-first4&amp;quot;,&lt;br /&gt;
				&amp;quot;author4-first&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fifth author; don&#039;t wikilink, use &#039;author-link5&#039; instead.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author5&amp;quot;,&lt;br /&gt;
				&amp;quot;surname5&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fifth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given5&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the sixth author; don&#039;t wikilink, use &#039;author-link6&#039; instead.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author6&amp;quot;,&lt;br /&gt;
				&amp;quot;surname6&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the sixth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the seventh author; don&#039;t wikilink, use &#039;author-link7&#039; instead.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author7&amp;quot;,&lt;br /&gt;
				&amp;quot;surname7&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the seventh author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given7&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the eighth author; don&#039;t wikilink, use &#039;author-link8&#039; instead.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author8&amp;quot;,&lt;br /&gt;
				&amp;quot;surname8&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the eighth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given8&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;last9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the ninth author; don&#039;t wikilink, use &#039;author-link9&#039; instead.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author9&amp;quot;,&lt;br /&gt;
				&amp;quot;surname9&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;first9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the ninth author; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;given9&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the author&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author-link1&amp;quot;,&lt;br /&gt;
				&amp;quot;author1-link&amp;quot;,&lt;br /&gt;
				&amp;quot;subject-link&amp;quot;,&lt;br /&gt;
				&amp;quot;subject-link1&amp;quot;,&lt;br /&gt;
				&amp;quot;subject1-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the second author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author2-link&amp;quot;,&lt;br /&gt;
				&amp;quot;subject-link2&amp;quot;,&lt;br /&gt;
				&amp;quot;subject2-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the third author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author3-link&amp;quot;,&lt;br /&gt;
				&amp;quot;subject-link3&amp;quot;,&lt;br /&gt;
				&amp;quot;subject3-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fourth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author4-link&amp;quot;,&lt;br /&gt;
				&amp;quot;subject-link4&amp;quot;,&lt;br /&gt;
				&amp;quot;subject4-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the sixth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author5-link&amp;quot;,&lt;br /&gt;
				&amp;quot;subject-link5&amp;quot;,&lt;br /&gt;
				&amp;quot;subject5-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the sixth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author6-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the seventh author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author7-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the eighth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author8-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;author-link9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Author link 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the ninth author.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;author9-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;orig-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Original date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Original date of publication; provide specifics&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;trans-title&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translated title&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An English language title, if the source cited is in a foreign language; &#039;language&#039; is recommended&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;trans-chapter&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translated chapter title&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An English language chapter title, if the source cited is in a foreign language; &#039;language&#039; is recommended&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Type&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Additional information about the media type of the source; format in sentence case&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;archive-url&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Archive URL&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The URL of an archived copy of a web page, if or in case the URL becomes unavailable; requires &#039;archive-date&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;series&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Series&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Series identifier when the source is part of a series, such as a book series or a journal; alias of &#039;version&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;version&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;work&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Work&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the work in which the cited title is found&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;journal&amp;quot;,&lt;br /&gt;
				&amp;quot;website&amp;quot;,&lt;br /&gt;
				&amp;quot;newspaper&amp;quot;,&lt;br /&gt;
				&amp;quot;magazine&amp;quot;,&lt;br /&gt;
				&amp;quot;periodical&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;volume&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Volume&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;For one publication published in several volumes&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;vauthors&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Vancouver style author list&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If using Vancouver style, comma separated list of author names; enclose corporate or institutional author names in doubled parentheses&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Smythe JB, ((Megabux Corporation))&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;issue&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Issue&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Issue number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;number&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;display-editors&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Display Editors&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Controls the number of editor names that are displayed when a citation is published. To change the displayed number of editors, set display-editors to the desired number. For example, |display-editors=2 will display only the first two editors in a citation. By default, all editors are displayed. |display-editors=etal displays all editors in the list followed by et al.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;minutes&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;In-source location: Minutes&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Time the event occurs in an audio or visual source; followed by \&amp;quot;minutes in\&amp;quot;. &amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;time&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;In-source location: Time&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Time the event occurs in an audio or visual source; preceded by default text \&amp;quot;Event occurs at time\&amp;quot;. &amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;time-caption&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;In-source location: Time caption&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Changes the default text displayed before time&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;page&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Page in the source that supports the content; displays after &#039;p.&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;pages&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Pages&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Pages in the source that support the content (not an indication of the number of pages in the source; displays after &#039;pp.&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;at&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;At&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;May be used instead of &#039;page&#039; or &#039;pages&#039; where a page number is inappropriate or insufficient&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;no-pp&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;No pp&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to &#039;y&#039; to suppress the &#039;p.&#039; or &#039;pp.&#039; display with &#039;page&#039; or &#039;pages&#039; when inappropriate (such as &#039;Front cover&#039;)&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;chapter&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Chapter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The chapter heading of the source. For the contribution alias, see contributor-last&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;contribution&amp;quot;,&lt;br /&gt;
				&amp;quot;entry&amp;quot;,&lt;br /&gt;
				&amp;quot;article&amp;quot;,&lt;br /&gt;
				&amp;quot;section&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name of second editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the second editor; don&#039;t wikilink, use &#039;editor2-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-surname2&amp;quot;,&lt;br /&gt;
				&amp;quot;editor2&amp;quot;,&lt;br /&gt;
				&amp;quot;editor2-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor2-surname&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name of second editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the second editor; don&#039;t wikilink, use &#039;editor2-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-given2&amp;quot;,&lt;br /&gt;
				&amp;quot;editor2-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor2-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for second editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the second editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor2-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for second editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the second editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor2-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name of third editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the third editor; don&#039;t wikilink, use &#039;editor3-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-surname3&amp;quot;,&lt;br /&gt;
				&amp;quot;editor3&amp;quot;,&lt;br /&gt;
				&amp;quot;editor3-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor3-surname&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name of third editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the third editor; don&#039;t wikilink, use &#039;editor3-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-given3&amp;quot;,&lt;br /&gt;
				&amp;quot;editor3-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor3-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for third editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the third editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor3-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for third editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the third editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor3-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name of fourth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fourth editor; don&#039;t wikilink, use &#039;editor4-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-surname4&amp;quot;,&lt;br /&gt;
				&amp;quot;editor4&amp;quot;,&lt;br /&gt;
				&amp;quot;editor4-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor4-surname&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name of fourth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fourth editor; don&#039;t wikilink, use &#039;editor4-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-given4&amp;quot;,&lt;br /&gt;
				&amp;quot;editor4-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor4-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for fourth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fourth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor4-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for fourth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the fourth editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor4-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name of fifth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fifth editor; don&#039;t wikilink, use &#039;editor5-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-surname5&amp;quot;,&lt;br /&gt;
				&amp;quot;editor5&amp;quot;,&lt;br /&gt;
				&amp;quot;editor5-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor5-surname&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name of fifth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fifth editor; don&#039;t wikilink, use &#039;editor5-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-given5&amp;quot;,&lt;br /&gt;
				&amp;quot;editor5-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor5-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for fifth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fifth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor5-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for fifth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the fifth editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor5-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name of sixth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the sixth editor; don&#039;t wikilink, use &#039;editor6-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-surname6&amp;quot;,&lt;br /&gt;
				&amp;quot;editor6&amp;quot;,&lt;br /&gt;
				&amp;quot;editor6-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor6-surname&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name of sixth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the sixth editor; don&#039;t wikilink, use &#039;editor6-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-given6&amp;quot;,&lt;br /&gt;
				&amp;quot;editor6-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor6-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for sixth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the sixth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor6-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for sixth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the sixth editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor6-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name of seventh editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the seventh editor; don&#039;t wikilink, use &#039;editor7-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-surname7&amp;quot;,&lt;br /&gt;
				&amp;quot;editor7&amp;quot;,&lt;br /&gt;
				&amp;quot;editor7-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor7-surname&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name of seventh editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the seventh editor; don&#039;t wikilink, use &#039;editor7-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-given7&amp;quot;,&lt;br /&gt;
				&amp;quot;editor7-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor7-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for seventh editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the seventh editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor7-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for seventh editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the seventh editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor7-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name of eighth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the eighth editor; don&#039;t wikilink, use &#039;editor8-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-surname8&amp;quot;,&lt;br /&gt;
				&amp;quot;editor8&amp;quot;,&lt;br /&gt;
				&amp;quot;editor8-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor8-surname&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name of eighth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the eighth editor; don&#039;t wikilink, use &#039;editor8-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-given8&amp;quot;,&lt;br /&gt;
				&amp;quot;editor8-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor8-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for eighth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the eighth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor8-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for eighth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the eighth editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor8-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Last name of ninth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the ninth editor; don&#039;t wikilink, use &#039;editor9-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-surname9&amp;quot;,&lt;br /&gt;
				&amp;quot;editor9&amp;quot;,&lt;br /&gt;
				&amp;quot;editor9-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor9-surname&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;First name of ninth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the ninth editor; don&#039;t wikilink, use &#039;editor9-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-given9&amp;quot;,&lt;br /&gt;
				&amp;quot;editor9-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor9-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for ninth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the ninth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor9-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for ninth editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the ninth editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor9-mask&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;chapter-url&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Chapter URL&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;contribution-url&amp;quot;,&lt;br /&gt;
				&amp;quot;section-url&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The URL of the online location where the text of the chapter can be found&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;veditors&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Vancouver style editor list&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Comma separated list of editor names in Vancouver style; enclose corporate or institutional names in doubled parentheses&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Smythe JB, ((Megabux Corporation))&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;chapter-format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Format of Chapter URL&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;contribution-format&amp;quot;,&lt;br /&gt;
				&amp;quot;section-format&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Format of the work referred to by chapter-url; displayed in parentheses after chapter. HTML is implied and should not be specified.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;PDF, DOC, or XLS&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;others&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Others&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Free-text field for people involved in creating a work who cannot be added with another name parameter such as author or editor&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;edition&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Edition&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;When the publication has more than one edition; for example: &#039;2nd&#039;, &#039;Revised&#039; etc.; suffixed with &#039; ed.&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;place&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Location of publication&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Geographical place of publication; usually not wikilinked&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;location&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;publication-place&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Place of publication&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Publication place shows after title; if &#039;place&#039; or &#039;location&#039; are also given, they are displayed before the title prefixed with &#039;written at&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;publisher&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the publisher; displays after title&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;institution&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;language&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Language&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The language in which the source is written, if not English; use the ISO 639 language code (preferred) or the full language name; do not use icons or templates&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Format&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Format of the work referred to by &#039;url&#039; (&#039;url&#039; is required when using &#039;format&#039;); examples: PDF, DOC, XLS; do not specify HTML&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;arxiv&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;arXiv identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An identifier for arXive electronic preprints of scientific papers&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;asin&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ASIN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Amazon Standard Identification Number; 10 characters&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;ASIN&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;asin-tld&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ASIN TLD&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;ASIN top-level domain for Amazon sites other than the US&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;bibcode&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Bibcode&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Bibliographic Reference Code (REFCODE); 19 characters&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;biorxiv&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;biorXiv&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;biorXiv identifier; 6 digits&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;citeseerx&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;CiteSeerX&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;CiteSeerX identifier; found after the &#039;doi=&#039; query parameter&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;doi&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;DOI&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Digital Object Identifier; begins with &#039;10.&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;DOI&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;doi-broken-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;DOI broken date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The date that the DOI was determined to be broken&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;isbn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ISBN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;International Standard Book Number; use the 13-digit ISBN where possible&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;issn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ISSN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;International Standard Serial Number (print); 8 characters; usually split into two groups of four using a hyphen&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;eissn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;eISSN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;International Standard Serial Number (online); 8 characters; usually split into two groups of four using a hyphen&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;jfm&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;jfm code&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Jahrbuch über die Fortschritte der Mathematik classification code&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;jstor&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;JSTOR&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;JSTOR identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;lccn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;LCCN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Library of Congress Control Number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;mr&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;MR&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Mathematical Reviews identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;oclc&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;OCLC&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Online Computer Library Center number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ol&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;OL&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Open Library identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;osti&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;OSTI&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Office of Scientific and Technical Information identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;pmc&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;PMC&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;PubMed Center article number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;pmid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;PMID&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;PubMed Unique Identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;rfc&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;RFC&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Request for Comments number&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ssrn&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;SSRN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Social Science Research Network&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;zbl&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Zbl&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Zentralblatt MATH journal identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;id&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;id&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;A unique identifier used where none of the specialized ones are applicable&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;quote&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Quote&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Relevant text quoted from the source; displays last, enclosed in quotes; needs to include terminating punctuation&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ref&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Ref&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;An anchor identifier; can be made the target of wikilinks to full references; special value &#039;harv&#039; generates an anchor suitable for the harv and sfn templates&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;access-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;URL access date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The full date when the original URL was accessed; do not wikilink&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;archive-date&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Archive date&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Date when the original URL was archived; do not wikilink&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the editor; don&#039;t wikilink, use &#039;editor-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor&amp;quot;,&lt;br /&gt;
				&amp;quot;editor-surname&amp;quot;,&lt;br /&gt;
				&amp;quot;editor-last1&amp;quot;,&lt;br /&gt;
				&amp;quot;editor-surname1&amp;quot;,&lt;br /&gt;
				&amp;quot;editor1&amp;quot;,&lt;br /&gt;
				&amp;quot;editor1-last&amp;quot;,&lt;br /&gt;
				&amp;quot;editor1-surname&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The given or first name, middle names, or initials of the editor; don&#039;t wikilink, use &#039;editor-link&#039;&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor-first1&amp;quot;,&lt;br /&gt;
				&amp;quot;editor-given&amp;quot;,&lt;br /&gt;
				&amp;quot;editor-given1&amp;quot;,&lt;br /&gt;
				&amp;quot;editor1-first&amp;quot;,&lt;br /&gt;
				&amp;quot;editor1-given&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor2-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the second editor; don&#039;t wikilink, use &#039;editor2-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor2&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor2-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the second editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor2-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor3-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the third editor; don&#039;t wikilink, use &#039;editor3-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor3&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor3-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the third editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor3-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor4-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fourth editor; don&#039;t wikilink, use &#039;editor4-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor4&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor4-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fourth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor4-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor5-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fifth editor; don&#039;t wikilink, use &#039;editor5-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor5&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor5-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fifth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor5-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor6-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the sixth editor; don&#039;t wikilink, use &#039;editor6-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor6&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor6-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the sixth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor6-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor7-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the seventh editor; don&#039;t wikilink, use &#039;editor7-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor7&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor7-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the seventh editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor7-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor8-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the eighth editor; don&#039;t wikilink, use &#039;editor8-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor8&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor8-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the eighth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor8-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor9-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor last name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the ninth editor; don&#039;t wikilink, use &#039;editor9-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor9&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor9-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Editor first name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the ninth editor; don&#039;t wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;line&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor9-given&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Link for editor&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;editor1-link&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the editor&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor2-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;editor2-link&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor3-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;editor3-link&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor4-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;editor4-link&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator&amp;quot;,&lt;br /&gt;
				&amp;quot;translator-last1&amp;quot;,&lt;br /&gt;
				&amp;quot;translator1&amp;quot;,&lt;br /&gt;
				&amp;quot;translator1-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator1-first&amp;quot;,&lt;br /&gt;
				&amp;quot;translator-first1&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator-link1&amp;quot;,&lt;br /&gt;
				&amp;quot;translator1-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the second translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator2&amp;quot;,&lt;br /&gt;
				&amp;quot;translator2-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the second translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator2-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the third translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator3&amp;quot;,&lt;br /&gt;
				&amp;quot;translator3-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the third translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator3-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fourth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator4&amp;quot;,&lt;br /&gt;
				&amp;quot;translator4-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fourth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator4-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the fifth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator5&amp;quot;,&lt;br /&gt;
				&amp;quot;translator5-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the fifth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator5-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the sixth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator6&amp;quot;,&lt;br /&gt;
				&amp;quot;translator6-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the sixth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator6-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the seventh translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator7&amp;quot;,&lt;br /&gt;
				&amp;quot;translator7-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the seventh translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator7-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the eighth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator8&amp;quot;,&lt;br /&gt;
				&amp;quot;translator8-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the eighth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator8-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-last9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator last name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The surname of the ninth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator9&amp;quot;,&lt;br /&gt;
				&amp;quot;translator9-last&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-first9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator first name 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Given or first name, middle names, or initials of the ninth translator; don&#039;t wikilink, use &#039;translator-link&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator9-first&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the second translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator2-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the third translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator3-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fourth translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator4-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the fifth translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator5-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the sixth translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator6-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link7&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link 7&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the seventh translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator7-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link8&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link 8&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the eighth translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator8-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;translator-link9&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Translator link 9&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the ninth translator.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;translator9-link&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;display-authors&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Display authors&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;number of authors to display before &#039;et al.&#039; is used; must be less than the number listed&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;name-list-style&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Name list style&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Sets the style for the list. Accepts &#039;amp&#039;, &#039;and&#039;, and &#039;vanc&#039;. amp displays an ampersand after the penultimate name; and the same with &#039;and&#039;, and vanc displays in Vancouver format&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;script-title&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Script Title&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Original title for languages that do not use a Latin-based script (Arabic, Chinese, Cyrillic, Greek, Hebrew, Japanese, Korean, etc.); not italicized, follows italicized Romanization defined in title (if present). Must be prefixed with one of the supported language codes to help browsers properly display the script&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;ja:東京タワー&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;url-status&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;URL status&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The status of the URL- live, dead, usurped/unfit (inappropriate content) or deviated (different content)&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;live&amp;quot;,&lt;br /&gt;
				&amp;quot;dead&amp;quot;,&lt;br /&gt;
				&amp;quot;usurped&amp;quot;,&lt;br /&gt;
				&amp;quot;unfit&amp;quot;,&lt;br /&gt;
				&amp;quot;deviated&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;s2cid&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Semantic Scholar Corpus ID&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The Corpus identifier in Semantic Scholar. Displays as a link to the Semantic Scholar page.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;84541141&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;S2CID&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;via&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Aggregate or database provider, when different from the Publisher.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;[[Open Edition]], [[JSTOR]]&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;url-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;URL access level&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;registration&amp;quot;,&lt;br /&gt;
				&amp;quot;limited&amp;quot;,&lt;br /&gt;
				&amp;quot;subscription&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;doi-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;DOI access level&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;free&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Requires DOI value.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;bibcode-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;free&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Bibcode access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is available from ADS via this Bibcode, type &#039;free&#039;.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;jstor-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Jstor access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is free to read on Jstor, type &#039;free&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;autovalue&amp;quot;: &amp;quot;free&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;s2cid-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Semantic Scholar Corpus ID (s2cid) Access Level&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;free&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;agency&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Agency&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The agency (wire service) that provided the content; examples: Associated Press, Reuters, Agence France-Presse&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;title-link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Title link&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Title of existing Wikipedia article about the source named in title – do not use a web address; do not wikilink.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;collaboration&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Collaboration&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of a group of authors or collaborators; requires author, last, or vauthors which list one or more primary authors; follows author name-list; appends &#039;et al.&#039; to author name-list.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;script-chapter&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Script Chapter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Chapter heading for languages that do not use a Latin-based alphabet (Arabic, Chinese, Cyrillic, Greek, Hebrew, Japanese, Korean, Vietnamese, etc); follows transliteration defined in chapter. Should be prefixed with an ISO 639-1 two-character code to help browsers properly display the script&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;ja:東京タワー&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;department&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Department&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Department or column within a periodical.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;hdl&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;HDL&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Handle System identifier&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Handle System identifier for digital objects and other resources on the Internet&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;mode&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Citation Style&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Sets element separator, default terminal punctuation, and certain capitalization according to the value provided. For cs1, element separator and terminal punctuation is a period (.); where appropriate, initial letters of certain words are capitalized (&#039;Retrieved...&#039;). For cs2, element separator is a comma (,); terminal punctuation is omitted; where appropriate, initial letters of certain words are not capitalized (&#039;retrieved...&#039;). These styles correspond to Citation Style 1 and Citation Style 2 respectively. To override default terminal punctuation use the postscript parameter.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;cs1&amp;quot;,&lt;br /&gt;
				&amp;quot;cs2&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;cs2&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;archive-format&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Archive Format&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Format of the Archive&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;hdl-access&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;HDL access level&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;If the full text is free to read via the HDL, type &#039;free&#039;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;free&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ismn&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;ISMN&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;ISMN&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;International Standard Music Number; Use the ISMN actually printed on or in the work. Hyphens or spaces in the ISMN are optional.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;979-0-9016791-7-7&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;editor-mask&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Mask for editor&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Replaces the name of the editor with em dashes or text; set to a numeric value &#039;n&#039; to set the dash &#039;n&#039; em spaces wide; set to a text value to display the text without a trailing editor separator; for example, &#039;with&#039; instead&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;maps&amp;quot;: {&lt;br /&gt;
		&amp;quot;citoid&amp;quot;: {&lt;br /&gt;
			&amp;quot;edition&amp;quot;: &amp;quot;edition&amp;quot;,&lt;br /&gt;
			&amp;quot;title&amp;quot;: &amp;quot;title&amp;quot;,&lt;br /&gt;
			&amp;quot;caseName&amp;quot;: &amp;quot;title&amp;quot;,&lt;br /&gt;
			&amp;quot;nameOfAct&amp;quot;: &amp;quot;title&amp;quot;,&lt;br /&gt;
			&amp;quot;url&amp;quot;: &amp;quot;url&amp;quot;,&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;company&amp;quot;: &amp;quot;publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;studio&amp;quot;: &amp;quot;publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;network&amp;quot;: &amp;quot;publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;distributor&amp;quot;: &amp;quot;publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;repository&amp;quot;: &amp;quot;publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;publisher&amp;quot;: &amp;quot;publisher&amp;quot;,&lt;br /&gt;
			&amp;quot;organisation&amp;quot;: &amp;quot;work&amp;quot;,&lt;br /&gt;
			&amp;quot;programTitle&amp;quot;: &amp;quot;work&amp;quot;,&lt;br /&gt;
			&amp;quot;publicationTitle&amp;quot;: &amp;quot;work&amp;quot;,&lt;br /&gt;
			&amp;quot;dictionaryTitle&amp;quot;: &amp;quot;work&amp;quot;,&lt;br /&gt;
			&amp;quot;encyclopediaTitle&amp;quot;: &amp;quot;work&amp;quot;,&lt;br /&gt;
			&amp;quot;bookTitle&amp;quot;: &amp;quot;work&amp;quot;,&lt;br /&gt;
			&amp;quot;date&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;dateEnacted&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;dateDecided&amp;quot;: &amp;quot;date&amp;quot;,&lt;br /&gt;
			&amp;quot;accessDate&amp;quot;: &amp;quot;access-date&amp;quot;,&lt;br /&gt;
			&amp;quot;archiveUrl&amp;quot;: &amp;quot;archive-url&amp;quot;,&lt;br /&gt;
			&amp;quot;archiveDate&amp;quot;: &amp;quot;archive-date&amp;quot;,&lt;br /&gt;
			&amp;quot;repositoryLocation&amp;quot;: &amp;quot;place&amp;quot;,&lt;br /&gt;
			&amp;quot;place&amp;quot;: &amp;quot;place&amp;quot;,&lt;br /&gt;
			&amp;quot;ISSN&amp;quot;: [&lt;br /&gt;
				&amp;quot;issn&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;ISBN&amp;quot;: [&lt;br /&gt;
				&amp;quot;isbn&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;PMCID&amp;quot;: &amp;quot;pmc&amp;quot;,&lt;br /&gt;
			&amp;quot;PMID&amp;quot;: &amp;quot;pmid&amp;quot;,&lt;br /&gt;
			&amp;quot;oclc&amp;quot;: &amp;quot;oclc&amp;quot;,&lt;br /&gt;
			&amp;quot;archiveID&amp;quot;: &amp;quot;id&amp;quot;,&lt;br /&gt;
			&amp;quot;identifier&amp;quot;: &amp;quot;id&amp;quot;,&lt;br /&gt;
			&amp;quot;pages&amp;quot;: &amp;quot;pages&amp;quot;,&lt;br /&gt;
			&amp;quot;firstPage&amp;quot;: &amp;quot;pages&amp;quot;,&lt;br /&gt;
			&amp;quot;codePages&amp;quot;: &amp;quot;pages&amp;quot;,&lt;br /&gt;
			&amp;quot;volume&amp;quot;: &amp;quot;volume&amp;quot;,&lt;br /&gt;
			&amp;quot;reporterVolume&amp;quot;: &amp;quot;volume&amp;quot;,&lt;br /&gt;
			&amp;quot;codeVolume&amp;quot;: &amp;quot;volume&amp;quot;,&lt;br /&gt;
			&amp;quot;series&amp;quot;: &amp;quot;series&amp;quot;,&lt;br /&gt;
			&amp;quot;seriesNumber&amp;quot;: &amp;quot;issue&amp;quot;,&lt;br /&gt;
			&amp;quot;episodeNumber&amp;quot;: &amp;quot;issue&amp;quot;,&lt;br /&gt;
			&amp;quot;billNumber&amp;quot;: &amp;quot;issue&amp;quot;,&lt;br /&gt;
			&amp;quot;documentNumber&amp;quot;: &amp;quot;issue&amp;quot;,&lt;br /&gt;
			&amp;quot;publicLawNumber&amp;quot;: &amp;quot;issue&amp;quot;,&lt;br /&gt;
			&amp;quot;docketNumber&amp;quot;: &amp;quot;issue&amp;quot;,&lt;br /&gt;
			&amp;quot;issue&amp;quot;: &amp;quot;issue&amp;quot;,&lt;br /&gt;
			&amp;quot;format&amp;quot;: &amp;quot;format&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;type&amp;quot;,&lt;br /&gt;
			&amp;quot;genre&amp;quot;: &amp;quot;type&amp;quot;,&lt;br /&gt;
			&amp;quot;letterType&amp;quot;: &amp;quot;type&amp;quot;,&lt;br /&gt;
			&amp;quot;mapType&amp;quot;: &amp;quot;type&amp;quot;,&lt;br /&gt;
			&amp;quot;DOI&amp;quot;: &amp;quot;doi&amp;quot;,&lt;br /&gt;
			&amp;quot;language&amp;quot;: &amp;quot;language&amp;quot;,&lt;br /&gt;
			&amp;quot;podcaster&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;cartographer&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;interviewee&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;performer&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;programmer&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;sponsor&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;artist&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;director&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;contributor&amp;quot;: &amp;quot;others&amp;quot;,&lt;br /&gt;
			&amp;quot;author&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first&amp;quot;,&lt;br /&gt;
					&amp;quot;last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first2&amp;quot;,&lt;br /&gt;
					&amp;quot;last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first3&amp;quot;,&lt;br /&gt;
					&amp;quot;last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first4&amp;quot;,&lt;br /&gt;
					&amp;quot;last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first5&amp;quot;,&lt;br /&gt;
					&amp;quot;last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first6&amp;quot;,&lt;br /&gt;
					&amp;quot;last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first7&amp;quot;,&lt;br /&gt;
					&amp;quot;last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first8&amp;quot;,&lt;br /&gt;
					&amp;quot;last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;first9&amp;quot;,&lt;br /&gt;
					&amp;quot;last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;translator&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first2&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last2&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first3&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last3&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first4&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last4&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first5&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last5&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first6&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last6&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first7&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last7&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first8&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last8&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;translator-first9&amp;quot;,&lt;br /&gt;
					&amp;quot;translator-last9&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;editor&amp;quot;: [&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor2-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor2-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor3-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor3-last&amp;quot;&lt;br /&gt;
				],&lt;br /&gt;
				[&lt;br /&gt;
					&amp;quot;editor4-first&amp;quot;,&lt;br /&gt;
					&amp;quot;editor4-last&amp;quot;&lt;br /&gt;
				]&lt;br /&gt;
			]&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;{{_ |_=_}}&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;last&amp;quot;,&lt;br /&gt;
		&amp;quot;first&amp;quot;,&lt;br /&gt;
		&amp;quot;title&amp;quot;,&lt;br /&gt;
		&amp;quot;title-link&amp;quot;,&lt;br /&gt;
		&amp;quot;vauthors&amp;quot;,&lt;br /&gt;
		&amp;quot;collaboration&amp;quot;,&lt;br /&gt;
		&amp;quot;date&amp;quot;,&lt;br /&gt;
		&amp;quot;work&amp;quot;,&lt;br /&gt;
		&amp;quot;interviewer&amp;quot;,&lt;br /&gt;
		&amp;quot;volume&amp;quot;,&lt;br /&gt;
		&amp;quot;issue&amp;quot;,&lt;br /&gt;
		&amp;quot;minutes&amp;quot;,&lt;br /&gt;
		&amp;quot;time&amp;quot;,&lt;br /&gt;
		&amp;quot;time-caption&amp;quot;,&lt;br /&gt;
		&amp;quot;page&amp;quot;,&lt;br /&gt;
		&amp;quot;pages&amp;quot;,&lt;br /&gt;
		&amp;quot;publication-date&amp;quot;,&lt;br /&gt;
		&amp;quot;df&amp;quot;,&lt;br /&gt;
		&amp;quot;year&amp;quot;,&lt;br /&gt;
		&amp;quot;postscript&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask2&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask3&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask4&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask5&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask6&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask7&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask8&amp;quot;,&lt;br /&gt;
		&amp;quot;author-mask9&amp;quot;,&lt;br /&gt;
		&amp;quot;display-editors&amp;quot;,&lt;br /&gt;
		&amp;quot;orig-date&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last2&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first2&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link2&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask2&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last3&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first3&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link3&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask3&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last4&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first4&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link4&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask4&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last5&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first5&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link5&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask5&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last6&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first6&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link6&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask6&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last7&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first7&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link7&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask7&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last8&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first8&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link8&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask8&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-last9&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-first9&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-link9&amp;quot;,&lt;br /&gt;
		&amp;quot;editor-mask9&amp;quot;,&lt;br /&gt;
		&amp;quot;trans-title&amp;quot;,&lt;br /&gt;
		&amp;quot;script-title&amp;quot;,&lt;br /&gt;
		&amp;quot;trans-chapter&amp;quot;,&lt;br /&gt;
		&amp;quot;type&amp;quot;,&lt;br /&gt;
		&amp;quot;url&amp;quot;,&lt;br /&gt;
		&amp;quot;access-date&amp;quot;,&lt;br /&gt;
		&amp;quot;archive-url&amp;quot;,&lt;br /&gt;
		&amp;quot;archive-date&amp;quot;,&lt;br /&gt;
		&amp;quot;archive-format&amp;quot;,&lt;br /&gt;
		&amp;quot;url-status&amp;quot;,&lt;br /&gt;
		&amp;quot;series&amp;quot;,&lt;br /&gt;
		&amp;quot;at&amp;quot;,&lt;br /&gt;
		&amp;quot;no-pp&amp;quot;,&lt;br /&gt;
		&amp;quot;chapter&amp;quot;,&lt;br /&gt;
		&amp;quot;script-chapter&amp;quot;,&lt;br /&gt;
		&amp;quot;chapter-url&amp;quot;,&lt;br /&gt;
		&amp;quot;chapter-format&amp;quot;,&lt;br /&gt;
		&amp;quot;others&amp;quot;,&lt;br /&gt;
		&amp;quot;veditors&amp;quot;,&lt;br /&gt;
		&amp;quot;edition&amp;quot;,&lt;br /&gt;
		&amp;quot;place&amp;quot;,&lt;br /&gt;
		&amp;quot;publication-place&amp;quot;,&lt;br /&gt;
		&amp;quot;publisher&amp;quot;,&lt;br /&gt;
		&amp;quot;language&amp;quot;,&lt;br /&gt;
		&amp;quot;format&amp;quot;,&lt;br /&gt;
		&amp;quot;arxiv&amp;quot;,&lt;br /&gt;
		&amp;quot;asin&amp;quot;,&lt;br /&gt;
		&amp;quot;asin-tld&amp;quot;,&lt;br /&gt;
		&amp;quot;bibcode&amp;quot;,&lt;br /&gt;
		&amp;quot;biorxiv&amp;quot;,&lt;br /&gt;
		&amp;quot;citeseerx&amp;quot;,&lt;br /&gt;
		&amp;quot;doi&amp;quot;,&lt;br /&gt;
		&amp;quot;doi-broken-date&amp;quot;,&lt;br /&gt;
		&amp;quot;isbn&amp;quot;,&lt;br /&gt;
		&amp;quot;issn&amp;quot;,&lt;br /&gt;
		&amp;quot;eissn&amp;quot;,&lt;br /&gt;
		&amp;quot;hdl&amp;quot;,&lt;br /&gt;
		&amp;quot;jfm&amp;quot;,&lt;br /&gt;
		&amp;quot;jstor&amp;quot;,&lt;br /&gt;
		&amp;quot;lccn&amp;quot;,&lt;br /&gt;
		&amp;quot;mr&amp;quot;,&lt;br /&gt;
		&amp;quot;oclc&amp;quot;,&lt;br /&gt;
		&amp;quot;ol&amp;quot;,&lt;br /&gt;
		&amp;quot;osti&amp;quot;,&lt;br /&gt;
		&amp;quot;pmc&amp;quot;,&lt;br /&gt;
		&amp;quot;pmid&amp;quot;,&lt;br /&gt;
		&amp;quot;s2cid&amp;quot;,&lt;br /&gt;
		&amp;quot;rfc&amp;quot;,&lt;br /&gt;
		&amp;quot;ssrn&amp;quot;,&lt;br /&gt;
		&amp;quot;zbl&amp;quot;,&lt;br /&gt;
		&amp;quot;id&amp;quot;,&lt;br /&gt;
		&amp;quot;quote&amp;quot;,&lt;br /&gt;
		&amp;quot;ref&amp;quot;,&lt;br /&gt;
		&amp;quot;name-list-style&amp;quot;,&lt;br /&gt;
		&amp;quot;display-authors&amp;quot;,&lt;br /&gt;
		&amp;quot;last2&amp;quot;,&lt;br /&gt;
		&amp;quot;first2&amp;quot;,&lt;br /&gt;
		&amp;quot;last3&amp;quot;,&lt;br /&gt;
		&amp;quot;first3&amp;quot;,&lt;br /&gt;
		&amp;quot;last4&amp;quot;,&lt;br /&gt;
		&amp;quot;first4&amp;quot;,&lt;br /&gt;
		&amp;quot;last5&amp;quot;,&lt;br /&gt;
		&amp;quot;first5&amp;quot;,&lt;br /&gt;
		&amp;quot;last6&amp;quot;,&lt;br /&gt;
		&amp;quot;first6&amp;quot;,&lt;br /&gt;
		&amp;quot;last7&amp;quot;,&lt;br /&gt;
		&amp;quot;first7&amp;quot;,&lt;br /&gt;
		&amp;quot;last8&amp;quot;,&lt;br /&gt;
		&amp;quot;first8&amp;quot;,&lt;br /&gt;
		&amp;quot;last9&amp;quot;,&lt;br /&gt;
		&amp;quot;first9&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link2&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link3&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link4&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link5&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link6&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link7&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link8&amp;quot;,&lt;br /&gt;
		&amp;quot;author-link9&amp;quot;,&lt;br /&gt;
		&amp;quot;editor2-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor2-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor3-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor3-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor4-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor4-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor5-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor5-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor6-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor6-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor7-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor7-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor8-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor8-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor9-last&amp;quot;,&lt;br /&gt;
		&amp;quot;editor9-first&amp;quot;,&lt;br /&gt;
		&amp;quot;editor2-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor3-link&amp;quot;,&lt;br /&gt;
		&amp;quot;editor4-link&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last2&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first2&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last3&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first3&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last4&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first4&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last5&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first5&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last6&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first6&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last7&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first7&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last8&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first8&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-last9&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-first9&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link2&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link3&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link4&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link5&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link6&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link7&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link8&amp;quot;,&lt;br /&gt;
		&amp;quot;translator-link9&amp;quot;,&lt;br /&gt;
		&amp;quot;url-access&amp;quot;,&lt;br /&gt;
		&amp;quot;doi-access&amp;quot;,&lt;br /&gt;
		&amp;quot;via&amp;quot;,&lt;br /&gt;
		&amp;quot;bibcode-access&amp;quot;,&lt;br /&gt;
		&amp;quot;jstor-access&amp;quot;,&lt;br /&gt;
		&amp;quot;s2cid-access&amp;quot;,&lt;br /&gt;
		&amp;quot;agency&amp;quot;,&lt;br /&gt;
		&amp;quot;department&amp;quot;,&lt;br /&gt;
		&amp;quot;mode&amp;quot;,&lt;br /&gt;
		&amp;quot;hdl-access&amp;quot;,&lt;br /&gt;
		&amp;quot;ismn&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UF-COinS}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Wikipedia:Citation templates]]&lt;br /&gt;
* [[Wikipedia:Inline citation]]&lt;br /&gt;
* [[Wikipedia:Parenthetical referencing]]&lt;br /&gt;
* For a comparison of citations using templates with citations written freehand, see [[Wikipedia:Citing sources/Example edits for different methods#Footnotes|Wikipedia:Citing sources/Example edits for different methods §&amp;amp;nbsp;Footnotes]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
{{Wikipedia referencing}}&lt;br /&gt;
{{Wikipedia help pages}}&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories go below this line, please; interwikis go to Wikidata, thank you! --&amp;gt;&lt;br /&gt;
[[Category:Citation Style 2 templates]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Documentation&amp;diff=1119</id>
		<title>Modul:Documentation</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Documentation&amp;diff=1119"/>
		<updated>2026-09-10T13:37:40Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{documentation}}.&lt;br /&gt;
&lt;br /&gt;
-- Get required modules.&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
-- Get the config table.&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Documentation/config&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Often-used functions.&lt;br /&gt;
local ugsub = mw.ustring.gsub&lt;br /&gt;
local format = mw.ustring.format&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--&lt;br /&gt;
-- These are defined as local functions, but are made available in the p&lt;br /&gt;
-- table for testing purposes.&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function message(cfgKey, valArray, expectType)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Gets a message from the cfg table and formats it if appropriate.&lt;br /&gt;
	-- The function raises an error if the value from the cfg table is not&lt;br /&gt;
	-- of the type expectType. The default type for expectType is &#039;string&#039;.&lt;br /&gt;
	-- If the table valArray is present, strings such as $1, $2 etc. in the&lt;br /&gt;
	-- message are substituted with values from the table keys [1], [2] etc.&lt;br /&gt;
	-- For example, if the message &amp;quot;foo-message&amp;quot; had the value &#039;Foo $2 bar $1.&#039;,&lt;br /&gt;
	-- message(&#039;foo-message&#039;, {&#039;baz&#039;, &#039;qux&#039;}) would return &amp;quot;Foo qux bar baz.&amp;quot;&lt;br /&gt;
	--]]&lt;br /&gt;
	local msg = cfg[cfgKey]&lt;br /&gt;
	expectType = expectType or &#039;string&#039;&lt;br /&gt;
	if type(msg) ~= expectType then&lt;br /&gt;
		error(&#039;message: type error in message cfg.&#039; .. cfgKey .. &#039; (&#039; .. expectType .. &#039; expected, got &#039; .. type(msg) .. &#039;)&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if not valArray then&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getMessageVal(match)&lt;br /&gt;
		match = tonumber(match)&lt;br /&gt;
		return valArray[match] or error(&#039;message: no value found for key $&#039; .. match .. &#039; in message cfg.&#039; .. cfgKey, 4)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ugsub(msg, &#039;$([1-9][0-9]*)&#039;, getMessageVal)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.message = message&lt;br /&gt;
&lt;br /&gt;
local function makeWikilink(page, display)&lt;br /&gt;
	if display then&lt;br /&gt;
		return format(&#039;[[%s|%s]]&#039;, page, display)&lt;br /&gt;
	else&lt;br /&gt;
		return format(&#039;[[%s]]&#039;, page)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeWikilink = makeWikilink&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat, sort)&lt;br /&gt;
	local catns = mw.site.namespaces[14].name&lt;br /&gt;
	return makeWikilink(catns .. &#039;:&#039; .. cat, sort)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeCategoryLink = makeCategoryLink&lt;br /&gt;
&lt;br /&gt;
local function makeUrlLink(url, display)&lt;br /&gt;
	return format(&#039;[%s %s]&#039;, url, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeUrlLink = makeUrlLink&lt;br /&gt;
&lt;br /&gt;
local function makeToolbar(...)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local lim = select(&#039;#&#039;, ...)&lt;br /&gt;
	if lim &amp;lt; 1 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1, lim do&lt;br /&gt;
		ret[#ret + 1] = select(i, ...)&lt;br /&gt;
	end&lt;br /&gt;
	-- &#039;documentation-toolbar&#039;&lt;br /&gt;
	return format(&lt;br /&gt;
		&#039;&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;(%s)&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
		message(&#039;toolbar-class&#039;),&lt;br /&gt;
		table.concat(ret, &#039; &amp;amp;#124; &#039;)&lt;br /&gt;
	)&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
p.makeToolbar = makeToolbar&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Argument processing&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame, {&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
				if type(value) == &#039;string&#039; then&lt;br /&gt;
					value = value:match(&#039;^%s*(.-)%s*$&#039;) -- Remove whitespace.&lt;br /&gt;
					if key == &#039;heading&#039; or value ~= &#039;&#039; then&lt;br /&gt;
						return value&lt;br /&gt;
					else&lt;br /&gt;
						return nil&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					return value&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
		return p[funcName](args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Entry points&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.nonexistent(frame)&lt;br /&gt;
	if mw.title.getCurrentTitle().subpageText == &#039;testcases&#039; then&lt;br /&gt;
		return frame:expandTemplate{title = &#039;module test cases notice&#039;}&lt;br /&gt;
	else&lt;br /&gt;
		return p.main(frame)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.main = makeInvokeFunc(&#039;_main&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- This function defines logic flow for the module.&lt;br /&gt;
	-- @args - table of arguments passed by the user&lt;br /&gt;
	--]]&lt;br /&gt;
	local env = p.getEnvironment(args)&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root&lt;br /&gt;
		:wikitext(p._getModuleWikitext(args, env))&lt;br /&gt;
		:wikitext(p.protectionTemplate(env))&lt;br /&gt;
		:wikitext(p.sandboxNotice(args, env))&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			-- &#039;documentation-container&#039;&lt;br /&gt;
			:addClass(message(&#039;container&#039;))&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;complementary&#039;)&lt;br /&gt;
			:attr(&#039;aria-labelledby&#039;, args.heading ~= &#039;&#039; and &#039;documentation-heading&#039; or nil)&lt;br /&gt;
			:attr(&#039;aria-label&#039;, args.heading == &#039;&#039; and &#039;Documentation&#039; or nil)&lt;br /&gt;
			:newline()&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				-- &#039;documentation&#039;&lt;br /&gt;
				:addClass(message(&#039;main-div-classes&#039;))&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(p._startBox(args, env))&lt;br /&gt;
				:wikitext(p._content(args, env))&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					-- &#039;documentation-clear&#039;&lt;br /&gt;
					:addClass(message(&#039;clear&#039;))&lt;br /&gt;
					:done()&lt;br /&gt;
				:newline()&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext(p._endBox(args, env))&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(p.addTrackingCategories(env))&lt;br /&gt;
	-- &#039;Module:Documentation/styles.css&#039;&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag (&lt;br /&gt;
		&#039;templatestyles&#039;, &#039;&#039;, {src=cfg[&#039;templatestyles&#039;]&lt;br /&gt;
	}) .. tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Environment settings&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.getEnvironment(args)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Returns a table with information about the environment, including title&lt;br /&gt;
	-- objects and other namespace- or path-related data.&lt;br /&gt;
	-- @args - table of arguments passed by the user&lt;br /&gt;
	--&lt;br /&gt;
	-- Title objects include:&lt;br /&gt;
	-- env.title - the page we are making documentation for (usually the current title)&lt;br /&gt;
	-- env.templateTitle - the template (or module, file, etc.)&lt;br /&gt;
	-- env.docTitle - the /doc subpage.&lt;br /&gt;
	-- env.sandboxTitle - the /sandbox subpage.&lt;br /&gt;
	-- env.testcasesTitle - the /testcases subpage.&lt;br /&gt;
	--&lt;br /&gt;
	-- Data includes:&lt;br /&gt;
	-- env.protectionLevels - the protection levels table of the title object.&lt;br /&gt;
	-- env.subjectSpace - the number of the title&#039;s subject namespace.&lt;br /&gt;
	-- env.docSpace - the number of the namespace the title puts its documentation in.&lt;br /&gt;
	-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.&lt;br /&gt;
	-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.&lt;br /&gt;
	-- &lt;br /&gt;
	-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value&lt;br /&gt;
	-- returned will be nil.&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	local env, envFuncs = {}, {}&lt;br /&gt;
&lt;br /&gt;
	-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value&lt;br /&gt;
	-- returned by that function is memoized in the env table so that we don&#039;t call any of the functions&lt;br /&gt;
	-- more than once. (Nils won&#039;t be memoized.)&lt;br /&gt;
	setmetatable(env, {&lt;br /&gt;
		__index = function (t, key)&lt;br /&gt;
			local envFunc = envFuncs[key]&lt;br /&gt;
			if envFunc then&lt;br /&gt;
				local success, val = pcall(envFunc)&lt;br /&gt;
				if success then&lt;br /&gt;
					env[key] = val -- Memoise the value.&lt;br /&gt;
					return val&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	})	&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.title()&lt;br /&gt;
		-- The title object for the current page, or a test page passed with args.page.&lt;br /&gt;
		local title&lt;br /&gt;
		local titleArg = args.page&lt;br /&gt;
		if titleArg then&lt;br /&gt;
			title = mw.title.new(titleArg)&lt;br /&gt;
		else&lt;br /&gt;
			title = mw.title.getCurrentTitle()&lt;br /&gt;
		end&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.templateTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- The template (or module, etc.) title object.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;sandbox-subpage&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
		-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		local subjectSpace = env.subjectSpace&lt;br /&gt;
		local title = env.title&lt;br /&gt;
		local subpage = title.subpageText&lt;br /&gt;
		if subpage == message(&#039;sandbox-subpage&#039;) or subpage == message(&#039;testcases-subpage&#039;) or (subpage == message(&#039;doc-subpage&#039;) and mw.title.getCurrentTitle().namespace == env.docSpace) then&lt;br /&gt;
			return mw.title.makeTitle(subjectSpace, title.baseText)&lt;br /&gt;
		else&lt;br /&gt;
			return mw.title.makeTitle(subjectSpace, title.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object of the /doc subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;doc-subpage&#039; --&amp;gt; &#039;doc&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		local title = env.title&lt;br /&gt;
		local docname = args[1] -- User-specified doc page.&lt;br /&gt;
		local docpage&lt;br /&gt;
		if docname then&lt;br /&gt;
			docpage = docname&lt;br /&gt;
		else&lt;br /&gt;
			docpage = env.docpageBase .. &#039;/&#039; .. message(&#039;doc-subpage&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		return mw.title.new(docpage)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.sandboxTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /sandbox subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;sandbox-subpage&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &#039;/&#039; .. message(&#039;sandbox-subpage&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.testcasesTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /testcases subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &#039;/&#039; .. message(&#039;testcases-subpage&#039;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.protectionLevels()&lt;br /&gt;
		-- The protection levels table of the title object.&lt;br /&gt;
		return env.title.protectionLevels&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.subjectSpace()&lt;br /&gt;
		-- The subject namespace number.&lt;br /&gt;
		return mw.site.namespaces[env.title.namespace].subject.id&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docSpace()&lt;br /&gt;
		-- The documentation namespace number. For most namespaces this is the&lt;br /&gt;
		-- same as the subject namespace. However, pages in the Article, File,&lt;br /&gt;
		-- MediaWiki or Category namespaces must have their /doc, /sandbox and&lt;br /&gt;
		-- /testcases pages in talk space.&lt;br /&gt;
		local subjectSpace = env.subjectSpace&lt;br /&gt;
		if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then&lt;br /&gt;
			return subjectSpace + 1&lt;br /&gt;
		else&lt;br /&gt;
			return subjectSpace&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docpageBase()&lt;br /&gt;
		-- The base page of the /doc, /sandbox, and /testcases subpages.&lt;br /&gt;
		-- For some namespaces this is the talk page, rather than the template page.&lt;br /&gt;
		local templateTitle = env.templateTitle&lt;br /&gt;
		local docSpace = env.docSpace&lt;br /&gt;
		local docSpaceText = mw.site.namespaces[docSpace].name&lt;br /&gt;
		-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.&lt;br /&gt;
		return docSpaceText .. &#039;:&#039; .. templateTitle.text&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.compareUrl()&lt;br /&gt;
		-- Diff link between the sandbox and the main template using [[Special:ComparePages]].&lt;br /&gt;
		local templateTitle = env.templateTitle&lt;br /&gt;
		local sandboxTitle = env.sandboxTitle&lt;br /&gt;
		if templateTitle.exists and sandboxTitle.exists then&lt;br /&gt;
			local compareUrl = mw.uri.canonicalUrl(&lt;br /&gt;
				&#039;Special:ComparePages&#039;,&lt;br /&gt;
				{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}&lt;br /&gt;
			)&lt;br /&gt;
			return tostring(compareUrl)&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end		&lt;br /&gt;
&lt;br /&gt;
	return env&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Auxiliary templates&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.getModuleWikitext = makeInvokeFunc(&#039;_getModuleWikitext&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._getModuleWikitext(args, env)&lt;br /&gt;
	local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
	if currentTitle.contentModel ~= &#039;Scribunto&#039; then return end&lt;br /&gt;
	pcall(require, currentTitle.prefixedText) -- if it fails, we don&#039;t care&lt;br /&gt;
	local moduleWikitext =  package.loaded[&amp;quot;Module:Module wikitext&amp;quot;]&lt;br /&gt;
	if moduleWikitext then&lt;br /&gt;
		return moduleWikitext.main()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sandboxNotice(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Generates a sandbox notice for display above sandbox pages.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;sandbox-notice-image&#039; --&amp;gt; &#039;[[File:Sandbox.svg|50px|alt=|link=]]&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-blurb&#039; --&amp;gt; &#039;This is the $1 for $2.&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-diff-blurb&#039; --&amp;gt; &#039;This is the $1 for $2 ($3).&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-template&#039; --&amp;gt; &#039;[[Wikipedia:Template test cases|template sandbox]] page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-module&#039; --&amp;gt; &#039;[[Wikipedia:Template test cases|module sandbox]] page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-other&#039; --&amp;gt; &#039;sandbox page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-compare-link-display&#039; --&amp;gt; &#039;diff&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-testcases-blurb&#039; --&amp;gt; &#039;See also the companion subpage for $1.&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-testcases-link-display&#039; --&amp;gt; &#039;test cases&#039;&lt;br /&gt;
	-- &#039;sandbox-category&#039; --&amp;gt; &#039;Template sandboxes&#039;&lt;br /&gt;
	-- &#039;module-sandbox-category&#039; --&amp;gt; &#039;Module sandboxes&#039;&lt;br /&gt;
	-- &#039;other-sandbox-category&#039; --&amp;gt; &#039;Sandboxes outside of template or module namespace&#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local sandboxTitle = env.sandboxTitle&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not (subjectSpace and title and sandboxTitle and templateTitle&lt;br /&gt;
		and mw.title.equals(title, sandboxTitle)) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- Build the table of arguments to pass to {{ombox}}. We need just two fields, &amp;quot;image&amp;quot; and &amp;quot;text&amp;quot;.&lt;br /&gt;
	local omargs = {}&lt;br /&gt;
	omargs.image = message(&#039;sandbox-notice-image&#039;)&lt;br /&gt;
	-- Get the text. We start with the opening blurb, which is something like&lt;br /&gt;
	-- &amp;quot;This is the template sandbox for [[Template:Foo]] (diff).&amp;quot;&lt;br /&gt;
	local text = &#039;__EXPECTUNUSEDTEMPLATE__&#039;&lt;br /&gt;
	local pagetype, sandboxCat&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-template&#039;)&lt;br /&gt;
		sandboxCat = message(&#039;sandbox-category&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-module&#039;)&lt;br /&gt;
		sandboxCat = message(&#039;module-sandbox-category&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-other&#039;)&lt;br /&gt;
		sandboxCat = message(&#039;other-sandbox-category&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local templateLink = makeWikilink(templateTitle.prefixedText)&lt;br /&gt;
	local compareUrl = env.compareUrl&lt;br /&gt;
	if compareUrl then&lt;br /&gt;
		local compareDisplay = message(&#039;sandbox-notice-compare-link-display&#039;)&lt;br /&gt;
		local compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		text = text .. message(&#039;sandbox-notice-diff-blurb&#039;, {pagetype, templateLink, compareLink})&lt;br /&gt;
	else&lt;br /&gt;
		text = text .. message(&#039;sandbox-notice-blurb&#039;, {pagetype, templateLink})&lt;br /&gt;
	end&lt;br /&gt;
	-- Get the test cases page blurb if the page exists. This is something like&lt;br /&gt;
	-- &amp;quot;See also the companion subpage for [[Template:Foo/testcases|test cases]].&amp;quot;&lt;br /&gt;
	local testcasesTitle = env.testcasesTitle&lt;br /&gt;
	if testcasesTitle and testcasesTitle.exists then&lt;br /&gt;
		if testcasesTitle.contentModel == &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
			local testcasesLinkDisplay = message(&#039;sandbox-notice-testcases-link-display&#039;)&lt;br /&gt;
			local testcasesRunLinkDisplay = message(&#039;sandbox-notice-testcases-run-link-display&#039;)&lt;br /&gt;
			local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)&lt;br /&gt;
			local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)&lt;br /&gt;
			text = text .. &#039;&amp;lt;br /&amp;gt;&#039; .. message(&#039;sandbox-notice-testcases-run-blurb&#039;, {testcasesLink, testcasesRunLink})&lt;br /&gt;
		else&lt;br /&gt;
			local testcasesLinkDisplay = message(&#039;sandbox-notice-testcases-link-display&#039;)&lt;br /&gt;
			local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)&lt;br /&gt;
			text = text .. &#039;&amp;lt;br /&amp;gt;&#039; .. message(&#039;sandbox-notice-testcases-blurb&#039;, {testcasesLink})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Add the sandbox to the sandbox category.&lt;br /&gt;
	omargs.text = text .. makeCategoryLink(sandboxCat)&lt;br /&gt;
&lt;br /&gt;
	-- &#039;documentation-clear&#039;&lt;br /&gt;
	return &#039;&amp;lt;div class=&amp;quot;&#039; .. message(&#039;clear&#039;) .. &#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
		.. require(&#039;Module:Message box&#039;).main(&#039;ombox&#039;, omargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.protectionTemplate(env)&lt;br /&gt;
	-- Generates the padlock icon in the top right.&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;protection-template&#039; --&amp;gt; &#039;pp-template&#039;&lt;br /&gt;
	-- &#039;protection-template-args&#039; --&amp;gt; {docusage = &#039;yes&#039;}&lt;br /&gt;
	local protectionLevels = env.protectionLevels&lt;br /&gt;
	if not protectionLevels then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local editProt = protectionLevels.edit and protectionLevels.edit[1]&lt;br /&gt;
	local moveProt = protectionLevels.move and protectionLevels.move[1]&lt;br /&gt;
	if editProt then&lt;br /&gt;
		-- The page is edit-protected.&lt;br /&gt;
		return require(&#039;Module:Protection banner&#039;)._main{&lt;br /&gt;
			message(&#039;protection-reason-edit&#039;), small = true&lt;br /&gt;
		}&lt;br /&gt;
	elseif moveProt and moveProt ~= &#039;autoconfirmed&#039; then&lt;br /&gt;
		-- The page is move-protected but not edit-protected. Exclude move&lt;br /&gt;
		-- protection with the level &amp;quot;autoconfirmed&amp;quot;, as this is equivalent to&lt;br /&gt;
		-- no move protection at all.&lt;br /&gt;
		return require(&#039;Module:Protection banner&#039;)._main{&lt;br /&gt;
			action = &#039;move&#039;, small = true&lt;br /&gt;
		}&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Start box&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.startBox = makeInvokeFunc(&#039;_startBox&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._startBox(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- This function generates the start box.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make&lt;br /&gt;
	-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox&lt;br /&gt;
	-- which generate the box HTML.&lt;br /&gt;
	--]]&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local links&lt;br /&gt;
	local content = args.content&lt;br /&gt;
	if not content or args[1] then&lt;br /&gt;
		-- No need to include the links if the documentation is on the template page itself.&lt;br /&gt;
		local linksData = p.makeStartBoxLinksData(args, env)&lt;br /&gt;
		if linksData then&lt;br /&gt;
			links = p.renderStartBoxLinks(linksData)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Generate the start box html.&lt;br /&gt;
	local data = p.makeStartBoxData(args, env, links)&lt;br /&gt;
	if data then&lt;br /&gt;
		return p.renderStartBox(data)&lt;br /&gt;
	else&lt;br /&gt;
		-- User specified no heading.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeStartBoxLinksData(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Does initial processing of data to make the [view] [edit] [history] [purge] links.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;view-link-display&#039; --&amp;gt; &#039;view&#039;&lt;br /&gt;
	-- &#039;edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;history-link-display&#039; --&amp;gt; &#039;history&#039;&lt;br /&gt;
	-- &#039;purge-link-display&#039; --&amp;gt; &#039;purge&#039;&lt;br /&gt;
	-- &#039;module-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
	-- &#039;docpage-preload&#039; --&amp;gt; &#039;Template:Documentation/preload&#039;&lt;br /&gt;
	-- &#039;create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not title or not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if docTitle.isRedirect then &lt;br /&gt;
		docTitle = docTitle.redirectTarget&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create link if /doc doesn&#039;t exist.&lt;br /&gt;
	local preload = args.preload&lt;br /&gt;
	if not preload then&lt;br /&gt;
		if subjectSpace == 828 then -- Module namespace&lt;br /&gt;
			preload = message(&#039;module-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			preload = message(&#039;docpage-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		title = title,&lt;br /&gt;
		docTitle = docTitle,&lt;br /&gt;
		-- View, display, edit, and purge links if /doc exists.&lt;br /&gt;
		viewLinkDisplay = message(&#039;view-link-display&#039;),&lt;br /&gt;
		editLinkDisplay = message(&#039;edit-link-display&#039;),&lt;br /&gt;
		historyLinkDisplay = message(&#039;history-link-display&#039;),&lt;br /&gt;
		purgeLinkDisplay = message(&#039;purge-link-display&#039;),&lt;br /&gt;
		preload = preload,&lt;br /&gt;
		createLinkDisplay = message(&#039;create-link-display&#039;)&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderStartBoxLinks(data)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxLinksData&lt;br /&gt;
	--]]&lt;br /&gt;
	local docTitle = data.docTitle&lt;br /&gt;
	-- yes, we do intend to purge the template page on which the documentation appears&lt;br /&gt;
	local purgeLink = makeWikilink(&amp;quot;Special:Purge/&amp;quot; .. data.title.prefixedText, data.purgeLinkDisplay)&lt;br /&gt;
	&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)&lt;br /&gt;
		local editLink = makeWikilink(&amp;quot;Special:EditPage/&amp;quot; .. docTitle.prefixedText, data.editLinkDisplay)&lt;br /&gt;
		local historyLink = makeWikilink(&amp;quot;Special:PageHistory/&amp;quot; .. docTitle.prefixedText, data.historyLinkDisplay)&lt;br /&gt;
		return viewLink .. editLink .. historyLink .. purgeLink&lt;br /&gt;
	else&lt;br /&gt;
		local createLink = makeUrlLink(docTitle:canonicalUrl{action = &#039;edit&#039;, preload = data.preload}, data.createLinkDisplay)&lt;br /&gt;
		return createLink .. purgeLink&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeStartBoxData(args, env, links)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- @links - a string containing the [view][edit][history][purge] links - could be nil if there&#039;s an error.&lt;br /&gt;
	--&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;documentation-icon-wikitext&#039; --&amp;gt; &#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]&#039;&lt;br /&gt;
	-- &#039;template-namespace-heading&#039; --&amp;gt; &#039;Template documentation&#039;&lt;br /&gt;
	-- &#039;module-namespace-heading&#039; --&amp;gt; &#039;Module documentation&#039;&lt;br /&gt;
	-- &#039;file-namespace-heading&#039; --&amp;gt; &#039;Summary&#039;&lt;br /&gt;
	-- &#039;other-namespaces-heading&#039; --&amp;gt; &#039;Documentation&#039;&lt;br /&gt;
	-- &#039;testcases-create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not subjectSpace then&lt;br /&gt;
		-- Default to an &amp;quot;other namespaces&amp;quot; namespace, so that we get at least some output&lt;br /&gt;
		-- if an error occurs.&lt;br /&gt;
		subjectSpace = 2&lt;br /&gt;
	end&lt;br /&gt;
	local data = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Heading&lt;br /&gt;
	local heading = args.heading -- Blank values are not removed.&lt;br /&gt;
	if heading == &#039;&#039; then&lt;br /&gt;
		-- Don&#039;t display the start box if the heading arg is defined but blank.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if heading then&lt;br /&gt;
		data.heading = heading&lt;br /&gt;
	elseif subjectSpace == 10 then -- Template namespace&lt;br /&gt;
		data.heading = message(&#039;documentation-icon-wikitext&#039;) .. &#039; &#039; .. message(&#039;template-namespace-heading&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then -- Module namespace&lt;br /&gt;
		data.heading = message(&#039;documentation-icon-wikitext&#039;) .. &#039; &#039; .. message(&#039;module-namespace-heading&#039;)&lt;br /&gt;
	elseif subjectSpace == 6 then -- File namespace&lt;br /&gt;
		data.heading = message(&#039;file-namespace-heading&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		data.heading = message(&#039;other-namespaces-heading&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Heading CSS&lt;br /&gt;
	local headingStyle = args[&#039;heading-style&#039;]&lt;br /&gt;
	if headingStyle then&lt;br /&gt;
		data.headingStyleText = headingStyle&lt;br /&gt;
	else&lt;br /&gt;
		-- &#039;documentation-heading&#039;&lt;br /&gt;
		data.headingClass = message(&#039;main-div-heading-class&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Data for the [view][edit][history][purge] or [create] links.&lt;br /&gt;
	if links then&lt;br /&gt;
		-- &#039;mw-editsection-like plainlinks&#039;&lt;br /&gt;
		data.linksClass = message(&#039;start-box-link-classes&#039;)&lt;br /&gt;
		data.links = links&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderStartBox(data)&lt;br /&gt;
	-- Renders the start box html.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxData.&lt;br /&gt;
	local sbox = mw.html.create(&#039;div&#039;)&lt;br /&gt;
	sbox&lt;br /&gt;
		-- &#039;documentation-startbox&#039;&lt;br /&gt;
		:addClass(message(&#039;start-box-class&#039;))&lt;br /&gt;
		:newline()&lt;br /&gt;
		:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(data.headingClass)&lt;br /&gt;
			:attr(&#039;id&#039;, &#039;documentation-heading&#039;)&lt;br /&gt;
			:cssText(data.headingStyleText)&lt;br /&gt;
			:wikitext(data.heading)&lt;br /&gt;
	local links = data.links&lt;br /&gt;
	if links then&lt;br /&gt;
		sbox:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(data.linksClass)&lt;br /&gt;
			:attr(&#039;id&#039;, data.linksId)&lt;br /&gt;
			:wikitext(links)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(sbox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Documentation content&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.content = makeInvokeFunc(&#039;_content&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._content(args, env)&lt;br /&gt;
	-- Displays the documentation contents&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	local content = args.content&lt;br /&gt;
	if not content and docTitle and docTitle.exists then&lt;br /&gt;
		content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}&lt;br /&gt;
	end&lt;br /&gt;
	-- The line breaks below are necessary so that &amp;quot;=== Headings ===&amp;quot; at the start and end&lt;br /&gt;
	-- of docs are interpreted correctly.&lt;br /&gt;
	return &#039;\n&#039; .. (content or &#039;&#039;) .. &#039;\n&#039; &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.contentTitle = makeInvokeFunc(&#039;_contentTitle&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._contentTitle(args, env)&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not args.content and docTitle and docTitle.exists then&lt;br /&gt;
		return docTitle.prefixedText&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- End box&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.endBox = makeInvokeFunc(&#039;_endBox&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._endBox(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- This function generates the end box (also known as the link box).&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	--]=]&lt;br /&gt;
	&lt;br /&gt;
	-- Get environment data.&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not subjectSpace or not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- Check whether we should output the end box at all. Add the end&lt;br /&gt;
	-- box by default if the documentation exists or if we are in the&lt;br /&gt;
	-- user, module or template namespaces.&lt;br /&gt;
	local linkBox = args[&#039;link box&#039;]&lt;br /&gt;
	if linkBox == &#039;off&#039;&lt;br /&gt;
		or not (&lt;br /&gt;
			docTitle.exists&lt;br /&gt;
			or subjectSpace == 2&lt;br /&gt;
			or subjectSpace == 828&lt;br /&gt;
			or subjectSpace == 10&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Assemble the link box.&lt;br /&gt;
	local text = &#039;&#039;&lt;br /&gt;
	if linkBox then&lt;br /&gt;
		text = text .. linkBox&lt;br /&gt;
	else&lt;br /&gt;
		text = text .. (p.makeDocPageBlurb(args, env) or &#039;&#039;) -- &amp;quot;This documentation is transcluded from [[Foo]].&amp;quot; &lt;br /&gt;
		if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then&lt;br /&gt;
			-- We are in the user, template or module namespaces.&lt;br /&gt;
			-- Add sandbox and testcases links.&lt;br /&gt;
			-- &amp;quot;Editors can experiment in this template&#039;s sandbox and testcases pages.&amp;quot;&lt;br /&gt;
			text = text .. (p.makeExperimentBlurb(args, env) or &#039;&#039;) .. &#039;&amp;lt;br /&amp;gt;&#039;&lt;br /&gt;
			if not args.content and not args[1] then&lt;br /&gt;
				-- &amp;quot;Please add categories to the /doc subpage.&amp;quot;&lt;br /&gt;
				-- Don&#039;t show this message with inline docs or with an explicitly specified doc page,&lt;br /&gt;
				-- as then it is unclear where to add the categories.&lt;br /&gt;
				text = text .. (p.makeCategoriesBlurb(args, env) or &#039;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			text = text .. &#039; &#039; .. (p.makeSubpagesBlurb(args, env) or &#039;&#039;) --&amp;quot;Subpages of this template&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local box = mw.html.create(&#039;div&#039;)&lt;br /&gt;
	-- &#039;documentation-metadata&#039;&lt;br /&gt;
	box:attr(&#039;role&#039;, &#039;note&#039;)&lt;br /&gt;
		:addClass(message(&#039;end-box-class&#039;))&lt;br /&gt;
		-- &#039;plainlinks&#039;&lt;br /&gt;
		:addClass(message(&#039;end-box-plainlinks&#039;))&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:done()&lt;br /&gt;
&lt;br /&gt;
	return &#039;\n&#039; .. tostring(box)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeDocPageBlurb(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Makes the blurb &amp;quot;This documentation is transcluded from [[Template:Foo]] (edit, history)&amp;quot;.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;history-link-display&#039; --&amp;gt; &#039;history&#039;&lt;br /&gt;
	-- &#039;transcluded-from-blurb&#039; --&amp;gt; &lt;br /&gt;
	-- &#039;The above [[Wikipedia:Template documentation|documentation]] &lt;br /&gt;
	-- is [[Help:Transclusion|transcluded]] from $1.&#039;&lt;br /&gt;
	-- &#039;module-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
	-- &#039;create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;create-module-doc-blurb&#039; --&amp;gt;&lt;br /&gt;
	-- &#039;You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].&#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		-- /doc exists; link to it.&lt;br /&gt;
		local docLink = makeWikilink(docTitle.prefixedText)&lt;br /&gt;
		local editDisplay = message(&#039;edit-link-display&#039;)&lt;br /&gt;
		local editLink = makeWikilink(&amp;quot;Special:EditPage/&amp;quot; .. docTitle.prefixedText, editDisplay)&lt;br /&gt;
		local historyDisplay = message(&#039;history-link-display&#039;)&lt;br /&gt;
		local historyLink = makeWikilink(&amp;quot;Special:PageHistory/&amp;quot; .. docTitle.prefixedText, historyDisplay)&lt;br /&gt;
		return message(&#039;transcluded-from-blurb&#039;, {docLink})&lt;br /&gt;
			.. &#039; &#039;&lt;br /&gt;
			.. makeToolbar(editLink, historyLink)&lt;br /&gt;
			.. &#039;&amp;lt;br /&amp;gt;&#039;&lt;br /&gt;
	elseif env.subjectSpace == 828 then&lt;br /&gt;
		-- /doc does not exist; ask to create it.&lt;br /&gt;
		local createUrl = docTitle:canonicalUrl{action = &#039;edit&#039;, preload = message(&#039;module-preload&#039;)}&lt;br /&gt;
		local createDisplay = message(&#039;create-link-display&#039;)&lt;br /&gt;
		local createLink = makeUrlLink(createUrl, createDisplay)&lt;br /&gt;
		return message(&#039;create-module-doc-blurb&#039;, {createLink})&lt;br /&gt;
			.. &#039;&amp;lt;br /&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeExperimentBlurb(args, env)&lt;br /&gt;
	return &amp;quot;&amp;quot;;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeCategoriesBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the text &amp;quot;Please add categories to the /doc subpage.&amp;quot;&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;doc-link-display&#039; --&amp;gt; &#039;/doc&#039;&lt;br /&gt;
	-- &#039;add-categories-blurb&#039; --&amp;gt; &#039;Please add categories to the $1 subpage.&#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local docPathLink = makeWikilink(docTitle.prefixedText, message(&#039;doc-link-display&#039;))&lt;br /&gt;
	return message(&#039;add-categories-blurb&#039;, {docPathLink})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeSubpagesBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the &amp;quot;Subpages of this template&amp;quot; link.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;template-pagetype&#039; --&amp;gt; &#039;template&#039;&lt;br /&gt;
	-- &#039;module-pagetype&#039; --&amp;gt; &#039;module&#039;&lt;br /&gt;
	-- &#039;default-pagetype&#039; --&amp;gt; &#039;page&#039;&lt;br /&gt;
	-- &#039;subpages-link-display&#039; --&amp;gt; &#039;Subpages of this $1&#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	if not subjectSpace or not templateTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local pagetype&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetype = message(&#039;template-pagetype&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message(&#039;module-pagetype&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message(&#039;default-pagetype&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local subpagesLink = makeWikilink(&lt;br /&gt;
		&#039;Special:PrefixIndex/&#039; .. templateTitle.prefixedText .. &#039;/&#039;,&lt;br /&gt;
		message(&#039;subpages-link-display&#039;, {pagetype})&lt;br /&gt;
	)&lt;br /&gt;
	return message(&#039;subpages-blurb&#039;, {subpagesLink})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Tracking categories&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.addTrackingCategories(env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Check if {{documentation}} is transcluded on a /doc or /testcases page.&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;display-strange-usage-category&#039; --&amp;gt; true&lt;br /&gt;
	-- &#039;doc-subpage&#039; --&amp;gt; &#039;doc&#039;&lt;br /&gt;
	-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;strange-usage-category&#039; --&amp;gt; &#039;Wikipedia pages with strange ((documentation)) usage&#039;&lt;br /&gt;
	-- &lt;br /&gt;
	-- /testcases pages in the module namespace are not categorised, as they may have&lt;br /&gt;
	-- {{documentation}} transcluded automatically.&lt;br /&gt;
	--]]&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not title or not subjectSpace then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local subpage = title.subpageText&lt;br /&gt;
	if message(&#039;display-strange-usage-category&#039;, nil, &#039;boolean&#039;)&lt;br /&gt;
		and (&lt;br /&gt;
			subpage == message(&#039;doc-subpage&#039;)&lt;br /&gt;
			or subjectSpace ~= 828 and subpage == message(&#039;testcases-subpage&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		return makeCategoryLink(message(&#039;strange-usage-category&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Format_link&amp;diff=1118</id>
		<title>Modul:Format link</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Format_link&amp;diff=1118"/>
		<updated>2026-09-10T13:34:25Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
-- Format link&lt;br /&gt;
--&lt;br /&gt;
-- Makes a wikilink from the given link and display values. Links are escaped&lt;br /&gt;
-- with colons if necessary, and links to sections are detected and displayed&lt;br /&gt;
-- with &amp;quot; § &amp;quot; as a separator rather than the standard MediaWiki &amp;quot;#&amp;quot;. Used in&lt;br /&gt;
-- the {{format link}} template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg&lt;br /&gt;
local mArguments -- lazily initialise [[Module:Arguments]]&lt;br /&gt;
local mError -- lazily initialise [[Module:Error]]&lt;br /&gt;
local yesno -- lazily initialise [[Module:Yesno]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getArgs(frame)&lt;br /&gt;
	-- Fetches the arguments from the parent frame. Whitespace is trimmed and&lt;br /&gt;
	-- blanks are removed.&lt;br /&gt;
	mArguments = require(&#039;Module:Arguments&#039;)&lt;br /&gt;
	return mArguments.getArgs(frame, {parentOnly = true})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeInitialColon(s)&lt;br /&gt;
	-- Removes the initial colon from a string, if present.&lt;br /&gt;
	return s:match(&#039;^:?(.*)&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function maybeItalicize(s, shouldItalicize)&lt;br /&gt;
	-- Italicize s if s is a string and the shouldItalicize parameter is true.&lt;br /&gt;
	if s and shouldItalicize then&lt;br /&gt;
		return &#039;&amp;lt;i&amp;gt;&#039; .. s .. &#039;&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseLink(link)&lt;br /&gt;
	-- Parse a link and return a table with the link&#039;s components.&lt;br /&gt;
	-- These components are:&lt;br /&gt;
	-- - link: the link, stripped of any initial colon (always present)&lt;br /&gt;
	-- - page: the page name (may be nil)&lt;br /&gt;
	-- - section: the section name (may be nil)&lt;br /&gt;
	-- - display: the display text, if manually entered after a pipe (may be nil)&lt;br /&gt;
	link = removeInitialColon(link)&lt;br /&gt;
&lt;br /&gt;
	-- Find whether a faux display value has been added with the {{!}} magic&lt;br /&gt;
	-- word.&lt;br /&gt;
	local prePipe, display = link:match(&#039;^(.-)|(.*)$&#039;)&lt;br /&gt;
	link = prePipe or link&lt;br /&gt;
&lt;br /&gt;
	-- Find the page, if it exists.&lt;br /&gt;
	-- For links like [[#Bar]], the page will be nil.&lt;br /&gt;
	local preHash, postHash = link:match(&#039;^(.-)#(.*)$&#039;)&lt;br /&gt;
	local page&lt;br /&gt;
	if not preHash then&lt;br /&gt;
		-- We have a link like [[Foo]].&lt;br /&gt;
		page = link&lt;br /&gt;
	elseif preHash ~= &#039;&#039; then&lt;br /&gt;
		-- We have a link like [[Foo#Bar]].&lt;br /&gt;
		page = preHash&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Find the section, if it exists.&lt;br /&gt;
	local section&lt;br /&gt;
	if postHash and postHash ~= &#039;&#039; then&lt;br /&gt;
		section = postHash&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return {&lt;br /&gt;
		link = link,&lt;br /&gt;
		page = page,&lt;br /&gt;
		section = section,&lt;br /&gt;
		display = display,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatDisplay(parsed, options)&lt;br /&gt;
	-- Formats a display string based on a parsed link table (matching the&lt;br /&gt;
	-- output of parseLink) and an options table (matching the input options for&lt;br /&gt;
	-- _formatLink).&lt;br /&gt;
	local page = maybeItalicize(parsed.page, options.italicizePage)&lt;br /&gt;
	local section = maybeItalicize(parsed.section, options.italicizeSection)&lt;br /&gt;
	if (not section) then&lt;br /&gt;
		return page&lt;br /&gt;
	elseif (not page) then&lt;br /&gt;
		return mw.ustring.format(&#039;§&amp;amp;nbsp;%s&#039;, section)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.format(&#039;%s §&amp;amp;nbsp;%s&#039;, page, section)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function missingArgError(target)&lt;br /&gt;
	mError = require(&#039;Module:Error&#039;)&lt;br /&gt;
	return mError.error{message =&lt;br /&gt;
		&#039;Error: no link or target specified! ([[&#039; .. target .. &#039;#Errors|help]])&#039;&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Main functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.formatLink(frame)&lt;br /&gt;
	-- The formatLink export function, for use in templates.&lt;br /&gt;
	yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local link = args[1] or args.link&lt;br /&gt;
	local target = args[3] or args.target&lt;br /&gt;
	if not (link or target) then&lt;br /&gt;
		return missingArgError(&#039;Template:Format link&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return p._formatLink{&lt;br /&gt;
		link = link,&lt;br /&gt;
		display = args[2] or args.display,&lt;br /&gt;
		target = target,&lt;br /&gt;
		italicizePage = yesno(args.italicizepage),&lt;br /&gt;
		italicizeSection = yesno(args.italicizesection),&lt;br /&gt;
		categorizeMissing = args.categorizemissing&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatLink(options)&lt;br /&gt;
	-- The formatLink export function, for use in modules.&lt;br /&gt;
	checkType(&#039;_formatLink&#039;, 1, options, &#039;table&#039;)&lt;br /&gt;
	local function check(key, expectedType) --for brevity&lt;br /&gt;
		checkTypeForNamedArg(&lt;br /&gt;
			&#039;_formatLink&#039;, key, options[key], expectedType or &#039;string&#039;, true&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	check(&#039;link&#039;)&lt;br /&gt;
	check(&#039;display&#039;)&lt;br /&gt;
	check(&#039;target&#039;)&lt;br /&gt;
	check(&#039;italicizePage&#039;, &#039;boolean&#039;)&lt;br /&gt;
	check(&#039;italicizeSection&#039;, &#039;boolean&#039;)&lt;br /&gt;
	check(&#039;categorizeMissing&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Normalize link and target and check that at least one is present&lt;br /&gt;
	if options.link == &#039;&#039; then options.link = nil end&lt;br /&gt;
	if options.target == &#039;&#039; then options.target = nil end&lt;br /&gt;
	if not (options.link or options.target) then&lt;br /&gt;
		return missingArgError(&#039;Module:Format link&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local parsed = parseLink(options.link)&lt;br /&gt;
	local display = options.display or parsed.display&lt;br /&gt;
	local catMissing = options.categorizeMissing&lt;br /&gt;
	local category = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	-- Find the display text&lt;br /&gt;
	if not display then display = formatDisplay(parsed, options) end&lt;br /&gt;
&lt;br /&gt;
	-- Handle the target option if present&lt;br /&gt;
	if options.target then&lt;br /&gt;
		local parsedTarget = parseLink(options.target)&lt;br /&gt;
		parsed.link = parsedTarget.link&lt;br /&gt;
		parsed.page = parsedTarget.page&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Test if page exists if a diagnostic category is specified&lt;br /&gt;
	if catMissing and (mw.ustring.len(catMissing) &amp;gt; 0) then&lt;br /&gt;
		local title = nil&lt;br /&gt;
		if parsed.page then title = mw.title.new(parsed.page) end&lt;br /&gt;
		if title and (not title.isExternal) then&lt;br /&gt;
			local success, exists = pcall(function() return title.exists end)&lt;br /&gt;
			if success and not exists then&lt;br /&gt;
				category = mw.ustring.format(&#039;[[Category:%s]]&#039;, catMissing)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Prepend colon if appropriate&lt;br /&gt;
	local colon = parsed.page and &amp;quot;:&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	-- Format the result as a link&lt;br /&gt;
	if parsed.link == display then&lt;br /&gt;
		return mw.ustring.format(&#039;[[%s%s]]%s&#039;, colon, parsed.link, category)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.format(&#039;[[%s%s|%s]]%s&#039;, colon, parsed.link, display, category)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Derived convenience functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.formatPages(options, pages)&lt;br /&gt;
	-- Formats an array of pages using formatLink and the given options table,&lt;br /&gt;
	-- and returns it as an array. Nil values are not allowed.&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for i, page in ipairs(pages) do&lt;br /&gt;
		ret[i] = p._formatLink{&lt;br /&gt;
			link = page,&lt;br /&gt;
			categorizeMissing = options.categorizeMissing,&lt;br /&gt;
			italicizePage = options.italicizePage,&lt;br /&gt;
			italicizeSection = options.italicizeSection&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Moduldiskusjon:Citation/CS1/Suggestions&amp;diff=1116</id>
		<title>Moduldiskusjon:Citation/CS1/Suggestions</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Moduldiskusjon:Citation/CS1/Suggestions&amp;diff=1116"/>
		<updated>2026-09-10T13:31:27Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Help talk:Citation Style 1]]&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Citation/CS1/Suggestions/doc&amp;diff=1114</id>
		<title>Modul:Citation/CS1/Suggestions/doc</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Citation/CS1/Suggestions/doc&amp;diff=1114"/>
		<updated>2026-09-10T13:31:27Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#lst:Module:Citation/CS1/doc|header}}&lt;br /&gt;
&lt;br /&gt;
This is a list of suggested alternatives to use when an unknown parameter is &lt;br /&gt;
encountered by a citation template.  When an unknown parameter is found within&lt;br /&gt;
a citation template an error message is generated, and when possible the&lt;br /&gt;
software makes a suggestion for what the user may have meant by consulting this&lt;br /&gt;
list of common mistakes and typos.&lt;br /&gt;
&lt;br /&gt;
Each entry takes the form:&lt;br /&gt;
[&#039;bad input parameter&#039;] = &#039;suggested parameter to use&#039;&lt;br /&gt;
&lt;br /&gt;
The bad input parameter will have been transformed to lower case before&lt;br /&gt;
checking this list, so all input forms on this list should be written in lowercase.&lt;br /&gt;
&lt;br /&gt;
{{#lst:Module:Citation/CS1/doc|module_components_table}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Citation/CS1/doc&amp;diff=1112</id>
		<title>Modul:Citation/CS1/doc</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Citation/CS1/doc&amp;diff=1112"/>
		<updated>2026-09-10T13:31:27Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;section begin=header /&amp;gt;{{sandbox other||&lt;br /&gt;
{{#switch:{{FULLPAGENAME}}&lt;br /&gt;
|Module:Citation/CS1/Suggestions={{high-use |article-space=yes |no-percent=yes}}&lt;br /&gt;
|#default={{high-risk |article-space=yes |no-percent=yes}}&lt;br /&gt;
}}&lt;br /&gt;
{{Module rating|p}}&lt;br /&gt;
{{cascade-protected template|page=module}}&lt;br /&gt;
{{Transwiki guide|Module:Citation/CS1/doc/Importing the Module:Citation/CS1 suite to your wiki}}&lt;br /&gt;
{{#ifeq:{{FULLPAGENAME}}|Module:Citation/CS1|{{Uses TemplateStyles|Module:Citation/CS1/styles.css}}}}}}&amp;lt;!-- if pagename does not contain sandbox &lt;br /&gt;
--&amp;gt;&amp;lt;section end=header /&amp;gt;&lt;br /&gt;
This module and associated sub-modules support the {{cs1}} and {{cs2}} citation templates.  In general, it is not intended to be called directly, but is called by one of the core CS1 and CS2 templates.&lt;br /&gt;
&amp;lt;section begin=module_components_table /&amp;gt;&lt;br /&gt;
These files comprise the module support for CS1|2 citation templates:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 1em auto 1em auto;&amp;quot;&lt;br /&gt;
|+CS1 {{pipe}} CS2 modules&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|live!!colspan=&amp;quot;2&amp;quot;|sandbox!!diff!!description&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;8&amp;quot;| [[File:Full-protection-shackle.svg|20px|alt=Gold padlock|link=|sysop]] || [[Module:Citation/CS1]] || [[Module:Citation/CS1/sandbox]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/sandbox&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2Fsandbox&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff]|| Rendering and support functions&lt;br /&gt;
|-&lt;br /&gt;
| [[Module:Citation/CS1/Configuration]] || [[Module:Citation/CS1/Configuration/sandbox]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/Configuration/sandbox&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1%2FConfiguration&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2FConfiguration%2Fsandbox&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff]|| Translation tables; error and identifier handlers&lt;br /&gt;
|-&lt;br /&gt;
| [[Module:Citation/CS1/Whitelist]] || [[Module:Citation/CS1/Whitelist/sandbox]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/Whitelist/sandbox&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1%2FWhitelist&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2FWhitelist%2Fsandbox&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff]|| List of active and deprecated CS1{{pipe}}2 parameters&lt;br /&gt;
|-&lt;br /&gt;
| [[Module:Citation/CS1/Date validation]] || [[Module:Citation/CS1/Date validation/sandbox]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/Date_validation/sandbox&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1%2FDate+validation&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2FDate+validation%2Fsandbox&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff] || Date format validation functions&lt;br /&gt;
|-&lt;br /&gt;
| [[Module:Citation/CS1/Identifiers]] || [[Module:Citation/CS1/Identifiers/sandbox]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/Identifiers/sandbox&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1%2FIdentifiers&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2FIdentifiers%2Fsandbox&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff]|| Functions that support the named identifiers (ISBN, DOI, PMID, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| [[Module:Citation/CS1/Utilities]] || [[Module:Citation/CS1/Utilities/sandbox]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/Utilities/sandbox&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1%2FUtilities&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2FUtilities%2Fsandbox&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff]|| Common functions and tables&lt;br /&gt;
|-&lt;br /&gt;
| [[Module:Citation/CS1/COinS]] || [[Module:Citation/CS1/COinS/sandbox]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/COinS/sandbox&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1%2FCOinS&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2FCOinS%2Fsandbox&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff]|| Functions that render a CS1{{pipe}}2 template&#039;s metadata&lt;br /&gt;
|-&lt;br /&gt;
| [[Module:Citation/CS1/styles.css]] || [[Module:Citation/CS1/sandbox/styles.css]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/sandbox/styles.css&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1%2Fstyles.css&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2Fsandbox%2Fstyles.css&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff]|| [[CSS]] styles applied to the CS1{{pipe}}2 templates&lt;br /&gt;
|-&lt;br /&gt;
| [[File:Template-protection-shackle.svg|20px|alt=Silver padlock|link=|auto confirmed]] || [[Module:Citation/CS1/Suggestions]] || [[Module:Citation/CS1/Suggestions/sandbox]] || {{Plain link|url=https://en.wikipedia.org/w/index.php?title=Module:Citation/CS1/Suggestions/sandbox&amp;amp;action=edit|name=[edit&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;}} ||[https://en.wikipedia.org/wiki/Special:ComparePages?page1=Module%3ACitation%2FCS1%2FSuggestions&amp;amp;rev1=&amp;amp;page2=Module%3ACitation%2FCS1%2FSuggestions%2Fsandbox&amp;amp;rev2=&amp;amp;action=&amp;amp;diffonly=&amp;amp;unhide= diff]|| List that maps common erroneous parameter names to valid parameter names&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=module_components_table /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other documentation:&lt;br /&gt;
* [[Module talk:Citation/CS1/Feature requests]]&lt;br /&gt;
* [[Module talk:Citation/CS1/COinS]]&lt;br /&gt;
* [[Module:Cs1 documentation support]] – a set of functions (some experimental) that extract information from the module suite for the purpose of documenting CS1|2&lt;br /&gt;
** [[Module:Citation/CS1/doc/Category list]] – lists of category names taken directly from [[Module:Citation/CS1/Configuration]] and [[Module:Citation/CS1/Configuration/sandbox]]&lt;br /&gt;
testcases&lt;br /&gt;
*[[Module:Citation/CS1/testcases]] ([[Module talk:Citation/CS1/testcases|run]])&lt;br /&gt;
*[[Module:Citation/CS1/testcases/errors]] ([[Module talk:Citation/CS1/testcases/errors|run]]) – error and maintenance messaging&lt;br /&gt;
*[[Module:Citation/CS1/testcases/dates]] ([[Module talk:Citation/CS1/testcases/dates|run]]) – date validation&lt;br /&gt;
*[[Module:Citation/CS1/testcases/identifiers]] ([[Module talk:Citation/CS1/testcases/identifiers|run]]) – identifiers&lt;br /&gt;
*[[Module:Citation/CS1/testcases/anchor]] ([[Module talk:Citation/CS1/testcases/anchor|run]]) – CITEREF anchors&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{sandbox other||&lt;br /&gt;
{{#ifeq:{{FULLPAGENAME}}|Module:CS1|{{Rcat shell|{{R to subpage}} {{R from shortcut}}}}}}&lt;br /&gt;
[[Category:Modules that add a tracking category]]&lt;br /&gt;
{{#ifeq:{{SUBPAGENAME}}|Identifiers|[[Category:Modules using data from Wikidata]]}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[Category:Module documentation pages]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Hjelpdiskusjon:Citation_Style_1&amp;diff=1110</id>
		<title>Hjelpdiskusjon:Citation Style 1</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Hjelpdiskusjon:Citation_Style_1&amp;diff=1110"/>
		<updated>2026-09-10T13:31:24Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Deny citation bot April 2015 because we often post broken citations here intentionally and do not want them to be &amp;quot;fixed&amp;quot;. To avoid AnomieBOT substing, use |demo= or |nosubst= instead of adding it here. --&amp;gt;{{bots|deny=Citation bot,SporkBot,Cewbot}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{skip to bottom}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{talk header|display_title=Help:Citation Style 1 and the CS1 templates|WT:CS1}}&lt;br /&gt;
{{central|text=the talk pages for all Citation Style 1 and Citation Style 2 templates and modules redirect here. A list of those talk pages and their historical archives can be found [[Help talk:Citation Style 1/Centralized discussions|here]].}}&lt;br /&gt;
{{WikiProject banner shell|collapsed=yes|1=&lt;br /&gt;
{{Wikipedia Help Project|importance=High}}&lt;br /&gt;
{{WikiProject Academic Journals}}&lt;br /&gt;
{{WikiProject Magazines}}&lt;br /&gt;
}}&lt;br /&gt;
{{User:ClueBot III/ArchiveThis&lt;br /&gt;
|archiveprefix=Help talk:Citation Style 1/Archive&lt;br /&gt;
|format= %%i&lt;br /&gt;
|age=480&lt;br /&gt;
|header={{Automatic archive navigator}}&lt;br /&gt;
|headerlevel=2&lt;br /&gt;
|maxarchsize=200000&lt;br /&gt;
|minkeepthreads=6&lt;br /&gt;
|numberstart=69&lt;br /&gt;
|minarchthreads=2&lt;br /&gt;
|archivenow=&amp;lt;nowiki&amp;gt;{{User:ClueBot III/ArchiveNow}},{{resolved}},{{done}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{FAQ|page=Help talk:Citation Style 1/FAQ}}&lt;br /&gt;
&lt;br /&gt;
==Cite book: Year of publication==&lt;br /&gt;
Year of publication states &amp;quot;Year of the source being referenced&amp;quot;&lt;br /&gt;
Shouldn&#039;t this be &amp;quot;Year of source&amp;quot;/&amp;quot;Year of writing&amp;quot; or something like this?&lt;br /&gt;
&lt;br /&gt;
Publication date seems to already be used for date when something is published...I think cite book should be clearer about which fields are referring to Publication, and which fields are referring to Writing [[User:Lcporschen|Lcporschen]] ([[User talk:Lcporschen|talk]]) 07:36, 15 July 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I&#039;ve never understood why {{para|publication-date}} exists, {{para|date}} should be used for publication date and {{para|orig-date}} for original date. It seems overly complex to have a third field that needlessly complicates things. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 12:56, 15 July 2026 (UTC)&lt;br /&gt;
::Since at least April 2020, I have believed that {{para|publication-date}} should go away ([[Help_talk:Citation_Style_1/Archive_65#c-Trappist_the_monk-2020-04-05T21:59:00.000Z-Francis_Schonken-2020-04-06T10:07:00.000Z|here]]).  Similarly, I hold that {{para|publication-place}} should go away.  There have been several discussions on this topic which are collected at {{slink|Help_talk:Citation_Style_1/Archive_86#place,_when_publication-place_is_redundant_with_work}}.&lt;br /&gt;
::—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 14:04, 15 July 2026 (UTC)&lt;br /&gt;
:::Agree, both simply confuse the matter and are redundant. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 15:24, 15 July 2026 (UTC)&lt;br /&gt;
::Can it not be useful if there are several editions or versions of a work? {{para|date}} for the year of the edition quoted, {{para|orig-date}} for the 1st edition, {{para|publication-date}} for the publication date if it is a later re-edition, publication in another series etc. [[User:Keriluamox|Keriluamox]] ([[User talk:Keriluamox|talk]]) 16:51, 15 July 2026 (UTC)&lt;br /&gt;
:::References exist for verification, you only need to give details of the work you have not it&#039;s publication history. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 17:15, 15 July 2026 (UTC)&lt;br /&gt;
::::Taking that argument to the extreme, the sole ISBN would suffice. I find it useful to give &#039;&#039;some&#039;&#039; information about the work. Dating a 1900 work from 2020 because that’s the edition used feels off, if not slightly misleading. [[User:Keriluamox|Keriluamox]] ([[User talk:Keriluamox|talk]]) 06:49, 16 July 2026 (UTC)&lt;br /&gt;
:::::The date is the date of the edition you are using. If the version from 2020 is a facsimile of the 1900 edition, you could cite it as 1900. Otherwise, if it&#039;s a new edition it will have new page numbers, etc. –[[user:jacobolus|jacobolus]] [[user_talk:jacobolus|(t)]] 17:48, 30 July 2026 (UTC)&lt;br /&gt;
::Take [[Crime and Punishment]] or many other books from around that time. They single volume is different than  when the installment was published. More so light novels which are often written in installments on a website, then bought and printed by a publisher. Given that many books take time to publish, especially anthologies, having all three are useful. date is for the creation, orig-date is for when it was originally released, and publication-date is for when this exact publication was made. [[User:Jerodlycett|Jerod Lycett]] ([[User talk:Jerodlycett|talk]]) 06:30, 21 July 2026 (UTC)&lt;br /&gt;
:::Wouldn&#039;t it then make sense to rename &#039;date&#039; to &#039;creation-date&#039;? [[User:Lcporschen|Lcporschen]] ([[User talk:Lcporschen|talk]]) 07:56, 30 July 2026 (UTC)&lt;br /&gt;
::::The use of {{para|publication-date}} is quite rare, in most cases {{para|date}} is used for current date and {{para|orig-date}} for the original publication date. So it wouldn&#039;t make sense to change {{para|date}}. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 14:22, 30 July 2026 (UTC)&lt;br /&gt;
:This is about the &amp;lt;code&amp;gt;&amp;amp;lt;skeptical air quotes&amp;gt;&amp;lt;/code&amp;gt;documentation&amp;lt;code&amp;gt;&amp;amp;lt;/skeptical air quotes&amp;gt;&amp;lt;/code&amp;gt; at {{slink|Template:Cite_book#TemplateData}}?  The template&#039;s actual documentation for {{para|publication-date}} is at {{slink|Template:Cite_book#Date}}.  The template data are not protected so if you think that it can be improved, please improve it.&lt;br /&gt;
:—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 14:04, 15 July 2026 (UTC)&lt;br /&gt;
::It&#039;s actually at [[Template:Cite book#Publisher]], or more specifically, [[Template:Cite book#csdoc_publication-date]]. --[[User:Redrose64|&amp;lt;span style=&amp;quot;color:#a80000; background:#ffeeee; text-decoration:inherit&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;rose64]] &amp;amp;#x1f339; ([[User talk:Redrose64|talk]]) 21:31, 15 July 2026 (UTC)&lt;br /&gt;
::{{replyto|ActivelyDisinterested}} {{para|publication-date}} is mainly for non-daily periodicals where the cover date is often later than the date when the periodical goes on sale. For example, a magazine with cover date August 2026 might be on sale already. --[[User:Redrose64|&amp;lt;span style=&amp;quot;color:#a80000; background:#ffeeee; text-decoration:inherit&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;rose64]] &amp;amp;#x1f339; ([[User talk:Redrose64|talk]]) 21:01, 15 July 2026 (UTC)&lt;br /&gt;
:::In taxonomy, the date when a book or journal was first published can be very important to establish precedence. For various reasons the year/date on the title page is not always the year/date when the work was first distributed. In such cases I use date= for the date on the title page and publication-date= for the date when the work was first distributed. - [[User:Aa77zz|Aa77zz]] ([[User talk:Aa77zz|talk]]) 21:23, 15 July 2026 (UTC)&lt;br /&gt;
::::How do you know when it was first distributed? [[User:JMF|𝕁𝕄𝔽]] ([[User talk:JMF|talk]]) 22:05, 15 July 2026 (UTC)&lt;br /&gt;
::::Date/publication-date are exactly the same thing. If you want the original date use {{para|orig-date}}. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 16:04, 30 July 2026 (UTC)&lt;br /&gt;
:::::This is also what I thought, when looking at the documentation ([[Template:Cite book#TemplateData]]):&lt;br /&gt;
:::::parameter &#039;date&#039; = &#039;Date of publication&#039;&lt;br /&gt;
:::::parameter &#039;publication-date&#039; = &#039;Publication date&#039;&lt;br /&gt;
:::::To me, this looks exactly the same.&lt;br /&gt;
:::::Given that other people have already expressed that &#039;publication-date&#039; should go away, I&#039;m just not gonna use &#039;publication-date&#039; anymore (I don&#039;t care this much about dates of book publishing), and try to put the info I have in the fields &#039;date&#039; and &#039;orig-date&#039;. Thanks for clearing this up. [[User:Lcporschen|Lcporschen]] ([[User talk:Lcporschen|talk]]) 16:57, 30 July 2026 (UTC)&lt;br /&gt;
:::::{{ec}}&lt;br /&gt;
:::::Just to be pedantic, {{para|date}} and {{para|publication-date}} are {{em|only}} {{tq|exactly the same thing}} when they are used alone.  Then both are used in the same template they are treated as the same thing when they hold the same value in which case, {{para|publication-date}} is ignored:&lt;br /&gt;
::::::&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline=&amp;quot;1&amp;quot;&amp;gt;{{cite book |title=Title |date=2026 |publication-date=2026}}&amp;lt;/syntaxhighlight&amp;gt; → {{cite book |title=Title |date=2026 |publication-date=2026}}&lt;br /&gt;
:::::when {{para|date}} and {{para|publication-date}} hold different values:&lt;br /&gt;
::::::&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline=&amp;quot;1&amp;quot;&amp;gt;{{cite book |title=Title |date=2026 |publication-date=2025}}&amp;lt;/syntaxhighlight&amp;gt; → {{cite book |title=Title |date=2026 |publication-date=2025}}&lt;br /&gt;
:::::Do we really, {{em|really}}, need both?  I think that we don&#039;t and that we should make {{para|date}} and {{para|publication-date}} exact aliases of one another {{small|({{para|location}} / {{para|place}} and {{para|publication-place}} should also be exact aliases of one another)}}.&lt;br /&gt;
:::::—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 17:12, 30 July 2026 (UTC)&lt;br /&gt;
::::::+1 support for that. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 17:38, 30 July 2026 (UTC)&lt;br /&gt;
::::::I agree &#039;date&#039; and &#039;publication-date&#039; should be aliases of each other [[User:Lcporschen|Lcporschen]] ([[User talk:Lcporschen|talk]]) 14:27, 3 August 2026 (UTC)&lt;br /&gt;
::::::As for &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;place&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;publication-place&amp;lt;/code&amp;gt;, that&#039;s what I came here for.&amp;lt;br/&amp;gt;&lt;br /&gt;
::::::The [[Template:Cite_book/doc]] is quite complex, probably contradictory… &amp;lt;br/&amp;gt;&lt;br /&gt;
::::::But in [[Template:Cite_book/doc#Publisher|#Publisher]] it says &amp;quot;Place: In earlier versions was the publication place; for compatibility will be treated as such if publication-place is absent&amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
::::::So aliasing those will be OK for older{{when?}} entries, but possibly not for newer; could we count{{how many?}} newer with both present?&lt;br /&gt;
:::::::So paralleling with &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;publication-date&amp;lt;/code&amp;gt;, which I suppose would have been introduced at the same time, how much will it fudge?&lt;br /&gt;
::::::[[User:Ponken|Ponken]] ([[User talk:Ponken|talk]]) 09:02, 19 August 2026 (UTC)&lt;br /&gt;
:::::::I like the idea of creation-date. Isn&#039;t the template not all about this? &lt;br /&gt;
:::::::&amp;quot;Title (published 2025). 2026&amp;quot; - is just not clearly understandable, instead rather a wtf (the postscript would be place for such curiosities when they are specifically relevant).&lt;br /&gt;
:::::::Sorry, if the discussion here is already closed. I just saw now how long the page goes down, wow. (There I will ask a question, for which I am here.) [[User:MenkinAlRire|MenkinAlRire]] 14:10, 31 August 2026 (UTC)&lt;br /&gt;
::::::::&amp;quot;Isn&#039;t the template not all about this?&amp;quot; I don&#039;t think so. The template, and citations in academic works generally, are about identifying the publication that is mentioned in the citing work. If the source says &amp;quot;July 2026&amp;quot; on the cover, that&#039;s what someone who wants to read the source will check to make sure they picked up the right issue of the magazine. If some Wikipedian in the magazine business happens to know it was printed April 15, 2026, and first offered for sale May 2, 2026, WE DON&#039;T CARE! [[User:Jc3s5h|Jc3s5h]] ([[User talk:Jc3s5h|talk]]) 14:33, 31 August 2026 (UTC)&lt;br /&gt;
:::::::::That wasn&#039;t my point (that I find irrelevant, too). The template is called speech, and there are several date one could consider: when it was written (there is only a &#039;&#039;location&#039;&#039; for this which translates to &amp;quot;written at&amp;quot;), when the speech was held, and when the text was published (better printed). With &amp;quot;all about this&amp;quot; I meant that a speech was once spoken, I guess, and that is its prime date. Historically, in many, if not the most cases, the impact of a speech came with its distribution in print. But today many lectcures ar recorded and published online. They are preserved as original oral documents as video or audio. So the event where the speech happened gains more importance versus its printed form (if there is one). (Below I discussed some points.) [[User:MenkinAlRire|MenkinAlRire]] 15:54, 31 August 2026 (UTC)&lt;br /&gt;
::::::::::&amp;quot;The template is called speech&amp;quot; – You should be aware that this talk-page serves as the talk-page of several templates which use *this* (sub-)template &amp;quot;Citation Style 1&amp;quot;. That is: if you click these templates&#039; talk-page link, you end up here. &#039;&#039;edit&#039;&#039; ALSO you are in the thread [[#Cite_book:_Year_of_publication]] here. / [[User:Ponken|Ponken]] ([[User talk:Ponken|talk]]) 09:46, 1 September 2026 (UTC)&lt;br /&gt;
:::::::::::I also don’t get why this one talk page serves for several templates, instead of each template just having it’s own talk page [[User:Lcporschen|Lcporschen]] ([[User talk:Lcporschen|talk]]) 09:54, 1 September 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Stripmarkers in titles with template mathematics ==&lt;br /&gt;
&lt;br /&gt;
It used to be the case that reference titles containing mathematical formulas should (when possible for the formula) use template-math {{tl|math}} in preference to LaTeX-math &amp;amp;lt;math&amp;amp;gt;, because when the reference title has an external link the template-math formula is properly blue-colored but the LaTeX-math formula is not. Now I am getting stripmarker errors from template-math whose only fix is to use html-formatting for the formula (very bad from the point of view of mathematical typesetting) or to use LaTeX-math (ok typesetting but wrong color for linked titles). Is there any explanation for why this broke and for whether there is any hope of ever getting properly blue-colored linked formulas in titles?&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
*With template-math and stripmarker errors:&lt;br /&gt;
**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{citation&lt;br /&gt;
 | last = Atneosen | first = Gail Adele&lt;br /&gt;
 | series = Ph.D. thesis&lt;br /&gt;
 | mr = 2617705&lt;br /&gt;
 | page = 79&lt;br /&gt;
 | publisher = [[Michigan State University]]&lt;br /&gt;
 | title = On the embeddability of compacta in {{mvar|n}}-books: intrinsic and extrinsic properties&lt;br /&gt;
 | url = http://gateway.proquest.com/openurl?url_ver=Z39.88-2004&amp;amp;rft_val_fmt=info:ofi/fmt:kev:mtx:dissertation&amp;amp;res_dat=xri:pqdiss&amp;amp;rft_dat=xri:pqdiss:6905835&lt;br /&gt;
 | year = 1968}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**{{citation&lt;br /&gt;
 | last = Atneosen | first = Gail Adele&lt;br /&gt;
 | series = Ph.D. thesis&lt;br /&gt;
 | mr = 2617705&lt;br /&gt;
 | page = 79&lt;br /&gt;
 | publisher = [[Michigan State University]]&lt;br /&gt;
 | title = On the embeddability of compacta in {{mvar|n}}-books: intrinsic and extrinsic properties&lt;br /&gt;
 | url = http://gateway.proquest.com/openurl?url_ver=Z39.88-2004&amp;amp;rft_val_fmt=info:ofi/fmt:kev:mtx:dissertation&amp;amp;res_dat=xri:pqdiss&amp;amp;rft_dat=xri:pqdiss:6905835&lt;br /&gt;
 | year = 1968}}&lt;br /&gt;
*With LaTeX-math and improperly colored title link:&lt;br /&gt;
**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{citation&lt;br /&gt;
 | last = Atneosen | first = Gail Adele&lt;br /&gt;
 | series = Ph.D. thesis&lt;br /&gt;
 | mr = 2617705&lt;br /&gt;
 | page = 79&lt;br /&gt;
 | publisher = [[Michigan State University]]&lt;br /&gt;
 | title = On the embeddability of compacta in &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-books: intrinsic and extrinsic properties&lt;br /&gt;
 | url = http://gateway.proquest.com/openurl?url_ver=Z39.88-2004&amp;amp;rft_val_fmt=info:ofi/fmt:kev:mtx:dissertation&amp;amp;res_dat=xri:pqdiss&amp;amp;rft_dat=xri:pqdiss:6905835&lt;br /&gt;
 | year = 1968}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**{{citation&lt;br /&gt;
 | last = Atneosen | first = Gail Adele&lt;br /&gt;
 | series = Ph.D. thesis&lt;br /&gt;
 | mr = 2617705&lt;br /&gt;
 | page = 79&lt;br /&gt;
 | publisher = [[Michigan State University]]&lt;br /&gt;
 | title = On the embeddability of compacta in &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-books: intrinsic and extrinsic properties&lt;br /&gt;
 | url = http://gateway.proquest.com/openurl?url_ver=Z39.88-2004&amp;amp;rft_val_fmt=info:ofi/fmt:kev:mtx:dissertation&amp;amp;res_dat=xri:pqdiss&amp;amp;rft_dat=xri:pqdiss:6905835&lt;br /&gt;
 | year = 1968}}&lt;br /&gt;
*Manually formatted using template-math (what I would like to see):&lt;br /&gt;
**&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Atneosen, Gail Adele (1968), &#039;&#039;[http://gateway.proquest.com/openurl?url_ver=Z39.88-2004&amp;amp;rft_val_fmt=info:ofi/fmt:kev:mtx:dissertation&amp;amp;res_dat=xri:pqdiss&amp;amp;rft_dat=xri:pqdiss:6905835 On the embeddability of compacta in {{mvar|n}}-books: intrinsic and extrinsic properties]&#039;&#039;, Ph.D. thesis, [[Michigan State University]], p. 79, {{mr|2617705}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
**Atneosen, Gail Adele (1968), &#039;&#039;[http://gateway.proquest.com/openurl?url_ver=Z39.88-2004&amp;amp;rft_val_fmt=info:ofi/fmt:kev:mtx:dissertation&amp;amp;res_dat=xri:pqdiss&amp;amp;rft_dat=xri:pqdiss:6905835 On the embeddability of compacta in {{mvar|n}}-books: intrinsic and extrinsic properties]&#039;&#039;, Ph.D. thesis, [[Michigan State University]], p. 79, {{mr|2617705}}&lt;br /&gt;
For some other macros in reference titles such as {{tl|TeX wordmark}} the LaTeX-math option is not available and the only solution I found that produced proper formatting was to forgo using the citation templates altogether and format the reference manually. Do we maybe have to go to that length for all citation templates containing mathematical formulas as well?&lt;br /&gt;
&lt;br /&gt;
Ping {{ping|Izno}} as I suspect they may know more about what is going on here. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 00:18, 10 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:{{tl|math}} (and most templates) have never been supported in this template series. I made a change to the template today which assumed this fact (and {{tl|mvar}} which uses {{tlx|COinS safe|n}} which says not to use that template in CS1) in service of making it so that &amp;lt;code&amp;gt;.texhtml&amp;lt;/code&amp;gt; [[MediaWiki talk:Common.css/to do#description|is controllable by The People at large]] rather than the gatekeepers of [[MediaWiki:Common.css]] (this is slightly tongue-in-cheek as I am one of those).&lt;br /&gt;
:{{tl|mvar}} can be trivially replaced with italics IMO. {{tl|math}}-the-template (not what it&#039;s wrapping) can be removed.&lt;br /&gt;
:I&#039;m slightly surprised no error is raised for the &amp;amp;lt;math&amp;gt; version as last I checked there were issues with that. I haven&#039;t been following this talk page closely though for some time so perhaps a change was made in the meantime to make that not error. [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 00:36, 10 August 2026 (UTC)&lt;br /&gt;
::Your opinion that {{tq|{{tl|mvar}} can be trivially replaced with italics}} mostly shows off your ignorance of mathematical typesetting. Variables should be set consistently in the same font as the rest of the mathematical formulas, which in general should be a serif font to properly distinguish symbols Il|1 (there are four different symbols in that block). Using plain html does not cut it. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 00:39, 10 August 2026 (UTC)&lt;br /&gt;
:::No, not ignorance. I knew precisely what your opinion would be and what my opinion on the point is. I also knew you would focus on that point rather than attempting to find a solution. [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 00:41, 10 August 2026 (UTC)&lt;br /&gt;
::::Ok, not ignorance, then: a deliberate disregard for mathematics. Not an improvement.&lt;br /&gt;
::::As for the idea that &amp;amp;lt;math&amp;amp;gt; should raise an error in titles: as advice for people titling their publications I would agree, but we have no time machine to do that. There are many titles where it is impossible to format the title without &amp;amp;lt;math&amp;amp;gt;. Here&#039;s one: {{citation | last1 = Benjamin | first1 = Arthur T. | author1-link = Arthur T. Benjamin | last2 = Orrison | first2 = M. E. | title = Two quick combinatorial proofs of &amp;lt;math&amp;gt;\textstyle \sum k^3 = {n+1\choose 2}^2&amp;lt;/math&amp;gt; | journal = [[College Mathematics Journal]] | year = 2002 | volume = 33 | issue = 5 | pages = 406–408 | url = http://www.math.hmc.edu/~orrison/research/papers/two_quick.pdf| doi = 10.2307/1559017 | jstor = 1559017 }}. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 00:44, 10 August 2026 (UTC)&lt;br /&gt;
:::::NB I don&#039;t want &amp;amp;lt;math&amp;gt; to error, if it works that is excellent since my impression is that we prefer that version of things in general. [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 00:46, 10 August 2026 (UTC)&lt;br /&gt;
::::::(Turns out &amp;amp;lt;math&amp;gt; still corrupts the metadata.) [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 00:48, 10 August 2026 (UTC)&lt;br /&gt;
:::::::I&#039;m sure there are people who care about the [[COinS]] metadata but I&#039;ve never been one of them. The citation templates mostly exist as a convenience to editors and a way to make citations more likely to be consistent and accurate; if they stop serving that function then we should stop using them and if COinS metadata gets in the way of providing that function then my preference would be to stop trying to make the cart drive the horse. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 00:56, 10 August 2026 (UTC)&lt;br /&gt;
::::::::I&#039;ve honestly stopped caring either way. I think there is continued value in emitting COinS. I think there are better things to do than to continue to be one of the people who sees it. It is among the reasons I toodled off from this talk page A While Ago. [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 01:01, 10 August 2026 (UTC)&lt;br /&gt;
::A solution could be at least for TemplateStyles tokens etc. they are hoisted outside the template and then we return to templates that still break the metadata but at least emit no errors on that point. We do something similar at [[Module:Navbox#L-526]]. [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 00:50, 10 August 2026 (UTC)&lt;br /&gt;
:I can revert while this is sorted as easily as anything but the category being emitted is nice to be able to find what pages are impacted by this (as it&#039;s hard to do so with [[Special:Search]] given timeouts and whatnot). [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 00:38, 10 August 2026 (UTC)&lt;br /&gt;
::Suggestion: rather than giving up on metadata altogether, add a {{para|coins|no}} parameter to the citation templates, so that we can still use citation templates on references that for whatever reason need to use coins-unsafe templates, instead of having to resort to manual formatting in such cases. I don&#039;t think the metadata was ever really correct for most of these, and it certainly wouldn&#039;t be present if the reference were forced to use manual formatting, so losing it wouldn&#039;t be much loss even for the people who use metadata. That would also make the cleanup much easier: instead of figuring out how to change the formula to use &amp;amp;lt;math&amp;amp;gt;, manually reformatting, or breaking the formatting by stripping the templates, just add the parameter. (I&#039;ve written the parameter lowercase both for consistency with other citation parameters and because I can never remember how to capitalize cOiNs.)&lt;br /&gt;
::Alternative suggestion, with even easier cleanup: automatically fall back to {{para|coins|no}} when an error would be generated. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 02:11, 10 August 2026 (UTC)&lt;br /&gt;
:See also:&lt;br /&gt;
:*{{slink|Wikipedia_talk:COinS#the_COINS_warning:_where_not_to_use,_exactly?}} and&lt;br /&gt;
:* {{slink|Help_talk:Citation_Style_1/Archive_100#COinS_pollution_shouldn&#039;t_be_a_problem}}.&lt;br /&gt;
:I proposed that, if we want to avoid metadata pollution, we should have a way of explicitly writing a machine-friendly version of the title separate from the human-friendly title (basically a separate non-rendering template to add inside any citation template which would replace the machine-readable COINS metadata with its content, while leaving the rest of the content of that attribute as human-visible rendered output). Telling users that they can&#039;t use any other templates or math tags etc. inside the parameters of citation templates seems like a generally bad setup. There&#039;s in my opinion no good way to write these citation titles without a math tag:&lt;br /&gt;
:* {{cite journal |last=Cayley |first=Arthur |author-link=Arthur Cayley |year=1862 |title=On the transcendent &amp;lt;math display=inline&amp;gt;\operatorname{gd} u = \tfrac{1}{i}\log \tan \bigl(\tfrac14\pi + \tfrac12 ui\bigr)&amp;lt;/math&amp;gt; |journal=Philosophical Magazine |series=4th Series |volume=24 |issue=158 |pages=19–21 |url=https://archive.org/details/londonedinburg4241862lond/page/19 |doi=10.1080/14786446208643307 }}&lt;br /&gt;
:* {{cite journal |last1=Euler |first1=Leonhard |year=1786 |title=De miris proprietatibus curvae elasticae sub aequatione &amp;lt;math display=inline&amp;gt;y = \int xx\,\mathrm{d}x \big/ \sqrt{1-x^4}&amp;lt;/math&amp;gt; contentae |trans-title=On the amazing properties of elastic curves contained in equation &amp;lt;math display=inline&amp;gt;y = \int xx\,\mathrm{d}x \big/ \sqrt{1-x^4}&amp;lt;/math&amp;gt; |journal=Acta Academiae Scientiarum Imperialis Petropolitanae |volume=1782 |issue=2 |pages=34–61 |language=la|url=https://archive.org/details/actaacademiae82impe/page/34/ }} E [https://scholarlycommons.pacific.edu/euler-works/605/ 605].&lt;br /&gt;
: In the second of those links, several other people pointed out that nobody apparently uses COINS for anything or cares about it, and recommended that instead we just ignore the problem and drop warnings about it.&lt;br /&gt;
: As an immediate step, I&#039;d recommend reverting the recent template warning. If the folks working on COINS stuff want something better, ideally they should work on doing a better job parsing the template output to make something machine readable. If they can&#039;t do so for some technical reason, then they should provide an alternative opt-in mechanism for human editors to provide separate human- and machine-readable outputs (and can e.g. try to recruit volunteer effort from someone else who cares to write the machine-readable translations of templates with corrupted metadata). But we should not sacrifice human legibility for the sake of unknown future scraper bots, or even force every Wikipedia editor who adds a citation that would benefit from internal template use to think about it. –[[user:jacobolus|jacobolus]] [[user_talk:jacobolus|(t)]] 05:01, 10 August 2026 (UTC)&lt;br /&gt;
::I think it is possible to safely remove strip markers from COinS. While conforming to [[MOS:TE]] and [[MOS:CONFORMTITLE]] is important, treating {{tag|templatestyles|open}} as an error seems to merely overlook improper markup while flagging valid markup (like math formulas) as erroneous. (Correctly identifying improper markup would likely require parsing the attributes of {{tag|span|open}}.) [[User:FlatLanguage|FlatLanguage]] ([[User talk:FlatLanguage|talk]]) 14:13, 10 August 2026 (UTC)&lt;br /&gt;
:::Personally I think [[MOS:CONFORMTITLE]] should be amended to allow the use of formatting templates inside citation templates, and we should figure out how to make that work technically instead of telling people not to do it. The most useful example I personally know that is currently recommended against is the {{t|ill}} template, which would be extremely useful to sometimes include in citation templates. –[[user:jacobolus|jacobolus]] [[user_talk:jacobolus|(t)]] 19:05, 10 August 2026 (UTC)&lt;br /&gt;
Please revert this error message ASAP. It is already leading editors such as [[User:Mojtabakd]] to uglify equations and violate [[MOS:MATH]] by replacing templated mathematics by plain-html with superscript characters: [[Special:Diff/1368753122]]. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 23:25, 10 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:It has been reverted, but I think this is only a temporary measure and doesn&#039;t solve the long-term problem. The new template styles system appears to make it unworkable merely to subst coins-problematic templates in titles. Can we maybe get a wider sample opinions on whether we should do one or more of the following?&lt;br /&gt;
:A. Stop generating coins metadata altogether, and stop forbidding stripmarkers in titles&lt;br /&gt;
:B. Stop generating coins metadata for references with stripmarkers, automatically, but emit a maintenance category; continue generating coins metadata for references for which this is not problematic&lt;br /&gt;
:C. Allow a parameter choice like coins=no that avoids generating coins metadata, and allows stripmarkers, for an individual citation&lt;br /&gt;
:D. Add parameters to the citation templates to allow overriding the coins metadata, and require that they be present for any title containing stripmarkers (likely incurring significant extra initial and ongoing programmer effort, relative to the other choices)&lt;br /&gt;
:E. Continue the current behavior of forbidding stripmarkers in titles, possibly to include all mathematics formulas in the event that impending wikimedia changes to mathematics change the stripmarkers in incompatible ways. Force people who want titles with those things in them to format them manually instead of by template.&lt;br /&gt;
:My own preference ordering is roughly alphabetical. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 01:38, 12 August 2026 (UTC)&lt;br /&gt;
:: I would be fine with A or B. But two other possibilities:&lt;br /&gt;
:: B2. Make the metadata parser smarter, so authors could add templates inside their citation parameters and have the parser still figure out how to extract more or less meaningful metadata while discarding parts not useful for machine consumption&lt;br /&gt;
:: D2. Make a new template that could be optionally added to the content of any arbitrary citation metadata parameter, into which template a machine-readable version of the content could be written, which the coins metadata parser would use, but would not be rendered in a way visible to humans. To take my previous example, this could be something like:&lt;br /&gt;
:: &amp;lt;syntaxhighlight lang=wikitext&amp;gt;{{cite journal&lt;br /&gt;
| last = Euler | first = Leonhard [...]&lt;br /&gt;
| title = De miris proprietatibus curvae elasticae sub aequatione &amp;lt;math display=inline&amp;gt;y = \int xx\,\mathrm{d}x \big/ \sqrt{1-x^4}&amp;lt;/math&amp;gt; contentae&lt;br /&gt;
{{machine-readable-parameter|1= De miris proprietatibus curvae elasticae sub aequatione y = ∫xx dx / √(1 − x⁴) contentae}}&lt;br /&gt;
[...]}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:: If this template were omitted, the citation should display as normal and the metadata parser could ignore the citation, try to make the most it could from it, produce corrupted output, or whatever, but the author should not be troubled, and if it needs manual intervention it could be left to someone who cares.&lt;br /&gt;
:: As another example, an author might be to be able to write something like:&lt;br /&gt;
:: &amp;lt;syntaxhighlight lang=wikitext&amp;gt;{{cite journal | mode = cs2&lt;br /&gt;
| author = {{ill|Giuseppe Cesàro|lt=Cesàro, Giuseppe|de|Giuseppe Raimondo Pio Cesàro|fr|Giuseppe Raimondo de Cesàro}}&lt;br /&gt;
{{machine-readable-parameter|Cesàro, Giuseppe}}&lt;br /&gt;
| year = 1905 [...] }}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:: And get as output:&lt;br /&gt;
::: {{ill|Giuseppe Cesàro|lt=Cesàro, Giuseppe|de|Giuseppe Raimondo Pio Cesàro|fr|Giuseppe Raimondo de Cesàro}} (1905), [https://www.biodiversitylibrary.org/item/310817#page/452/mode/1up &amp;quot;Nouvelle méthode pour l&#039;établissement des formules de la trigonométrie sphérique&amp;quot;]] [New method for establishing the formulas of spherical trigonometry], &#039;&#039;Académie royale de Belgique: Bulletins de la Classe des sciences&#039;&#039;, ser. 4 (in French), &#039;&#039;&#039;7&#039;&#039;&#039; (9–10): 434–454&lt;br /&gt;
:: –[[user:jacobolus|jacobolus]] [[user_talk:jacobolus|(t)]] 03:02, 12 August 2026 (UTC)&lt;br /&gt;
:::&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline=&amp;quot;1&amp;quot;&amp;gt;{{cite journal |last=Cesàro |first=Giuseppe |author-mask={{ill|Giuseppe Cesàro|lt=Cesàro, Giuseppe|de|Giuseppe Raimondo Pio Cesàro|fr|Giuseppe Raimondo de Cesàro}} |date=1905 |title=Nouvelle méthode pour l&#039;établissement des formules de la trigonométrie sphérique |trans-title=New method for establishing the formulas of spherical trigonometry |journal=Académie royale de Belgique: Bulletins de la Classe des sciences |series=ser. 4 |volume=7 |issue=9–10 |pages=434–454 |url=https://www.biodiversitylibrary.org/item/310817#page/452/mode/1up |mode=cs2}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
::::{{cite journal |last=Cesàro |first=Giuseppe |author-mask={{ill|Giuseppe Cesàro|lt=Cesàro, Giuseppe|de|Giuseppe Raimondo Pio Cesàro|fr|Giuseppe Raimondo de Cesàro}} |date=1905 |title=Nouvelle méthode pour l&#039;établissement des formules de la trigonométrie sphérique |trans-title=New method for establishing the formulas of spherical trigonometry |journal=Académie royale de Belgique: Bulletins de la Classe des sciences |series=ser. 4 |volume=7 |issue=9–10 |pages=434–454 |url=https://www.biodiversitylibrary.org/item/310817#page/452/mode/1up |mode=cs2}}&lt;br /&gt;
:::—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 11:40, 12 August 2026 (UTC)&lt;br /&gt;
::::Is this considered reasonable to do? The {{t|ill}} template has a banner at the top which says: {{tqb|This template should not be used in citation templates such as Citation Style 1 and Citation Style 2, because it includes markup that will pollute the COinS metadata they produce; see Wikipedia:COinS.}} –[[user:jacobolus|jacobolus]] [[user_talk:jacobolus|(t)]] 17:23, 12 August 2026 (UTC)&lt;br /&gt;
:::::See {{slink|Template:Cite_journal|COinS metadata is created for these parameters}}; {{para|author-mask{{var|n}}}} is not listed there.&lt;br /&gt;
:::::—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 18:58, 12 August 2026 (UTC)&lt;br /&gt;
::::::This seems like a bit of an abuse of &#039;author-mask&#039;, but I&#039;m happy to use it if it&#039;s unlikely to break in the future. {{pb}} I can also imagine wanting to use {{t|ill}} from other parameters (like title), though I don&#039;t have any concrete examples; an author link seems like the most common and useful one to support –[[user:jacobolus|jacobolus]] [[user_talk:jacobolus|(t)]] 20:00, 12 August 2026 (UTC)&lt;br /&gt;
:::::::See [[Template:Cite journal#csdoc_author-mask|{{para|author-mask}} documentation]].&lt;br /&gt;
:::::::—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 01:02, 13 August 2026 (UTC)&lt;br /&gt;
::@[[User:David Eppstein|David Eppstein]] I&#039;m out of the loop, what&#039;s the &amp;quot;new template styles system&amp;quot;? –[[user:jacobolus|jacobolus]] [[user_talk:jacobolus|(t)]] 20:06, 12 August 2026 (UTC)&lt;br /&gt;
:::See [[WP:TemplateStyles]]. I think that for instance [[User:Izno]] hopes to migrate the {{tl|mvar}} and {{tl|math}} templates to this system (and I think this is a good idea, but we just need it to interoperate better with the citation templates first). —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 02:12, 13 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;ve edited sandbox. Now the sandbox module doesn&#039;t emit error when a parameter has {{tag|templatestyles|single}}. Also COinS isn&#039;t broken by {{tag|templatestyles|single}}.&lt;br /&gt;
&lt;br /&gt;
I didn&#039;t deal with other [[mw:Extension:HTML Tags|HTML Tags]]. For example, if it becomes possible to exclude {{tag|span|attribs=class=noprint}} from COinS, it would likely become acceptable to use {{tlx|ill}} within citation templates. [[Module:Plain text]] might serve as a useful reference.&lt;br /&gt;
&lt;br /&gt;
By the way, how about {{tag|ref|open}} inside {{para|quote}}? I think there could be legitimate footnotes, such as translator&#039;s notes. And also {{tag|poem|open}} in {{para|quote}}&lt;br /&gt;
&lt;br /&gt;
--[[User:FlatLanguage|FlatLanguage]] ([[User talk:FlatLanguage|talk]]) 15:01, 25 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Cite Web issue ==&lt;br /&gt;
&lt;br /&gt;
Moved from the Teahouse...&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;== Cite web? ==&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This page [[:Category:CS1 errors: access-date without URL]] &lt;br /&gt;
recently jumped from ~100 pages to over 1,100 pages over a couple days. That seems to be caused by a template or something of the sort.&lt;br /&gt;
&lt;br /&gt;
Cite web possibly? I checked one of the listed pages [[Twenty-fifth_Amendment to the United States Constitution#cite ref-A2essayPS 22-0]]&lt;br /&gt;
&lt;br /&gt;
which shows the error &amp;lt;nowiki&amp;gt;{{cite web}}: |access-date= requires |url= (help)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the reference being listed as an error has both the &amp;lt;nowiki&amp;gt; |access-date= AND the |url=&amp;lt;/nowiki&amp;gt; listed&lt;br /&gt;
&lt;br /&gt;
[[User:Quebec99|Quebec99]] ([[User talk:Quebec99|talk]]) 12:51, 9 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:You&#039;re saying that the reference &#039;&#039;does&#039;&#039; have a valid url, but Cite web is giving an error for missing url? [[User:TooManyFingers|TooManyFingers]] &amp;lt;small&amp;gt;([[Wikipedia:Editors&#039; pronouns|&#039;&#039;he/him&#039;&#039;]] · [[User talk:TooManyFingers|talk]])&amp;lt;/small&amp;gt; 13:57, 9 August 2026 (UTC)&lt;br /&gt;
:::@[[User:TooManyFingers|TooManyFingers]], Exactly... and when/if you go to edit the citation to fix the error, it appears perfectly fine when you &amp;quot;preview&amp;quot; any changes, but the error reappears when you save. [[User:Quebec99|Quebec99]] ([[User talk:Quebec99|talk]]) 21:50, 15 August 2026 (UTC)&lt;br /&gt;
:@[[User:Quebec99|Quebec99]]: {{welcometea}} I&#039;m not sure if it&#039;s because &amp;lt;code&amp;gt;heritage.org&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;archive.today&amp;lt;/code&amp;gt; were blacklisted, or if it&#039;s because {{para|url-status}} was set to &amp;lt;code&amp;gt;unfit&amp;lt;/code&amp;gt;. —[[User:Tenryuu|&amp;lt;span style=&amp;quot;color:#556B2F&amp;quot;&amp;gt;Tenryuu&amp;amp;nbsp;🐲&amp;lt;/span&amp;gt;]]&amp;amp;nbsp;(&amp;amp;nbsp;[[User talk:Tenryuu|💬]]&amp;amp;nbsp;•&amp;amp;nbsp;[[Special:Contributions/Tenryuu|📝]]&amp;amp;nbsp;) 14:37, 9 August 2026 (UTC)&lt;br /&gt;
:@[[User:Quebec99|Quebec99]], there was a major update to the citation templates and modules two days ago, which is probably what caused this. The best place to report this issue is probably at [[WT:CS1]], the combined talk page for all of those Cite templates. &amp;lt;span style=&amp;quot;white-space:nowrap;&amp;quot;&amp;gt;--[[User:Rchard2scout|rchard2scout]]&amp;lt;/span&amp;gt; ([[User talk:Rchard2scout|talk]]) 12:29, 10 August 2026 (UTC)&lt;br /&gt;
::Thank you. I will move the discussion. [[User:Quebec99|Quebec99]] ([[User talk:Quebec99|talk]]) 12:52, 10 August 2026 (UTC)&lt;br /&gt;
:This is the example template:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline=&amp;quot;1&amp;quot;&amp;gt;{{cite web|last=Feerick|first=John|title=Essays on Article II: Presidential Succession|work=The Heritage Guide to the Constitution|url=https://www.heritage.org/constitution/#!/articles/2/essays/83/presidential-succession|publisher=The Heritage Foundation|access-date=June 12, 2018|archive-date=August 22, 2020|archive-url=https://archive.today/20200822232208/https://www.heritage.org/constitution/%23!/amendments/8/essays/161/cruel-and-unusual-punishment#!/articles/2/essays/83/presidential-succession|url-status=unfit}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:What a mess.  {{para|url}} does not match the url given in {{para|archive-url}}.  That the original url redirects to the site&#039;s home page does not mean that the original url is {{para|url-status|unfit}} – that parameter/value pair suppresses original urls; archive.today urls are suppressed because that archival service is deprecated; see [[WP:ARCHIVETODAY]].  And, heritage(dot)org is blacklisted.&lt;br /&gt;
:&lt;br /&gt;
:It is time for editors to step up and make editorial decisions.  There are, apparently, two essays related to &#039;Article II: Presidential Succession&#039;:&lt;br /&gt;
:*Essay No. 97: The Presidential Succession—Devolve Clause (Feerick) &amp;lt;nowiki&amp;gt;https://constitution.heritage.org/essays/a2-s1-c6-a/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:*Essay No. 98: The Presidential Succession—Congress Clause (Blackman and Tillman) &amp;lt;nowiki&amp;gt;https://constitution.heritage.org/essays/a2-s1-c6-b/&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
:But because of the blacklist, neither of those can be used to support the article&#039;s text.&lt;br /&gt;
:—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 13:46, 10 August 2026 (UTC)&lt;br /&gt;
::If I&#039;ve understood this discussion correctly, the &amp;lt;nowiki&amp;gt;|access-date&amp;lt;/nowiki&amp;gt; error is a result of archive.today being deprecated.&lt;br /&gt;
::On [[Lesley Vainikolo]], the following reference shows both a red error and a green error when viewing the page, but when I open it in the source editor, only the maintenance/green error appears? It is currently #11. Are you seeing the same thing?&lt;br /&gt;
::* {{tq|&amp;lt;nowiki&amp;gt;{{cite web |url=http://www.buzzle.com/editorials/3-3-2006-90303.asp |title=Rugby League: Knee Forces Lesley Out |work=The Guardian |date=3 March 2006 |access-date=11 January 2008 |url-status=usurped |archive-url=https://archive.today/20120720170929/http://www.buzzle.com/editorials/3-3-2006-90303.asp |archive-date=20 July 2012}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
::Is this behaviour definitely functioning correctly? I haven&#039;t done any other testing, so sorry if I&#039;ve missed something obvious. I&#039;m asking specifically about the disappearing/appearing red error.&lt;br /&gt;
::Also, ignore the horrendous state of the article! I&#039;m going to do my best to improve it.&lt;br /&gt;
::Thanks, [[User:JordyGrey|&amp;lt;span style=&amp;quot;color:#3b3b3b&amp;quot;&amp;gt;&#039;&#039;&#039;JordyGrey&#039;&#039;&#039;&amp;lt;/span&amp;gt;]] &amp;lt;sub&amp;gt;[[User talk:JordyGrey|&amp;lt;span style=&amp;quot;color:#3b3b3b&amp;quot;&amp;gt;talk&amp;lt;/span&amp;gt;]][[Special:Contributions/JordyGrey|🧸]]&amp;lt;/sub&amp;gt; 14:33, 20 August 2026 (UTC)&lt;br /&gt;
:::This morning, I answered a similar question at the [[Special:Permalink/1370334019#False_positive_CS1_error|help desk]] (permalink).  Does that answer your question?&lt;br /&gt;
:::—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 14:52, 20 August 2026 (UTC)&lt;br /&gt;
::::Absolutely! Thank you so much! :) [[User:JordyGrey|&amp;lt;span style=&amp;quot;color:#3b3b3b&amp;quot;&amp;gt;&#039;&#039;&#039;JordyGrey&#039;&#039;&#039;&amp;lt;/span&amp;gt;]] &amp;lt;sub&amp;gt;[[User talk:JordyGrey|&amp;lt;span style=&amp;quot;color:#3b3b3b&amp;quot;&amp;gt;talk&amp;lt;/span&amp;gt;]][[Special:Contributions/JordyGrey|🧸]]&amp;lt;/sub&amp;gt; 00:03, 21 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
==False positive check url error==&lt;br /&gt;
I&#039;ve come across the below ref on the page [[Leon Henry]], which is throwing a &amp;lt;code&amp;gt;Check |url= value&amp;lt;/code&amp;gt; error even though the link itself is correct. &lt;br /&gt;
&lt;br /&gt;
{{cite web|url=https://sodaho_ftp.sidearmsports.com/custompages/Men&#039;s%20Basketball/mediaguides/mensbb06_07.pdf|title=CSI Basketball 2006–07 media guide|work=[[College of Southern Idaho]]|url-status=live|archiveurl=https://web.archive.org/web/20191222054147/https://sodaho_ftp.sidearmsports.com/custompages/Men%27s%20Basketball/mediaguides/mensbb06_07.pdf|archivedate=22 December 2019}}&lt;br /&gt;
&lt;br /&gt;
I&#039;ve narrowed it down to the underscore, but I&#039;m not fully sure how to resolve it given that&#039;s part of the actual url. Any suggestions would be much appreciated! [[User:Turnagra|Turnagra]] ([[User talk:Turnagra|talk]]) 20:34, 11 August 2026 (UTC)&lt;br /&gt;
:As I understand it, underscores are not allowed in &#039;labels&#039; (the text between the dots) except in certain specific cases where the underscore must be the first character in the subdomain label (but not the second-level domain name).&lt;br /&gt;
:&lt;br /&gt;
:Still, where there is one, sooner or later there are likely to be others so, for the time being, in the sandbox I have tightened the test so that it ignores subdomains of the second-level domain:&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline=&amp;quot;1&amp;quot;&amp;gt;{{cite web/new |url=//ex_ample.com |title=Title}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:::{{cite web/new |url=//ex_ample.com |title=Title}}&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot; inline=&amp;quot;1&amp;quot;&amp;gt;{{cite web/new |url=https://sodaho_ftp.sidearmsports.com/custompages/Men&#039;s%20Basketball/mediaguides/mensbb06_07.pdf |title=CSI Basketball 2006–07 media guide |work=[[College of Southern Idaho]]}}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
:::{{cite web/new |url=https://sodaho_ftp.sidearmsports.com/custompages/Men&#039;s%20Basketball/mediaguides/mensbb06_07.pdf |title=CSI Basketball 2006–07 media guide |work=[[College of Southern Idaho]]}}&lt;br /&gt;
:—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 23:24, 11 August 2026 (UTC)&lt;br /&gt;
::Thank you! Just double checking that it&#039;s okay to use the updated form in a live article, since you mentioned it being a sandbox thing? [[User:Turnagra|Turnagra]] ([[User talk:Turnagra|talk]]) 01:56, 12 August 2026 (UTC)&lt;br /&gt;
:::Currently the correct version is on sandbox and will only available to mainspace articles once the main module get updated. till then the error will be there. I would suggest you to wait until it&#039;s getting fixed meantime you can see details of [[#module suite update 8–9 August 2026|latest module update]] which also included similar problem with domain name.––[[User:KEmel49|&amp;lt;span style=&amp;quot;color: #000099; font-weight: bold; font-family: Georgia;&amp;quot;&amp;gt;KE&amp;lt;/span&amp;gt;mel&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;49&amp;lt;/span&amp;gt;]]([[User talk:KEmel49|📝]],[[Special:Contributions/KEmel49|📋]]) 12:09, 13 August 2026 (UTC)&lt;br /&gt;
::::The false positive errors only occur when the page is saved. It also happens with the citation command... not just cite web. When you preview the edits, there is no error. [[User:Quebec99|Quebec99]] ([[User talk:Quebec99|talk]]) 23:47, 14 August 2026 (UTC)&lt;br /&gt;
::Hi, I can see you said this update isn&#039;t live yet, I just wanted to note that it is affecting other articles too (I found it in [[Crazy Leo]] which has a &#039;ra_2012.rally-america.com&#039; url, the original site is dead but the archive works correctly). Thanks for your work. - [[User:Mitchea99|Mitchea99]] ([[User talk:Mitchea99|talk]]) 03:50, 26 August 2026 (UTC)&lt;br /&gt;
::You are correct.  According to RFCs [[rfc:952|952]] and [[rfc:1123|1123]] the only characters allowed in labels are the alphanumerics and &#039;-&#039; (minus), and a label cannot start with &#039;-&#039;.  I came across the problem on [[Oak Openings Preserve Metropark]] from a change made on 2022-01-19, but going by [[User:Mitchea99|Mitchea99]]&#039;s example, DNS servers have been ignoring this rule for a long time now. - [[User:Wikkiwonkk|Wikkiwonkk]] ([[User talk:Wikkiwonkk|talk]]) 03:16, 29 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Is it good to remove url-status=dead?==&lt;br /&gt;
If &amp;quot;archive-url&amp;quot; is used and no value is set for &#039;url-status&#039;, then &#039;url-status=dead&#039; is assumed. So, omitting &#039;url-status=dead&#039; makes no difference to the display. When an &amp;quot;archive-url&amp;quot; and &#039;url-status=dead&#039; are both in a cite, is removing the &#039;url-status=dead&#039; good, bad or other – and why? Thanks. [[User:Nurg|Nurg]] ([[User talk:Nurg|talk]]) 01:50, 18 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:url-status=dead means that some person has checked that the url is dead and deliberately flagged it as dead in the citation. url-status omitted means that we don&#039;t know whether or not it is dead and are following the default behavior, which is to treat it as if it is dead. The output of the template is the same but the meaning is different. So it should not be removed (unless the url really is not dead), and neither should it be automatically added. Both of these changes are pointless from the point of view of template output and destructive from the point of view of the intended meaning. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 02:11, 18 August 2026 (UTC)&lt;br /&gt;
:It&#039;s completely useless and encourages people to spend time checking &amp;quot;is the link dead?&amp;quot; for no reason. The template behaves the same way either way. There is an archived link, it&#039;s already being used as the main link. What purpose does flagging it as dead serve? None, save to tell others the link was dead. Which you shouldn&#039;t be checking for to begin with since you have an archive link. You are literally wasting time that benefits literally no one/no reader.&lt;br /&gt;
:The only useful result is the opposite. Is the link live? Because if it is, then we prioritise the live link and overide the templates default behaviour. But even that is of extremely marginal use because we want the source as it was as close to when you checked it, making the archived link arguable more valuable than the live one. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 02:16, 18 August 2026 (UTC)&lt;br /&gt;
::Precisely, {{para|url-status|dead}} is important &amp;quot;to tell others the link was dead&amp;quot;. Being redundant is good thing. --[[User:FlatLanguage|FlatLanguage]] ([[User talk:FlatLanguage|talk]]) 09:35, 18 August 2026 (UTC)&lt;br /&gt;
:::Why is it important? So they can search for an archived version? There&#039;s already one! &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 10:08, 19 August 2026 (UTC)&lt;br /&gt;
:::: So you can look for a live source. Websites with taxonomic databases often change location or structure. It is better to follow the new version, rather than rely on an archive that may be out of date. &amp;amp;nbsp;—&amp;amp;nbsp;&amp;lt;span style=&amp;quot;white-space: nowrap;font-family:Arial;background:#d6ffe6;border:solid 1px;border-radius:5px;box-shadow:darkcyan 0px 1px 1px;&amp;quot;&amp;gt; [[User:Jts1882|Jts1882]]  &amp;amp;#124;[[User talk:Jts1882| talk]]&amp;amp;nbsp;&amp;lt;/span&amp;gt; 12:32, 19 August 2026 (UTC)&lt;br /&gt;
:::@Headbomb: No, &amp;quot;to tell others the link was dead&amp;quot;. If {{para|archive-url}} is present but {{para|url-status}} is missing, the module assumes the link is {{pval|dead}}; however, it may actually be {{pval|live}}, with the editor simply having forgotten to specify the status. By specifying {{para|url-status|dead}}, you can indicate that the URL has been verified. &lt;br /&gt;
:::This is similar to {{para|author|&amp;lt;nowiki&amp;gt;&amp;lt;!--Not stated--&amp;gt;&amp;lt;/nowiki&amp;gt;}} ([[Help:Citation_Style_1#Authors]]). They do not affect the display of the template, but they convey useful information to editors. [[User:FlatLanguage|FlatLanguage]] ([[User talk:FlatLanguage|talk]]) 13:52, 25 August 2026 (UTC)&lt;br /&gt;
:It&#039;s redundant as {{para|url-status|dead}} is technically the same as not including it at all. However in past discussions some editors have said they find it useful, and as it doesn&#039;t matter one way or the other there is no point in not including it. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 11:04, 18 August 2026 (UTC)&lt;br /&gt;
:url-status=dead (or unfit) tells the template to prioritise the archived link.  Otherwise it is assumed to be live.  If there is no archive, then the {{Tlx| Dead link}} template should be used outside the {{Tlx| Cite foo}}  template. All the best: &#039;&#039;[[User:Rich Farmbrough|Rich]] [[User talk:Rich Farmbrough|Farmbrough]]&#039;&#039;&amp;lt;small&amp;gt; 21:39, 27 August 2026 (UTC).&amp;lt;br /&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cite document, paper, journal, and web ==&lt;br /&gt;
&lt;br /&gt;
I am confused as to why {{t|cite document}} does not support URL parameters.&lt;br /&gt;
&lt;br /&gt;
I have on multiple occasions been caught off guard when attempting to use {{t|cite paper}} and getting a missing {{para|journal}} error thrown at me, as it is currently a redirect to {{t|cite journal}}. &#039;&#039;Paper&#039;&#039; and &#039;&#039;document&#039;&#039; are much closer semantically, so it seems reasonable to expect {{t|cite paper}} to redirect to {{t|cite document}}, but in replacing a call of the former to the latter, I get hit with an unknown parameter {{para|url}} error. Instead, I have to use {{t|cite web}}, which in many cases seems an inappropriate template to use for what I am citing.&lt;br /&gt;
The particular example that caused me to bring this up here is the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
{{cite web&lt;br /&gt;
|last=Jones&lt;br /&gt;
|first=Daniel&lt;br /&gt;
|author-link=Daniel Jones (phonetician)&lt;br /&gt;
|year=1956&lt;br /&gt;
|title=Cardinal Vowels Spoken by Daniel Jones: Text of Records with Explanatory Notes by Professor Jones&lt;br /&gt;
|location=London&lt;br /&gt;
|publisher=Linguaphone Institute&lt;br /&gt;
|url=https://s3-eu-west-1.amazonaws.com/s3-euw1-ap-pe-ws4-cws-streaming.ri-prod/9781444183092/cardinal.pdf&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The url is merely a scan of a {{tq|short, stand-alone, offline document}} exactly as described in the documentation of {{t|cite document}}, so the fact that I get an error makes little sense to me. I was going to create an RfD for {{t|cite paper}} to retarget it to {{t|cite document}}, but this is preventing me from doing so. ~ [[User:Oklopfer|&amp;lt;span style=&amp;quot;color: #e3308a&amp;quot;&amp;gt;oklopfer&amp;lt;/span&amp;gt;]] ([[User talk:Oklopfer|💬︎]]) 22:39, 21 August 2026 (UTC)&lt;br /&gt;
:IIRC the reason for {{-r|Template:Cite paper}} being a redirect to [[Template:Cite journal]] is because for an academic paper to be acceptable for verifiability purposes, it must have been published; and the usual place for academic papers to be published is in an academic journal. --[[User:Redrose64|&amp;lt;span style=&amp;quot;color:#a80000; background:#ffeeee; text-decoration:inherit&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;rose64]] &amp;amp;#x1f339; ([[User talk:Redrose64|talk]]) 22:49, 21 August 2026 (UTC)&lt;br /&gt;
:I agree that cite document should support URLs. An offline document just means a physical document. There&#039;s no reason why there can&#039;t be online scans/PDFs of them. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 23:22, 21 August 2026 (UTC)&lt;br /&gt;
:Sorry but it&#039;s clearly not a {{tq|short, stand-alone, offline document}} as it&#039;s online. It can&#039;t be offline if it has a URL. Cite Document&#039;s documentation would clearer if it was &amp;quot;{{tq|short, stand-alone document, that is not available online}}&amp;quot;. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 11:29, 22 August 2026 (UTC)&lt;br /&gt;
::Which it shouldn&#039;t be. Cite document should be for any generic document. That something is available online is completely irrelevant. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 12:18, 22 August 2026 (UTC)&lt;br /&gt;
:::I could see the argument for that, but that&#039;s not how it&#039;s currently setup. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 12:33, 22 August 2026 (UTC)&lt;br /&gt;
:::Like {{tl|Citation}} for CS1? You&#039;d probably need broad consensus for that since the other CS1 templates all describe a type of source. I think {{tl|cite document}} was a [https://en.wikipedia.org/w/index.php?title=Template%3ACite_document&amp;amp;diff=1170021118&amp;amp;oldid=1095569050 redirect] to {{tl|cite journal}} prior to this discussion: {{format link|Help_talk:Citation_Style_1/Archive_81#&amp;quot;Cite_document&amp;quot;_needs_its_own_template._Redirecting_to_cite_journal_is_illogical_and_unfriendly.}} [[User:Rjjiii|&amp;lt;span style=&amp;quot;font-variant:small-caps;&amp;quot;&amp;gt;Rjj&amp;lt;sup&amp;gt;iii&amp;lt;/sup&amp;gt;&amp;lt;/span&amp;gt;]] ([[User talk:Rjjiii|talk]]) 15:38, 22 August 2026 (UTC)&lt;br /&gt;
::::Ah, that helps to explain the incongruence of {{t|cite paper}} and {{t|cite document}}, then. ~ [[User:Oklopfer|&amp;lt;span style=&amp;quot;color: #e3308a&amp;quot;&amp;gt;oklopfer&amp;lt;/span&amp;gt;]] ([[User talk:Oklopfer|💬︎]]) 18:37, 22 August 2026 (UTC)&lt;br /&gt;
::In my opinion, a &amp;quot;document&amp;quot; is a [[pamphlet]], a small version of book, so we should be able to use all parameters of {{tl|cite book}} other than {{para|chapter}} and related params. --[[User:FlatLanguage|FlatLanguage]] ([[User talk:FlatLanguage|talk]]) 02:09, 26 August 2026 (UTC)&lt;br /&gt;
:Cite document is specifically provided to support URL-less lesser works that appear in no other greater works. That is the point of the template. [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 21:51, 31 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Cite report ==&lt;br /&gt;
&lt;br /&gt;
Why does the report title not display in either italics or quotations? [[User:Viriditas|Viriditas]] ([[User talk:Viriditas|talk]]) 23:16, 23 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:It is one of the black sheep of this set. We also have the issue that they can be either short of long form, so we&#039;ve somehow ended up at a styling which is wrong for both cases. :) [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 21:50, 31 August 2026 (UTC)&lt;br /&gt;
::Yes, that makes sense (seriously). [[User:Viriditas|Viriditas]] ([[User talk:Viriditas|talk]]) 09:59, 1 September 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Cite news: Publisher explanation is uninformative, contradictory, and weird  ==&lt;br /&gt;
&lt;br /&gt;
The cite news - Publisher explanation is contradictory and fails to explain crucial information.&lt;br /&gt;
&lt;br /&gt;
# It states things in terms of what “usually” happens, or what “rarely” happens, which is obviously useless for a person trying to understand what good practice is or what the reasoning is for why anybody should be doing anything. “Corporate designations such as &amp;quot;Ltd&amp;quot;, &amp;quot;Inc.&amp;quot;, or &amp;quot;GmbH&amp;quot; are not &#039;&#039;&#039;usually&#039;&#039;&#039; included” and “This parameter is most &#039;&#039;&#039;commonly&#039;&#039;&#039; used for books.”  The whole premise of rules and guidelines is that people are often doing a foolish wrong thing, therefore something being common or rare is meaningless here and hasn’t explained anything.  What is the official rationale?  Is the source data built on whimsy?&lt;br /&gt;
# Blatant contradiction.  It says “Do not use the publisher parameter for the name of a work“ and a moment later says “it may be used instead of work in some cases.”&lt;br /&gt;
# It fails to explain anything.“Omit where the publisher&#039;s name is substantially the same as the name of the work”.  Why? Why don’t we want historical database info, and in a world where publishers change which in turn can effect reliability and independence?  Is there a storage/bandwidth concern for text bloat in the extra info?  And what if a person wants to look at info or stats for cited publications under a given publisher?  Or whatever other info or purpose.  Why wouldn’t we want a little bit of definitive info like publisher?  Two pieces of data for a key in a database being similar has never been a good reason to omit one of them, in my experience.  And for example a person could more quickly investigate a publisher if it’s actually listed, rather than having to first investigate the publication to find the publisher.&lt;br /&gt;
# Is the logic that the ONLY intended purpose of Publisher field is to disambiguate a source/publication in a case where two things have a similar title?  That’s a good use case but it’s a horribly limited logic on the topic of recording publisher data in a citation database.&lt;br /&gt;
&lt;br /&gt;
I thought the point of guidelines is to have reasoned non-contradictory non-random non-whimsical behaviors and systems.&lt;br /&gt;
&lt;br /&gt;
I’d be glad to make it make sense by editing it myself (with enough leeway that I’m not personally dictating new mandates, but rather giving explicitly reasoned advice), but from what I’ve seen it will just get reverted with no substantial reason given by someone who doesn’t understand the actual rules of Wikipedia (I.e. “I have no articulable reason why your edit is a problem when your edit clearly fits the established rules and is probably entailed by them already, but in my imagination a bureaucratic pre-approval is required before an edit, so I’m deleting it.” This happens every day and nobody stops it.  So here we are, hi everyone, here’s my discussion.[[User:RandomEditor6772314|RandomEditor6772314]] ([[User talk:RandomEditor6772314|talk]]) 01:33, 24 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:That&#039;s because some people disagree and insist that it&#039;s very important to tell the reader who the publisher of [[Time Magazine]] is. When zero citation styleguides recommend including the publisher of magazines or newspaper in a citation. But because Wikipedia has no specific citation style, we cannot recommend to not include the publisher, because the special snowflakes will scream murder. We can only describe how it&#039;s used.&lt;br /&gt;
:So that&#039;s why on some articles you will have &amp;lt;code&amp;gt;John Doe (1994) ... &#039;&#039;[[Time (magazine)|Time]]&#039;&#039;, Time USA&amp;lt;/code&amp;gt;; and on others &amp;lt;code&amp;gt;John Doe (1994) ... &#039;&#039;[[Time (magazine)|Time]]&#039;&#039;&amp;lt;/code&amp;gt; or someone insisting that a book&#039;s publisher [[Elsevier]] be referred to its Dutch legal name [[Elsevier B.V.]], and others by it&#039;s American legal name [[Elsevier, Inc.]]. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 01:45, 24 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Proposed script-author parameter redux ==&lt;br /&gt;
&lt;br /&gt;
A few years ago, [[Help talk:Citation Style 1/Archive 92#Proposed script-author parameter|there were calls from several editors]] for the addition of a {{para|script-author}} parameter to CS1, and the issue has come up before that (e.g. [[Help talk:Citation Style 1/Archive 64#Citing native scripts of the author&#039;s name and/or title of a work in Citation Style 1|here]] and [[Help talk:Citation Style 1/Archive 12#Script variants of parameters for author, editor, etc.|here]]).  &lt;br /&gt;
&lt;br /&gt;
The fact that {{para|script-title}} &amp;amp;c have existed for years shows that the feature would be useful, as is the fact that the issue keeps arising on this talk page.  There are many good arguments for this parameter in those discussion, but a short version is that romanizations are lossy, and readers should not be expected to know who {{lang|zh|趙元任}} is or to try and figure out who &amp;quot;Y. R. Chao&amp;quot; might refer to.  — [[User talk:AjaxSmack|&amp;lt;span style=&amp;quot;border:1px solid #005173;background:#276a7d;padding:2px;color:#dff4f7;text-shadow:black 0.2em 0.2em 0.3em; font-family: Georgia;&amp;quot;&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;AjaxSmack&#039;&#039;&#039;&amp;amp;nbsp;&amp;lt;/span&amp;gt;]] 20:07, 24 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Is there a reason {{para|author|Y. R. Chao [趙元任]}} wouldn&#039;t work, or if you need the author parameters for use with {{tl|sfn}} or similar, then wouldn&#039;t {{para|author|Y. R. Chao}} and {{para|author-mask|Y. R. Chao [趙元任]}} work? -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 20:46, 24 August 2026 (UTC)&lt;br /&gt;
::{{bcc|ActivelyDisinterested}}&#039;&#039;&amp;quot;Is there a reason...&amp;quot;&#039;&#039;.  Yes, because it makes the {{para|first}} and {{para|last}} fields unavailable. [https://en.wikipedia.org/w/index.php?title=Ingush_language&amp;amp;diff=prev&amp;amp;oldid=1371119447 Here&#039;s an example.]  (I don&#039;t use {{tl|sfn}} unless the article already does.) Is there a reason we have {{para|script-title}}? &amp;lt;small&amp;gt; — [[User talk:AjaxSmack|&amp;lt;span style=&amp;quot;border:1px solid #005173;background:#276a7d;padding:2px;color:#dff4f7;text-shadow:black 0.2em 0.2em 0.3em; font-family: Georgia;&amp;quot;&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;AjaxSmack&#039;&#039;&#039;&amp;amp;nbsp;&amp;lt;/span&amp;gt;]] 14:57, 25 August 2026 (UTC)&amp;lt;/small&amp;gt;&lt;br /&gt;
:::{{para|first|Y. R.}}, {{para|last|Chao}} works with {{para|author-mask|Chao, Y. R. [趙元任]}}. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 15:02, 25 August 2026 (UTC)&lt;br /&gt;
::::Why use a workaround that&#039;s not really meant for this purpose? (I vaguely remember it breaking some sorting once.)  I&#039;m genuinely curious why {{para|script-title}} is fine and {{para|script-author}} is not, despite numerous editors calling for it over the years. Is it too difficult to implement?  Will it break something? &amp;lt;small&amp;gt; — [[User talk:AjaxSmack|&amp;lt;span style=&amp;quot;border:1px solid #005173;background:#276a7d;padding:2px;color:#dff4f7;text-shadow:black 0.2em 0.2em 0.3em; font-family: Georgia;&amp;quot;&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;AjaxSmack&#039;&#039;&#039;&amp;amp;nbsp;&amp;lt;/span&amp;gt;]] 16:23, 26 August 2026 (UTC)&amp;lt;/small&amp;gt;&lt;br /&gt;
:::::I&#039;m not arguing against it, just wondering why the available solution isn&#039;t practical. You shouldn&#039;t break anything by using author-mask with last and first, it will definitely work fine with short form references. If something can be accomplished with the currently available fields, then new fields only add extra complexity and additional maintenance. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 21:10, 26 August 2026 (UTC)&lt;br /&gt;
::::::These points apply to {{para|script-title}} as well, and it appears to be well-subscribed and working fine.  As I noted, quite a few editors have requested {{para|script-author}} over the years. &amp;lt;small&amp;gt; — [[User talk:AjaxSmack|&amp;lt;span style=&amp;quot;border:1px solid #005173;background:#276a7d;padding:2px;color:#dff4f7;text-shadow:black 0.2em 0.2em 0.3em; font-family: Georgia;&amp;quot;&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;AjaxSmack&#039;&#039;&#039;&amp;amp;nbsp;&amp;lt;/span&amp;gt;]] 17:57, 31 August 2026 (UTC)&amp;lt;/small&amp;gt;&lt;br /&gt;
:::::::Then I would have said the same about them in discussions on their creation. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 18:09, 31 August 2026 (UTC)&lt;br /&gt;
:I support this. This is not necessary when the author has an wiki article, but otherwise the information is as essential as that in {{para|script-title}}. It&#039;s possible to fudge the presentation with {{para|author-mask}}, but {{para|script-author}} would be the clean way to do it. (Adding the info to {{para|author}} messes up the semantics.)&lt;br /&gt;
:The proposal is to add the value of {{para|script-author}} in parentheses after the author name. Ditto for all the other names. [[User talk:Kanguole|Kanguole]] 21:39, 24 August 2026 (UTC)&lt;br /&gt;
:script-X is intended to provide support for languages that don&#039;t do italics. That&#039;s it. That&#039;s the only reason it exists. Authors do not have this problem because they are not italicized.&lt;br /&gt;
:The appropriate parameter for support of what you want is {{para|author-mask}}. Your assertion that it&#039;s not its purpose is incorrect. [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 21:47, 31 August 2026 (UTC)&lt;br /&gt;
::Thanks. &amp;lt;small&amp;gt; — [[User talk:AjaxSmack|&amp;lt;span style=&amp;quot;border:1px solid #005173;background:#276a7d;padding:2px;color:#dff4f7;text-shadow:black 0.2em 0.2em 0.3em; font-family: Georgia;&amp;quot;&amp;gt;&amp;amp;nbsp;&#039;&#039;&#039;AjaxSmack&#039;&#039;&#039;&amp;amp;nbsp;&amp;lt;/span&amp;gt;]] 13:29, 2 September 2026 (UTC)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ISBN / Date incompatibility (again and again) ==&lt;br /&gt;
&lt;br /&gt;
There have been at least two previous discussions of this error:&lt;br /&gt;
* [[Help_talk:Citation_Style_1/Archive_98#ISBN_/_Date_incompatibility]]&lt;br /&gt;
* [[Help_talk:Citation_Style_1/Archive_100#ISBN_/_Date_incompatibility]]&lt;br /&gt;
and probably more.&lt;br /&gt;
&lt;br /&gt;
I see the issue as:&lt;br /&gt;
* ISBNs did not exist before 1965. If a template ({{tlg|cite book|code=yes}}, for example) uses {{para|date|&#039;&#039;&#039;a date before 1965&#039;&#039;&#039;}} and {{para|ISBN|&#039;&#039;&#039;an ISBN assigned to a reprint or reissue of the book&#039;&#039;&#039;}} an error is shown:&lt;br /&gt;
*:{{tlg|cite book|code=yes}} {{font color|red|ISBN / Date incompatibility (help)}}&lt;br /&gt;
* Assigning {{para|date|&#039;&#039;&#039;the date of the reissue&#039;&#039;&#039;}} and {{para|orig-date|&#039;&#039;&#039;date of the original publication&#039;&#039;&#039;}} prevents the error.&lt;br /&gt;
* However, assigning {{para|date|&#039;&#039;&#039;the date of the original publication&#039;&#039;&#039;}} and {{para|publication-date|&#039;&#039;&#039;the date of the reissue&#039;&#039;&#039;}} does not prevent the error. (see, for example, [[Brettle]])&lt;br /&gt;
&lt;br /&gt;
To me, this seems inconsistent. Use of {{param value|date}} and {{param value|publication-date}} is a correct representation of the original publication date and the reissue date and should not create the error.&lt;br /&gt;
&lt;br /&gt;
ETA: As of now, there are over 43,000 pages with this error. I don&#039;t know how many of those are caused by use of {{param value|date}} and {{param value|publication-date}}. [[:Category:CS1_errors:_ISBN_date]]&lt;br /&gt;
&lt;br /&gt;
Thoughts? --[[User:Lexiconaut|Lexiconaut]] ([[User talk:Lexiconaut|talk]]) 04:36, 25 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:It&#039;s not entirely clear to me from reading the documentation what {{param value|publication-date}} is meant to do that {{param value|orig-date}} isn&#039;t doing, and whether that&#039;s a distinction that would be understood by readers. I did a lot of ISBN cleanup and I never saw {{param value|publication-date}} in use. Errors typically fell into three buckets: fallacious ISBNs auto-added from Google Books, misidentified reprints/editions, and straight-up typos. [[User:Mackensen|Mackensen]] [[User_talk:Mackensen|(talk)]] 11:21, 25 August 2026 (UTC)&lt;br /&gt;
:Deprecating {{para|publication-date}} would solve this issue. -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 15:04, 25 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chapter-doi could be added ==&lt;br /&gt;
&lt;br /&gt;
Chapters or articles in books sometimes have their own DOI. Also, if a DOI is supplied, the URL it redirects to should not normally be supplied as the {{para|url}} parameter. As there is a parameter {{para|chapter-url}}, it might be desirable to add a parameter which at present isn&#039;t supported, {{para|chapter-doi}}, which in some cases would replace {{para|chapter-url}} if they both invoke the same Web page. On the other hand, {{para|doi|[URL of chapter]}} is probably good enough.&lt;br /&gt;
&lt;br /&gt;
(Real) example&amp;lt;ref&amp;gt;{{Cite book|date=1 January 2004 |chapter=Blue cheese|series=Cheese: Chemistry, Physics and Microbiology|volume=2|title=Major Cheese Groups|language=en |pages=175–198 |chapter-doi=10.1016/S1874-558X(04)80044-7&amp;lt;!--replacing url=https://www.sciencedirect.com/science/chapter/bookseries/abs/pii/S1874558X04800447--&amp;gt;|issn=1874-558X |last1=Cantor |first1=M. D. |last2=Van Den Tempel |first2=T. |last3=Hansen |first3=T. K. |last4=Ardö |first4=Y.|editor1-first=Patrick|editor1-last=F. Fox|editor2-first=Paul L.H.|editor2-last= McSweeney|editor3-first=Timothy M.|editor3-last=Cogan|editor4-first=Timothy P.|editor4-last=Guinee|isbn=9780122636530}}&amp;lt;/ref&amp;gt;; url=https://www.sciencedirect.com/science/chapter/bookseries/abs/pii/S1874558X04800447 and {{DOI|10.1016/S1874-558X(04)80044-7}} , both invoking same Web page, of article within book.&lt;br /&gt;
&lt;br /&gt;
{{Reflist-talk|title=}}&lt;br /&gt;
Best wishes, [[User:Pol098|Pol098]] ([[User talk:Pol098|talk]]) 17:30, 25 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:If you cite the chapter, doi is the doi of the chapter. {{para|chapter-doi}} serves no purpose and including both a &amp;quot;book doi&amp;quot; and a &amp;quot;chapter doi&amp;quot; would needlessly complicate things. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 17:53, 25 August 2026 (UTC)&lt;br /&gt;
::Agree. Here&#039;s the citation using the doi for the chapter, since that is what you are citing (i.e. the first element after the author list): {{Cite book|date=1 January 2004 |chapter=Blue cheese|series=Cheese: Chemistry, Physics and Microbiology|volume=2|title=Major Cheese Groups|language=en |pages=175–198 |doi=10.1016/S1874-558X(04)80044-7&amp;lt;!--replacing url=https://www.sciencedirect.com/science/chapter/bookseries/abs/pii/S1874558X04800447--&amp;gt;|issn=1874-558X |last1=Cantor |first1=M. D. |last2=Van Den Tempel |first2=T. |last3=Hansen |first3=T. K. |last4=Ardö |first4=Y.|editor1-first=Patrick|editor1-last=F. Fox|editor2-first=Paul L.H.|editor2-last= McSweeney|editor3-first=Timothy M.|editor3-last=Cogan|editor4-first=Timothy P.|editor4-last=Guinee|isbn=9780122636530}} – [[User:Jonesey95|Jonesey95]] ([[User talk:Jonesey95|talk]]) 22:54, 25 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Misuse of &amp;lt;code&amp;gt;cite&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
CS1 templates wrap their contents in {{tag|cite}}, but [https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-cite-element &#039;&#039;&amp;lt;cite&amp;gt;HTML Standard&amp;lt;/cite&amp;gt;&#039;&#039; § The &amp;lt;code&amp;gt;cite&amp;lt;/code&amp;gt; element] says {{tag|cite}} is specifically for the titles of works, and [https://html.spec.whatwg.org/multipage/text-level-semantics.html#example-cite-usage-bibliography explicitly states] that using it for the {{em|entirety}} of a citation in a bibliography is incorrect. {&amp;amp;#123;&#039;&#039;&#039;[[User:Lemondoge|Lemondoge]]&#039;&#039;&#039;&amp;amp;#124;[[User talk:Lemondoge|Talk]]&amp;amp;#124;[[Special:Contributions/Lemondoge|Contributions]]&amp;amp;#125;} 20:53, 25 August 2026 (UTC)&lt;br /&gt;
:IIRC this has been discussed at least twice before, several years ago. It got heated. --[[User:Redrose64|&amp;lt;span style=&amp;quot;color:#a80000; background:#ffeeee; text-decoration:inherit&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;rose64]] &amp;amp;#x1f339; ([[User talk:Redrose64|talk]]) 21:55, 25 August 2026 (UTC)&lt;br /&gt;
:See [[Help talk:Citation Style 1/Archive 100#Citations wrapped in &amp;amp;lt;cite&amp;amp;gt;]] from last year. [[User talk:Kanguole|Kanguole]] 22:04, 25 August 2026 (UTC)&lt;br /&gt;
::In short, this is a stupid &#039;recommendation&#039; by WHATWG and will continue to be ignored as a stupid. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 22:13, 25 August 2026 (UTC)&lt;br /&gt;
::o {&amp;amp;#123;&#039;&#039;&#039;[[User:Lemondoge|Lemondoge]]&#039;&#039;&#039;&amp;amp;#124;[[User talk:Lemondoge|Talk]]&amp;amp;#124;[[Special:Contributions/Lemondoge|Contributions]]&amp;amp;#125;} 22:27, 25 August 2026 (UTC)&lt;br /&gt;
:::At the top of the page that you linked in your first post, it says &amp;lt;q&amp;gt;Living Standard — Last Updated 25 August 2026&amp;lt;/q&amp;gt;. That&#039;s what it says as I type this, but it won&#039;t necessarily say that tomorrow, and definitely won&#039;t have said that yesterday. It summarises my problem with WHATWG: it is a &amp;quot;living&amp;quot; standard - it&#039;s prone to change, often without warning. You can&#039;t say to somebody, &amp;quot;this is how you use this particular HTML element&amp;quot; and include a WHATWG link, because when they get around to using that spec, it may well have changed. Also, there&#039;s no change log that I can find, so you can&#039;t say &amp;quot;right, when we first discussed the issue, it said to do that, but now it says to do this&amp;quot;. Compare W3C&#039;s [https://www.w3.org/TR/css-cascade-5/#changes Changes to CSS Cascading and Inheritance Level 5]. --[[User:Redrose64|&amp;lt;span style=&amp;quot;color:#a80000; background:#ffeeee; text-decoration:inherit&amp;quot;&amp;gt;Red&amp;lt;/span&amp;gt;rose64]] &amp;amp;#x1f339; ([[User talk:Redrose64|talk]]) 23:02, 25 August 2026 (UTC)&lt;br /&gt;
::::In short, living standard is an oxymoron. —[[User:David Eppstein|David Eppstein]] ([[User talk:David Eppstein|talk]]) 23:14, 25 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Template:Citation – wrong links in hatnotes ==&lt;br /&gt;
&lt;br /&gt;
There are some wrong/non-functional links in hatnotes at [[Template:Citation]]. E.g. under the heading &amp;quot;Anchor&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
:Not to be confused with &amp;lt;u&amp;gt;§ Identifiers&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Further information: &amp;lt;u&amp;gt;§ Anchored citations&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The first line links to https://en.wikipedia.org/wiki/#Identifiers, which just redirects to the main page. Same as several other ones I checked.&lt;br /&gt;
&lt;br /&gt;
— [[User:Phazd|Phazd]] ([[User_talk:Phazd|talk]]|[[Special:Contributions/Phazd|contribs]]) 21:43, 29 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
{{Edit template-protected|Module:Hatnote|Module:Format link|answered=yes}}&lt;br /&gt;
:This is problem about [[Module:Hatnote]] (and [[Module:Format link]]). See [[:ja:Special:Diff/110484481]], [[:ja:Special:Diff/110484386]]. --[[User:FlatLanguage|FlatLanguage]] ([[User talk:FlatLanguage|talk]]) 08:16, 30 August 2026 (UTC)&lt;br /&gt;
::Not done.  These requests should be made at [[Module talk:Hatnote]] and [[Module talk:Format link]].&lt;br /&gt;
::—[[User:Trappist the monk|Trappist the monk]] ([[User talk:Trappist the monk|talk]]) 12:01, 30 August 2026 (UTC)&lt;br /&gt;
:::I have worked around the problem for now. I wonder if it used to work. – [[User:Jonesey95|Jonesey95]] ([[User talk:Jonesey95|talk]]) 21:39, 31 August 2026 (UTC)&lt;br /&gt;
::::Before Parsoid, it worked. Parsoid&#039;s render of &amp;lt;code&amp;gt;[[:#&amp;lt;/code&amp;gt; links to main page. [[User:FlatLanguage|FlatLanguage]] ([[User talk:FlatLanguage|talk]]) 13:37, 7 September 2026 (UTC)&lt;br /&gt;
:::::Confirmed: [https://en.wikipedia.org/w/index.php?title=Template:Citation/doc&amp;amp;oldid=1368874104&amp;amp;useparsoid=0#Anchored_citations before] (using useparsoid=0) vs [https://en.wikipedia.org/w/index.php?title=Template:Citation/doc&amp;amp;oldid=1368874104#Anchored_citations after] — [[User:SirOlgen|SirOlgen]] ([[User talk:SirOlgen|talk]]) 18:00, 7 September 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== doi-broken-date possible meanings ==&lt;br /&gt;
&lt;br /&gt;
The {{para|doi-broken-date}} parameter can mean broken in a variety of ways:&lt;br /&gt;
# doi.org itself returns a 404 reply, saying &amp;quot;DOI Not Found&amp;quot;, eg. {{DOI|10.4324/9781315820880-12}}[https://books.google.com/books?id=DHdmAgAAQBAJ&amp;amp;pg=RA1-PT223]&lt;br /&gt;
# doi.org redirects to a 404 reply, eg. {{DOI|10.1596/1813-9450-1536}}[https://web.archive.org/web/20171122215526/https://elibrary.worldbank.org/doi/pdf/10.1596/1813-9450-1536][https://doi.org/10.1017/s1053837224000014#reference-34-content]&lt;br /&gt;
# doi.org redirects to a domain with no server responding to HTTP requests (the whole domain is dead)&lt;br /&gt;
&lt;br /&gt;
All of these are easily machine-verifiable. DOIs can have another kind of resolver issue, where doi.org redirects to a URL which represents the wrong resource. I&#039;ve seen this before in DOIs getting linked to the wrong chapter of a book. This isn&#039;t readily machine-verifiable and probably shouldn&#039;t use the {{para|doi-broken-date}} parameter.&lt;br /&gt;
&lt;br /&gt;
I was considering editing [[Template:Citation Style documentation/id2]]. However, I decided just to document it here instead. [[User:Daask|Daask]] ([[User talk:Daask|talk]]) 15:18, 30 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== WP:JCW update - Open access ==&lt;br /&gt;
&lt;br /&gt;
{{Main|WT:JCW#WP:JCW update - Open access}}&lt;br /&gt;
BTW just a heads up, the [[WP:JCW]] compilation now reports whether or not publications and publishers are open access ones. It&#039;s not perfect, sometimes there are classes like (delayed open access being the category given to the article, but the infobox just says open-access = yes, so the bot picks one which might not be accurate. Most publishers should be unflagged because the publisher a mix of open and closed access journals, while most publications should probably be flagged as hybrid open access, since most will support a pay-to-make-it-free option.&lt;br /&gt;
&lt;br /&gt;
Things should get considerably more accurate after the next dump, but if you have feedback, please let me know at [[WT:JCW#WP:JCW update - Open access]]! &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 15:04, 31 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== cite speech ==&lt;br /&gt;
&lt;br /&gt;
* I can&#039;t wrap my head around speech being handled as a published document (a speech with chapters). Why is it called speech then? Like I said in the dicussion at the top, &#039;&#039;creation-date&#039;&#039; would really be an appropriate solution. &lt;br /&gt;
&lt;br /&gt;
* Since we have video and audio online speeches can be published in these formats, without ever being printed. In that case there is a problem with &#039;&#039;minutes&#039;&#039; and &#039;&#039;time&#039;&#039;. Both seem pretty much the same, they serve a specific moment in the speech, a specific citation; there is no way to say how long the speech (the video or audio) as a whole is, which is quite interesting. And it can&#039;t be referenced a whole work.&lt;br /&gt;
&lt;br /&gt;
* My specific problem I came upon when I tried to cite a lecture uploaded on youtube. I would rather focus on the circumstances of the lecture than on the platform it is presented on (maybe even use the appendix &#039;&#039;via&#039;&#039;), so I don&#039;t want to use &#039;&#039;cite web&#039;&#039;. I hoped to find &#039;&#039;cite lecture&#039;&#039;, but there was only speech, ok. Cite conference could have suited the talk, but it was a stand-alone event, specifically:&lt;br /&gt;
::{{cite speech |author1=Gretchen A. Hirschauer (curator) |author2=Joanna R. Dunn (conservator) |url=https://www.youtube.com/watch?v=-gJz0iobzVg |title=Celebrating Vittore Carpaccio: Exhibition and Conservation at the National Gallery of Art |website=YouTube |publisher=National Gallery of Art |publication-place=Washington, DC |date=February 7, 2023 |type=lecture, 89 min |location=[[Embassy of Italy, Washington, D.C.|Embassy of Italy]] Auditorium |language=en |postscript=, on the occasion of the NGA exhibition titled &#039;&#039;Vittore Carpaccio: Master Storyteller of Renaissance Venice&#039;&#039;.}} (Used at [[Two Venetian Ladies]]) &lt;br /&gt;
&lt;br /&gt;
:I will probably remove (curator)+(conservator), because of the following date also in brackets (don&#039;t like that). The point here is that the location translates to &amp;quot;Written at&amp;quot;, which is irrelevant here, but there is a difference between the date the speech was given and the date at which the video was uploaded --for that I can use orig-date and publication-date--, but there is also the location of the publisher and the location the speech was held. If I can not use publication-place for the location of the event, because it&#039;s coupled with the publisher&lt;br /&gt;
::(simplified: {{cite speech |author1=Gretchen A. Hirschauer |url=https://www.youtube.com/watch?v=-gJz0iobzVg |title=Celebrating Vittore Carpaccio |website=YouTube |publisher=National Gallery |publication-place=[[Embassy of Italy, Washington, D.C.]], auditorium |date=2023 |type=lecture, 89 min |language=en |postscript=, on the occasion of the NGA exhibition.}})&lt;br /&gt;
&lt;br /&gt;
* Cite speech has a &#039;&#039;conference-date&#039;&#039; and &#039;&#039;conference-url&#039;&#039;, but no conference-place? This could have been a solution for my problem.&lt;br /&gt;
&lt;br /&gt;
* P.S.: I found &#039;&#039;type=&#039;&#039; on many occasions very helpful, and I use it to specify the literary genre (pamphlet, speech, album credits, afterword) or the section in a newspaper or magazine (obituary, review, interview). Is this ok, and maybe supposed to be used in that way?&lt;br /&gt;
[[User:MenkinAlRire|MenkinAlRire]] 15:13, 31 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:{{tl|cite av media}} is also available and may be your preference. [[User:Izno|Izno]] ([[User talk:Izno|talk]]) 21:43, 31 August 2026 (UTC)&lt;br /&gt;
::Answering a few of these questions: &lt;br /&gt;
::*Until the advent of recording technology, the only way to refer to a speech was as a published version on paper. See {{oclc|844357129}} for an 1896 example of a book of speeches. &lt;br /&gt;
::*We never use a CS1 template to specify the length of a work that we are citing, only the location in the work where support can be found for a claim made in an article. – [[User:Jonesey95|Jonesey95]] ([[User talk:Jonesey95|talk]]) 21:48, 31 August 2026 (UTC)&lt;br /&gt;
:::* That is what I said. But since then the media landscape has changed very much so there will be a sentimental niche for books just like vinyl (Yeah, sad. Especially in the sciences the oftentimes very expensive publications will die out, I suppose, also because the (specialised) libraries, who are the main target, won&#039;t have the finances anymore.)&lt;br /&gt;
:::* With the video I found it interesting to know in advance, how much time I would have to spent on it, which is different to a book, a speech also doesn&#039;t have an index or even chapters (in my case it is 90 min, not 2, like another one in the article). But I wouldn&#039;t tell the number of pages either (or the size in kb), so I can agree with you there.&lt;br /&gt;
:::[[User:MenkinAlRire|MenkinAlRire]] 22:54, 31 August 2026 (UTC)&lt;br /&gt;
::Oh, I overlooked this one. I&#039;ll have a look at it. Thanks. [[User:MenkinAlRire|MenkinAlRire]] 22:28, 31 August 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Cite podcast ==&lt;br /&gt;
&lt;br /&gt;
Why is there no entry for guest or interviewee? [[User:Viriditas|Viriditas]] ([[User talk:Viriditas|talk]]) 09:33, 1 September 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Question/yet another field order request ==&lt;br /&gt;
Greetings and felicitations.  In &amp;quot;{{Tl|Cite journal}}&amp;quot;, why is the order &amp;quot;&#039;&#039;Journal&#039;&#039; &#039;&#039;&#039;Vol&#039;&#039;&#039; (issue). Publisher: pages&amp;quot;?  I would think that &amp;quot;Publisher: &#039;&#039;Journal&#039;&#039;{{-&amp;quot;}}, or &amp;quot;&#039;&#039;Journal&#039;&#039; (Publisher)&amp;quot;, or some other closer association would make more sense. —[[User:DocWatson42|DocWatson42]] ([[User talk:DocWatson42|talk]]) 11:57, 1 September 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I think {{code|publisher}} (and {{code|place}}), when they are defined, are at their right place, as in {{template|Cite book}}, but I have always found it extremely odd for the page number to be put after these, rather than after the {{code|issue}} (and {{code|volume}}) number, as when they are not defined. [[User:Keriluamox|Keriluamox]] ([[User talk:Keriluamox|talk]]) 12:17, 1 September 2026 (UTC)&lt;br /&gt;
::Before March 2024, {{tl|cite journal}} puts volume after publisher:&lt;br /&gt;
:::&amp;lt;cite class=&amp;quot;citation journal cs1&amp;quot;&amp;gt;Author (2000). &amp;quot;title&amp;quot;. &#039;&#039;journal&#039;&#039;. location: publisher. &amp;lt;b&amp;gt;1&amp;lt;/b&amp;gt; (2): &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;10–&amp;lt;/span&amp;gt;20.&amp;lt;/cite&amp;gt;&lt;br /&gt;
::After [[Help talk:Citation Style 1/Archive_93#tcommon assignment cleanup]], [[Help talk:Citation Style 1/Archive 94#module suite update 23–24 March 2024]]:&lt;br /&gt;
:::&amp;lt;cite class=&amp;quot;citation journal cs1&amp;quot;&amp;gt;Author (2000). &amp;quot;title&amp;quot;. &#039;&#039;journal&#039;&#039;. &amp;lt;b&amp;gt;1&amp;lt;/b&amp;gt; (2). location: publisher: &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;10–&amp;lt;/span&amp;gt;20.&amp;lt;/cite&amp;gt;&lt;br /&gt;
::I’ve talked about it on [[User talk:Trappist the monk/Archive 28#Page number in wrong place in cite journal]]. [[User:FlatLanguage|FlatLanguage]] ([[User talk:FlatLanguage|talk]]) 12:36, 1 September 2026 (UTC)&lt;br /&gt;
:::I&#039;ve complained about this too at some point. &amp;amp;#32;&amp;lt;span style=&amp;quot;font-variant:small-caps; whitespace:nowrap;&amp;quot;&amp;gt;[[User:Headbomb|Headbomb]] {[[User talk:Headbomb|t]] · [[Special:Contributions/Headbomb|c]] · [[WP:PHYS|p]] · [[WP:WBOOKS|b]]}&amp;lt;/span&amp;gt; 14:46, 1 September 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
On a similar topic, if the language is displayed, it should be after the title, not the series, and (pardon me if I&#039;ve mentioned this before) the edition should also be before the series, please.  Examples:&lt;br /&gt;
&lt;br /&gt;
* {{Cite book |last=Zana |first1=Mehdî |year=2005 |title=Ay dayê |language=ku |series=Weşanên Tevn; Roman |publisher=Weşanên Tevn |location=Aksaray, İstanbul |isbn=978-975-9094-03-4 |oclc=72801208}}&lt;br /&gt;
* {{Cite book |last=Zana |first=Mehdî |year=1995 |title=Sevgili Leyla : uzun bir sürgündü o gece |edition=1st |series=Belge Yayınları, 243; Yaşam ve anılar |language=tr |publisher=Belge Yayınları |location=İstanbul |isbn=978-975-344-086-8 |oclc=260193256}}&lt;br /&gt;
&lt;br /&gt;
—[[User:DocWatson42|DocWatson42]] ([[User talk:DocWatson42|talk]]) 12:58, 2 September 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
== I believe the miscellaneous URL warning for CiteSeerX URL format can now be removed. (Module:Citation/CS1) ==&lt;br /&gt;
&lt;br /&gt;
CiteSeerX is now completely down, as far as I can see. Driving editors to make more or less tedious URL changes through a maintenance message seems like a waste to me now, given that both are now just equivalently dead links to be replaced, with neither being more valuable than the other.&lt;br /&gt;
&lt;br /&gt;
If I receive agreement, I&#039;d go ahead and make an edit request to remove the check in question. After sandboxing, needless to say. I think that&#039;s how it works, at least. [[User:DraegerChem|DraegerChem]] ([[User talk:DraegerChem|talk]]) 19:52, 6 September 2026 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Exactly which message do you mean? -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 12:54, 7 September 2026 (UTC)&lt;br /&gt;
::[[Wolfram&#039;s 2-state 3-symbol Turing machine#References]]&lt;br /&gt;
::Here is an example. Citation 3 is affected. &amp;quot;CS1 maint: miscellaneous url&amp;quot;. It appears to be there because the citation&#039;s original link points to a CiteSeerX site. It doesn&#039;t seem to me though that it&#039;s of much use anymore, though, as it appears that all CiteSeerX sites are now down, so a format change won&#039;t do anything useful. I may be misinterpreting, but that&#039;s what I figured so far. The message in itself seems sound, but that it would still trigger for CiteSeerX links in the &#039;url&#039; parameter does not, given that all such URLs should now be made to point to archive links where available. [[User:DraegerChem|DraegerChem]] ([[User talk:DraegerChem|talk]]) 19:14, 7 September 2026 (UTC)&lt;br /&gt;
:::It&#039;s there so that is editors can deal with the dead links, it&#039;s possible that the papers will be available elsewhere. It that case it appears it&#039;s available from the [[American Mathematical Society|AMS]][https://www.ams.org/notices/201003/rtx100300343p.pdf] -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 20:58, 7 September 2026 (UTC)&lt;br /&gt;
::::I hadn&#039;t realised the archive links for that reference works, it most cases it doesn&#039;t (see discussion in [https://en.wikipedia.org/wiki/Help_talk:Citation_Style_1/Archive_102#deprecate_|citeseerx=_? archive 102]). -- &amp;lt;small&amp;gt;LCU&amp;lt;/small&amp;gt; &#039;&#039;&#039;[[User:ActivelyDisinterested|A&amp;lt;small&amp;gt;ctively&amp;lt;/small&amp;gt;D&amp;lt;small&amp;gt;isinterested&amp;lt;/small&amp;gt;]]&#039;&#039;&#039; &amp;lt;small&amp;gt;&#039;&#039;«[[User talk:ActivelyDisinterested|@]]» °[[Special:Contributions/ActivelyDisinterested|∆t]]°&#039;&#039;&amp;lt;/small&amp;gt; 21:03, 7 September 2026 (UTC)&lt;br /&gt;
:::::Ah, I see. That makes more sense then. It is likely better to keep it the way it is in that case, although I&#039;m not sure the help page for the maintenance message is still helpful. I suppose that may be the right place to intervene, but what to replace it with I&#039;m not sure and I think I&#039;ll leave that to someone else.&lt;br /&gt;
:::::Thank you for your response and for clearing this up, in any case. [[User:DraegerChem|DraegerChem]] ([[User talk:DraegerChem|talk]]) 21:31, 7 September 2026 (UTC)&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Transwiki_guide&amp;diff=1108</id>
		<title>Mal:Transwiki guide</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Transwiki_guide&amp;diff=1108"/>
		<updated>2026-09-10T13:31:15Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ombox&lt;br /&gt;
|image=[[File:Edit-copy.svg|40px|alt=|link=]]&lt;br /&gt;
|text={{{text|See {{#if:{{{1|}}}|[[{{{1}}}]]|[[{{FULLPAGENAME}}/Transwiki guide]]}} for help copying this {{#if: {{{type|}}}|{{{type}}}|{{#ifeq: {{NAMESPACE}}|Template|template|{{#ifeq: {{NAMESPACE}}|Module|module|project}}}}}} and modifying it for use on another wiki.}}}&lt;br /&gt;
|small={{{small|}}}&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;[[Category:Transwiki guide|{{{2|{{PAGENAME}}}}}]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Plain_link&amp;diff=1106</id>
		<title>Mal:Plain link</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Plain_link&amp;diff=1106"/>
		<updated>2026-09-10T13:31:14Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot; {{SAFESUBST:&amp;lt;noinclude /&amp;gt;#if:{{{title|}}}|title=&amp;quot;{{{title}}}&amp;quot;}}&amp;gt;{{SAFESUBST:&amp;lt;noinclude /&amp;gt;#if:{{{2|{{{NAME|{{{name|}}}}}}}}}&lt;br /&gt;
 |[{{{1|{{{URL|{{{url}}}}}}}}} {{{2|{{{NAME|{{{name|}}}}}}}}}]&lt;br /&gt;
 |[{{{1|{{{URL|{{{url}}}}}}}}}]&lt;br /&gt;
}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Citation/CS1/Suggestions&amp;diff=1104</id>
		<title>Modul:Citation/CS1/Suggestions</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Citation/CS1/Suggestions&amp;diff=1104"/>
		<updated>2026-09-10T13:31:13Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Please insert new suggestions in alphabetical order&lt;br /&gt;
-- The form is [&#039;incorrect&#039;] = &#039;correct&#039;,&lt;br /&gt;
&lt;br /&gt;
suggestions = {&lt;br /&gt;
	[&#039;ASIN-TLD&#039;] = &#039;asin-tld&#039;,													-- old parameter name&lt;br /&gt;
	[&#039;abruf&#039;] = &#039;access-date&#039;,													-- German&lt;br /&gt;
	[&#039;abruf-verborgen&#039;] = &#039;access-date&#039;,										-- German&lt;br /&gt;
	[&#039;accessmonth&#039;] = &#039;access-date&#039;,&lt;br /&gt;
	[&#039;accesso&#039;] = &#039;access-date&#039;,												-- Italian&lt;br /&gt;
	[&#039;accessyear&#039;] = &#039;access-date&#039;,&lt;br /&gt;
	[&#039;acessodata&#039;] = &#039;access-date&#039;,												-- Brazilian Portuguese&lt;br /&gt;
	[&#039;ad&#039;] = &#039;first&#039;,															-- Turkish&lt;br /&gt;
	[&#039;address&#039;] = &#039;location&#039;,&lt;br /&gt;
	[&#039;anno&#039;] = &#039;date&#039;,															-- Italian&lt;br /&gt;
	[&#039;annoaccesso&#039;] = &#039;access-date&#039;,											-- Italian&lt;br /&gt;
	[&#039;annodiaccesso&#039;] = &#039;access-date&#039;,											-- Italian&lt;br /&gt;
	[&#039;annooriginale&#039;] = &#039;orig-date&#039;,											-- Italian&lt;br /&gt;
	[&#039;année&#039;] = &#039;date&#039;,															-- French&lt;br /&gt;
	[&#039;apellido&#039;] = &#039;last&#039;,														-- Spanish&lt;br /&gt;
	[&#039;apellidos&#039;] = &#039;last&#039;,														-- Spanish&lt;br /&gt;
	[&#039;archiv-datum&#039;] = &#039;archive-date&#039;,											-- German&lt;br /&gt;
	[&#039;archiv-url&#039;] = &#039;archive-url&#039;,												-- German&lt;br /&gt;
	[&#039;archive date&#039;] = &#039;archive-date&#039;,                                          -- misspelling&lt;br /&gt;
	[&#039;archive url&#039;] = &#039;archive-url&#039;,											-- misspelling&lt;br /&gt;
	[&#039;archive-link&#039;] = &#039;archive-url&#039;,	                                        -- old parameter name&lt;br /&gt;
    [&#039;archiv-url&#039;] = &#039;archive-url&#039;,												-- German	&lt;br /&gt;
    [&#039;arkivdatum&#039;] = &#039;archive-date&#039;,											-- Swedish, Norwegian&lt;br /&gt;
    [&#039;arkivurl&#039;] = &#039;archive-url&#039;,											    -- Swedish, Norwegian	&lt;br /&gt;
    [&#039;artist&#039;] = &#039;others&#039;,&lt;br /&gt;
	[&#039;arşiv-tarihi&#039;] = &#039;archive-date&#039;,											-- Turkish&lt;br /&gt;
	[&#039;arşiv-url&#039;] = &#039;archive-url&#039;,												-- Turkish&lt;br /&gt;
	[&#039;arşivtarihi&#039;] = &#039;archive-date&#039;,											-- Turkish&lt;br /&gt;
	[&#039;arşivurl&#039;] = &#039;archive-url&#039;,												-- Turkish&lt;br /&gt;
	[&#039;auflage&#039;] = &#039;edition&#039;,													-- German&lt;br /&gt;
	[&#039;auteur&#039;] = &#039;author&#039;,														-- French&lt;br /&gt;
	[&#039;auther&#039;] = &#039;author&#039;,                                                      -- misspelling&lt;br /&gt;
	[&#039;author link&#039;] = &#039;author-link&#039;,											-- Polish&lt;br /&gt;
	[&#039;authorfirst&#039;] = &#039;author-first&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;authorgiven&#039;] = &#039;author-given&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;authorlast&#039;] = &#039;author-last&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;authormask&#039;] = &#039;author-mask&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;authorsurname&#039;] = &#039;author-surname&#039;,										-- old parameter name&lt;br /&gt;
	[&#039;autor&#039;] = &#039;author&#039;,														-- Spanish, German (singular and plural)&lt;br /&gt;
	[&#039;autore&#039;] = &#039;author&#039;,														-- Italian&lt;br /&gt;
	[&#039;autthor&#039;] = &#039;author&#039;,                                                     -- misspelling&lt;br /&gt;
	[&#039;ay&#039;] = &#039;month&#039;,															-- Turkish&lt;br /&gt;
	[&#039;año&#039;] = &#039;date&#039;,															-- Spanish&lt;br /&gt;
	[&#039;año-original&#039;] = &#039;orig-date&#039;,												-- Spanish&lt;br /&gt;
	[&#039;añoacceso&#039;] = &#039;access-date&#039;,												-- Spanish&lt;br /&gt;
	[&#039;añooriginal&#039;] = &#039;orig-date&#039;,												-- Spanish&lt;br /&gt;
	[&#039;band&#039;] = &#039;volume&#039;,														-- German&lt;br /&gt;
	[&#039;bandreihe&#039;] = &#039;volume&#039;,													-- German&lt;br /&gt;
	[&#039;baskı&#039;] = &#039;edition&#039;,														-- Turkish&lt;br /&gt;
	[&#039;başlık&#039;] = &#039;title&#039;,														-- Turkish&lt;br /&gt;
	[&#039;began&#039;] = &#039;date&#039;,															-- old parameter name (cite serial only); or orig-date=&lt;br /&gt;
	[&#039;booktitle&#039;] = &#039;book-title&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;ch&#039;] = &#039;language&#039;,														-- German (as &#039;language=de-CH&#039;)&lt;br /&gt;
	[&#039;chapter_title&#039;] = &#039;chapter&#039;,&lt;br /&gt;
	[&#039;chapterurl&#039;] = &#039;chapter-url&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;cid&#039;] = &#039;ref&#039;,															-- Italian&lt;br /&gt;
	[&#039;cilt&#039;] = &#039;volume&#039;,														-- Turkish&lt;br /&gt;
	[&#039;cita&#039;] = &#039;quote&#039;,															-- Spanish&lt;br /&gt;
	[&#039;citazione&#039;] = &#039;quote&#039;,													-- Italian&lt;br /&gt;
	[&#039;città&#039;] = &#039;location&#039;,														-- Italian&lt;br /&gt;
	[&#039;city&#039;] = &#039;location&#039;,														-- old parameter name (cite serial only)&lt;br /&gt;
	[&#039;coauthor&#039;] = &#039;author&#039;,&lt;br /&gt;
	[&#039;coauthors&#039;] = &#039;author&#039;,&lt;br /&gt;
	[&#039;coautores&#039;] = &#039;author&#039;,													-- Spanish&lt;br /&gt;
	[&#039;coautori&#039;] = &#039;author&#039;,													-- Italian&lt;br /&gt;
	[&#039;cognome&#039;] = &#039;last&#039;,														-- Italian&lt;br /&gt;
	[&#039;conferenceurl&#039;] = &#039;conference-url&#039;,										-- old parameter name&lt;br /&gt;
	[&#039;consulté le&#039;] = &#039;access-date&#039;,											-- French&lt;br /&gt;
	[&#039;contributionurl&#039;] = &#039;contribution-url&#039;,									-- old parameter name&lt;br /&gt;
	[&#039;curatore&#039;] = &#039;publisher&#039;,													-- Italian&lt;br /&gt;
	[&#039;czasopismo&#039;] = &#039;journal&#039;,													-- Polish&lt;br /&gt;
	[&#039;data dostępu&#039;] = &#039;access-date&#039;,											-- Polish&lt;br /&gt;
	[&#039;data&#039;] = &#039;date&#039;,															-- Polish, Italian&lt;br /&gt;
	[&#039;dataaccesso&#039;] = &#039;access-date&#039;,											-- Italian&lt;br /&gt;
	[&#039;dataarchivio&#039;] = &#039;archive-date&#039;,											-- Italian&lt;br /&gt;
	[&#039;datum&#039;] = &#039;date&#039;,															-- German, Swedish&lt;br /&gt;
	[&#039;dead-url&#039;] = &#039;url-status&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;deadlink&#039;] = &#039;url-status&#039;,                                                -- old parameter name&lt;br /&gt;
	[&#039;deadurl&#039;] = &#039;url-status&#039;,													-- old parameter name&lt;br /&gt;
	[&#039;dergi&#039;] = &#039;work&#039;,															-- Turkish&lt;br /&gt;
	[&#039;dil&#039;] = &#039;language&#039;,														-- Turkish&lt;br /&gt;
	[&#039;displayauthors&#039;] = &#039;display-authors&#039;,										-- old parameter name&lt;br /&gt;
	[&#039;displayeditors&#039;] = &#039;display-editors&#039;,										-- old parameter name&lt;br /&gt;
	[&#039;distributor&#039;] = &#039;publisher&#039;,&lt;br /&gt;
	[&#039;dnb&#039;] = &#039;id&#039;,																-- German (as &#039;id={{DNB-IDN|...}}&#039;)&lt;br /&gt;
	[&#039;doi-broken&#039;] = &#039;doi-broken-date&#039;,											-- old parameter alias&lt;br /&gt;
	[&#039;doi-inactive&#039;] = &#039;doi-broken-date&#039;,										-- invalid name found in mainspace&lt;br /&gt;
	[&#039;doi-inactive-date&#039;] = &#039;doi-broken-date&#039;,									-- old parameter alias&lt;br /&gt;
	[&#039;doi_brokendate&#039;] = &#039;doi-broken-date&#039;,										-- old parameter alias&lt;br /&gt;
	[&#039;doi_inactivedate&#039;] = &#039;doi-inactive-date&#039;,									-- old parameter alias&lt;br /&gt;
	[&#039;doibroken&#039;] = &#039;doi-broken-date&#039;,											-- invalid name found in mainspace&lt;br /&gt;
	[&#039;doiinactive&#039;] = &#039;doi-broken-date&#039;,										-- invalid name found in mainspace&lt;br /&gt;
	[&#039;e-print&#039;] = &#039;eprint&#039;,														-- misspelling&lt;br /&gt;
	-- [&#039;ed&#039;] = &#039;edition&#039;,														-- avoid suggestion as in English this could be short for editor or edition&lt;br /&gt;
	-- [&#039;editora&#039;] = &#039;publisher&#039;,												-- can be either editor or publisher&lt;br /&gt;
	-- [&#039;editore&#039;] = &#039;agency&#039;,													-- can be either publisher or agency&lt;br /&gt;
	-- [&#039;editori&#039;] = &#039;editor&#039;,													-- can be either editor or publisher&lt;br /&gt;
	-- [&#039;editorial&#039;] = &#039;publisher&#039;,												-- can be either publisher or work&lt;br /&gt;
	[&#039;editoin&#039;] = &#039;edition&#039;,													-- misspelling&lt;br /&gt;
	[&#039;editon&#039;] = &#039;edition&#039;,														-- misspelling&lt;br /&gt;
	[&#039;editorfirst&#039;] = &#039;editor-first&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;editorgiven&#039;] = &#039;editor-given&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;editorlast&#039;] = &#039;editor-last&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;editorlink&#039;] = &#039;editor-link&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;editormask&#039;] = &#039;editor-mask&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;editors&#039;] = &#039;editor&#039;,														-- old parameter name (can be emulated using multiple singular |editor= params)&lt;br /&gt;
	[&#039;editorsurname&#039;] = &#039;editor-surname&#039;,										-- old parameter name&lt;br /&gt;
	[&#039;edizione&#039;] = &#039;edition&#039;,													-- Italian&lt;br /&gt;
	[&#039;embargo&#039;] = &#039;pmc-embargo-date&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;ended&#039;] = &#039;date&#039;,															-- old parameter name (cite serial only)&lt;br /&gt;
	[&#039;en ligne le&#039;] = &#039;archive-date&#039;,											-- French&lt;br /&gt;
	[&#039;encyclopædia&#039;] = &#039;encyclopedia&#039;,&lt;br /&gt;
	[&#039;enlaceautor&#039;] = &#039;author-link&#039;,											-- Spanish&lt;br /&gt;
	[&#039;enlaceroto&#039;] = &#039;url-status&#039;,												-- Spanish&lt;br /&gt;
	[&#039;episodelink&#039;] = &#039;episode-link&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;erişimtarihi&#039;] = &#039;access-date&#039;,											-- Turkish&lt;br /&gt;
	[&#039;eser&#039;] = &#039;work&#039;,															-- Turkish&lt;br /&gt;
	[&#039;family&#039;] = &#039;surname&#039;,														-- misguess&lt;br /&gt;
	[&#039;fecha&#039;] = &#039;date&#039;,															-- Spanish&lt;br /&gt;
	[&#039;fechaacceso&#039;] = &#039;access-date&#039;,											-- Spanish&lt;br /&gt;
	[&#039;fechaarchivo&#039;] = &#039;archive-date&#039;,											-- Spanish&lt;br /&gt;
	[&#039;filetype&#039;] = &#039;format&#039;,&lt;br /&gt;
	[&#039;foramt&#039;] = &#039;format&#039;,														-- misspelling&lt;br /&gt;
	[&#039;fore-name&#039;] = &#039;given&#039;,													-- misguess/misspelling&lt;br /&gt;
	[&#039;forename&#039;] = &#039;given&#039;,														-- misguess&lt;br /&gt;
	[&#039;författare&#039;] = &#039;author&#039;,                                                  -- Swedish, Norwegian&lt;br /&gt;
    [&#039;formato&#039;] = &#039;format&#039;,														-- Spanish, Italian, Polish&lt;br /&gt;
	[&#039;frist&#039;] = &#039;first&#039;,														-- misspelling&lt;br /&gt;
	[&#039;fundstelle&#039;] = &#039;at&#039;,														-- German&lt;br /&gt;
	[&#039;gazete&#039;] = &#039;work&#039;,														-- Turkish&lt;br /&gt;
	[&#039;giornale&#039;] = &#039;journal&#039;,													-- Italian&lt;br /&gt;
    [&#039;hämtdatum&#039;] = &#039;access-date&#039;,											    -- Swedish	&lt;br /&gt;
    [&#039;herausgeber&#039;] = &#039;editor&#039;,													-- German (singular and plural)&lt;br /&gt;
	[&#039;hrsg&#039;] = &#039;publisher&#039;,														-- German&lt;br /&gt;
	[&#039;hrsgreihe&#039;] = &#039;editor&#039;,													-- German&lt;br /&gt;
	[&#039;idioma&#039;] = &#039;language&#039;,													-- Spanish&lt;br /&gt;
	[&#039;ignore-isbn-error&#039;] = &#039;isbn&#039;,												-- old parameter (can be fully emulated using ((syntax)))&lt;br /&gt;
	[&#039;ignoreisbnerror&#039;] = &#039;isbn&#039;,												-- old parameter alias (suggest |isbn as |ignore-isbn-error is deprecated), not a direct replacement, but can be fully emulated using ((syntax))&lt;br /&gt;
	[&#039;imię&#039;] = &#039;first&#039;,															-- Polish&lt;br /&gt;
	[&#039;in-set&#039;] = &#039;inset&#039;,														-- misspelling&lt;br /&gt;
	[&#039;interviewerlink&#039;] = &#039;interviewer-link&#039;,									-- old parameter alias&lt;br /&gt;
	[&#039;interviewermask&#039;] = &#039;interviewer-mask&#039;,									-- old parameter alias&lt;br /&gt;
	[&#039;isbndefekt&#039;] = &#039;isbn&#039;,													-- German (suggest |isbn as |ignore-isbn-error is deprecated), not a direct replacement, but can be fully emulated using ((syntax))&lt;br /&gt;
	[&#039;isbnformalfalsch&#039;] = &#039;isbn&#039;,												-- German (suggest |isbn as |ignore-isbn-error is deprecated), not a direct replacement, but can be fully emulated using ((syntax))&lt;br /&gt;
	[&#039;isbnistformalfalsch&#039;] = &#039;isbn&#039;,											-- German (suggest |isbn as |ignore-isbn-error is deprecated), not a direct replacement, but can be fully emulated using ((syntax))&lt;br /&gt;
	[&#039;isnb&#039;] = &#039;isbn&#039;,															-- misspelling&lt;br /&gt;
	[&#039;issnformalfalsch&#039;] = &#039;issn&#039;,												-- German (can be fully emulated using ((syntax)))&lt;br /&gt;
	[&#039;jahr&#039;] = &#039;date&#039;,															-- German&lt;br /&gt;
	[&#039;jahrea&#039;] = &#039;orig-date&#039;,													-- German (not a direct replacement, but can be emulated)&lt;br /&gt;
	[&#039;kapitel&#039;] = &#039;chapter&#039;,													-- German&lt;br /&gt;
	[&#039;langauge&#039;] = &#039;language&#039;,													-- misspelling&lt;br /&gt;
	[&#039;langue&#039;] = &#039;language&#039;,													-- French&lt;br /&gt;
	[&#039;last-author-amp&#039;] = &#039;name-list-style&#039;,									-- old parameter name (as |name-list-style=amp)&lt;br /&gt;
	[&#039;lastauthoramp&#039;] = &#039;name-list-style&#039;,										-- old parameter name (as |name-list-style=amp)&lt;br /&gt;
	[&#039;lieu&#039;] = &#039;location&#039;,														-- French&lt;br /&gt;
	[&#039;lingua&#039;] = &#039;language&#039;,													-- Italian&lt;br /&gt;
	[&#039;lire en ligne&#039;] = &#039;url&#039;,													-- French&lt;br /&gt;
	[&#039;lizenznummer&#039;] = &#039;id&#039;,													-- German (as &#039;id=License No. ...&#039;)&lt;br /&gt;
&lt;br /&gt;
	[&#039;loaction&#039;] = &#039;location&#039;,													-- misspelling&lt;br /&gt;
	[&#039;local&#039;] = &#039;location&#039;,														-- Brazilian Portuguese&lt;br /&gt;
	[&#039;locatoin&#039;] = &#039;location&#039;,													-- misspelling&lt;br /&gt;
	[&#039;lugar&#039;] = &#039;location&#039;,														-- Spanish&lt;br /&gt;
	[&#039;mailinglist&#039;] = &#039;mailing-list&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;mapurl&#039;] = &#039;map-url&#039;,														-- old parameter name&lt;br /&gt;
	[&#039;mes&#039;] = &#039;date&#039;,															-- Spanish (not a direct replacement)&lt;br /&gt;
	[&#039;mese&#039;] = &#039;date&#039;,															-- Italian (not a direct replacement)&lt;br /&gt;
	[&#039;miejsce&#039;] = &#039;location&#039;,													-- Polish&lt;br /&gt;
	[&#039;miesiąc&#039;] = &#039;date&#039;,														-- Polish&lt;br /&gt;
	[&#039;mois&#039;] = &#039;date&#039;,															-- French&lt;br /&gt;
	[&#039;monat&#039;] = &#039;date&#039;,															-- German&lt;br /&gt;
--	[&#039;name&#039;] = &#039;author&#039;,														-- &#039;name&#039; is often erroneously used for &#039;title&#039; and &#039;work&#039; as well, so no suggestion is better than a wrong suggestion&lt;br /&gt;
	[&#039;name-list-format&#039;] = &#039;name-list-style&#039;,									-- old parameter name (as |name-list-style=amp)&lt;br /&gt;
	[&#039;nazwisko&#039;] = &#039;last&#039;,														-- Polish&lt;br /&gt;
	[&#039;nespaper&#039;] = &#039;newspaper&#039;,													-- misspelling&lt;br /&gt;
	[&#039;net-work&#039;] = &#039;network&#039;,													-- misspelling&lt;br /&gt;
	[&#039;newpaper&#039;] = &#039;newspaper&#039;,													-- misspelling&lt;br /&gt;
	[&#039;news&#039;] = &#039;newspaper&#039;,&lt;br /&gt;
	[&#039;news-group&#039;] = &#039;newsgroup&#039;,												-- misspelling&lt;br /&gt;
	[&#039;news-paper&#039;] = &#039;newspaper&#039;,												-- misspelling&lt;br /&gt;
	[&#039;no-cat&#039;] = &#039;no-tracking&#039;,													-- old parameter&lt;br /&gt;
	[&#039;nocat&#039;] = &#039;no-tracking&#039;,													-- old parameter&lt;br /&gt;
	[&#039;nom&#039;] = &#039;last&#039;,															-- French&lt;br /&gt;
	[&#039;nombre&#039;] = &#039;first&#039;,														-- Spanish&lt;br /&gt;
	[&#039;nome&#039;] = &#039;first&#039;,															-- Italian&lt;br /&gt;
	[&#039;nopp&#039;] = &#039;no-pp&#039;,															-- old parameter name&lt;br /&gt;
	[&#039;notracking&#039;] = &#039;no-tracking&#039;,												-- old parameter&lt;br /&gt;
	[&#039;numero&#039;] = &#039;number&#039;,														-- Italian, Spanish&lt;br /&gt;
	[&#039;nummer&#039;] = &#039;number&#039;,														-- German&lt;br /&gt;
	[&#039;nummerreihe&#039;] = &#039;number&#039;,													-- German&lt;br /&gt;
	[&#039;obra&#039;] = &#039;work&#039;,															-- Spanish&lt;br /&gt;
	[&#039;odpowiedzialność&#039;] = &#039;agency&#039;,											-- Polish&lt;br /&gt;
	[&#039;offline&#039;] = &#039;url-status&#039;,													-- German (as &#039;url-status=dead&#039;)&lt;br /&gt;
	[&#039;online&#039;] = &#039;url&#039;,															-- German (not a direct replacement, but can be emulated)&lt;br /&gt;
	[&#039;opera&#039;] = &#039;work&#039;,															-- Italian&lt;br /&gt;
	[&#039;opublikowany&#039;] = &#039;agency&#039;,												-- Polish&lt;br /&gt;
	[&#039;origdate&#039;] = &#039;orig-date&#039;,													-- misspelling&lt;br /&gt;
	[&#039;originaljahr&#039;] = &#039;orig-date&#039;,												-- German&lt;br /&gt;
	[&#039;originalort&#039;] = &#039;publication-place&#039;,										-- German&lt;br /&gt;
	[&#039;originalsprache&#039;] = &#039;language&#039;,											-- German&lt;br /&gt;
	[&#039;originaltitel&#039;] = &#039;title&#039;,												-- German (if &#039;originaltitel&#039; is specified, any possible contents of &#039;title&#039; should be put in &#039;trans-title&#039;)&lt;br /&gt;
	[&#039;ort&#039;] = &#039;publication-place&#039;,												-- German&lt;br /&gt;
	[&#039;ortea&#039;] = &#039;publication-place&#039;,											-- German (not a direct replacement, but can be emulated)&lt;br /&gt;
	[&#039;other&#039;] = &#039;others&#039;,&lt;br /&gt;
	[&#039;oznaczenie&#039;] = &#039;agency&#039;,													-- Polish&lt;br /&gt;
	[&#039;pagees&#039;] = &#039;pages&#039;,														-- misspelling&lt;br /&gt;
	[&#039;pagina&#039;] = &#039;page&#039;,														-- Italian&lt;br /&gt;
	[&#039;pagina&#039;] = &#039;pages&#039;,														-- Italian&lt;br /&gt;
	[&#039;pagine&#039;] = &#039;pages&#039;,														-- Italian&lt;br /&gt;
	[&#039;pagine&#039;] = &#039;pages&#039;,														-- Italian&lt;br /&gt;
	[&#039;passage&#039;] = &#039;pages&#039;,														-- French&lt;br /&gt;
	[&#039;periodico&#039;] = &#039;magazine&#039;,													-- Spanish&lt;br /&gt;
	[&#039;plublisher&#039;] = &#039;publisher&#039;,												-- misspelling&lt;br /&gt;
	[&#039;pmcid&#039;] = &#039;pmc&#039;,&lt;br /&gt;
	[&#039;post-script&#039;] = &#039;postscript&#039;,												-- misspelling&lt;br /&gt;
	[&#039;praca&#039;] = &#039;work&#039;,															-- Polish&lt;br /&gt;
	[&#039;primero&#039;] = &#039;first&#039;,														-- Spanish&lt;br /&gt;
	[&#039;prénom&#039;] = &#039;first&#039;,														-- French&lt;br /&gt;
	[&#039;prénom1&#039;] = &#039;first1&#039;,														-- French&lt;br /&gt;
	[&#039;ps&#039;] = &#039;postscript&#039;,&lt;br /&gt;
	[&#039;pub&#039;] = &#039;publisher&#039;,&lt;br /&gt;
	-- [&#039;pubblicazione&#039;] = &#039;magazine&#039;,											-- could be any kind of work&lt;br /&gt;
	-- [&#039;publicación&#039;] = &#039;journal&#039;,												-- could be any kind of work&lt;br /&gt;
	[&#039;publicationdate&#039;] = &#039;publication-date&#039;,									-- old parameter name&lt;br /&gt;
	-- [&#039;published&#039;] = &#039;publisher&#039;,												-- could be date, location, or name of publisher&lt;br /&gt;
	[&#039;publicationplace&#039;] = &#039;publication-place&#039;,									-- old parameter name&lt;br /&gt;
	[&#039;pulbication-place&#039;] = &#039;publication-place&#039;,								-- misspelling&lt;br /&gt;
	[&#039;página&#039;] = &#039;page&#039;,														-- Spanish&lt;br /&gt;
	[&#039;páginas&#039;] = &#039;pages&#039;,														-- Spanish&lt;br /&gt;
	[&#039;périodique&#039;] = &#039;publisher&#039;,												-- French&lt;br /&gt;
	[&#039;registration&#039;] = &#039;url-access&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;reihe&#039;] = &#039;series&#039;,														-- German&lt;br /&gt;
	[&#039;retrieved&#039;] = &#039;access-date&#039;,                                              -- old parameter name&lt;br /&gt;
	[&#039;richiestasottoscrizione&#039;] = &#039;url-access&#039;,									-- Italian (as |url-access=subscription)&lt;br /&gt;
	[&#039;rivista&#039;] = &#039;magazine&#039;,                                                   -- Italian&lt;br /&gt;
    [&#039;rok&#039;] = &#039;date&#039;,															-- Polish&lt;br /&gt;
	[&#039;rubrik&#039;] = &#039;title&#039;,                                                       -- Swedish&lt;br /&gt;
    [&#039;sammelwerk&#039;] = &#039;work&#039;,													-- German&lt;br /&gt;
	[&#039;sayfa&#039;] = &#039;page&#039;,															-- Turkish&lt;br /&gt;
	[&#039;sayfalar&#039;] = &#039;pages&#039;,														-- Turkish&lt;br /&gt;
	[&#039;sayı&#039;] = &#039;issue&#039;,															-- Turkish&lt;br /&gt;
	[&#039;script-post&#039;] = &#039;postscript&#039;,												-- misspelling&lt;br /&gt;
	[&#039;script-trans&#039;] = &#039;transcript&#039;,											-- misspelling&lt;br /&gt;
	[&#039;season&#039;] = &#039;date&#039;,														-- old parameter name (cite serial only)&lt;br /&gt;
	[&#039;sectionurl&#039;] = &#039;section-url&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;seiten&#039;] = &#039;pages&#039;,														-- German&lt;br /&gt;
	[&#039;seria&#039;] = &#039;series&#039;,														-- Spanish, Polish&lt;br /&gt;
	[&#039;serie&#039;] = &#039;series&#039;,														-- Italian&lt;br /&gt;
	[&#039;série&#039;] = &#039;series&#039;,														-- French&lt;br /&gt;
	[&#039;serieslink&#039;] = &#039;series-link&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;seriesno&#039;] = &#039;series-number&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;service&#039;] = &#039;agency&#039;,&lt;br /&gt;
	[&#039;sitioweb&#039;] = &#039;website&#039;,													-- Spanish&lt;br /&gt;
	[&#039;sito&#039;] = &#039;website&#039;,														-- Italian&lt;br /&gt;
	[&#039;soyadı&#039;] = &#039;last&#039;,														-- Turkish&lt;br /&gt;
	[&#039;spalten&#039;] = &#039;at&#039;,															-- German (not a direct replacement, but can be emulated)&lt;br /&gt;
	[&#039;sprache&#039;] = &#039;language&#039;,													-- German&lt;br /&gt;
	[&#039;språk&#039;] = &#039;language&#039;,                                                     -- Swedish, Norwegian&lt;br /&gt;
    [&#039;stron&#039;] = &#039;page&#039;,															-- Polish&lt;br /&gt;
	[&#039;strony&#039;] = &#039;pages&#039;,														-- Polish&lt;br /&gt;
	[&#039;subjectlink&#039;] = &#039;subject-link&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;subscription&#039;] = &#039;url-access&#039;,											-- old parameter name (emulated as |url-access=subscription)&lt;br /&gt;
	[&#039;sur-name&#039;] = &#039;surname&#039;,													-- misspelling&lt;br /&gt;
	[&#039;suscripción&#039;] = &#039;url-access&#039;,												-- Spanish, Polish (as |url-access=subscription)&lt;br /&gt;
	[&#039;tag&#039;] = &#039;date&#039;,															-- German&lt;br /&gt;
	[&#039;tarih&#039;] = &#039;date&#039;,															-- Turkish&lt;br /&gt;
	[&#039;template doc demo&#039;] = &#039;no-tracking&#039;,										-- old parameter alias&lt;br /&gt;
	[&#039;tidning&#039;] = &#039;work&#039;,                                                       -- Swedish&lt;br /&gt;
    [&#039;tile&#039;] = &#039;title&#039;,															-- misspelling&lt;br /&gt;
	[&#039;timecaption&#039;] = &#039;time-caption&#039;,											-- old parameter name&lt;br /&gt;
	[&#039;titlelink&#039;] = &#039;title-link&#039;,												-- old parameter name&lt;br /&gt;
	[&#039;tipo&#039;] = &#039;type&#039;,															-- Italian&lt;br /&gt;
	[&#039;tite&#039;] = &#039;title&#039;,															-- misspelling&lt;br /&gt;
	[&#039;titel&#039;] = &#039;title&#039;,														-- German&lt;br /&gt;
	[&#039;titel-p&#039;] = &#039;title&#039;,														-- German (&#039;postscript=none&#039; should be added as well)&lt;br /&gt;
	[&#039;titelerg&#039;] = &#039;contribution&#039;,												-- German (not a direct replacement, but can be emulated)&lt;br /&gt;
	[&#039;titled&#039;] = &#039;title&#039;,														-- Brazilian Portuguese&lt;br /&gt;
	[&#039;titolo&#039;] = &#039;title&#039;,														-- Italian&lt;br /&gt;
	[&#039;titre&#039;] = &#039;title&#039;,														-- French&lt;br /&gt;
	[&#039;trans-script&#039;] = &#039;transcript&#039;,											-- misspelling&lt;br /&gt;
	[&#039;trans_chapter&#039;] = &#039;trans-chapter&#039;,										-- old parameter alias&lt;br /&gt;
	[&#039;trans_title&#039;] = &#039;trans-title&#039;,											-- old parameter alias&lt;br /&gt;
	[&#039;transchapter&#039;] = &#039;trans-chapter&#039;,&lt;br /&gt;
	[&#039;transcripturl&#039;] = &#039;transcript-url&#039;,										-- old parameter name&lt;br /&gt;
	[&#039;transscript&#039;] = &#039;transcript&#039;,												-- misspelling&lt;br /&gt;
	[&#039;transscript-format&#039;] = &#039;transcript-format&#039;,								-- misspelling&lt;br /&gt;
	[&#039;transscript-url&#039;] = &#039;transcript-url&#039;,										-- misspelling&lt;br /&gt;
	[&#039;transscripturl&#039;] = &#039;transcript-url&#039;,										-- misspelling&lt;br /&gt;
	[&#039;transtitle&#039;] = &#039;trans-title&#039;,&lt;br /&gt;
	[&#039;typ&#039;] = &#039;author-mask&#039;,													-- German (not a direct replacement, but the only valid argument &#039;typ=wl&#039; can be emulated using &#039;author-mask&#039;)&lt;br /&gt;
	[&#039;tytuł&#039;] = &#039;title&#039;,														-- Polish&lt;br /&gt;
	[&#039;títle&#039;] = &#039;title&#039;,&lt;br /&gt;
	[&#039;título&#039;] = &#039;title&#039;,														-- Spanish&lt;br /&gt;
	[&#039;ubicación&#039;] = &#039;location&#039;,													-- Spanish&lt;br /&gt;
	[&#039;urlarchivio&#039;] = &#039;archive-url&#039;,											-- Italian&lt;br /&gt;
	[&#039;urlarchivo&#039;] = &#039;archive-url&#039;,												-- Spanish&lt;br /&gt;
	[&#039;urlmorto&#039;] = &#039;url-status&#039;,												-- Italian&lt;br /&gt;
	[&#039;urn&#039;] = &#039;id&#039;,																-- German (as &#039;id={{URN|...}}&#039;)&lt;br /&gt;
	[&#039;v-authors&#039;] = &#039;vauthors&#039;,													-- misspelling&lt;br /&gt;
	[&#039;v-editors&#039;] = &#039;veditors&#039;,													-- misspelling&lt;br /&gt;
	[&#039;verlag&#039;] = &#039;publisher&#039;,													-- German&lt;br /&gt;
	[&#039;verlagea&#039;] = &#039;publisher&#039;,													-- German (not a direct replacement, but can be emulated)&lt;br /&gt;
	[&#039;vol&#039;] = &#039;volume&#039;,&lt;br /&gt;
	[&#039;volumen&#039;] = &#039;volume&#039;,														-- Spanish&lt;br /&gt;
	[&#039;werk&#039;] = &#039;work&#039;,															-- German&lt;br /&gt;
	[&#039;werkerg&#039;] = &#039;contribution&#039;,												-- German (not a direct replacement, but can be emulated)&lt;br /&gt;
	[&#039;wkautore&#039;] = &#039;author-link&#039;,												-- Italian&lt;br /&gt;
	[&#039;wolumin&#039;] = &#039;volume&#039;,														-- Polish&lt;br /&gt;
	[&#039;wydanie&#039;] = &#039;number&#039;,														-- Polish&lt;br /&gt;
	[&#039;wydawca&#039;] = &#039;publisher&#039;,													-- French&lt;br /&gt;
	[&#039;yardımcıyazarlar&#039;] = &#039;author&#039;,											-- Turkish&lt;br /&gt;
	[&#039;yayımcı&#039;] = &#039;publisher&#039;,													-- Turkish&lt;br /&gt;
	[&#039;yayıncı&#039;] = &#039;publisher&#039;,													-- Turkish&lt;br /&gt;
	[&#039;yazar&#039;] = &#039;author&#039;,														-- Turkish&lt;br /&gt;
	[&#039;yazarbağı&#039;] = &#039;author-link&#039;,												-- Turkish&lt;br /&gt;
	[&#039;yer&#039;] = &#039;location&#039;,														-- Turkish&lt;br /&gt;
	[&#039;yıl&#039;] = &#039;date&#039;,															-- Turkish&lt;br /&gt;
	[&#039;zaprezentowany&#039;] = &#039;publisher&#039;,											-- French&lt;br /&gt;
	[&#039;zdb&#039;] = &#039;id&#039;,																-- German (as &#039;id={{ZDB|...}}&#039;)&lt;br /&gt;
	[&#039;zitat&#039;] = &#039;quote&#039;,														-- German&lt;br /&gt;
	[&#039;zugriff&#039;] = &#039;access-date&#039;,												-- German&lt;br /&gt;
	[&#039;éditeur&#039;] = &#039;editor&#039;,														-- French&lt;br /&gt;
	[&#039;ölüurl&#039;] = &#039;url-status&#039;,													-- Turkish&lt;br /&gt;
	[&#039;übersetzer&#039;] = &#039;translator&#039;,												-- German (singular and plural)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; P A T T E R N S &amp;gt;--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Here we use Lua patterns to make suggestions.  The form is&lt;br /&gt;
&lt;br /&gt;
	[&#039;pattern&#039;] = &#039;correct&#039;,&lt;br /&gt;
&lt;br /&gt;
Lua patterns are not REGEX though they are similar.  The escape character is &#039;%&#039;, not &#039;\&#039;.&lt;br /&gt;
For more information about Lua patterns, see: Extension:Scribunto/Lua_reference_manual#Patterns&lt;br /&gt;
&lt;br /&gt;
Patterns should probably always include the &#039;^&#039; and &#039;$&#039; anchor assertions to prevent a partial&lt;br /&gt;
match from incorrectly suggesting the wrong parameter name.  For instance, the pattern &#039;a[utho]+r&#039;&lt;br /&gt;
matches &#039;author&#039; in the no-longer-supported parameter |author-separator= so the code suggests&lt;br /&gt;
&#039;|author=&#039;; the same pattern also matches the no-longer-supported parameter |separator= (returning &#039;ator&#039;)&lt;br /&gt;
so again, the code suggests &#039;|author=&#039;.&lt;br /&gt;
&lt;br /&gt;
One capture is supported, typically the enumerator from an enumerated parameter (the &#039;6&#039; in |author6=, etc.)&lt;br /&gt;
The value from the capture replaces $1 in the &#039;correct&#039; value.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local patterns = {&lt;br /&gt;
	[&#039;^ac+es+ ?d?a?t?e?$&#039;] = &#039;access-date&#039;,										-- misspelling&lt;br /&gt;
	[&#039;^apellido[s]?(%d+)$&#039;] = &#039;last$1&#039;,											-- Spanish, enumerated&lt;br /&gt;
	[&#039;^a[utho]+r$&#039;] = &#039;author&#039;,													-- misspelling&lt;br /&gt;
	[&#039;^a[utho]+r(%d+)$&#039;] = &#039;author$1&#039;,											-- misspelling, enumerated&lt;br /&gt;
	[&#039;^author link(%d+)$&#039;] = &#039;author-link$1&#039;,									-- Polish, enumerated&lt;br /&gt;
	[&#039;^autor[e]?(%d+)$&#039;] = &#039;author$1&#039;,											-- Italian/Spanish/German, enumerated&lt;br /&gt;
	[&#039;^authorfirst(%d+)$&#039;] = &#039;author-first$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^author(%d+)first$&#039;] = &#039;author-first$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^authorgiven(%d+)$&#039;] = &#039;author-given$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^author(%d+)given$&#039;] = &#039;author-given$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^authorlast(%d+)$&#039;] = &#039;author-last$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^author(%d+)last$&#039;] = &#039;author-last$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^authormask(%d+)$&#039;] = &#039;author-mask$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^author(%d+)mask$&#039;] = &#039;author-mask$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^authorsurname(%d+)$&#039;] = &#039;author-surname$1&#039;,								-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^author(%d+)surname$&#039;] = &#039;author-surname$1&#039;,								-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^cognome(%d+)$&#039;] = &#039;last$1&#039;,												-- Italian, enumerated&lt;br /&gt;
	[&#039;^editorfirst(%d+)$&#039;] = &#039;editor-first$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editor(%d+)first$&#039;] = &#039;editor-first$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editorgiven(%d+)$&#039;] = &#039;editor-given$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editor(%d+)given$&#039;] = &#039;editor-given$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editorlast(%d+)$&#039;] = &#039;editor-last$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editor(%d+)last$&#039;] = &#039;editor-last$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editorlink(%d+)$&#039;] = &#039;editor-link$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editor(%d+)link$&#039;] = &#039;editor-link$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editormask(%d+)$&#039;] = &#039;editor-mask$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editor(%d+)mask$&#039;] = &#039;editor-mask$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editorsurname(%d+)$&#039;] = &#039;editor-surname$1&#039;,								-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^editor(%d+)surname$&#039;] = &#039;editor-surname$1&#039;,								-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^enlaceautore(%d+)$&#039;] = &#039;author-link$1&#039;,									-- Spanish, enumerated&lt;br /&gt;
	[&#039;^first (%d+)$&#039;] = &#039;first$1&#039;,												-- enumerated&lt;br /&gt;
	[&#039;^last (%d+)$&#039;] = &#039;last$1&#039;,												-- enumerated&lt;br /&gt;
	[&#039;^nom[e]?(%d+)$&#039;] = &#039;last$1&#039;,												-- Italian/French, enumerated&lt;br /&gt;
	[&#039;^nombre(%d+)$&#039;] = &#039;first$1&#039;,												-- Spanish, enumerated&lt;br /&gt;
	[&#039;^primero(%d+)$&#039;] = &#039;first$1&#039;,												-- Spanish, enumerated&lt;br /&gt;
	[&#039;^pu[blish]+ers?$&#039;] = &#039;publisher&#039;,											-- misspelling&lt;br /&gt;
	[&#039;^subjectlink(%d+)$&#039;] = &#039;subject-link$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^subject(%d+)link$&#039;] = &#039;subject-link$1&#039;,									-- old parameter name, enumerated&lt;br /&gt;
	[&#039;^wkautore(%d+)$&#039;] = &#039;author-link$1&#039;,										-- Italian, enumerated&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
return {suggestions = suggestions, patterns=patterns};&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Akkord&amp;diff=1102</id>
		<title>Akkord</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Akkord&amp;diff=1102"/>
		<updated>2026-09-10T12:58:37Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Ny side: &amp;#039;&amp;#039;&amp;#039;Akkord&amp;#039;&amp;#039;&amp;#039; er en arbeidsordning hvor hele eller deler av fortjenesten baseres på ytelse, og er utbredt i byggfagene. Fagforeninger som Fellesforbundet har egne oppmålere som regner ut endelige priser etter en tariff.  Baktanken med akkordordninga er å gi insentiv til høyere effektivitet.  == Se også ==  * https://www.akkordlonn.no/hva-er-akkordlonn&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Akkord&#039;&#039;&#039; er en arbeidsordning hvor hele eller deler av fortjenesten baseres på ytelse, og er utbredt i byggfagene. Fagforeninger som Fellesforbundet har egne oppmålere som regner ut endelige priser etter en tariff.&lt;br /&gt;
&lt;br /&gt;
Baktanken med akkordordninga er å gi insentiv til høyere effektivitet.&lt;br /&gt;
&lt;br /&gt;
== Se også ==&lt;br /&gt;
&lt;br /&gt;
* https://www.akkordlonn.no/hva-er-akkordlonn&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Arbeiderbevegelsens_leksikon&amp;diff=1101</id>
		<title>Arbeiderbevegelsens leksikon</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Arbeiderbevegelsens_leksikon&amp;diff=1101"/>
		<updated>2026-09-09T20:43:59Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Ny side: &amp;#039;&amp;#039;&amp;#039;Arbeiderbevegelsens leksikon&amp;#039;&amp;#039;&amp;#039; er et oppslagsverk for å samle informasjon fra arbeiderbevegelsen, som praktisk tillitsvalgtarbeid, organisasjonskunnskap og arbeiderhistorie.  Gjennom mange tiår har arbeiderbevegelsen i Norge samla mye kunnskap om mange forskjellige temaer som i dag er vanskelig å få tak i. I tillegg lager dagens organisasjoner masse skoleringsmateriell og informasjonsflak parallelt, i stedet for at denne informasjonen deles på tvers. Arbeiderbevegelsens le…&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Arbeiderbevegelsens leksikon&#039;&#039;&#039; er et oppslagsverk for å samle informasjon fra arbeiderbevegelsen, som praktisk tillitsvalgtarbeid, organisasjonskunnskap og arbeiderhistorie.&lt;br /&gt;
&lt;br /&gt;
Gjennom mange tiår har arbeiderbevegelsen i Norge samla mye kunnskap om mange forskjellige temaer som i dag er vanskelig å få tak i. I tillegg lager dagens organisasjoner masse skoleringsmateriell og informasjonsflak parallelt, i stedet for at denne informasjonen deles på tvers. Arbeiderbevegelsens leksikon skal dekke disse hulla ved å samle all relevant kunnskap på en plass.&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Forside&amp;diff=1100</id>
		<title>Forside</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Forside&amp;diff=1100"/>
		<updated>2026-09-09T13:53:21Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{SHORTDESC:Main page of the English Wikipedia}}&amp;lt;/noinclude&amp;gt;&amp;lt;templatestyles src=&amp;quot;Project:Main Page/styles.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-topbanner&amp;quot; class=&amp;quot;mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-welcomecount&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-welcome&amp;quot;&amp;gt;&amp;lt;h1 class=&amp;quot;html-heading&amp;quot;&amp;gt;Velkommen til [[Arbeiderbevegelsens leksikon]]&amp;lt;/h1&amp;gt;,&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-free&amp;quot;&amp;gt;et fritt oppslagsverk for arbeiderbevegelsen som alle [[Hjelp:Hva vi er|kan redigere]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;articlecount&amp;quot;&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;[[Special:Statistics|{{NUMBEROFACTIVEUSERS}}]] aktive bidragsytere&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;[[Special:Statistics|{{NUMBEROFARTICLES}}]] artikler&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{Main Page banner}}|&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-banner&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
{{Main Page banner}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-upper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-left&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Ukas artikkel&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfa&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Weekly_article_{{CURRENTYEAR}}-{{CURRENTWEEK}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Visste du at...&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-dyk&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Did you know}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-right&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-itn-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;I nyhetene&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-itn&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{In the news}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;På denne dagen&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-otd&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Selected anniversaries/{{#time:m-d}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-middle&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfl-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Denne er rød&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfl&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{#ifexist:Wikipedia:Today&#039;s featured list/{{#time:F j, Y}}|{{Wikipedia:Today&#039;s featured list/{{#time:F j, Y}}}}|{{TFLempty}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-lower&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfp-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;{{#ifexist:Template:POTD protected/{{#time:Y-m-d}}|Today&#039;s featured {{#invoke:POTD kind|kind|date={{#time:Y-m-d}}}}&lt;br /&gt;
|Featured picture&amp;amp;nbsp;&amp;lt;span class=&amp;quot;mp-later&amp;quot;&amp;gt;(Check back later for today&#039;s.)&amp;lt;/span&amp;gt;}}&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfp&amp;quot;&amp;gt;{{#ifexist:Template:POTD protected/{{#time:Y-m-d}}|{{POTD protected/{{#time:Y-m-d}}}}|{{POTD protected/{{#time:Y-m-d|-1 day}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-bottom&amp;quot; class=&amp;quot;mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-other&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Other areas of Wikipedia&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-other-content&amp;quot;&amp;gt;{{Other areas of Wikipedia}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{#if:{{Wikipedia:Main Page/Tomorrow}}||}}&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
Sjekk [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents brukerveiledningen] for å få informasjon om hvordan du bruker wiki-programvaren.&lt;br /&gt;
&lt;br /&gt;
==Komme i gang==&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Innstillingsliste]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Ofte stilte spørsmål om MediaWiki]&lt;br /&gt;
*[https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki e-postliste]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Tilpass MediaWiki for ditt språk]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Lær deg å beskytte deg mot spam på wikien din]&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1099</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1099"/>
		<updated>2026-09-09T13:49:47Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Contents|contents&lt;br /&gt;
** currentevents-url|currentevents&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** contact-url|contactpage&lt;br /&gt;
* interaction&lt;br /&gt;
** helppage|help&lt;br /&gt;
** portal-url|portal&lt;br /&gt;
** contribute-url|contribute&lt;br /&gt;
** specialpages-url|specialpages&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1098</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1098"/>
		<updated>2026-09-09T13:48:06Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &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;
** specialpages-url|specialpages&lt;br /&gt;
* interaction&lt;br /&gt;
** helppage|help&lt;br /&gt;
** portal-url|portal&lt;br /&gt;
** contribute-url|contribute&lt;br /&gt;
** currentevents-url|currentevents&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1097</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1097"/>
		<updated>2026-09-09T13:43:43Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &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&lt;br /&gt;
** specialpages-url|specialpages&lt;br /&gt;
** portal-url|portal&lt;br /&gt;
** contribute-url|contribute&lt;br /&gt;
** currentevents-url|currentevents&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1096</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1096"/>
		<updated>2026-09-09T13:42:08Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &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;
** specialpages-url|specialpages&lt;br /&gt;
** portal-url|portal&lt;br /&gt;
** contribute-url|contribute&lt;br /&gt;
** currentevents-url|currentevents&lt;br /&gt;
** contact-url|contact&lt;br /&gt;
** introduction-url|introduction&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1095</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1095"/>
		<updated>2026-09-09T13:39:10Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &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;
** specialpages-url|specialpages&lt;br /&gt;
** portal-url|portal&lt;br /&gt;
** contribute-url|contribute&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1094</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=MediaWiki:Sidebar&amp;diff=1094"/>
		<updated>2026-09-09T13:30:57Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Ny side:  * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki ** specialpages-url|specialpages * om ** portal-url|Prosjektportal ** bidra-url|bidra ** tinget-url|tinget ** torget-url|torget * SEARCH * TOOLBOX * LANGUAGES&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;
** specialpages-url|specialpages&lt;br /&gt;
* om&lt;br /&gt;
** portal-url|Prosjektportal&lt;br /&gt;
** bidra-url|bidra&lt;br /&gt;
** tinget-url|tinget&lt;br /&gt;
** torget-url|torget&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Forside&amp;diff=1093</id>
		<title>Forside</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Forside&amp;diff=1093"/>
		<updated>2026-09-09T13:15:30Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Beskyttet «Forside» ([Redigering=Tillat kun administratorer] (ubestemt) [Flytting=Tillat kun administratorer] (ubestemt))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{SHORTDESC:Main page of the English Wikipedia}}&amp;lt;/noinclude&amp;gt;&amp;lt;templatestyles src=&amp;quot;Project:Main Page/styles.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-topbanner&amp;quot; class=&amp;quot;mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-welcomecount&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-welcome&amp;quot;&amp;gt;&amp;lt;h1 class=&amp;quot;html-heading&amp;quot;&amp;gt;Velkommen til [[Arbeiderbevegelsens leksikon]]&amp;lt;/h1&amp;gt;,&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-free&amp;quot;&amp;gt;et fritt oppslagsverk for arbeiderbevegelsen som alle [[Hjelp:Hva vi er|kan redigere]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;articlecount&amp;quot;&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;[[Special:Statistics|{{NUMBEROFACTIVEUSERS}}]] active bidragsytere&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;[[Special:Statistics|{{NUMBEROFARTICLES}}]] artikler&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{Main Page banner}}|&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-banner&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
{{Main Page banner}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-upper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-left&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Ukas artikkel&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfa&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Weekly_article_{{CURRENTYEAR}}-{{CURRENTWEEK}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Visste du at...&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-dyk&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Did you know}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-right&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-itn-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;I nyhetene&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-itn&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{In the news}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;På denne dagen&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-otd&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Selected anniversaries/{{#time:m-d}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-middle&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfl-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Denne er rød&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfl&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{#ifexist:Wikipedia:Today&#039;s featured list/{{#time:F j, Y}}|{{Wikipedia:Today&#039;s featured list/{{#time:F j, Y}}}}|{{TFLempty}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-lower&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfp-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;{{#ifexist:Template:POTD protected/{{#time:Y-m-d}}|Today&#039;s featured {{#invoke:POTD kind|kind|date={{#time:Y-m-d}}}}&lt;br /&gt;
|Featured picture&amp;amp;nbsp;&amp;lt;span class=&amp;quot;mp-later&amp;quot;&amp;gt;(Check back later for today&#039;s.)&amp;lt;/span&amp;gt;}}&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfp&amp;quot;&amp;gt;{{#ifexist:Template:POTD protected/{{#time:Y-m-d}}|{{POTD protected/{{#time:Y-m-d}}}}|{{POTD protected/{{#time:Y-m-d|-1 day}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-bottom&amp;quot; class=&amp;quot;mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-other&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Other areas of Wikipedia&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-other-content&amp;quot;&amp;gt;{{Other areas of Wikipedia}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{#if:{{Wikipedia:Main Page/Tomorrow}}||}}&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
Sjekk [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents brukerveiledningen] for å få informasjon om hvordan du bruker wiki-programvaren.&lt;br /&gt;
&lt;br /&gt;
==Komme i gang==&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Innstillingsliste]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Ofte stilte spørsmål om MediaWiki]&lt;br /&gt;
*[https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki e-postliste]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Tilpass MediaWiki for ditt språk]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Lær deg å beskytte deg mot spam på wikien din]&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Forside&amp;diff=1092</id>
		<title>Forside</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Forside&amp;diff=1092"/>
		<updated>2026-09-09T13:13:37Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{SHORTDESC:Main page of the English Wikipedia}}&amp;lt;/noinclude&amp;gt;&amp;lt;templatestyles src=&amp;quot;Project:Main Page/styles.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-topbanner&amp;quot; class=&amp;quot;mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-welcomecount&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-welcome&amp;quot;&amp;gt;&amp;lt;h1 class=&amp;quot;html-heading&amp;quot;&amp;gt;Velkommen til [[Arbeiderbevegelsens leksikon]]&amp;lt;/h1&amp;gt;,&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-free&amp;quot;&amp;gt;et fritt oppslagsverk for arbeiderbevegelsen som alle [[Hjelp:Hva vi er|kan redigere]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;articlecount&amp;quot;&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;[[Special:Statistics|{{NUMBEROFACTIVEUSERS}}]] active bidragsytere&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;[[Special:Statistics|{{NUMBEROFARTICLES}}]] artikler&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{Main Page banner}}|&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-banner&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
{{Main Page banner}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-upper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-left&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Ukas artikkel&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfa&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Weekly_article_{{CURRENTYEAR}}-{{CURRENTWEEK}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Visste du at...&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-dyk&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Did you know}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-right&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-itn-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;I nyhetene&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-itn&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{In the news}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;På denne dagen&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-otd&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Selected anniversaries/{{#time:m-d}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-middle&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfl-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Denne er rød&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfl&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{#ifexist:Wikipedia:Today&#039;s featured list/{{#time:F j, Y}}|{{Wikipedia:Today&#039;s featured list/{{#time:F j, Y}}}}|{{TFLempty}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-lower&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfp-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;{{#ifexist:Template:POTD protected/{{#time:Y-m-d}}|Today&#039;s featured {{#invoke:POTD kind|kind|date={{#time:Y-m-d}}}}&lt;br /&gt;
|Featured picture&amp;amp;nbsp;&amp;lt;span class=&amp;quot;mp-later&amp;quot;&amp;gt;(Check back later for today&#039;s.)&amp;lt;/span&amp;gt;}}&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfp&amp;quot;&amp;gt;{{#ifexist:Template:POTD protected/{{#time:Y-m-d}}|{{POTD protected/{{#time:Y-m-d}}}}|{{POTD protected/{{#time:Y-m-d|-1 day}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-bottom&amp;quot; class=&amp;quot;mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-other&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Other areas of Wikipedia&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-other-content&amp;quot;&amp;gt;{{Other areas of Wikipedia}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{#if:{{Wikipedia:Main Page/Tomorrow}}||}}&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
Sjekk [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents brukerveiledningen] for å få informasjon om hvordan du bruker wiki-programvaren.&lt;br /&gt;
&lt;br /&gt;
==Komme i gang==&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Innstillingsliste]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Ofte stilte spørsmål om MediaWiki]&lt;br /&gt;
*[https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki e-postliste]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Tilpass MediaWiki for ditt språk]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Lær deg å beskytte deg mot spam på wikien din]&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Forside&amp;diff=1091</id>
		<title>Forside</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Forside&amp;diff=1091"/>
		<updated>2026-09-09T13:10:30Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{SHORTDESC:Main page of the English Wikipedia}}&amp;lt;/noinclude&amp;gt;&amp;lt;templatestyles src=&amp;quot;Arbeiderbevegelsen sin wiki:Main Page/styles.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-topbanner&amp;quot; class=&amp;quot;mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-welcomecount&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-welcome&amp;quot;&amp;gt;&amp;lt;h1 class=&amp;quot;html-heading&amp;quot;&amp;gt;Velkommen til [[Arbeiderbevegelsens leksikon]]&amp;lt;/h1&amp;gt;,&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-free&amp;quot;&amp;gt;et fritt oppslagsverk for arbeiderbevegelsen som alle [[Hjelp:Hva vi er|kan redigere]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;articlecount&amp;quot;&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;[[Special:Statistics|{{NUMBEROFACTIVEUSERS}}]] active bidragsytere&amp;lt;/li&amp;gt; &amp;lt;li&amp;gt;[[Special:Statistics|{{NUMBEROFARTICLES}}]] artikler&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if:{{Main Page banner}}|&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-banner&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
{{Main Page banner}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-upper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-left&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfa-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Ukas artikkel&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfa&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Weekly_article_{{CURRENTYEAR}}-{{CURRENTWEEK}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-dyk-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Visste du at...&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-dyk&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Did you know}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-right&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-itn-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;I nyhetene&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-itn&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{In the news}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-otd-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;På denne dagen&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-otd&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{Selected anniversaries/{{#time:m-d}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-middle&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfl-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Denne er rød&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfl&amp;quot; class=&amp;quot;mp-contains-float&amp;quot;&amp;gt;{{#ifexist:Wikipedia:Today&#039;s featured list/{{#time:F j, Y}}|{{Wikipedia:Today&#039;s featured list/{{#time:F j, Y}}}}|{{TFLempty}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-lower&amp;quot; class=&amp;quot;MainPageBG mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-tfp-h2&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;{{#ifexist:Template:POTD protected/{{#time:Y-m-d}}|Today&#039;s featured {{#invoke:POTD kind|kind|date={{#time:Y-m-d}}}}&lt;br /&gt;
|Featured picture&amp;amp;nbsp;&amp;lt;span class=&amp;quot;mp-later&amp;quot;&amp;gt;(Check back later for today&#039;s.)&amp;lt;/span&amp;gt;}}&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-tfp&amp;quot;&amp;gt;{{#ifexist:Template:POTD protected/{{#time:Y-m-d}}|{{POTD protected/{{#time:Y-m-d}}}}|{{POTD protected/{{#time:Y-m-d|-1 day}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-bottom&amp;quot; class=&amp;quot;mp-box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;mp-other&amp;quot; class=&amp;quot;mp-h2&amp;quot;&amp;gt;Other areas of Wikipedia&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mp-other-content&amp;quot;&amp;gt;{{Other areas of Wikipedia}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;{{#if:{{Wikipedia:Main Page/Tomorrow}}||}}&amp;lt;/noinclude&amp;gt;__NOTOC____NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
Sjekk [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents brukerveiledningen] for å få informasjon om hvordan du bruker wiki-programvaren.&lt;br /&gt;
&lt;br /&gt;
==Komme i gang==&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Innstillingsliste]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Ofte stilte spørsmål om MediaWiki]&lt;br /&gt;
*[https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ MediaWiki e-postliste]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Tilpass MediaWiki for ditt språk]&lt;br /&gt;
*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Lær deg å beskytte deg mot spam på wikien din]&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Deprecated/doc&amp;diff=1090</id>
		<title>Modul:Deprecated/doc</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Deprecated/doc&amp;diff=1090"/>
		<updated>2026-09-09T13:01:13Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lua autodoc|file=Deprecated|preface=&lt;br /&gt;
&amp;lt;!--Add your documentation code here --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|autodoc=1}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories below this line; interwikis at Wikidata --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Deprecated&amp;diff=1087</id>
		<title>Modul:Deprecated</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Deprecated&amp;diff=1087"/>
		<updated>2026-09-09T13:00:11Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- Marks items as deprecated, and provides a warning when they are called.&lt;br /&gt;
--&lt;br /&gt;
-- ## Limitations ##&lt;br /&gt;
-- This module will not provide a warning if a deprecated item is called from&lt;br /&gt;
-- within the same module that this module is used.&lt;br /&gt;
--&lt;br /&gt;
-- @release alpha&lt;br /&gt;
-- @author [[User:Awesome_Aasim|Awesome Aasim]]&lt;br /&gt;
-- @function deprecated&lt;br /&gt;
-- @param {table} p package frame&lt;br /&gt;
-- @param deprecatedTable &lt;br /&gt;
-- @return package&lt;br /&gt;
&lt;br /&gt;
return function(p, deprecatedTable, replacement)&lt;br /&gt;
	local pckg = {}&lt;br /&gt;
	--- Warn&lt;br /&gt;
	-- @param {string} text warning text&lt;br /&gt;
	function warn(text)&lt;br /&gt;
		local tb = debug.traceback()&lt;br /&gt;
		mw.log(text .. &#039;\n&#039; .. tb)&lt;br /&gt;
		mw.addWarning(text .. tb:gsub(&amp;quot;\n&amp;quot;, &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;):gsub(&amp;quot;\t&amp;quot;, &amp;quot;&amp;amp;emsp;&amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
	if deprecatedTable == nil or deprecatedTable == true then&lt;br /&gt;
		deprecatedTable = {}&lt;br /&gt;
		for k,_ in pairs(p) do&lt;br /&gt;
			deprecatedTable[k] = {&lt;br /&gt;
				deprecated = true,&lt;br /&gt;
				replacement = replacement or &amp;quot;&amp;quot;&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	setmetatable(pckg, {&lt;br /&gt;
		__index = function(t, index)&lt;br /&gt;
			if deprecatedTable[index] and deprecatedTable[index][&amp;quot;deprecated&amp;quot;] then&lt;br /&gt;
				warn(&lt;br /&gt;
					mw.ustring.format(&lt;br /&gt;
						&amp;quot;Deprecated member &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; called. &amp;quot;, index&lt;br /&gt;
					) .. (&lt;br /&gt;
						deprecatedTable[index][&amp;quot;replacement&amp;quot;]&lt;br /&gt;
						and mw.ustring.format(&amp;quot;Please %s instead.&amp;quot;, deprecatedTable[index][&amp;quot;replacement&amp;quot;])&lt;br /&gt;
						or &#039;&#039;&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
			return p[index]&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
	return pckg&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Docbunto/infobox&amp;diff=1085</id>
		<title>Modul:Docbunto/infobox</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Docbunto/infobox&amp;diff=1085"/>
		<updated>2026-09-09T13:00:11Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- Infobox for Lua modules.&lt;br /&gt;
--  @script			 infobox&lt;br /&gt;
--  @param			 {table} data Taglet documentation data.&lt;br /&gt;
--  @param			 {string} codepage Code page name.&lt;br /&gt;
--  @param			 {table} frame Template invocation frame.&lt;br /&gt;
--  @param			 {table} options Docbunto configuration options.&lt;br /&gt;
--  @return			 {string} Infobox wikitext.&lt;br /&gt;
return function(data, codepage, frame, options, title, maybe_md)&lt;br /&gt;
	local module_rating_box = {}&lt;br /&gt;
	if data.info and data.info[&#039;release&#039;] then&lt;br /&gt;
		module_rating_box.title = &#039;Module rating&#039;&lt;br /&gt;
		module_rating_box.args = {}&lt;br /&gt;
		module_rating_box.args[1] = data.info[&#039;release&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	local statusHeader = &#039;&#039;&lt;br /&gt;
	if module_rating_box.title then&lt;br /&gt;
		statusHeader = data.info and data.info[&#039;release&#039;]&lt;br /&gt;
			and frame:expandTemplate{&lt;br /&gt;
				title = module_rating_box.title,&lt;br /&gt;
				args = module_rating_box.args&lt;br /&gt;
			} or &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local modules = data.info and data.info[&#039;require&#039;] and mw.text.split(data.info[&#039;require&#039;]&lt;br /&gt;
			:gsub(&#039;^[^[%s]+$&#039;, &#039;%1&#039;)&lt;br /&gt;
			:gsub(&#039;%* ([^[%s]+)&#039;, &#039;%1&#039;), &#039;\n&#039;) or {}&lt;br /&gt;
	for k,v in ipairs(modules) do&lt;br /&gt;
		modules[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local dependencies = &#039;&#039;&lt;br /&gt;
	if #modules ~= 0 then&lt;br /&gt;
		dependencies = require(&amp;quot;Module:Lua banner&amp;quot;).renderBox(modules)&lt;br /&gt;
	end&lt;br /&gt;
	if not options.autodoc then&lt;br /&gt;
		dependencies = &#039;&#039;&lt;br /&gt;
		statusHeader = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local infobox = {}&lt;br /&gt;
	infobox.title = &#039;Infobox Lua&#039;&lt;br /&gt;
	infobox.args = {}&lt;br /&gt;
	if codepage ~= mw.text.split(title.text, &#039;/&#039;)[2] then&lt;br /&gt;
		infobox.args[&#039;title&#039;] = codepage&lt;br /&gt;
		infobox.args[&#039;code&#039;] = codepage&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.image or ( data.info and data.info[&#039;image&#039;] ) then&lt;br /&gt;
		infobox.args[&#039;image file&#039;] = data.info[&#039;image&#039;]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.caption or ( data.info and data.info[&#039;caption&#039;] ) then&lt;br /&gt;
		infobox.args[&#039;image caption&#039;] = frame:preprocess(maybe_md(&lt;br /&gt;
			options.caption or data.info[&#039;caption&#039;]&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	infobox.args[&#039;type&#039;] = data.type == &#039;module&#039; and &#039;invocable&#039; or &#039;meta&#039;&lt;br /&gt;
&lt;br /&gt;
	if data.info and data.info[&#039;release&#039;] then&lt;br /&gt;
		infobox.args[&#039;status&#039;] = data.info and data.info[&#039;release&#039;]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data.summary then&lt;br /&gt;
		local description = data.summary&lt;br /&gt;
		if description:find(&#039;^(&#039; .. codepage .. &#039;)&#039;) then&lt;br /&gt;
			description = description:gsub(&#039;^&#039; .. codepage .. &#039;%s(%w)&#039;, mw.ustring.upper)&lt;br /&gt;
		end&lt;br /&gt;
		infobox.args[&#039;description&#039;] = frame:preprocess(maybe_md(description))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data.info and data.info[&#039;author&#039;] then&lt;br /&gt;
		infobox.args[&#039;author&#039;] = frame:preprocess(maybe_md(data.info[&#039;author&#039;]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data.info and data.info[&#039;attribution&#039;] then&lt;br /&gt;
		infobox.args[&#039;using code by&#039;] = frame:preprocess(maybe_md(data.info[&#039;attribution&#039;]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data.info and data.info[&#039;credit&#039;] then&lt;br /&gt;
		infobox.args[&#039;other attribution&#039;] = frame:preprocess(maybe_md(data.info[&#039;credit&#039;]))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if data.info and data.info[&#039;license&#039;] then&lt;br /&gt;
		infobox.args[&#039;license&#039;] = frame:preprocess(maybe_md(data.info[&#039;license&#039;]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data.info and data.info[&#039;require&#039;] then&lt;br /&gt;
		local req = data.info[&#039;require&#039;]&lt;br /&gt;
			:gsub(&#039;^[^[%s]+$&#039;, &#039;[[%1]]&#039;)&lt;br /&gt;
			:gsub(&#039;%* ([^[%s]+)&#039;, &#039;* [[%1]]&#039;)&lt;br /&gt;
		infobox.args[&#039;dependencies&#039;] = frame:preprocess(maybe_md(req))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if codepage ~= &#039;I18n&#039; and data.code:find(&#039;[\&#039;&amp;quot;]Module:I18n[\&#039;&amp;quot;]&#039;) then&lt;br /&gt;
		infobox.args[&#039;languages&#039;] = &#039;auto&#039;&lt;br /&gt;
	elseif data.code:find(&#039;mw%.message%.new&#039;) then&lt;br /&gt;
		infobox.args[&#039;languages&#039;] = &#039;mw&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data.info and data.info[&#039;demo&#039;] then&lt;br /&gt;
		infobox.args[&#039;examples&#039;] = frame:preprocess(maybe_md(data.info[&#039;demo&#039;]))&lt;br /&gt;
	end&lt;br /&gt;
	return statusHeader .. dependencies .. frame:expandTemplate(infobox)&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Lua_autodoc&amp;diff=1083</id>
		<title>Mal:Lua autodoc</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Lua_autodoc&amp;diff=1083"/>
		<updated>2026-09-09T13:00:11Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Docbunto|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Infobox_Lua&amp;diff=1081</id>
		<title>Mal:Infobox Lua</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Infobox_Lua&amp;diff=1081"/>
		<updated>2026-09-09T13:00:11Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox &lt;br /&gt;
 | bodyclass    = infobox-lua&lt;br /&gt;
 | bodystyle    = {{#ifeq: {{{styled|}}} | yes | border: 2px ridge #CAE1FF; width: 30em; padding-bottom: 0px; | &amp;lt;!-- nothing --&amp;gt; }} {{{bodystyle|}}}&lt;br /&gt;
 &lt;br /&gt;
 | title        = {{{title|{{PAGENAME}}}}}&lt;br /&gt;
 | above        = {{#ifeq: {{{styled|}}} | yes | {{{name|{{SUBPAGENAME}}}}}  | &amp;lt;!-- nothing --&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
 | titlestyle   = {{#ifeq: {{{styled|}}} | yes | font-size: 0.95em; padding: 0px; margin: 0px | &amp;lt;!-- nothing --&amp;gt; }}&lt;br /&gt;
 | abovestyle   = {{#ifeq: {{{styled|}}} | yes | background:#83C5DA; padding: 3px 0px | &amp;lt;!-- nothing --&amp;gt; }}&lt;br /&gt;
 | labelstyle   = {{#ifeq: {{{styled|}}} | yes | background:#DFEFFF; padding: 0px 7px; vertical-align: middle | &amp;lt;!-- nothing --&amp;gt; }}&lt;br /&gt;
 | datastyle    = {{#ifeq: {{{styled|}}} | yes | padding: 5px 5px; | &amp;lt;!-- nothing --&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
 | image        = {{{image|}}}&lt;br /&gt;
 | caption      = {{{caption|}}}&lt;br /&gt;
&lt;br /&gt;
 | label1       = Description&lt;br /&gt;
 | data1        = {{{description|}}}&lt;br /&gt;
&lt;br /&gt;
 | label2       = Author(s)&lt;br /&gt;
 | data2        = {{{author|}}}&lt;br /&gt;
&lt;br /&gt;
 | label3       = Code source&lt;br /&gt;
 | data3        = {{#if:{{{code|}}}|{{#ifeq:{{{code|}}}|{{{title|{{PAGENAME}}}}}||[[Module:{{{code|}}}]]}}}}&lt;br /&gt;
&lt;br /&gt;
 | label4       = Status&lt;br /&gt;
 | data4        = {{#switch: {{lc:{{{status|}}}}}&lt;br /&gt;
   | pre-alpha | prealpha | pa | experimental = &amp;lt;div style=&amp;quot;background-color:orangered;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;Experimental&amp;lt;/div&amp;gt;&lt;br /&gt;
   | alpha | a                 = &amp;lt;div style=&amp;quot;background-color:orange;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;Alpha&amp;lt;/div&amp;gt;&lt;br /&gt;
   | beta | b                  = &amp;lt;div style=&amp;quot;background-color:yellow;color:black;text-align:center;padding:3px;&amp;quot;&amp;gt;Beta&amp;lt;/div&amp;gt;&lt;br /&gt;
   | release | r | general | g | stable = &amp;lt;div style=&amp;quot;background-color:green;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;Release&amp;lt;/div&amp;gt;&lt;br /&gt;
   | broken | br | unstable = &amp;lt;div style=&amp;quot;background-color:red;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;Broken&amp;lt;/div&amp;gt;&lt;br /&gt;
   | deprecated | d | defunct = &amp;lt;div style=&amp;quot;background-color:darkred;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;Deprecated&amp;lt;/div&amp;gt;&lt;br /&gt;
   | #default = &amp;lt;div style=&amp;quot;background-color:gray;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;Unknown&amp;lt;/div&amp;gt;&lt;br /&gt;
  }}&lt;br /&gt;
 | label5       = Testcase Status&lt;br /&gt;
 | data5        = {{#ifexist:Module:{{{source|{{{title|{{PAGENAME}}}}}}}}/testcases|{{#switch:{{#invoke:{{{source|{{{title|{{PAGENAME}}}}}}}}/testcases|run|displayMode=enum}}&lt;br /&gt;
 | fail = &amp;lt;div style=&amp;quot;background-color:red;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;[[{{TALKPAGENAME:Module:{{{source|{{{title|{{PAGENAME}}}}}}}}/testcases}}|&amp;lt;span style=&amp;quot;background-color:red;color:white;text-align:center;&amp;quot;&amp;gt;Errors&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
 | skipped = &amp;lt;div style=&amp;quot;background-color:gray;color:black;text-align:center;padding:3px;&amp;quot;&amp;gt;[[{{TALKPAGENAME:Module:{{{source|{{{title|{{PAGENAME}}}}}}}}/testcases}}|&amp;lt;span style=&amp;quot;background-color:gray;color:black;text-align:center;&amp;quot;&amp;gt;Skipped&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
 | success = &amp;lt;div style=&amp;quot;background-color:green;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;[[{{TALKPAGENAME:Module:{{{source|{{{title|{{PAGENAME}}}}}}}}/testcases}}|&amp;lt;span style=&amp;quot;background-color:green;color:white;text-align:center;&amp;quot;&amp;gt;Passed&amp;lt;/span&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
   | #default = &amp;lt;div style=&amp;quot;background-color:gray;color:white;text-align:center;padding:3px;&amp;quot;&amp;gt;Unknown&amp;lt;/div&amp;gt;&lt;br /&gt;
 }}}}&lt;br /&gt;
 | label6       = Version&lt;br /&gt;
 | data6        = {{{version|}}}&lt;br /&gt;
&lt;br /&gt;
 | label7       = Updated&lt;br /&gt;
 | data7        = {{#time:F j, Y|{{{updated|{{REVISIONTIMESTAMP:Module:{{{source|{{{title|{{PAGENAME}}}}}}}}}}}}}}} ({{time ago|1={{{updated|{{REVISIONTIMESTAMP:Module:{{{source|{{{title|{{PAGENAME}}}}}}}}}}}}}}})&lt;br /&gt;
&lt;br /&gt;
 | label8       = Dependencies&lt;br /&gt;
 | data8        = {{{dependencies|}}}&lt;br /&gt;
&lt;br /&gt;
 | label9       = Skins&lt;br /&gt;
 | data9        = {{{skins|}}}&lt;br /&gt;
&lt;br /&gt;
 | label10      = Using code by&lt;br /&gt;
 | data10       = {{{using code by|}}}&lt;br /&gt;
 &lt;br /&gt;
 | label11      = License&lt;br /&gt;
 | data11       = {{{license|}}}&lt;br /&gt;
&lt;br /&gt;
 | label12      = Other attribution&lt;br /&gt;
 | data12       = {{{other attribution|}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Unindent&amp;diff=1079</id>
		<title>Modul:Unindent</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Unindent&amp;diff=1079"/>
		<updated>2026-09-09T13:00:10Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
    Copyright (c) 2013 Enrique García Cota&lt;br /&gt;
    &lt;br /&gt;
    Permission is hereby granted, free of charge, to any person obtaining a&lt;br /&gt;
    copy of this software and associated documentation files (the&lt;br /&gt;
    &amp;quot;Software&amp;quot;), to deal in the Software without restriction, including&lt;br /&gt;
    without limitation the rights to use, copy, modify, merge, publish,&lt;br /&gt;
    distribute, sublicense, and/or sell copies of the Software, and to&lt;br /&gt;
    permit persons to whom the Software is furnished to do so, subject to&lt;br /&gt;
    the following conditions:&lt;br /&gt;
    &lt;br /&gt;
    The above copyright notice and this permission notice shall be included&lt;br /&gt;
    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&lt;br /&gt;
    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF&lt;br /&gt;
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.&lt;br /&gt;
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY&lt;br /&gt;
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,&lt;br /&gt;
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE&lt;br /&gt;
    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;br /&gt;
--]]&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--- Unindent resets the indentation level of mulitline strings.&lt;br /&gt;
--  It is useful for multiline strings inside functions and large tables.&lt;br /&gt;
--  This module serves as a utility function for string parsing.&lt;br /&gt;
--  &lt;br /&gt;
--  Lua supports multiline strings in the format `[[\n...\n]]`. In general,&lt;br /&gt;
--  Lua does not outdent indented multiline strings out of the box. Though&lt;br /&gt;
--  Lua supports variable indentation in multiline strings, custom logic is&lt;br /&gt;
--  necessary to reset the string&#039;s indentation. This module adopts a&lt;br /&gt;
--  flexible approach based on string scanning.&lt;br /&gt;
--  &lt;br /&gt;
--  Unlike Penlight&#039;s `pl.text.dedent` behaviour where every line has the&lt;br /&gt;
--  indentation of the first line removed, the line prefixed with the least&lt;br /&gt;
--  non-tab whitespace is reset to zero indentation. Thus, the opening line&lt;br /&gt;
--  of the string may retain some indentation *if* there are lines of less&lt;br /&gt;
--  indentation terminating the string.&lt;br /&gt;
--  &lt;br /&gt;
--  @script             unindent&lt;br /&gt;
--  @license            MIT&lt;br /&gt;
--  @release            stable&lt;br /&gt;
--  @author             [[wikia:dev:User:8nml|8nml]]&lt;br /&gt;
--  @attribution        [https://github.com/kikito @kikito] ([https://github.com/kikito/inspect.lua/blob/master/spec/unindent.lua GitHub])&lt;br /&gt;
--  @param              {string} str Multiline string indented consistently.&lt;br /&gt;
--  @returns            {string} Unindented string.&lt;br /&gt;
return function(str)&lt;br /&gt;
    str = str:gsub(&#039; +$&#039;, &#039;&#039;):gsub(&#039;^ +&#039;, &#039;&#039;) -- remove spaces at start and end&lt;br /&gt;
    local level = math.huge&lt;br /&gt;
    local minPrefix = &#039;&#039;&lt;br /&gt;
    local len&lt;br /&gt;
    for prefix in str:gmatch(&#039;\n( +)&#039;) do&lt;br /&gt;
        len = #prefix&lt;br /&gt;
        if len &amp;lt; level then&lt;br /&gt;
            level = len&lt;br /&gt;
            minPrefix = prefix&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return (str:gsub(&#039;\n&#039; .. minPrefix, &#039;\n&#039;):gsub(&#039;\n$&#039;, &#039;&#039;))&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Lua_lexer&amp;diff=1077</id>
		<title>Modul:Lua lexer</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Lua_lexer&amp;diff=1077"/>
		<updated>2026-09-09T13:00:10Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- Lexer for Lua source code written in pure Lua.&lt;br /&gt;
--  @script             lexer&lt;br /&gt;
--  @license            [https://github.com/LoganDark/lua-lexer/blob/master/LICENSE MIT]&lt;br /&gt;
--  @author             https://github.com/LoganDark&lt;br /&gt;
--  @param              {string} text Lua source code to lex.&lt;br /&gt;
--  @return             {string} Table of line arrays containing lexemes.&lt;br /&gt;
&lt;br /&gt;
--- Mapper for individual token list string.&lt;br /&gt;
--  @param              {string} src List of characters or keywords to map.&lt;br /&gt;
--  @param[opt]         {table} list Table to extend by reference.&lt;br /&gt;
--  @return             {{char=true,...}}, map &lt;br /&gt;
--  @local&lt;br /&gt;
local function lookupify(src, list)&lt;br /&gt;
	list = list or {}&lt;br /&gt;
&lt;br /&gt;
	if type(src) == &#039;string&#039; then&lt;br /&gt;
		for i = 1, src:len() do&lt;br /&gt;
			list[src:sub(i, i)] = true&lt;br /&gt;
		end&lt;br /&gt;
	elseif type(src) == &#039;table&#039; then&lt;br /&gt;
		for i = 1, #src do&lt;br /&gt;
			list[src[i]] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Base identifier character set.&lt;br /&gt;
--  @variable           {string} base_ident&lt;br /&gt;
local base_ident = &#039;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_&#039;&lt;br /&gt;
&lt;br /&gt;
--- Base identifier character set.&lt;br /&gt;
--  @variable           {string} base_digits&lt;br /&gt;
local base_digits = &#039;0123456789&#039;&lt;br /&gt;
&lt;br /&gt;
--- Base identifier character set.&lt;br /&gt;
--  @variable           {string} base_operators&lt;br /&gt;
local base_operators = &#039;+-*/^%#&#039;&lt;br /&gt;
&lt;br /&gt;
--- Map of Lua character patterns.&lt;br /&gt;
--  @table              chars&lt;br /&gt;
--  @field              {table} whitespace Boolean map of whitespace&lt;br /&gt;
--                      tokens.&lt;br /&gt;
--  @field              {table} validEscapes Boolean map of valid escape&lt;br /&gt;
--                      characters.&lt;br /&gt;
--  @field              {table} ident Boolean map of valid identifier&lt;br /&gt;
--                      characters.&lt;br /&gt;
--  @field              {table} symbols Boolean map of valid symbol and&lt;br /&gt;
--                      operator characters.&lt;br /&gt;
--  @local&lt;br /&gt;
local chars = {&lt;br /&gt;
	whitespace = lookupify(&#039; \n\t\r&#039;),&lt;br /&gt;
	validEscapes = lookupify(&#039;abfnrtv&amp;quot;\&#039;\\&#039;),&lt;br /&gt;
	ident = lookupify(&lt;br /&gt;
		base_ident .. base_digits,&lt;br /&gt;
		{&lt;br /&gt;
			start = lookupify(base_ident),&lt;br /&gt;
		}&lt;br /&gt;
	),&lt;br /&gt;
&lt;br /&gt;
	digits = lookupify(&lt;br /&gt;
		base_digits,&lt;br /&gt;
		{&lt;br /&gt;
			hex = lookupify(base_digits .. &#039;abcdefABCDEF&#039;)&lt;br /&gt;
		}&lt;br /&gt;
	),&lt;br /&gt;
&lt;br /&gt;
	symbols = lookupify(&lt;br /&gt;
		base_operators .. &#039;,{}[]();.:&#039;, {&lt;br /&gt;
			equality = lookupify(&#039;~=&amp;gt;&amp;lt;&#039;),&lt;br /&gt;
			operators = lookupify(base_operators)&lt;br /&gt;
		}&lt;br /&gt;
	)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- List of Lua keywords.&lt;br /&gt;
--  @table              keywords&lt;br /&gt;
--  @field              structure Boolean map of structure keywords.&lt;br /&gt;
--  @field              values Boolean map of primitive keywords.&lt;br /&gt;
local keywords = {&lt;br /&gt;
	structure = lookupify({&lt;br /&gt;
		&#039;and&#039;, &#039;break&#039;, &#039;do&#039;, &#039;else&#039;, &#039;elseif&#039;, &#039;end&#039;, &#039;for&#039;, &#039;function&#039;,&lt;br /&gt;
		&#039;goto&#039;, &#039;if&#039;, &#039;in&#039;, &#039;local&#039;, &#039;not&#039;, &#039;or&#039;, &#039;repeat&#039;, &#039;return&#039;, &#039;then&#039;,&lt;br /&gt;
		&#039;until&#039;, &#039;while&#039;&lt;br /&gt;
	}),&lt;br /&gt;
&lt;br /&gt;
	values = lookupify({&lt;br /&gt;
		&#039;true&#039;, &#039;false&#039;, &#039;nil&#039;&lt;br /&gt;
	})&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--  Lexer function export.&lt;br /&gt;
return function(text)&lt;br /&gt;
	local pos = 1&lt;br /&gt;
	local start = 1&lt;br /&gt;
	local buffer = {}&lt;br /&gt;
	local lines = {}&lt;br /&gt;
&lt;br /&gt;
	local function look(delta)&lt;br /&gt;
		delta = pos + (delta or 0)&lt;br /&gt;
&lt;br /&gt;
		return text:sub(delta, delta)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function get()&lt;br /&gt;
		pos = pos + 1&lt;br /&gt;
&lt;br /&gt;
		return look(-1)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getDataLevel()&lt;br /&gt;
		local num = 0&lt;br /&gt;
&lt;br /&gt;
		while look(num) == &#039;=&#039; do&lt;br /&gt;
			num = num + 1&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if look(num) == &#039;[&#039; then&lt;br /&gt;
			pos = pos + num + 1&lt;br /&gt;
&lt;br /&gt;
			return num&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getCurrentTokenText()&lt;br /&gt;
		return text:sub(start, pos - 1)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local currentLineLength = 0&lt;br /&gt;
	local lineoffset = 0&lt;br /&gt;
&lt;br /&gt;
	local function pushToken(type, text)&lt;br /&gt;
		text = text or getCurrentTokenText()&lt;br /&gt;
&lt;br /&gt;
		local tk = buffer[#buffer]&lt;br /&gt;
&lt;br /&gt;
		if not tk or tk.type ~= type then&lt;br /&gt;
			tk = {&lt;br /&gt;
				type = type,&lt;br /&gt;
				data = text,&lt;br /&gt;
				posFirst = start - lineoffset,&lt;br /&gt;
				posLast = pos - 1 - lineoffset&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if tk.data ~= &#039;&#039; then&lt;br /&gt;
				buffer[#buffer + 1] = tk&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			tk.data = tk.data .. text&lt;br /&gt;
			tk.posLast = tk.posLast + text:len()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		currentLineLength = currentLineLength + text:len()&lt;br /&gt;
		start = pos&lt;br /&gt;
&lt;br /&gt;
		return tk&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function newline()&lt;br /&gt;
		lines[#lines + 1] = buffer&lt;br /&gt;
		buffer = {}&lt;br /&gt;
&lt;br /&gt;
		get()&lt;br /&gt;
		pushToken(&#039;newline&#039;)&lt;br /&gt;
		buffer[1] = nil&lt;br /&gt;
&lt;br /&gt;
		lineoffset = lineoffset + currentLineLength&lt;br /&gt;
		currentLineLength = 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getData(level, type)&lt;br /&gt;
		while true do&lt;br /&gt;
			local char = get()&lt;br /&gt;
&lt;br /&gt;
			if char == &#039;&#039; then&lt;br /&gt;
				return&lt;br /&gt;
			elseif char == &#039;\n&#039; then&lt;br /&gt;
				pos = pos - 1&lt;br /&gt;
				pushToken(type)&lt;br /&gt;
				newline()&lt;br /&gt;
			elseif char == &#039;]&#039; then&lt;br /&gt;
				local valid = true&lt;br /&gt;
&lt;br /&gt;
				for i = 1, level do&lt;br /&gt;
					if look() == &#039;=&#039; then&lt;br /&gt;
						pos = pos + 1&lt;br /&gt;
					else&lt;br /&gt;
						valid = false&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if valid and look() == &#039;]&#039; then&lt;br /&gt;
					pos = pos - level - 1&lt;br /&gt;
&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function chompWhitespace()&lt;br /&gt;
		while true do&lt;br /&gt;
			local char = look()&lt;br /&gt;
&lt;br /&gt;
			if char == &#039;\n&#039; then&lt;br /&gt;
				pushToken(&#039;whitespace&#039;)&lt;br /&gt;
				newline()&lt;br /&gt;
			elseif chars.whitespace[char] then&lt;br /&gt;
				pos = pos + 1&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		pushToken(&#039;whitespace&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	while true do&lt;br /&gt;
		chompWhitespace()&lt;br /&gt;
&lt;br /&gt;
		local char = get()&lt;br /&gt;
&lt;br /&gt;
		if char == &#039;&#039; then&lt;br /&gt;
			break&lt;br /&gt;
		elseif char == &#039;-&#039; and look() == &#039;-&#039; then&lt;br /&gt;
			pos = pos + 1&lt;br /&gt;
&lt;br /&gt;
			if look() == &#039;[&#039; then&lt;br /&gt;
				pos = pos + 1&lt;br /&gt;
&lt;br /&gt;
				local level = getDataLevel()&lt;br /&gt;
&lt;br /&gt;
				if level then&lt;br /&gt;
					getData(level, &#039;comment&#039;)&lt;br /&gt;
&lt;br /&gt;
					pos = pos + level + 2&lt;br /&gt;
					pushToken(&#039;comment&#039;)&lt;br /&gt;
				else&lt;br /&gt;
					while true do&lt;br /&gt;
						local char2 = get()&lt;br /&gt;
&lt;br /&gt;
						if char2 == &#039;&#039; or char2 == &#039;\n&#039; then&lt;br /&gt;
							pos = pos - 1&lt;br /&gt;
							pushToken(&#039;comment&#039;)&lt;br /&gt;
&lt;br /&gt;
							if char2 == &#039;\n&#039; then&lt;br /&gt;
								newline()&lt;br /&gt;
							end&lt;br /&gt;
&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				while true do&lt;br /&gt;
					local char2 = get()&lt;br /&gt;
&lt;br /&gt;
					if char2 == &#039;&#039; or char2 == &#039;\n&#039; then&lt;br /&gt;
						pos = pos - 1&lt;br /&gt;
						pushToken(&#039;comment&#039;)&lt;br /&gt;
&lt;br /&gt;
						if char2 == &#039;\n&#039; then&lt;br /&gt;
							newline()&lt;br /&gt;
						end&lt;br /&gt;
&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			pushToken(&#039;comment&#039;)&lt;br /&gt;
		elseif char == &#039;\&#039;&#039; or char == &#039;&amp;quot;&#039; then&lt;br /&gt;
			pushToken(&#039;string_start&#039;)&lt;br /&gt;
&lt;br /&gt;
			while true do&lt;br /&gt;
				local char2 = get()&lt;br /&gt;
&lt;br /&gt;
				if char2 == &#039;\\&#039; then&lt;br /&gt;
					pos = pos - 1&lt;br /&gt;
					pushToken(&#039;string&#039;)&lt;br /&gt;
					get()&lt;br /&gt;
&lt;br /&gt;
					local char3 = get()&lt;br /&gt;
&lt;br /&gt;
					if chars.digits[char3] then&lt;br /&gt;
						for i = 1, 2 do&lt;br /&gt;
							if chars.digits[look()] then&lt;br /&gt;
								pos = pos + 1&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					elseif char3 == &#039;x&#039; then&lt;br /&gt;
						if chars.digits.hex[look()] and chars.digits.hex[look(1)] then&lt;br /&gt;
							pos = pos + 2&lt;br /&gt;
						else&lt;br /&gt;
							pushToken(&#039;unidentified&#039;)&lt;br /&gt;
						end&lt;br /&gt;
					elseif char3 == &#039;\n&#039; then&lt;br /&gt;
						pos = pos - 1&lt;br /&gt;
						pushToken(&#039;escape&#039;)&lt;br /&gt;
						newline()&lt;br /&gt;
					elseif not chars.validEscapes[char3] then&lt;br /&gt;
						pushToken(&#039;unidentified&#039;)&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					pushToken(&#039;escape&#039;)&lt;br /&gt;
				elseif char2 == &#039;\n&#039; then&lt;br /&gt;
					pos = pos - 1&lt;br /&gt;
					pushToken(&#039;string&#039;)&lt;br /&gt;
					newline()&lt;br /&gt;
&lt;br /&gt;
					break&lt;br /&gt;
				elseif char2 == char or char2 == &#039;&#039; then&lt;br /&gt;
					pos = pos - 1&lt;br /&gt;
					pushToken(&#039;string&#039;)&lt;br /&gt;
					get()&lt;br /&gt;
&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			pushToken(&#039;string_end&#039;)&lt;br /&gt;
		elseif chars.ident.start[char] then&lt;br /&gt;
			while chars.ident[look()] do&lt;br /&gt;
				pos = pos + 1&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			local word = getCurrentTokenText()&lt;br /&gt;
&lt;br /&gt;
			if keywords.structure[word] then&lt;br /&gt;
				pushToken(&#039;keyword&#039;)&lt;br /&gt;
			elseif keywords.values[word] then&lt;br /&gt;
				pushToken(&#039;value&#039;)&lt;br /&gt;
			else&lt;br /&gt;
				pushToken(&#039;ident&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif chars.digits[char] or (char == &#039;.&#039; and chars.digits[look()]) then&lt;br /&gt;
			if char == &#039;0&#039; and look() == &#039;x&#039; then&lt;br /&gt;
				pos = pos + 1&lt;br /&gt;
&lt;br /&gt;
				while chars.digits.hex[look()] do&lt;br /&gt;
					pos = pos + 1&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				while chars.digits[look()] do&lt;br /&gt;
					pos = pos + 1&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if look() == &#039;.&#039; then&lt;br /&gt;
					pos = pos + 1&lt;br /&gt;
&lt;br /&gt;
					while chars.digits[look()] do&lt;br /&gt;
						pos = pos + 1&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if look():lower() == &#039;e&#039; then&lt;br /&gt;
					pos = pos + 1&lt;br /&gt;
&lt;br /&gt;
					if look() == &#039;-&#039; then&lt;br /&gt;
						pos = pos + 1&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					while chars.digits[look()] do&lt;br /&gt;
						pos = pos + 1&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			pushToken(&#039;number&#039;)&lt;br /&gt;
		elseif char == &#039;[&#039; then&lt;br /&gt;
			local level = getDataLevel()&lt;br /&gt;
&lt;br /&gt;
			if level then&lt;br /&gt;
				pushToken(&#039;string_start&#039;)&lt;br /&gt;
&lt;br /&gt;
				getData(level, &#039;string&#039;)&lt;br /&gt;
				pushToken(&#039;string&#039;)&lt;br /&gt;
&lt;br /&gt;
				pos = pos + level + 2&lt;br /&gt;
				pushToken(&#039;string_end&#039;)&lt;br /&gt;
			else&lt;br /&gt;
				pushToken(&#039;symbol&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif char == &#039;.&#039; then&lt;br /&gt;
			if look() == &#039;.&#039; then&lt;br /&gt;
				pos = pos + 1&lt;br /&gt;
&lt;br /&gt;
				if look() == &#039;.&#039; then&lt;br /&gt;
					pos = pos + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if getCurrentTokenText():len() == 3 then&lt;br /&gt;
				pushToken(&#039;vararg&#039;)&lt;br /&gt;
			else&lt;br /&gt;
				pushToken(&#039;symbol&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif char == &#039;:&#039; and look() == &#039;:&#039; then&lt;br /&gt;
			get()&lt;br /&gt;
&lt;br /&gt;
			pushToken(&#039;label_start&#039;)&lt;br /&gt;
&lt;br /&gt;
			chompWhitespace()&lt;br /&gt;
&lt;br /&gt;
			if chars.ident.start[look()] then&lt;br /&gt;
				get()&lt;br /&gt;
&lt;br /&gt;
				while chars.ident[look()] do&lt;br /&gt;
					get()&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				pushToken(&#039;label&#039;)&lt;br /&gt;
&lt;br /&gt;
				chompWhitespace()&lt;br /&gt;
&lt;br /&gt;
				if look() == &#039;:&#039; and look(1) == &#039;:&#039; then&lt;br /&gt;
					get()&lt;br /&gt;
					get()&lt;br /&gt;
&lt;br /&gt;
					pushToken(&#039;label_end&#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		elseif chars.symbols.equality[char] then&lt;br /&gt;
			if look() == &#039;=&#039; then&lt;br /&gt;
				pos = pos + 1&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			pushToken(&#039;operator&#039;)&lt;br /&gt;
		elseif chars.symbols[char] then&lt;br /&gt;
			if chars.symbols.operators[char] then&lt;br /&gt;
				pushToken(&#039;operator&#039;)&lt;br /&gt;
			else&lt;br /&gt;
				pushToken(&#039;symbol&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			pushToken(&#039;unidentified&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	lines[#lines + 1] = buffer&lt;br /&gt;
&lt;br /&gt;
	return lines&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Docbunto/references&amp;diff=1075</id>
		<title>Modul:Docbunto/references</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Docbunto/references&amp;diff=1075"/>
		<updated>2026-09-09T13:00:10Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- Reference table for Docbunto reference links.&lt;br /&gt;
--  List of global functions and tables available in Scribunto.&lt;br /&gt;
--  @file               docbunto_references&lt;br /&gt;
&lt;br /&gt;
--- Reference data map for types.&lt;br /&gt;
--  @property           {table} docbunto_references.types&lt;br /&gt;
&lt;br /&gt;
--- Reference link map for global items.&lt;br /&gt;
--  @property           {table} docbunto_references.items&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
    types = {&lt;br /&gt;
        -- Lua types available to Scribunto.&lt;br /&gt;
        [&amp;quot;nil&amp;quot;]         = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#nil&amp;quot;, name = &amp;quot;nil&amp;quot; },&lt;br /&gt;
        [&amp;quot;bool&amp;quot;]        = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#boolean&amp;quot;, name = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
        [&amp;quot;boolean&amp;quot;]     = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#boolean&amp;quot;, name = &amp;quot;boolean&amp;quot; },&lt;br /&gt;
        [&amp;quot;string&amp;quot;]      = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string&amp;quot;, name = &amp;quot;string&amp;quot; },&lt;br /&gt;
        [&amp;quot;int&amp;quot;]         = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#number&amp;quot;, name = &amp;quot;number&amp;quot; },&lt;br /&gt;
        [&amp;quot;number&amp;quot;]      = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#number&amp;quot;, name = &amp;quot;number&amp;quot; },&lt;br /&gt;
        [&amp;quot;tab&amp;quot;]         = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#table&amp;quot;, name = &amp;quot;table&amp;quot; },&lt;br /&gt;
        [&amp;quot;table&amp;quot;]       = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#table&amp;quot;, name = &amp;quot;table&amp;quot; },&lt;br /&gt;
        [&amp;quot;sequence&amp;quot;]    = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#sequence&amp;quot;, name = &amp;quot;sequence&amp;quot; },&lt;br /&gt;
        [&amp;quot;func&amp;quot;]        = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#function&amp;quot;, name = &amp;quot;function&amp;quot; },&lt;br /&gt;
        [&amp;quot;function&amp;quot;]    = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#function&amp;quot;, name = &amp;quot;function&amp;quot; },&lt;br /&gt;
        -- Scribunto library objects.&lt;br /&gt;
        [&amp;quot;mw.loadData&amp;quot;] = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.loadData&amp;quot;, name = &amp;quot;DataWrapper&amp;quot; },&lt;br /&gt;
        [&amp;quot;DataWrapper&amp;quot;] = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.loadData&amp;quot;, name = &amp;quot;DataWrapper&amp;quot; },&lt;br /&gt;
        [&amp;quot;Frame&amp;quot;]       = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Frame object&amp;quot;, name = &amp;quot;Frame&amp;quot; },&lt;br /&gt;
        [&amp;quot;mw.language&amp;quot;] = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Language object&amp;quot;, name = &amp;quot;Lang&amp;quot; },&lt;br /&gt;
        [&amp;quot;Lang&amp;quot;]        = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Language object&amp;quot;, name = &amp;quot;Lang&amp;quot; },&lt;br /&gt;
        [&amp;quot;mw.uri&amp;quot;]      = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#URI object&amp;quot;, name = &amp;quot;Uri&amp;quot; },&lt;br /&gt;
        [&amp;quot;Uri&amp;quot;]         = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#URI object&amp;quot;, name = &amp;quot;Uri&amp;quot; },&lt;br /&gt;
        [&amp;quot;mw.html&amp;quot;]     = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#HTML object&amp;quot;, name = &amp;quot;HTMLBuilder&amp;quot; },&lt;br /&gt;
        [&amp;quot;HTMLBuilder&amp;quot;] = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#HTML object&amp;quot;, name = &amp;quot;HTMLBuilder&amp;quot; },&lt;br /&gt;
        [&amp;quot;mw.title&amp;quot;]    = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;, name = &amp;quot;Title&amp;quot; },&lt;br /&gt;
        [&amp;quot;Title&amp;quot;]       = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;, name = &amp;quot;Title&amp;quot; },&lt;br /&gt;
        [&amp;quot;mw.message&amp;quot;]  = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Message object&amp;quot;, name = &amp;quot;Msg&amp;quot; },&lt;br /&gt;
        [&amp;quot;Msg&amp;quot;]         = { link = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Message object&amp;quot;, name = &amp;quot;Msg&amp;quot; },&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    items = {&lt;br /&gt;
        -- Types and primitives.&lt;br /&gt;
        [&amp;quot;...&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#varargs&amp;quot;,&lt;br /&gt;
        [&amp;quot;nil&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#nil&amp;quot;,&lt;br /&gt;
        [&amp;quot;boolean&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#boolean&amp;quot;,&lt;br /&gt;
        [&amp;quot;number&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#number&amp;quot;,&lt;br /&gt;
        [&amp;quot;sequence&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#sequence&amp;quot;,&lt;br /&gt;
        [&amp;quot;function&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#function&amp;quot;,&lt;br /&gt;
        -- Global variables and functions.&lt;br /&gt;
        [&amp;quot;_G&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#_G&amp;quot;,&lt;br /&gt;
        [&amp;quot;_VERSION&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#_VERSION&amp;quot;,&lt;br /&gt;
        [&amp;quot;assert&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#assert&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#error&amp;quot;,&lt;br /&gt;
        [&amp;quot;getmetatable&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#getmetatable&amp;quot;,&lt;br /&gt;
        [&amp;quot;setmetatable&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#setmetatable&amp;quot;,&lt;br /&gt;
        [&amp;quot;ipairs&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#ipairs&amp;quot;,&lt;br /&gt;
        [&amp;quot;next&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#next&amp;quot;,&lt;br /&gt;
        [&amp;quot;pairs&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#pairs&amp;quot;,&lt;br /&gt;
        [&amp;quot;pcall&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#pcall&amp;quot;,&lt;br /&gt;
        [&amp;quot;xpcall&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#xpcall&amp;quot;,&lt;br /&gt;
        [&amp;quot;rawequal&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#rawequal&amp;quot;,&lt;br /&gt;
        [&amp;quot;rawget&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#rawget&amp;quot;,&lt;br /&gt;
        [&amp;quot;rawset&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#rawset&amp;quot;,&lt;br /&gt;
        [&amp;quot;require&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#require&amp;quot;,&lt;br /&gt;
        [&amp;quot;select&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#select&amp;quot;,&lt;br /&gt;
        [&amp;quot;tonumber&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#tonumber&amp;quot;,&lt;br /&gt;
        [&amp;quot;tostring&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#tostring&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#type&amp;quot;,&lt;br /&gt;
        [&amp;quot;unpack&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#unpack&amp;quot;,&lt;br /&gt;
        -- Lua debug library.&lt;br /&gt;
        [&amp;quot;debug&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Debug library&amp;quot;,&lt;br /&gt;
        [&amp;quot;debug.traceback&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#debug.traceback&amp;quot;,&lt;br /&gt;
        -- Lua math library.&lt;br /&gt;
        [&amp;quot;math&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Math library&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.abs&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.abs&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.acos&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.acos&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.asin&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.asin&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.atan&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.atan&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.atan2&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.atan2&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.ceil&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.ceil&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.cos&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.cos&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.cosh&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.cosh&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.deg&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.deg&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.exp&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.exp&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.floor&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.floor&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.fmod&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.fmod&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.frexp&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.frexp&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.huge&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.huge&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.ldexp&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.ldexp&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.log&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.log&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.log10&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.log10&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.max&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.max&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.min&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.min&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.modf&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.modf&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.pi&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.pi&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.pow&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.pow&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.rad&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.rad&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.random&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.random&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.randomseed&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.randomseed&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.sin&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.sin&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.sinh&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.sinh&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.sqrt&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.sqrt&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.tan&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.tan&amp;quot;,&lt;br /&gt;
        [&amp;quot;math.tanh&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#math.tanh&amp;quot;,&lt;br /&gt;
        -- Operating system library.&lt;br /&gt;
        [&amp;quot;os&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Operating system library&amp;quot;,&lt;br /&gt;
        [&amp;quot;os.clock&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#os.clock&amp;quot;,&lt;br /&gt;
        [&amp;quot;os.date&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#os.date&amp;quot;,&lt;br /&gt;
        [&amp;quot;os.difftime&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#os.difftime&amp;quot;,&lt;br /&gt;
        [&amp;quot;os.time&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#os.time&amp;quot;,&lt;br /&gt;
        -- Package library.&lt;br /&gt;
        [&amp;quot;package&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Package library&amp;quot;,&lt;br /&gt;
        [&amp;quot;package.loaded&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#package.loaded&amp;quot;,&lt;br /&gt;
        [&amp;quot;package.loaders&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#package.loaders&amp;quot;,&lt;br /&gt;
        [&amp;quot;package.preload&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#package.preload&amp;quot;,&lt;br /&gt;
        [&amp;quot;package.seeall&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#package.seeall&amp;quot;,&lt;br /&gt;
        -- Lua string library.&lt;br /&gt;
        [&amp;quot;string&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#String library&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.byte&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.byte&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.char&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.char&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.find&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.find&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.format&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.format&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.gmatch&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.gmatch&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.gsub&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.gsub&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.len&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.len&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.lower&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.lower&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.match&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.match&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.rep&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.rep&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.reverse&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.reverse&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.sub&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.sub&amp;quot;,&lt;br /&gt;
        [&amp;quot;string.upper&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#string.upper&amp;quot;,&lt;br /&gt;
        -- Lua table library.&lt;br /&gt;
        [&amp;quot;table&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Table library&amp;quot;,&lt;br /&gt;
        [&amp;quot;table.concat&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#table.concat&amp;quot;,&lt;br /&gt;
        [&amp;quot;table.insert&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#table.insert&amp;quot;,&lt;br /&gt;
        [&amp;quot;table.maxn&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#table.maxn&amp;quot;,&lt;br /&gt;
        [&amp;quot;table.remove&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#table.remove&amp;quot;,&lt;br /&gt;
        [&amp;quot;table.sort&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#table.sort&amp;quot;,&lt;br /&gt;
        -- MediaWiki Scribunto library.&lt;br /&gt;
        [&amp;quot;mw&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.allToString&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.allToString&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.clearLogBuffer&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.clearLogBuffer&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.clone&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.clone&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.executeFunction&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.executeFunction&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.executeModule&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.executeModule&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.getCurrentFrame&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.getCurrentFrame&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.getLogBuffer&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.getLogBuffer&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.incrementExpensiveFunctionCount&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.incrementExpensiveFunctionCount&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.loadData&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.loadData&amp;quot;,&lt;br /&gt;
        [&amp;quot;DataWrapper&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.loadData&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.log&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.log&amp;quot;,&lt;br /&gt;
        [&amp;quot;print&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.log&amp;quot;,&lt;br /&gt;
        -- Scribunto frame object.&lt;br /&gt;
        [&amp;quot;frame&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Frame object&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame.args&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame.args&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame:getParent&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:getParent&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame:expandTemplate&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:expandTemplate&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame:preprocess&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:preprocess&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame:getArgument&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:getArgument&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame:newParserValue&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:newParserValue&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame:newTemplateParserValue&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:newTemplateParserValue&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame:argumentPairs&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:argumentPairs&amp;quot;,&lt;br /&gt;
        [&amp;quot;frame:getTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:getTitle&amp;quot;,&lt;br /&gt;
        -- Scribunto frame object as `Frame` class.&lt;br /&gt;
        [&amp;quot;Frame&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Frame object&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame.args&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame.args&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame:getParent&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:getParent&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame:expandTemplate&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:expandTemplate&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame:preprocess&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:preprocess&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame:getArgument&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:getArgument&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame:newParserValue&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:newParserValue&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame:newTemplateParserValue&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:newTemplateParserValue&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame:argumentPairs&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:argumentPairs&amp;quot;,&lt;br /&gt;
        [&amp;quot;Frame:getTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#frame:getTitle&amp;quot;,&lt;br /&gt;
        -- Scribunto language library.&lt;br /&gt;
        [&amp;quot;mw.language&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Language library&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language.fetchLanguageName&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language.fetchLanguageName&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language.getContentLanguage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language.getContentLanguage&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language.isValidBuiltInCode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language.isValidBuiltInCode&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language.isValidCode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language.isValidCode&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language.new&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language.new&amp;quot;,&lt;br /&gt;
        -- Scribunto language object.&lt;br /&gt;
        [&amp;quot;lang&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Language object&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:getCode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:getCode&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:isRTL&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:isRTL&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:lc&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:lc&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:lcfirst&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:lcfirst&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:uc&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:uc&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:ucfirst&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:ucfirst&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:caseFold&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:caseFold&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:formatNum&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:formatNum&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:formatDate&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:formatDate&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:parseFormattedNumber&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:parseFormattedNumber&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:convertPlural&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:convertPlural&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:convertGrammar&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:convertGrammar&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.language:gender&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:gender&amp;quot;,&lt;br /&gt;
        -- Scribunto language object as `Lang` class.&lt;br /&gt;
        [&amp;quot;Lang&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Language object&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:getCode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:getCode&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:isRTL&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:isRTL&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:lc&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:lc&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:lcfirst&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:lcfirst&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:uc&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:uc&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:ucfirst&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:ucfirst&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:caseFold&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:caseFold&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:formatNum&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:formatNum&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:formatDate&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:formatDate&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:parseFormattedNumber&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:parseFormattedNumber&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:convertPlural&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:convertPlural&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:convertGrammar&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:convertGrammar&amp;quot;,&lt;br /&gt;
        [&amp;quot;Lang:gender&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.language:gender&amp;quot;,&lt;br /&gt;
        -- Scribunto site library.&lt;br /&gt;
        [&amp;quot;mw.site&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Site library&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.currentVersion&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.currentVersion&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.scriptPath&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.scriptPath&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.server&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.server&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.siteName&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.siteName&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.stylePath&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.stylePath&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.namespaces&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.namespaces&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.contentNamespaces&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.contentNamespaces&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.subjectNamespaces&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.subjectNamespaces&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.talkNamespaces&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.talkNamespaces&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.sassParams&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.sassParams&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.stats&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.stats&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.stats.pagesInCategory&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.stats.pagesInCategory&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.stats.pagesInNamespace&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.stats.pagesInNamespace&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.site.stats.usersInGroup&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.site.stats.usersInGroup&amp;quot;,&lt;br /&gt;
        -- Scribunto URI library.&lt;br /&gt;
        [&amp;quot;mw.uri&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Uri library&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.encode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.encode&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.decode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.decode&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.anchorEncode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.anchorEncode&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.buildQueryString&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.buildQueryString&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.parseQueryString&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.parseQueryString&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.canonicalUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.canonicalUrl&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.fullUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.fullUrl&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.localUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.localUrl&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.new&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.new&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri.validate&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri.validate&amp;quot;,&lt;br /&gt;
        -- Scribunto URI object.&lt;br /&gt;
        [&amp;quot;uri&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#URI object&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri:parse&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri:parse&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri:clone&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri:clone&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.uri:extend&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri:extend&amp;quot;,&lt;br /&gt;
        -- Scribunto URI object as `Uri` class.&lt;br /&gt;
        [&amp;quot;Uri&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#URI object&amp;quot;,&lt;br /&gt;
        [&amp;quot;Uri:parse&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri:parse&amp;quot;,&lt;br /&gt;
        [&amp;quot;Uri:parse&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri:parse&amp;quot;,&lt;br /&gt;
        [&amp;quot;Uri:clone&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri:clone&amp;quot;,&lt;br /&gt;
        [&amp;quot;Uri:extend&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.uri:extend&amp;quot;,&lt;br /&gt;
        -- Scribunto UTF8-safe string library.&lt;br /&gt;
        [&amp;quot;mw.ustring&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Ustring library&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.maxPatternLength&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.maxPatternLength&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.maxStringLength&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.maxStringLength&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.byte&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.byte&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.byteoffset&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.byteoffset&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.char&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.char&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.codepoint&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.codepoint&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.find&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.find&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.format&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.format&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.gcodepoint&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.gcodepoint&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.gmatch&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.gmatch&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.gsub&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.gsub&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.isutf8&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.isutf8&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.len&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.len&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.lower&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.lower&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.match&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.match&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.rep&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.rep&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.sub&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.sub&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.toNFC&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.toNFC&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.toNFD&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.toNFD&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.ustring.upper&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.ustring.upper&amp;quot;,&lt;br /&gt;
        -- Scribunto HTML library.&lt;br /&gt;
        [&amp;quot;mw.html&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#HTML library&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html.create&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html.create&amp;quot;,&lt;br /&gt;
        -- Scribunto HTML object.&lt;br /&gt;
        [&amp;quot;html&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#HTML object&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:node&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:node&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:wikitext&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:wikitext&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:newline&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:newline&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:tag&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:tag&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:attr&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:attr&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:getAttr&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:getAttr&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:addClass&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:addClass&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:css&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:css&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:cssText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:cssText&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:done&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:done&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.html:allDone&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:allDone&amp;quot;,&lt;br /&gt;
        -- Scribunto HTML object as `HTMLBuilder` class.&lt;br /&gt;
        [&amp;quot;HTMLBuilder&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#HTML object&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:node&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:node&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:wikitext&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:wikitext&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:newline&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:newline&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:tag&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:tag&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:attr&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:attr&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:getAttr&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:getAttr&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:addClass&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:addClass&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:css&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:css&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:cssText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:cssText&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:done&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:done&amp;quot;,&lt;br /&gt;
        [&amp;quot;HTMLBuilder:allDone&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.html:allDone&amp;quot;,&lt;br /&gt;
        -- Scribunto text library.&lt;br /&gt;
        [&amp;quot;mw.text&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Text library&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.decode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.decode&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.encode&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.encode&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.listToText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.listToText&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.nowiki&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.nowiki&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.split&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.split&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.gsplit&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.gsplit&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.tag&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.tag&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.trim&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.trim&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.truncate&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.truncate&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.text.unstrip&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.text.unstrip&amp;quot;,&lt;br /&gt;
        -- Scribunto title library.&lt;br /&gt;
        [&amp;quot;mw.title&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title library&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.equals&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.title.equals&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.compare&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.title.compare&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.getCurrentTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.title.getCurrentTile&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.new&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.title.new&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.makeTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.title.makeTitle&amp;quot;,&lt;br /&gt;
        -- Scribunto title object.&lt;br /&gt;
        [&amp;quot;mw.title.id&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.interwiki&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.namespace&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.fragment&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.nsText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.subjectNsText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.text&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.prefixedText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.fullText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.rootText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.baseText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.subpageText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.canTalk&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.exists&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.fileExists&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.isContentPage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.isExternal&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.isLocal&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.isRedirect&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.isSpecialPage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.isSubpage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.isTalkPage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:isSubpageOf&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:inNamespace&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:inNamespaces&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:hasSubjectNamespace&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.basePageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.rootPageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.talkPageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.subjectPageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title.protectionLevels&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:subPageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:partialUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:fullUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:localUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:canonicalUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.title:getContent&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        -- Scribunto title object as `Title` class.&lt;br /&gt;
        [&amp;quot;Title&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.id&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.interwiki&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.namespace&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.fragment&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.nsText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.subjectNsText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.text&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.prefixedText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.fullText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.rootText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.baseText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.subpageText&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.canTalk&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.exists&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.fileExists&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.isContentPage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.isExternal&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.isLocal&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.isRedirect&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.isSpecialPage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.isSubpage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.isTalkPage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:isSubpageOf&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:inNamespace&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:inNamespaces&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:hasSubjectNamespace&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.basePageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.rootPageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.talkPageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.subjectPageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title.protectionLevels&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:subPageTitle&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:partialUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:fullUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:localUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:canonicalUrl&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        [&amp;quot;Title:getContent&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Title objects&amp;quot;,&lt;br /&gt;
        -- Scribunto message library.&lt;br /&gt;
        [&amp;quot;mw.message&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Message library&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message.new&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message.new&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message.newFallbackSequence&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message.newFallbackSequence&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message.rawParam&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message.rawParam&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message.numParam&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message.numParam&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message.getDefaultLanguage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message.getDefaultLanguage&amp;quot;,&lt;br /&gt;
        -- Scribunto message object.&lt;br /&gt;
        [&amp;quot;msg&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Message object&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:params&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:params&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:rawParams&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:rawParams&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:numParams&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:numParams&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:inLanguage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:inLanguage&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:useDatabase&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:useDatabase&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:plain&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:plain&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:exists&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:exists&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:isBlank&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:isBlank&amp;quot;,&lt;br /&gt;
        [&amp;quot;mw.message:isDisabled&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:isDisabled&amp;quot;,&lt;br /&gt;
        -- Scribunto message object as `Msg` class.&lt;br /&gt;
        [&amp;quot;Msg&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#Message object&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:params&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:params&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:rawParams&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:rawParams&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:numParams&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:numParams&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:inLanguage&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:inLanguage&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:useDatabase&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:useDatabase&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:plain&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:plain&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:exists&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:exists&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:isBlank&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:isBlank&amp;quot;,&lt;br /&gt;
        [&amp;quot;Msg:isDisabled&amp;quot;] = &amp;quot;mw:Extension:Scribunto/Lua reference manual#mw.message:isDisabled&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Docbunto/i18n&amp;diff=1073</id>
		<title>Modul:Docbunto/i18n</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Docbunto/i18n&amp;diff=1073"/>
		<updated>2026-09-09T13:00:10Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
    [&amp;quot;_metadata&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;order&amp;quot;] = {&lt;br /&gt;
            &amp;quot;endmatter-caption&amp;quot;,&lt;br /&gt;
            &amp;quot;endmatter-image&amp;quot;,&lt;br /&gt;
            &amp;quot;line-no&amp;quot;,&lt;br /&gt;
            &amp;quot;header-class&amp;quot;,&lt;br /&gt;
            &amp;quot;header-documentation&amp;quot;,&lt;br /&gt;
            &amp;quot;header-function&amp;quot;,&lt;br /&gt;
            &amp;quot;header-items&amp;quot;,&lt;br /&gt;
            &amp;quot;header-other&amp;quot;,&lt;br /&gt;
            &amp;quot;header-private&amp;quot;,&lt;br /&gt;
            &amp;quot;message-autogeneration&amp;quot;,&lt;br /&gt;
            &amp;quot;no-content&amp;quot;,&lt;br /&gt;
            &amp;quot;no-markup&amp;quot;,&lt;br /&gt;
            &amp;quot;optional&amp;quot;,&lt;br /&gt;
            &amp;quot;parentheses&amp;quot;,&lt;br /&gt;
            &amp;quot;separator-colon&amp;quot;,&lt;br /&gt;
            &amp;quot;separator-dot&amp;quot;,&lt;br /&gt;
            &amp;quot;separator-semicolon&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-error&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-field&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-fixme&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-note&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-param&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-return&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-see&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-todo&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-usage&amp;quot;,&lt;br /&gt;
            &amp;quot;tag-warning&amp;quot;,&lt;br /&gt;
            &amp;quot;todo&amp;quot;,&lt;br /&gt;
            &amp;quot;type-boolean&amp;quot;,&lt;br /&gt;
            &amp;quot;type-function&amp;quot;,&lt;br /&gt;
            &amp;quot;type-member&amp;quot;,&lt;br /&gt;
            &amp;quot;type-nil&amp;quot;,&lt;br /&gt;
            &amp;quot;type-number&amp;quot;,&lt;br /&gt;
            &amp;quot;type-sequence&amp;quot;,&lt;br /&gt;
            &amp;quot;type-string&amp;quot;,&lt;br /&gt;
            &amp;quot;type-table&amp;quot;,&lt;br /&gt;
            &amp;quot;type-variable&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;en&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;endmatter-caption&amp;quot;] = &amp;quot;Caption&amp;quot;,&lt;br /&gt;
        [&amp;quot;endmatter-image&amp;quot;] = &amp;quot;Image&amp;quot;,&lt;br /&gt;
        [&amp;quot;line-no&amp;quot;] = &amp;quot;line $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;Package class&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;Documentation&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;Package function&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;Package items&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;Other items&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;Private items&amp;quot;,&lt;br /&gt;
        [&amp;quot;message-autogeneration&amp;quot;] = &amp;quot;Generated by [[w:c:dev:Global Lua Modules/Docbunto|Docbunto]].&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;Lua source code not found in $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;documentation markup for Docbunto not found in $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;optional&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot; ($1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;: &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;{{plural:$1|Error|Errors}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;{{plural:$1|Field|Fields}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;{{plural:$1|Bug|Bugs}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;{{plural:$1|Note|Notes}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{plural:$1|Parameter|Parameters}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;Returns&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;See also&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;TODO&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;Usage&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;{{plural:$1|Warning|Warnings}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;todo&amp;quot;] = &amp;quot;Modules with TODO items&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;boolean&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;function&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;member&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;nil&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;number&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;sequence&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;string&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;table&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;variable&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;qqq&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;endmatter-caption&amp;quot;] = &amp;quot;Text of the caption key in the module data, rendered within the endmatter card.&amp;quot;,&lt;br /&gt;
        [&amp;quot;endmatter-image&amp;quot;] = &amp;quot;Text of the image key in the module data, rendered within the endmatter card.&amp;quot;,&lt;br /&gt;
        [&amp;quot;line-no&amp;quot;] = &amp;quot;The line number of the call. $1 is the line number filled in from this.&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;Header for modules that export a class&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;Header for documentation section&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;Header for modules that export a function&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;Header for modules that export a static table&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;Subheading for public items that aren&#039;t package members (e.g. return tables)&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;Subheading for private items that are local to a module&amp;quot;,&lt;br /&gt;
        [&amp;quot;message-autogeneration&amp;quot;] = &amp;quot;Footer text for the code documentation in the output, showing that it is Lua-generated content.&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;Lua error when queried module is non-existent&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;Lua error when queried module contains no documentation markup&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;Optional tag documentation entry&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot;Used to wrap item types and tag entry types. {{optional}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;Used to separate tag entry labels from the entry documentation. {{optional}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;Used to separate horizontal lists such as item flags&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;Used to separate item or tag types. {{optional}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;Tag entry label for a function&#039;s @error tags. $1 is the number of @error tags present for the item&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;Tag entry label for a table&#039;s @field tags. $1 is the number of @field tags present for the item&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;Tag entry label for an item&#039;s documented bugs. $1 is the number of @fixme tags present for the item&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;Tag entry label for an item&#039;s developer notes. $1 is the number of @note tags present for the item&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{PLURAL:$1|Parameter|Parameters}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;Tag entry label for a function&#039;s @return tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;Tag entry label for an item&#039;s @see tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;Tag entry label for an item&#039;s @todo tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;Tag entry label for an item&#039;s @usage tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;Tag entry label for an item&#039;s warning notes. $1 is the number of @warning tags present for the item&amp;quot;,&lt;br /&gt;
        [&amp;quot;todo&amp;quot;] = &amp;quot;Category to populate if a TODO tag is present in the module source.&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;Lua&#039;s boolean type for items or tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;Lua&#039;s function type for items or tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;Custom type for class members that are primitives (boolean, number or string)&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;Lua&#039;s nil type for items or tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;Lua&#039;s number type for items or tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;Lua&#039;s table type for items or tags that are a sequence&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;Lua&#039;s string type for items or tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;Lua&#039;s table type for items or tags&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;Custom type for private items that are primitives (boolean, number or string) and local to a module&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;bn&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;প্যাকেজ ক্লাস&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;ডকুমেন্টেশন&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;প্যাকেজ ফাঙ্কশন&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;প্যাকেজ আইটেম&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;অন্য আইটেম&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;ব্যক্তিগত আইটেম&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;$1তে লুয়া সোর্স কোড পাওয়া যায়নি&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;ডোকবুনটোর জন্য ডকুমেন্টেশন মার্কআপ $1এ পাওয়া যায়নি&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;বিকল্পিক&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot; ($1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;: &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;{{plural:$1|ত্রূটি|ত্রূটি}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;{{plural:$1|ফিল্ড|ফিল্ড}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;{{plural:$1|বাগ|বাগ}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;{{plural:$1|নোট|নোট}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{plural:$1|প্যারামেটের|প্যারামেটের}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;দেয়ে&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;আরও দেখেন&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;টুডু&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;প্রয়োগ&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;{{plural:$1|সূচনা|সূচনা}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;বুলিয়ান&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;ফাঙ্কশন&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;সদস্য&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;নাই&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;সংখ্যা&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;স্ট্রিং&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;টেবিল&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;ভ্যারিয়েবল&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;de&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;Paketklassen&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;Dokumentation&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;Paketfunktion&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;Paketname&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;Andere Werte&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;Private Werte&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;Lua Quellcode in $1 nicht gefunden&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;Dokumentation-Markup für Docbunto in $1 nicht gefunden&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;optional&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot; ($1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;: &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;Fehler&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;{{plural:$1|Feld|Felder}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;Fehler&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;{{plural:$1|Notiz|Notizen}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;Parameter&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;Ausgabe&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;Siehe auch&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;TODO&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;Verwendung&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;{{plural:$1|Warnung|Warnungen}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;Boolean&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;Funktion&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;Mitglied&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;null&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;Nummer&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;Sequenz&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;String&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;Table&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;Variable&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;fr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;Classe des paquets&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;Documentation&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;Fonction de paquet&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;Objets du paquet&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;Autres objets&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;Objets privés&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;Code source Lua source non trouvée dans $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;Documentation markup pour Docbunto introuvable dans $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;optionnel&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot; ($1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;: &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;{{plural:$1|Erreur|Erreurs}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;{{plural:$1|Champ|Champs}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;{{plural:$1|Bug|Bugs}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;{{plural:$1|Note|Notes}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{plural:$1|Paramètre|Paramètres}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;Retours&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;Voir aussi&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;TODO&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;Utilisation&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;{{plural:$1|Avertissement|Avertissements}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;booléen&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;fonction&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;membre&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;nil&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;nombre&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;séquence&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;chaîne&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;tableau&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;variable&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;hi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;क्लास को पैकेज करें&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;प्रलेख&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;फंक्शन को पैकेज करें&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;पैकेज के आयटम&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;दुसरे आयटम&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;व्यक्तिगत आयटम्स&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;$1 में लुआ स्रोत कोड नहीं मिला&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;Docbunto के लिए प्रलेख मार्कअप $1 में नहीं मिला&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;वैकल्पिक&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot; ($1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;: &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;{{plural:$1|त्रुटि|त्रुटियाँ}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;{{plural:$1|फ़ील्ड|फ़ील्ड्स}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;{{plural:$1|बग|बग्स}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;{{plural:$1|नोट|नोट्स}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{plural:$1|पैरामीटर|पैरामीटर्स}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;लौटाता है&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;ये भी देखें&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;टू-डू&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;प्रयोग&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;{{plural:$1|चेतावनी|चेतावनियाँ}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;बूलियन&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;फंक्शन&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;सदस्य&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;खाली&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;संख्या&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;क्रम&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;स्ट्रिंग&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;टेबल&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;वेरिएबल&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ja&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;パッケージクラス&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;ドキュメンテーション&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;パッケージ関数&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;パッケージ要素&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;ほかアイテム&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;プライベート要素&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;オプションです&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot;（$1）&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;・&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;：&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;エラー&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;フィールド&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;バグ&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;ノート&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;パラメータ&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;{{plural:$1|戻り値|複数の戻り値}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;関連項目&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;タスク&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;使用例&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;警告&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;ブーリアン&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;関数&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;メンバ&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;空&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;数&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;文字列&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;テーブル&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;変数&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ko&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;문서&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;패키지 아이템&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;$1에서 Docbunto 문서 마크업을 찾지 못했습니다&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;・&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{plural:$1|매개변수|매개변수}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;반환값&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pl&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;Nie odnaleziono kodu źróðłowego Lua w $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;Nie odnaleziono znaczników Docbunto w $1&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ru&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;Класс пакета&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;Документация&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;Функция пакета&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;Элементы пакета&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;Другие элементы&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;Приватные элементы&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;На $1 нет исходного кода Lua&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;на $1 нет разметки документации Docbunto&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;необязательный&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot; ($1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;: &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;{{plural:$1|Ошибка|Ошибки}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;{{plural:$1|Поле|Поля}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;{{plural:$1|Недочет|Недочеты}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;{{plural:$1|Замечание|Замечания}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{plural:$1|Аргумент|Аргументы}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;Возвращает&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;Смотрите также&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;TODO&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;Использование&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;{{plural:$1|Предупреждение|Предупреждения}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;логический&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;функция&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;член класса&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;nil&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;число&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;последовательность&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;строка&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;таблица&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;переменная&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;tl&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;Mga aytem sa package&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;Ang &#039;&#039;Luabsource code&#039;&#039; ay hindi mahanap sa $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;Ang &#039;&#039;markup&#039;&#039; sa documentasyon para sa Docbuntu ay hindi mahanap sa $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;opsyonal&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot;&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;{{plural:$1|Tala|Mga tala}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;MGA GAWAIN&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;Paggamit&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;{{plural:$1|Babala|Mga babala}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;talaan&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;tr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;Paket sınıfı&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;Belgelendirme&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;Paket işlevi&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;Paket öğeleri&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;Diğer öğeler&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;Özel öğeler&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;Lua kaynak kodu $1 sorgusunda bulunamadı&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;Docbunto için belge işaretlemesi $1 sayfasında bulunamadı&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;isteğe bağlı&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot; ($1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;: &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;{{plural:$1|Hata|Hatalar}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;{{plural:$1|Alan|Alanlar}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;{{plural:$1|Hata|Hatalar}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;{{plural:$1|Not|Notlar}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{plural:$1|Parametre|Parametreler}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;Döndürmeler&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;Ayrıca bakınız&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;YAPILACAKLAR&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;Kullanım&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;{{plural:$1|Uyarı|Uyarılar}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;boole&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;işlev&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;üye&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;nil&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;sayı&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;sıra&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;dize&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;tablo&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;değişken&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;vi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;Lớp gói&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;Tài liệu&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;Hàm gói&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;Mục gói&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;Mục khác&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;Mục riêng&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;Không tìm thấy mã nguồn Lua trong $1&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;tuỳ chọn&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;; &amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;&amp;amp;nbsp;• &amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;Lỗi&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;{{plural:$1|Trường|Các trường}}\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;Lưu ý&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;{{plural:$1|Tham số|Các tham số}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;Trả về&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;Xem thêm&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;Cách dùng&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;Cảnh báo&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;hàm&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;số&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;chuỗi&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;xâu&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;bảng&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;biến&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;zh&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;header-class&amp;quot;] = &amp;quot;程序包类&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-documentation&amp;quot;] = &amp;quot;文档&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-function&amp;quot;] = &amp;quot;程序包函数&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-items&amp;quot;] = &amp;quot;程序包项&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-other&amp;quot;] = &amp;quot;其他项&amp;quot;,&lt;br /&gt;
        [&amp;quot;header-private&amp;quot;] = &amp;quot;私有项&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-content&amp;quot;] = &amp;quot;没有在$1中找到Lua源代码&amp;quot;,&lt;br /&gt;
        [&amp;quot;no-markup&amp;quot;] = &amp;quot;没有在$1中找到Docbunto的文档标记&amp;quot;,&lt;br /&gt;
        [&amp;quot;optional&amp;quot;] = &amp;quot;可选&amp;quot;,&lt;br /&gt;
        [&amp;quot;parentheses&amp;quot;] = &amp;quot;（$1）&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-colon&amp;quot;] = &amp;quot;；&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-dot&amp;quot;] = &amp;quot;・&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator-semicolon&amp;quot;] = &amp;quot;：&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-error&amp;quot;] = &amp;quot;错误&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-field&amp;quot;] = &amp;quot;字段&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-fixme&amp;quot;] = &amp;quot;漏洞&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-note&amp;quot;] = &amp;quot;注意&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-param&amp;quot;] = &amp;quot;参数&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-return&amp;quot;] = &amp;quot;返回&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-see&amp;quot;] = &amp;quot;另见&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-todo&amp;quot;] = &amp;quot;待办&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-usage&amp;quot;] = &amp;quot;用法&amp;quot;,&lt;br /&gt;
        [&amp;quot;tag-warning&amp;quot;] = &amp;quot;警告&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-boolean&amp;quot;] = &amp;quot;布尔&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-function&amp;quot;] = &amp;quot;函数&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-member&amp;quot;] = &amp;quot;成员&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-nil&amp;quot;] = &amp;quot;nil&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-number&amp;quot;] = &amp;quot;数字&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-sequence&amp;quot;] = &amp;quot;序列&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-string&amp;quot;] = &amp;quot;字符串&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-table&amp;quot;] = &amp;quot;表&amp;quot;,&lt;br /&gt;
        [&amp;quot;type-variable&amp;quot;] = &amp;quot;变量&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Entrypoint&amp;diff=1071</id>
		<title>Modul:Entrypoint</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Entrypoint&amp;diff=1071"/>
		<updated>2026-09-09T13:00:10Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- Entrypoint templating wrapper for Scribunto packages.&lt;br /&gt;
--  The module generates an entrypoint function that can execute Scribunto&lt;br /&gt;
--  package calls in the template context. This allows a package to support&lt;br /&gt;
--  both direct and template invocations.&lt;br /&gt;
--  &lt;br /&gt;
--  @script             entrypoint&lt;br /&gt;
--  @release            beta&lt;br /&gt;
--  @author             [[wikia:dev:User:8nml|8nml]] (Fandom Dev Wiki)&lt;br /&gt;
--  @param              {table} package Scribunto package.&lt;br /&gt;
--  @error[85]          {string} &#039;you must specify a function to call&#039;&lt;br /&gt;
--  @error[91]          {string} &#039;the function you specified did not exist&#039;&lt;br /&gt;
--  @error[opt,95]      {string} &#039;$2 is not a function&#039;&lt;br /&gt;
--  @return             {function} Template entrypoint - @{main}.&lt;br /&gt;
--  @note               Parent frames are not available in Entrypoint&#039;s&lt;br /&gt;
--                      `frame`. This is because recursive (grandparent)&lt;br /&gt;
--                      frame access is impossible in legacy Scribunto&lt;br /&gt;
--                      due to [[mw:Manual:Parser#Empty-argument expansion&lt;br /&gt;
--                      cache|empty-argument expansion cache]] limitations.&lt;br /&gt;
--  @note               As Entrypoint enables template access rather than&lt;br /&gt;
--                      a new extension hook, it does not work with named&lt;br /&gt;
--                      numeric parameters such as `1=` or `2=`. This may&lt;br /&gt;
--                      result in unexpected behaviour such as Entrypoint&lt;br /&gt;
--                      and module errors.&lt;br /&gt;
&lt;br /&gt;
--- Stateless, sequential Lua iterator.&lt;br /&gt;
--  @function           inext&lt;br /&gt;
--  @param              {table} t Invariant state to loop over.&lt;br /&gt;
--  @param              {number} i Control variable (current index).&lt;br /&gt;
--  @return[opt]        {number} Next index.&lt;br /&gt;
--  @return[opt]        {number|string|table|boolean} Next value.&lt;br /&gt;
--  @see                https://github.com/lua/lua/blob/v5.1.1/lbaselib.c#L247&lt;br /&gt;
local inext = select(1, ipairs{})&lt;br /&gt;
&lt;br /&gt;
--- Check for MediaWiki version 1.25.&lt;br /&gt;
--  The concurrent Scribunto release adds a type check for package functions.&lt;br /&gt;
--  @variable           {boolean} func_check&lt;br /&gt;
--  @see                [[mw:MediaWiki 1.24/wmf7#Scribunto]]&lt;br /&gt;
local func_check = tonumber(mw.site.currentVersion:match(&#039;^%d+.%d+&#039;)) &amp;gt;= 1.25&lt;br /&gt;
&lt;br /&gt;
--- MediaWiki error message getter.&lt;br /&gt;
--  Mimics Scribunto error formatting for script errors. &lt;br /&gt;
--  @function           msg&lt;br /&gt;
--  @param              {string} key MediaWiki i18n message key.&lt;br /&gt;
--  @param[opt]         {string} fn_name Name of package function.&lt;br /&gt;
--  @return             {string} Formatted lowercase message.&lt;br /&gt;
--  @local&lt;br /&gt;
local function msg(key, fn_name)&lt;br /&gt;
    return select(1, mw.message.new(key)&lt;br /&gt;
        :plain()&lt;br /&gt;
        :match(&#039;:%s*(.-)[.۔。෴։።]?$&#039;)&lt;br /&gt;
        :gsub(&#039;^.&#039;, mw.ustring.lower)&lt;br /&gt;
        :gsub(&#039;$2&#039;, fn_name or &#039;$2&#039;)&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Template entrypoint function generated by this module.&lt;br /&gt;
--  @function           main&lt;br /&gt;
--  @param              {Frame} frame Scribunto frame in module context.&lt;br /&gt;
--  @return             {string} Module output in template context.&lt;br /&gt;
return function(package) return function(f)&lt;br /&gt;
    local frame = f:getParent()&lt;br /&gt;
&lt;br /&gt;
    local args_mt = {}&lt;br /&gt;
    local arg_cache = {}&lt;br /&gt;
&lt;br /&gt;
    args_mt.__pairs = function()&lt;br /&gt;
        return next, arg_cache, nil&lt;br /&gt;
    end&lt;br /&gt;
    args_mt.__ipairs = function()&lt;br /&gt;
        return inext, arg_cache, 0&lt;br /&gt;
    end&lt;br /&gt;
    args_mt.__index = function(t, k)&lt;br /&gt;
        return arg_cache[k]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for key, val in pairs(frame.args) do&lt;br /&gt;
        arg_cache[key] = val&lt;br /&gt;
    end&lt;br /&gt;
    local fn_name = table.remove(arg_cache, 1)&lt;br /&gt;
&lt;br /&gt;
    f.args = setmetatable({}, args_mt)&lt;br /&gt;
    frame.args = setmetatable({}, args_mt)&lt;br /&gt;
&lt;br /&gt;
    if not fn_name then&lt;br /&gt;
        error(msg(&#039;scribunto-common-nofunction&#039;))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    fn_name = mw.text.trim(fn_name)&lt;br /&gt;
&lt;br /&gt;
    if not package[fn_name] then&lt;br /&gt;
        error(msg(&#039;scribunto-common-nosuchfunction&#039;, fn_name))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if func_check and type(package[fn_name]) ~= &#039;function&#039; then&lt;br /&gt;
        error(msg(&#039;scribunto-common-notafunction&#039;, fn_name))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return package[fn_name](frame)&lt;br /&gt;
end end&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Fallbacklist&amp;diff=1069</id>
		<title>Modul:Fallbacklist</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Fallbacklist&amp;diff=1069"/>
		<updated>2026-09-09T13:00:10Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- Language fallback rules for other Lua modules.&lt;br /&gt;
-- @see       [[c:Module:Fallbacklist]]&lt;br /&gt;
-- @release   stable&lt;br /&gt;
-- @submodule&lt;br /&gt;
return {&lt;br /&gt;
&lt;br /&gt;
    -- crh (Crimean Tatar) cluster: crh-cyrl , crh-latn -&amp;gt; crh (Crimean Tatar)&lt;br /&gt;
    [&#039;crh&#039;]          = {&#039;crh-latn&#039;},&lt;br /&gt;
    [&#039;crh-cyrl&#039;]     = {&#039;crh&#039;, &#039;ru&#039;}, &lt;br /&gt;
    [&#039;crh-latn&#039;]     = {&#039;crh&#039;},&lt;br /&gt;
&lt;br /&gt;
    -- de (German) cluster:&lt;br /&gt;
    [&#039;als&#039;]          = {&#039;gsw&#039;, &#039;de&#039;},                       -- Alemannisch&lt;br /&gt;
    [&#039;bar&#039;]          = {&#039;de&#039;},                              -- Bavarian&lt;br /&gt;
    [&#039;de-at&#039;]        = {&#039;de&#039;},                              -- Austrian German&lt;br /&gt;
    [&#039;de-ch&#039;]        = {&#039;de&#039;},                              -- Swiss High German&lt;br /&gt;
    [&#039;de-formal&#039;]    = {&#039;de&#039;},                              -- German (formal address)&lt;br /&gt;
    [&#039;dsb&#039;]          = {&#039;de&#039;},                              -- Lower Sorbian&lt;br /&gt;
    [&#039;frr&#039;]          = {&#039;de&#039;},                              -- Northern Frisian&lt;br /&gt;
    [&#039;hsb&#039;]          = {&#039;de&#039;},                              -- Upper Sorbian&lt;br /&gt;
    [&#039;ksh&#039;]          = {&#039;de&#039;},                              -- Colognian&lt;br /&gt;
    [&#039;lb&#039;]           = {&#039;de&#039;},                              -- Luxembourgish&lt;br /&gt;
    [&#039;nds&#039;]          = {&#039;nds-nl&#039;, &#039;de&#039;},                    -- Low German&lt;br /&gt;
    [&#039;nds-nl&#039;]       = {&#039;nds&#039;, &#039;nl&#039;},                       -- Low Saxon (Netherlands)&lt;br /&gt;
    [&#039;pdc&#039;]          = {&#039;de&#039;},                              -- Deitsch&lt;br /&gt;
    [&#039;pdt&#039;]          = {&#039;nds&#039;, &#039;de&#039;},                       -- Plautdietsch&lt;br /&gt;
    [&#039;pfl&#039;]          = {&#039;de&#039;},                              -- Pälzisch&lt;br /&gt;
    [&#039;sli&#039;]          = {&#039;de&#039;},                              -- Lower Silesian&lt;br /&gt;
    [&#039;stq&#039;]          = {&#039;de&#039;},                              -- Seeltersk&lt;br /&gt;
    [&#039;vmf&#039;]          = {&#039;de&#039;},                              -- Upper Franconian&lt;br /&gt;
&lt;br /&gt;
    -- es (Spanish) cluster&lt;br /&gt;
    [&#039;an&#039;]           = {&#039;es&#039;},                              -- Aragonese&lt;br /&gt;
    [&#039;arn&#039;]          = {&#039;es&#039;},                              -- Mapuche&lt;br /&gt;
    [&#039;ay&#039;]           = {&#039;es&#039;},                              -- Aymara&lt;br /&gt;
    [&#039;cbk-zam&#039;]      = {&#039;es&#039;},                              -- Chavacano de Zamboanga&lt;br /&gt;
    [&#039;gn&#039;]           = {&#039;es&#039;},                              -- Guarani&lt;br /&gt;
    [&#039;lad&#039;]          = {&#039;es&#039;},                              -- Ladino&lt;br /&gt;
    [&#039;nah&#039;]          = {&#039;es&#039;},                              -- Nahuatl&lt;br /&gt;
    [&#039;qu&#039;]           = {&#039;es&#039;},                              -- Quechua&lt;br /&gt;
    [&#039;qug&#039;]          = {&#039;qu&#039;, &#039;es&#039;},                        -- Runa shimi&lt;br /&gt;
&lt;br /&gt;
    -- et (Estonian) cluster&lt;br /&gt;
    [&#039;liv&#039;]          = {&#039;et&#039;},                              -- Līvõ kēļ&lt;br /&gt;
    [&#039;vep&#039;]          = {&#039;et&#039;},                              -- Veps&lt;br /&gt;
    [&#039;vro&#039;]          = {&#039;et&#039;},                              -- Võro&lt;br /&gt;
    [&#039;fiu-vro&#039;]      = {&#039;vro&#039;, &#039;et&#039;},                       -- Võro&lt;br /&gt;
&lt;br /&gt;
    -- fa (Persian) cluster&lt;br /&gt;
    [&#039;bcc&#039;]          = {&#039;fa&#039;},                              -- Southern Balochi&lt;br /&gt;
    [&#039;bqi&#039;]          = {&#039;fa&#039;},                              -- Bakhtiari&lt;br /&gt;
    [&#039;glk&#039;]          = {&#039;fa&#039;},                              -- Gilaki&lt;br /&gt;
    [&#039;mzn&#039;]          = {&#039;fa&#039;},                              -- Mazandarani&lt;br /&gt;
&lt;br /&gt;
    -- fi (Finnish) cluster:&lt;br /&gt;
    [&#039;fit&#039;]          = {&#039;fi&#039;},                              -- meänkieli&lt;br /&gt;
    [&#039;vot&#039;]          = {&#039;fi&#039;},                              -- Votic&lt;br /&gt;
&lt;br /&gt;
    -- fr (French) cluster:&lt;br /&gt;
    [&#039;bm&#039;]           = {&#039;fr&#039;},                              -- Bambara&lt;br /&gt;
    [&#039;br&#039;]           = {&#039;fr&#039;},                              -- Breton&lt;br /&gt;
    [&#039;co&#039;]           = {&#039;fr&#039;},                              -- Corsican&lt;br /&gt;
    [&#039;ff&#039;]           = {&#039;fr&#039;},                              -- Fulah&lt;br /&gt;
    [&#039;frc&#039;]          = {&#039;fr&#039;},                              -- Cajun French&lt;br /&gt;
    [&#039;frp&#039;]          = {&#039;fr&#039;},                              -- Franco-Provençal&lt;br /&gt;
    [&#039;ht&#039;]           = {&#039;fr&#039;},                              -- Haitian&lt;br /&gt;
    [&#039;ln&#039;]           = {&#039;fr&#039;},                              -- Lingala&lt;br /&gt;
    [&#039;mg&#039;]           = {&#039;fr&#039;},                              -- Malagasy&lt;br /&gt;
    [&#039;pcd&#039;]          = {&#039;fr&#039;},                              -- Picard&lt;br /&gt;
    [&#039;sg&#039;]           = {&#039;fr&#039;},                              -- Sango&lt;br /&gt;
    [&#039;ty&#039;]           = {&#039;fr&#039;},                              -- Tahitian&lt;br /&gt;
    [&#039;wa&#039;]           = {&#039;fr&#039;},                              -- Walloon&lt;br /&gt;
    [&#039;wo&#039;]           = {&#039;fr&#039;},                              -- Wolof&lt;br /&gt;
&lt;br /&gt;
    -- hi (Hindi) cluster&lt;br /&gt;
    [&#039;anp&#039;]          = {&#039;hi&#039;},                              -- Angika&lt;br /&gt;
    [&#039;mai&#039;]          = {&#039;hi&#039;},                              -- Maithili&lt;br /&gt;
    [&#039;sa&#039;]           = {&#039;hi&#039;},                              -- Sanskrit&lt;br /&gt;
&lt;br /&gt;
    -- hif (Fiji Hindi) cluster: hif-deva , hif-latn -&amp;gt; hif (Fiji Hindi)&lt;br /&gt;
    [&#039;hif&#039;]          = {&#039;hif-latn&#039;},&lt;br /&gt;
    [&#039;hif-deva&#039;]     = {&#039;hif&#039;}, &lt;br /&gt;
    [&#039;hif-latn&#039;]     = {&#039;hif&#039;},&lt;br /&gt;
&lt;br /&gt;
    -- id (Indonesian) cluster&lt;br /&gt;
    [&#039;min&#039;]          = {&#039;id&#039;},                              -- Minangkabau&lt;br /&gt;
    [&#039;ace&#039;]          = {&#039;id&#039;},                              -- Achinese&lt;br /&gt;
    [&#039;bug&#039;]          = {&#039;id&#039;},                              -- Buginese&lt;br /&gt;
    [&#039;bjn&#039;]          = {&#039;id&#039;},                              -- Banjar&lt;br /&gt;
    [&#039;jv&#039;]           = {&#039;id&#039;},                              -- Javanese&lt;br /&gt;
    [&#039;su&#039;]           = {&#039;id&#039;},                              -- Sundanese&lt;br /&gt;
    [&#039;map-bms&#039;]      = {&#039;jv&#039;, &#039;id&#039;},                        -- Basa Banyumasan&lt;br /&gt;
&lt;br /&gt;
    -- ike (Eastern Canadian Inuktitut) cluster: ike-cans , ike-latn -&amp;gt; ike (Eastern Canadian Inuktitut)&lt;br /&gt;
    [&#039;ike-cans&#039;]     = {&#039;ik&#039;}, &lt;br /&gt;
    [&#039;ike-latn&#039;]     = {&#039;ik&#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- it (Italian) cluster&lt;br /&gt;
    [&#039;egl&#039;]          = {&#039;it&#039;},                              -- Emiliàn&lt;br /&gt;
    [&#039;eml&#039;]          = {&#039;it&#039;},                              -- Emiliano-Romagnolo&lt;br /&gt;
    [&#039;fur&#039;]          = {&#039;it&#039;},                              -- Friulian&lt;br /&gt;
    [&#039;lij&#039;]          = {&#039;it&#039;},                              -- Ligure&lt;br /&gt;
    [&#039;lmo&#039;]          = {&#039;it&#039;},                              -- lumbaart&lt;br /&gt;
    [&#039;nap&#039;]          = {&#039;it&#039;},                              -- Neapolitan&lt;br /&gt;
    [&#039;pms&#039;]          = {&#039;it&#039;},                              -- Piedmontese&lt;br /&gt;
    [&#039;rgn&#039;]          = {&#039;it&#039;},                              -- Romagnol&lt;br /&gt;
    [&#039;scn&#039;]          = {&#039;it&#039;},                              -- Sicilian&lt;br /&gt;
    [&#039;vec&#039;]          = {&#039;it&#039;},                              -- vèneto&lt;br /&gt;
&lt;br /&gt;
    -- kk (Kazakh) cluster:&lt;br /&gt;
    -- kk-arab , kk-cyrl , kk-latn , kk-cn , kk-kz , kk-tr -&amp;gt; kk (Kazakh)&lt;br /&gt;
    [&#039;kk&#039;]           = {&#039;kk-cyrl&#039;},                         -- Kazakh&lt;br /&gt;
    [&#039;kk-arab&#039;]      = {&#039;kk-cyrl&#039;, &#039;kk&#039;},                   -- Kazakh (Arabic script)&lt;br /&gt;
    [&#039;kk-cn&#039;]        = {&#039;kk-arab&#039;, &#039;kk-cyrl&#039;, &#039;kk&#039;},        -- Kazakh (China)&lt;br /&gt;
    [&#039;kk-cyrl&#039;]      = {&#039;kk&#039;},                              -- Kazakh (Cyrillic script)&lt;br /&gt;
    [&#039;kk-kz&#039;]        = {&#039;kk&#039;, &#039;kk-cyrl&#039;},                   -- Kazakh (Kazakhstan)&lt;br /&gt;
    [&#039;kk-latn&#039;]      = {&#039;kk-cyrl&#039;, &#039;kk&#039;},                   -- Kazakh (Latin script)&lt;br /&gt;
    [&#039;kk-tr&#039;]        = {&#039;kk-latn&#039;, &#039;kk-cyrl&#039;, &#039;kk&#039;},        -- Kazakh (Turkey)&lt;br /&gt;
    [&#039;kaa&#039;]          = {&#039;kk-latn&#039;, &#039;kk-cyrl&#039;},              -- Kara-Kalpak&lt;br /&gt;
&lt;br /&gt;
    -- ku (Kurdish) cluster: ku-latn , ku-arab -&amp;gt; ku (Kurdish)&lt;br /&gt;
    [&#039;ku&#039;]           = {&#039;ku-latn&#039;},&lt;br /&gt;
    [&#039;ku-arab&#039;]      = {&#039;ckb&#039;, &#039;ckb-arab&#039;, &#039;ku&#039;},           -- كوردي (عەرەبی)&lt;br /&gt;
    [&#039;ku-latn&#039;]      = {&#039;ku&#039;},&lt;br /&gt;
    [&#039;ckb&#039;]          = {&#039;ckb-arab&#039;, &#039;ku&#039;},&lt;br /&gt;
&lt;br /&gt;
    -- nl (Dutch) cluster&lt;br /&gt;
    [&#039;af&#039;]           = {&#039;nl&#039;},                              -- Afrikaans&lt;br /&gt;
    [&#039;fy&#039;]           = {&#039;nl&#039;},                              -- Western Frisian&lt;br /&gt;
    [&#039;li&#039;]           = {&#039;nl&#039;},                              -- Liechtenstein&lt;br /&gt;
    [&#039;nl-informal&#039;]  = {&#039;nl&#039;},                              -- Nederlands (informeel)&lt;br /&gt;
    [&#039;vls&#039;]          = {&#039;nl&#039;},                              -- Vlaams&lt;br /&gt;
    [&#039;zea&#039;]          = {&#039;nl&#039;},                              -- Zeeuws&lt;br /&gt;
&lt;br /&gt;
    --pl (Polish) cluster&lt;br /&gt;
    [&#039;csb&#039;]          = {&#039;pl&#039;},                              -- Kashubian&lt;br /&gt;
    [&#039;szl&#039;]          = {&#039;pl&#039;},                              -- Silesian&lt;br /&gt;
&lt;br /&gt;
    -- pt (Portuguese) cluster&lt;br /&gt;
    [&#039;gl&#039;]           = {&#039;pt&#039;},                              -- Galician&lt;br /&gt;
    [&#039;mwl&#039;]          = {&#039;pt&#039;},                              -- Mirandese&lt;br /&gt;
    [&#039;pt-br&#039;]        = {&#039;pt&#039;},                              -- Brazilian Portuguese&lt;br /&gt;
&lt;br /&gt;
    -- ro (Romanian) cluster&lt;br /&gt;
    [&#039;mo&#039;]           = {&#039;ro&#039;},                              -- Moldavian&lt;br /&gt;
    [&#039;rmy&#039;]          = {&#039;ro&#039;},                              -- Romani&lt;br /&gt;
&lt;br /&gt;
    -- ru (Russian) cluster&lt;br /&gt;
    [&#039;ab&#039;]           = {&#039;ru&#039;},                              -- Abkhazian&lt;br /&gt;
    [&#039;av&#039;]           = {&#039;ru&#039;},                              -- Avaric&lt;br /&gt;
    [&#039;ba&#039;]           = {&#039;ru&#039;},                              -- Bashkir&lt;br /&gt;
    [&#039;be-tarask&#039;]    = {&#039;ru&#039;},                              -- Belorussian&lt;br /&gt;
    [&#039;ce&#039;]           = {&#039;ru&#039;},                              -- Chechen&lt;br /&gt;
    [&#039;crh-cyrl&#039;]     = {&#039;ru&#039;},                              -- Crimean Tatar (Cyrillic script)&lt;br /&gt;
    [&#039;cv&#039;]           = {&#039;ru&#039;},                              -- Chuvash&lt;br /&gt;
    [&#039;inh&#039;]          = {&#039;ru&#039;},                              -- Ingush&lt;br /&gt;
    [&#039;koi&#039;]          = {&#039;ru&#039;},                              -- Komi-Permyak&lt;br /&gt;
    [&#039;krc&#039;]          = {&#039;ru&#039;},                              -- Karachay-Balkar&lt;br /&gt;
    [&#039;kv&#039;]           = {&#039;ru&#039;},                              -- Komi&lt;br /&gt;
    [&#039;lbe&#039;]          = {&#039;ru&#039;},                              -- лакку&lt;br /&gt;
    [&#039;lez&#039;]          = {&#039;ru&#039;},                              -- Lezghian&lt;br /&gt;
    [&#039;mhr&#039;]          = {&#039;ru&#039;},                              -- Eastern Mari&lt;br /&gt;
    [&#039;mrj&#039;]          = {&#039;ru&#039;},                              -- Hill Mari&lt;br /&gt;
    [&#039;myv&#039;]          = {&#039;ru&#039;},                              -- Erzya&lt;br /&gt;
    [&#039;os&#039;]           = {&#039;ru&#039;},                              -- Ossetic&lt;br /&gt;
    [&#039;rue&#039;]          = {&#039;uk&#039;, &#039;ru&#039;},                        -- Rusyn&lt;br /&gt;
    [&#039;sah&#039;]          = {&#039;ru&#039;},                              -- Sakha&lt;br /&gt;
    [&#039;tt&#039;]           = {&#039;tt-cyrl&#039;, &#039;ru&#039;},                   -- Tatar&lt;br /&gt;
    [&#039;tt-cyrl&#039;]      = {&#039;ru&#039;},                              -- Tatar (Cyrillic script)&lt;br /&gt;
    [&#039;udm&#039;]          = {&#039;ru&#039;},                              -- Udmurt&lt;br /&gt;
    [&#039;uk&#039;]           = {&#039;ru&#039;},                              -- Ukranian&lt;br /&gt;
    [&#039;xal&#039;]          = {&#039;ru&#039;},                              -- Kalmyk&lt;br /&gt;
    [&#039;tt&#039;]           = {&#039;tt-cyrl&#039;, &#039;ru&#039;},                   -- Tatar&lt;br /&gt;
&lt;br /&gt;
    -- ruq (Megleno Romanian) cluster: ruq-cyrl , ruq-grek , ruq-latn -&amp;gt; ruq (Megleno Romanian)&lt;br /&gt;
    [&#039;ruq&#039;]          = {&#039;ruq-latn&#039;, &#039;ro&#039;},                  -- Megleno-Romanian&lt;br /&gt;
    [&#039;ruq-cyrl&#039;]     = {&#039;ruq&#039;, &#039;mk&#039;},                       -- Megleno-Romanian (Cyrillic script)&lt;br /&gt;
    [&#039;ruq-grek&#039;]     = {&#039;ruq&#039;},                             -- Megleno-Romanian (Greek script)&lt;br /&gt;
    [&#039;ruq-latn&#039;]     = {&#039;ro&#039;, &#039;ruq&#039;},                       -- Megleno-Romanian (Latin script)&lt;br /&gt;
&lt;br /&gt;
    -- sr (Serbian) cluster: sr-ec , sr-el -&amp;gt; sr (Serbian)&lt;br /&gt;
    [&#039;sr&#039;]           = {&#039;sr-ec&#039;},&lt;br /&gt;
    [&#039;sr-ec&#039;]        = {&#039;sr&#039;}, &lt;br /&gt;
    [&#039;sr-el&#039;]        = {&#039;sr&#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- tg (Tajik) cluster: tg-cyrl , tg-latn -&amp;gt; tg (Tajik)&lt;br /&gt;
    [&#039;tg&#039;]           = {&#039;tg-cyrl&#039;},&lt;br /&gt;
    [&#039;tg-cyrl&#039;]      = {&#039;tg&#039;}, &lt;br /&gt;
    [&#039;tg-latn&#039;]      = {&#039;tg&#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- tr (Turkish) cluster&lt;br /&gt;
    [&#039;gag&#039;]          = {&#039;tr&#039;},                              -- Gagauz&lt;br /&gt;
    [&#039;kiu&#039;]          = {&#039;tr&#039;},                              -- Kirmanjki&lt;br /&gt;
    [&#039;lzz&#039;]          = {&#039;tr&#039;},                              -- Lazuri&lt;br /&gt;
&lt;br /&gt;
    -- tt (Tatar) cluster: tt-cyrl , tt-latn -&amp;gt; tt (Tatar)&lt;br /&gt;
    [&#039;tt-cyrl&#039;]      = {&#039;tt&#039;},&lt;br /&gt;
    [&#039;tt-latn&#039;]      = {&#039;tt&#039;},&lt;br /&gt;
&lt;br /&gt;
    -- zh (Chinese) cluster&lt;br /&gt;
    -- /includes/language/converters/ZhConverter.php&lt;br /&gt;
    -- https://gerrit.wikimedia.org/r/703560&lt;br /&gt;
    [&#039;cdo&#039;]          = {&#039;nan&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Min Dong Chinese&lt;br /&gt;
    [&#039;gan&#039;]          = {&#039;gan-hant&#039;, &#039;gan-hans&#039;, &#039;zh-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;}, -- Gan &lt;br /&gt;
    [&#039;gan-hans&#039;]     = {&#039;gan&#039;, &#039;gan-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hant&#039;},      -- Simplified Gan script&lt;br /&gt;
    [&#039;gan-hant&#039;]     = {&#039;gan&#039;, &#039;gan-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},      -- Traditional Gan script&lt;br /&gt;
    [&#039;hak&#039;]          = {&#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},        -- Hakka&lt;br /&gt;
    [&#039;ii&#039;]           = {&#039;zh-cn&#039;, &#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hant&#039;}, -- Sichuan Yi&lt;br /&gt;
    [&#039;lzh&#039;]          = {&#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},        -- Literary Chinese&lt;br /&gt;
    [&#039;nan&#039;]          = {&#039;cdo&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Min Nan Chinese&lt;br /&gt;
    [&#039;szy&#039;]          = {&#039;zh-tw&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Sakizaya&lt;br /&gt;
    [&#039;tay&#039;]          = {&#039;zh-tw&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Atayal&lt;br /&gt;
    [&#039;trv&#039;]          = {&#039;zh-tw&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Seediq&lt;br /&gt;
    [&#039;wuu&#039;]          = {&#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;},        -- Wu&lt;br /&gt;
    -- https://phabricator.wikimedia.org/T59138&lt;br /&gt;
    -- [&#039;wuu&#039;]          = {&#039;wuu-hans, &#039;wuu-hant&#039;, &#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;}, -- Wu&lt;br /&gt;
    -- [&#039;wuu-hans&#039;]     = {&#039;wuu&#039;, &#039;wuu-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hant&#039;},     -- Simplified Wu&lt;br /&gt;
    -- [&#039;wuu-hant&#039;]     = {&#039;wuu&#039;, &#039;wuu-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},     -- Traditional Wu&lt;br /&gt;
    [&#039;yue&#039;]          = {&#039;zh-hk&#039;, &#039;zh-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;}, -- Cantonese&lt;br /&gt;
    -- https://phabricator.wikimedia.org/T59106&lt;br /&gt;
    -- [&#039;yue&#039;]          = {&#039;yue-hant&#039;, &#039;yue-hans, &#039;zh-hk&#039;, &#039;zh-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;}, -- Cantonese&lt;br /&gt;
    -- [&#039;yue-hans&#039;]     = {&#039;yue&#039;, &#039;yue-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hk&#039;, &#039;zh-hant&#039;},     -- Simplified Cantonese&lt;br /&gt;
    -- [&#039;yue-hant&#039;]     = {&#039;yue&#039;, &#039;yue-hans&#039;, &#039;zh-hk&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},     -- Traditional Cantonese&lt;br /&gt;
    [&#039;za&#039;]           = {&#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;},        -- Zhuang&lt;br /&gt;
    -- The time allocated for running scripts has expired.&lt;br /&gt;
    -- [&#039;zh&#039;]           = {&#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh-cn&#039;, &#039;zh-tw&#039;, &#039;zh-hk&#039;}, -- Chinese&lt;br /&gt;
    -- [&#039;zh-hans&#039;]      = {&#039;zh-cn&#039;, &#039;zh&#039;, &#039;zh-hant&#039;},   -- Simplified Chinese&lt;br /&gt;
    -- [&#039;zh-hant&#039;]      = {&#039;zh-tw&#039;, &#039;zh-hk&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},   -- Traditional Chinese&lt;br /&gt;
    -- [&#039;zh-tw&#039;]        = {&#039;zh-hant&#039;, &#039;zh-hk&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Chinese (Taiwan)&lt;br /&gt;
    -- [&#039;zh-hk&#039;]        = {&#039;zh-hant&#039;, &#039;zh-tw&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Chinese (Hong Kong)&lt;br /&gt;
    [&#039;zh&#039;]           = {&#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh-hk&#039;}, -- Chinese&lt;br /&gt;
    [&#039;zh-hans&#039;]      = {&#039;zh-hant&#039;, &#039;zh-hk&#039;},   -- Simplified Chinese&lt;br /&gt;
    [&#039;zh-hant&#039;]      = {&#039;zh-hk&#039;, &#039;zh-hans&#039;},   -- Traditional Chinese&lt;br /&gt;
    [&#039;zh-cn&#039;]        = {&#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hant&#039;}, -- Chinese (Mainland China)&lt;br /&gt;
    [&#039;zh-sg&#039;]        = {&#039;zh-hans&#039;, &#039;zh-cn&#039;, &#039;zh&#039;, &#039;zh-hant&#039;}, -- Chinese (Singapore)&lt;br /&gt;
    [&#039;zh-my&#039;]        = {&#039;zh-hans&#039;, &#039;zh-sg&#039;, &#039;zh-cn&#039;, &#039;zh&#039;, &#039;zh-hant&#039;}, -- Chinese (Malaysia)&lt;br /&gt;
    [&#039;zh-tw&#039;]        = {&#039;zh-hant&#039;, &#039;zh-hk&#039;, &#039;zh-hans&#039;}, -- Chinese (Taiwan)&lt;br /&gt;
    [&#039;zh-hk&#039;]        = {&#039;zh-hant&#039;, &#039;zh-hans&#039;}, -- Chinese (Hong Kong)&lt;br /&gt;
    [&#039;zh-mo&#039;]        = {&#039;zh-hant&#039;, &#039;zh-hk&#039;, &#039;zh-tw&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Chinese (Macau)&lt;br /&gt;
    [&#039;zh-classical&#039;] = {&#039;lzh&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Classical Chinese -&amp;gt; Literary Chinese&lt;br /&gt;
    [&#039;zh-min-nan&#039;]   = {&#039;nan&#039;, &#039;cdo&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},   -- Chinese (Min Nan) -&amp;gt; Min Nan Chinese&lt;br /&gt;
    [&#039;zh-yue&#039;]       = {&#039;yue&#039;, &#039;zh-hk&#039;, &#039;zh-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;}, -- Yue Chinese -&amp;gt; Cantonese&lt;br /&gt;
&lt;br /&gt;
    ------------------------&lt;br /&gt;
    --------- misc ---------&lt;br /&gt;
    ------------------------&lt;br /&gt;
    [&#039;arz&#039;]          = {&#039;ar&#039;},                              -- Egyptian Arabic -&amp;gt; Arabic&lt;br /&gt;
    [&#039;azb&#039;]          = {&#039;az&#039;},                              -- Southern Azerbaijani -&amp;gt; Azerbaijani &lt;br /&gt;
    [&#039;be-x-old&#039;]     = {&#039;be-tarask&#039;},                       -- be-x-old -&amp;gt; be-tarask (wrong to correct Taraškievica form of Belarusian orthography)&lt;br /&gt;
    [&#039;bh&#039;]           = {&#039;bho&#039;},                             -- Bihari -&amp;gt; Bhojpuri&lt;br /&gt;
    [&#039;bpy&#039;]          = {&#039;bn&#039;},                              -- Bishnupria Manipuri -&amp;gt; Bengali&lt;br /&gt;
&lt;br /&gt;
    -- da&lt;br /&gt;
    [&#039;jut&#039;]          = {&#039;da&#039;},                              -- Jutish -&amp;gt; Danish&lt;br /&gt;
    [&#039;kl&#039;]           = {&#039;da&#039;},                              -- Kalaallisut -&amp;gt; Danish&lt;br /&gt;
&lt;br /&gt;
    [&#039;en-gb&#039;]        = {&#039;en&#039;},                              -- Brexit -&amp;gt; English&lt;br /&gt;
    [&#039;yi&#039;]           = {&#039;he&#039;},                              -- Yiddish -&amp;gt; Hebrew&lt;br /&gt;
    [&#039;iu&#039;]           = {&#039;ike-cans&#039;},                        -- Inuktitut -&amp;gt; Eastern Canadian (Aboriginal syllabics)&lt;br /&gt;
    [&#039;xmf&#039;]          = {&#039;ka&#039;},                              -- Mingrelian -&amp;gt; Georgian&lt;br /&gt;
    [&#039;kbd&#039;]          = {&#039;kbd-cyrl&#039;, &#039;ru&#039;},                  -- Kabardian -&amp;gt; Адыгэбзэ&lt;br /&gt;
    [&#039;tcy&#039;]          = {&#039;kn&#039;},                              -- Tulu -&amp;gt; Kannada&lt;br /&gt;
    [&#039;ko-kp&#039;]        = {&#039;ko&#039;},                              -- 한국어 (조선) -&amp;gt; Korean&lt;br /&gt;
    [&#039;ks&#039;]           = {&#039;ks-arab&#039;},                         -- Kashmiri -&amp;gt; Kashmiri (Arabic script)&lt;br /&gt;
&lt;br /&gt;
    -- lt&lt;br /&gt;
    [&#039;bat-smg&#039;]      = {&#039;sgs&#039;, &#039;lt&#039;},                       -- Samogitian -&amp;gt; Lithuanian&lt;br /&gt;
    [&#039;sgs&#039;]          = {&#039;lt&#039;},                              -- Samogitian -&amp;gt; Lithuanian&lt;br /&gt;
&lt;br /&gt;
    [&#039;ltg&#039;]          = {&#039;lv&#039;},                              -- Latvian -&amp;gt; Latgalian&lt;br /&gt;
    [&#039;dtp&#039;]          = {&#039;ms&#039;},                              -- Central Dusun -&amp;gt; Malay&lt;br /&gt;
    [&#039;no&#039;]           = {&#039;nb&#039;},                              -- Norwegian (bokmål) -&amp;gt; Norwegian Bokmål&lt;br /&gt;
    [&#039;roa-rup&#039;]      = {&#039;rup&#039;},                             -- Aromanian (other Romance) -&amp;gt; Aromanian&lt;br /&gt;
    [&#039;aln&#039;]          = {&#039;sq&#039;},                              -- Gheg Albanian -&amp;gt; Albanian&lt;br /&gt;
    [&#039;ug&#039;]           = {&#039;ug-arab&#039;},                         -- Uyghur -&amp;gt; Uyghur (Arabic script)&lt;br /&gt;
    [&#039;khw&#039;]          = {&#039;ur&#039;},                              -- Khowar -&amp;gt; Urdu&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Docbunto&amp;diff=1067</id>
		<title>Modul:Docbunto</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Docbunto&amp;diff=1067"/>
		<updated>2026-09-09T13:00:10Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- Docbunto is an automatic documentation generator for Scribunto modules.&lt;br /&gt;
--  The module is based on LuaDoc and LDoc. It produces documentation in&lt;br /&gt;
--  the form of MediaWiki markup, using `@tag`-prefixed comments embedded&lt;br /&gt;
--  in the source code of a Scribunto module. The taglet parser &amp;amp; doclet&lt;br /&gt;
--  renderer Docbunto uses are also publicly exposed to other modules.&lt;br /&gt;
--  &lt;br /&gt;
--  Docbunto code items are introduced by a block comment (`--[[]]--`), an&lt;br /&gt;
--  inline comment with three hyphens (`---`), or an inline `@tag` comment.&lt;br /&gt;
--  The module can use static code analysis to infer variable names, item&lt;br /&gt;
--  privacy (`local` keyword), tables (`{}` constructor) and functions&lt;br /&gt;
--  (`function` keyword). MediaWiki and Markdown formatting is supported.&lt;br /&gt;
--  &lt;br /&gt;
--  Items are usually rendered in the order they are defined, if they are&lt;br /&gt;
--  public items, or emulated classes extending the Lua primitives. There&lt;br /&gt;
--  are many customisation options available to change Docbunto behaviour.&lt;br /&gt;
--  &lt;br /&gt;
--  @module			 docbunto&lt;br /&gt;
--  @alias			  p&lt;br /&gt;
--  @require			Module:I18n&lt;br /&gt;
--  @require			Module:Lua_lexer&lt;br /&gt;
--  @require			Module:Unindent&lt;br /&gt;
--  @require			Module:Yesno&lt;br /&gt;
--  @require			Module:Arguments&lt;br /&gt;
--  @require			Module:Documentation&lt;br /&gt;
--  @author				[[wikia:dev:User:8nml|8nml]] (Fandom Dev Wiki)&lt;br /&gt;
--  @author				[[User:Awesome Aasim|Awesome Aasim]] (Wikimedia port)&lt;br /&gt;
--  @attribution		[https://github.com/stevedonovan @stevedonovan] ([https://github.com/stevedonovan/LDoc GitHub])&lt;br /&gt;
--  @release			beta&lt;br /&gt;
--  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--  Module dependencies.&lt;br /&gt;
local title = mw.title.getCurrentTitle()&lt;br /&gt;
local i18n = require(&#039;Module:I18n&#039;).loadMessages(&#039;Docbunto&#039;):useContentLang()&lt;br /&gt;
local references = mw.loadData(&#039;Module:Docbunto/references&#039;)&lt;br /&gt;
local lexer = require(&#039;Module:Lua lexer&#039;)&lt;br /&gt;
local unindent = require(&#039;Module:Unindent&#039;)&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local doc = require(&#039;Module:Documentation&#039;)&lt;br /&gt;
&lt;br /&gt;
local fileTooBig&lt;br /&gt;
local usingOptionsContent&lt;br /&gt;
local hasTodoItems&lt;br /&gt;
&lt;br /&gt;
--  Module variables.&lt;br /&gt;
local DEFAULT_TITLE = title.namespace == 828 and doc.getEnvironment({}).templateTitle.text or &#039;&#039;&lt;br /&gt;
local DEFAULT_VARIABLE = DEFAULT_TITLE&lt;br /&gt;
	:gsub(&#039;^%u&#039;, mw.ustring.lower)&lt;br /&gt;
	:gsub(&#039;%s&#039;, &#039;_&#039;):gsub(&#039;%p&#039;, &#039;.&#039;)&lt;br /&gt;
local frame, gsub, match&lt;br /&gt;
&lt;br /&gt;
local syntaxhighlightPresent = mw.getCurrentFrame()&lt;br /&gt;
	:preprocess(&amp;quot;&amp;lt;syntaxhighlight lang=\&amp;quot;lua\&amp;quot;&amp;gt;-- Lua&amp;lt;/syntaxhighlight&amp;gt;&amp;quot;)&lt;br /&gt;
		~= &amp;quot;&amp;lt;syntaxhighlight lang=\&amp;quot;lua\&amp;quot;&amp;gt;-- Lua&amp;lt;/syntaxhighlight&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--  Docbunto variables &amp;amp; tag tokens.&lt;br /&gt;
local TAG_MULTI = &#039;M&#039;&lt;br /&gt;
local TAG_ID = &#039;ID&#039;&lt;br /&gt;
local TAG_SINGLE = &#039;S&#039;&lt;br /&gt;
local TAG_TYPE = &#039;T&#039;&lt;br /&gt;
local TAG_FLAG = &#039;N&#039;&lt;br /&gt;
local TAG_MULTI_LINE = &#039;ML&#039;&lt;br /&gt;
&lt;br /&gt;
--  Docbunto processing patterns.&lt;br /&gt;
local patterns = {}&lt;br /&gt;
&lt;br /&gt;
--- Configuration options.&lt;br /&gt;
--  @table              options &lt;br /&gt;
--  @field[opt]         {boolean} options.all Include local items in&lt;br /&gt;
--                      documentation.&lt;br /&gt;
--  @field[opt]         {boolean} options.autodoc Whether the module is being&lt;br /&gt;
--                      called to automatically provide missing documentation.&lt;br /&gt;
--  @field[opt]         {boolean} options.boilerplate Removal of&lt;br /&gt;
--                      boilerplate (license block comments).&lt;br /&gt;
--  @field[opt]         {string} options.caption Infobox image caption.&lt;br /&gt;
--  @field[opt]         {boolean} options.code Only document Docbunto code&lt;br /&gt;
--                      items - exclude article infobox and lede from&lt;br /&gt;
--                      rendered documentation. Permits article to be&lt;br /&gt;
--                      edited in VisualEditor.&lt;br /&gt;
--  @field[opt]         {boolean} options.colon Format tags with a `:` suffix&lt;br /&gt;
--                      and without the `@` prefix. This bypasses the &amp;quot;doctag&lt;br /&gt;
--                      soup&amp;quot; some authors complain of.&lt;br /&gt;
--  @field[opt]         {string} options.image Infobox image.&lt;br /&gt;
--  @field[opt]         {boolean} options.box Include infobox in output.&lt;br /&gt;
--  @field[opt]         {boolean} options.footer Append a horizontal line &amp;amp;&lt;br /&gt;
--                      &amp;quot;generated by Docbunto&amp;quot; to the bottom of the output.&lt;br /&gt;
--  @field[opt]         {boolean} options.noluaref Don&#039;t link to the [[mw:&lt;br /&gt;
--  					Extension:Scribunto/Lua reference manual|Lua reference manual]] for types.&lt;br /&gt;
--  @field[opt]         {boolean} options.card Include endmatter card in the&lt;br /&gt;
--                      output at the end of the documentation.&lt;br /&gt;
--  @field[opt]         {boolean} options.plain Disable Markdown formatting&lt;br /&gt;
--                      in documentation.&lt;br /&gt;
--  @field[opt]         {string} options.preface Preface text to insert&lt;br /&gt;
--                      between lede &amp;amp; item documentation, used to provide&lt;br /&gt;
--                      usage and code examples.&lt;br /&gt;
--  @field[opt]         {boolean} options.simple Limit documentation to&lt;br /&gt;
--                      descriptions only. Removes documentation of&lt;br /&gt;
--                      subitem tags such as `@param` and `@field` ([[#Item&lt;br /&gt;
--                      subtags|see list]]).&lt;br /&gt;
--  @field[opt]         {boolean} options.sort Sort documentation items in&lt;br /&gt;
--                      alphabetical order.&lt;br /&gt;
--  @field[opt]         {boolean} options.strip Remove table index in&lt;br /&gt;
--                      documentation.&lt;br /&gt;
--  @field[opt]         {boolean} options.ulist Indent subitems as `&amp;lt;ul&amp;gt;`&lt;br /&gt;
--                      lists (LDoc/JSDoc behaviour).&lt;br /&gt;
--  @field[opt]         {boolean} options.verbose Show the code&lt;br /&gt;
--                      description of a package function when documenting&lt;br /&gt;
--                      function modules.&lt;br /&gt;
&lt;br /&gt;
--  Docbunto private utilities.&lt;br /&gt;
local utils = {}&lt;br /&gt;
&lt;br /&gt;
--- @{string.find} optimisation for @{string} functions.&lt;br /&gt;
--  @function           utils.strfind_wrap&lt;br /&gt;
--  @param              {function} strfunc String library function.&lt;br /&gt;
--  @return             {function} Function wrapped in @{string.find} check.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.strfind_wrap(func)&lt;br /&gt;
	return function(...)&lt;br /&gt;
		local arg = {...}&lt;br /&gt;
		if string.find(arg[1], arg[2]) then&lt;br /&gt;
			return func(...);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- String concatenation utility.&lt;br /&gt;
--  @function           join&lt;br /&gt;
--  @param              {sequence&amp;lt;string&amp;gt;} tbl Table of string segments&lt;br /&gt;
--  @return             {function} A concatenated string.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.join(tbl)&lt;br /&gt;
	return table.concat(tbl, &#039;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Pattern configuration function.&lt;br /&gt;
--  Resets patterns for each documentation build.&lt;br /&gt;
--  @function           utils.configure_patterns&lt;br /&gt;
--  @param              {options} options Configuration options.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.configure_patterns(options)&lt;br /&gt;
	-- Setup Unicode or ASCII character encoding (optimisation).&lt;br /&gt;
	gsub = utils.strfind_wrap(&lt;br /&gt;
		options.unicode&lt;br /&gt;
			and mw.ustring.gsub&lt;br /&gt;
			or  string.gsub&lt;br /&gt;
	)&lt;br /&gt;
	match = utils.strfind_wrap(&lt;br /&gt;
		options.unicode&lt;br /&gt;
			and mw.ustring.match&lt;br /&gt;
			or  string.match&lt;br /&gt;
	)&lt;br /&gt;
	patterns.DOCBUNTO_SUMMARY =&lt;br /&gt;
		options.iso639_th&lt;br /&gt;
			and &#039;^[^ ]+&#039;&lt;br /&gt;
			or&lt;br /&gt;
		options.unicode&lt;br /&gt;
			and &#039;^[^.։。।෴۔።]+[.։。।෴۔።]?&#039;&lt;br /&gt;
			or  &#039;^[^.]+%.?&#039;&lt;br /&gt;
	patterns.DOCBUNTO_CONCAT = options.iso639_th and &#039;&#039; or &#039; &#039;&lt;br /&gt;
	patterns.DOCBUNTO_TYPE = &#039;^{({*[^}]+}*)}%s*&#039;&lt;br /&gt;
	patterns.DOCBUNTO_WIKITEXT = &#039;^[{|!}:#*=]+[%s-}]+&#039;&lt;br /&gt;
&lt;br /&gt;
	-- Setup parsing tag patterns with colon mode support.&lt;br /&gt;
	patterns.DOCBUNTO_TAG = options.colon and &#039;^%s*(%w+):&#039; or &#039;^%s*@(%w+)&#039;&lt;br /&gt;
	patterns.DOCBUNTO_TAG_COMMENT = &#039;^[-%s]*&#039; .. patterns.DOCBUNTO_TAG:sub(2)&lt;br /&gt;
	patterns.DOCBUNTO_TAG_VALUE = patterns.DOCBUNTO_TAG .. &#039;(.*)&#039;&lt;br /&gt;
	patterns.DOCBUNTO_TAG_MOD_VALUE = patterns.DOCBUNTO_TAG .. &#039;%[([^%]]*)%](.*)&#039;&lt;br /&gt;
	patterns.DOCBUNTO_TAG_OPTION_VALUE = &#039;(%[[^%]]*%])%s*(.*)&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Tag processor function.&lt;br /&gt;
--  @function           utils.process_tag&lt;br /&gt;
--  @param              {string} str Tag string to process.&lt;br /&gt;
--  @return             {table} Tag object.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.process_tag(str)&lt;br /&gt;
	local tag = {}&lt;br /&gt;
&lt;br /&gt;
	if str:find(patterns.DOCBUNTO_TAG_MOD_VALUE) then&lt;br /&gt;
		tag.name, tag.modifiers, tag.value = str:match(patterns.DOCBUNTO_TAG_MOD_VALUE)&lt;br /&gt;
		local modifiers = {}&lt;br /&gt;
&lt;br /&gt;
		for m in tag.modifiers:gmatch(&#039;[^%s,]+&#039;) do&lt;br /&gt;
			local i = m:find(&#039;=&#039;)&lt;br /&gt;
			if i then&lt;br /&gt;
				local key = mw.text.trim(m:sub(1, i - 1))&lt;br /&gt;
				local val = mw.text.trim(m:sub(i + 1, #m))&lt;br /&gt;
				modifiers[key] = val&lt;br /&gt;
			else&lt;br /&gt;
				modifiers[m] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if modifiers.optchain then&lt;br /&gt;
			modifiers.opt = true&lt;br /&gt;
			modifiers.optchain = nil&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		tag.modifiers = modifiers&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		tag.name, tag.value = str:match(patterns.DOCBUNTO_TAG_VALUE)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tag.value = mw.text.trim(tag.value)&lt;br /&gt;
&lt;br /&gt;
	if p.tags._type_alias[tag.name] then&lt;br /&gt;
		if p.tags._type_alias[tag.name] ~= &#039;variable&#039; then&lt;br /&gt;
			tag.value = p.tags._type_alias[tag.name] .. &#039; &#039; .. tag.value&lt;br /&gt;
			tag.name = &#039;field&#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if tag.value:match(&#039;^%S+&#039;) ~= &#039;...&#039; then&lt;br /&gt;
		   tag.value = tag.value:gsub(&#039;^(%S+)&#039;, &#039;{%1}&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tag.name = p.tags._alias[tag.name] or tag.name&lt;br /&gt;
&lt;br /&gt;
	if tag.name ~= &#039;usage&#039; and tag.value:find(patterns.DOCBUNTO_TYPE) then&lt;br /&gt;
		tag.type = tag.value:match(patterns.DOCBUNTO_TYPE)&lt;br /&gt;
		if tag.type:find(&#039;^%?&#039;) then&lt;br /&gt;
			tag.type = tag.type:sub(2) .. &#039;|nil&#039;&lt;br /&gt;
		end&lt;br /&gt;
		tag.value = tag.value:gsub(patterns.DOCBUNTO_TYPE, &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (tag.name == &#039;param&#039; or tag.name == &#039;field&#039;) and tag.value:find(patterns.DOCBUNTO_TAG_OPTION_VALUE) then&lt;br /&gt;
		tag.value = tag.value:gsub(patterns.DOCBUNTO_TAG_OPTION_VALUE, &#039;%1 %2&#039;)&lt;br /&gt;
		tag.modifiers = tag.modifiers or {}&lt;br /&gt;
		tag.modifiers.opt = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if p.tags[tag.name] == TAG_FLAG then&lt;br /&gt;
		tag.value = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tag&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Module info extraction utility.&lt;br /&gt;
--  @function           utils.extract_info&lt;br /&gt;
--  @param              {table} documentation Package doclet info.&lt;br /&gt;
--  @return             {table} Information name-value map.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.extract_info(documentation)&lt;br /&gt;
	local info = {}&lt;br /&gt;
&lt;br /&gt;
	for _, tag in ipairs(documentation.tags) do&lt;br /&gt;
		if p.tags._module_info[tag.name] then&lt;br /&gt;
			if info[tag.name] then&lt;br /&gt;
				if not info[tag.name]:find(&#039;^%* &#039;) then&lt;br /&gt;
					info[tag.name] = &#039;* &#039; .. info[tag.name]&lt;br /&gt;
				end&lt;br /&gt;
				info[tag.name] = info[tag.name] .. &#039;\n* &#039; .. tag.value&lt;br /&gt;
&lt;br /&gt;
			else&lt;br /&gt;
				info[tag.name] = tag.value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return info&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Type extraction utility.&lt;br /&gt;
--  @function           utils.extract_types&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @return             {sequence&amp;lt;string&amp;gt;} Item types.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.extract_types(item)&lt;br /&gt;
	local item_types = {}&lt;br /&gt;
	for _, tag in ipairs(item.tags) do&lt;br /&gt;
		if p.tags[tag.name] == TAG_TYPE then&lt;br /&gt;
			item_types[1] = tag.name&lt;br /&gt;
&lt;br /&gt;
			if tag.name == &#039;variable&#039; then&lt;br /&gt;
				local implied_local = utils.process_tag(&#039;@local&#039;)&lt;br /&gt;
				table.insert(item.tags, mw.clone(implied_local))&lt;br /&gt;
				item.tags[&#039;local&#039;] = mw.clone(implied_local)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if&lt;br /&gt;
				p.tags._generic_tags[item_types[1]] and&lt;br /&gt;
				not p.tags._project_level[item_types[1]] and&lt;br /&gt;
				tag.type&lt;br /&gt;
			then&lt;br /&gt;
				item_types[#item_types + 1] = tag.type &lt;br /&gt;
			end&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return item_types&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Name extraction utility.&lt;br /&gt;
--  @function           utils.extract_name&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @param              {boolean} project Whether the item is project-level.&lt;br /&gt;
--  @return             {string} Item name.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.extract_name(item, opts)&lt;br /&gt;
	opts = opts or {}&lt;br /&gt;
	local item_name&lt;br /&gt;
	for _, tag in ipairs(item.tags) do&lt;br /&gt;
		if p.tags[tag.name] == TAG_TYPE then&lt;br /&gt;
			item_name = tag.value; break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if item_name or not opts.project then&lt;br /&gt;
		return item_name&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	item_name = item.code:match(&#039;\nreturn%s+([%w_]+)&#039;)&lt;br /&gt;
&lt;br /&gt;
	if item_name == &#039;p&#039; and not item.tags[&#039;alias&#039;] then&lt;br /&gt;
		local implied_alias = { name = &#039;alias&#039;, value = &#039;p&#039; }&lt;br /&gt;
		item.tags[&#039;alias&#039;] = implied_alias&lt;br /&gt;
		table.insert(item.tags, implied_alias)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	item_name = (item_name and item_name ~= &#039;p&#039;)&lt;br /&gt;
		and item_name&lt;br /&gt;
		or  item.filename&lt;br /&gt;
				:gsub(&#039;^&#039; .. mw.site.namespaces[828].name .. &#039;:&#039;, &#039;&#039;)&lt;br /&gt;
				:gsub(&#039;^(%u)&#039;, mw.ustring.lower)&lt;br /&gt;
				:gsub(&#039;/&#039;, &#039;.&#039;):gsub(&#039; &#039;, &#039;_&#039;)&lt;br /&gt;
&lt;br /&gt;
	return item_name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Source code utility for item name detection.&lt;br /&gt;
--  @function           utils.deduce_name&lt;br /&gt;
--  @param              {string} tokens Stream tokens for first line.&lt;br /&gt;
--  @param              {string} index Stream token index.&lt;br /&gt;
--  @param              {table} opts Configuration options.&lt;br /&gt;
--  @param[opt]         {boolean} opts.lookahead Whether a variable name succeeds the index.&lt;br /&gt;
--  @param[opt]         {boolean} opts.lookbehind Whether a variable name precedes the index.&lt;br /&gt;
--  @return             {string} Item name.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.deduce_name(tokens, index, opts)&lt;br /&gt;
	local name = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	if opts.lookbehind then&lt;br /&gt;
		for i2 = index, 1, -1 do&lt;br /&gt;
			if tokens[i2].type ~= &#039;keyword&#039; then&lt;br /&gt;
				name = tokens[i2].data .. name&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif opts.lookahead then&lt;br /&gt;
		for i2 = index, #tokens do&lt;br /&gt;
			if tokens[i2].type ~= &#039;keyword&#039; and not tokens[i2].data:find(&#039;^%(&#039;) then&lt;br /&gt;
				name = name .. tokens[i2].data&lt;br /&gt;
			else&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Parses Lua item names to extract a hierarchy.&lt;br /&gt;
--- @function           utils.parse_hierarchy&lt;br /&gt;
--  @param              {string} item_name Documentation item name.&lt;br /&gt;
--  @return             {sequence&amp;lt;string&amp;gt;} List of global keys to index the&lt;br /&gt;
--                      variable reference.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.parse_hierarchy(item_name)&lt;br /&gt;
	local hierarchy = {}&lt;br /&gt;
	for _, lexeme in ipairs(lexer(item_name)) do&lt;br /&gt;
		if lexeme.type == &#039;ident&#039; or lexeme.type == &#039;string&#039; or lexeme.type == &#039;number&#039; then&lt;br /&gt;
			hierarchy[#hierarchy + 1] = lexeme.text&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return hierarchy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Code analysis utility.&lt;br /&gt;
--  @function           utils.code_heuristic&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.code_heuristic(item)&lt;br /&gt;
	local is_section = item.tags[&#039;private&#039;] or item.tags[&#039;local&#039;] or item.type == &#039;type&#039;&lt;br /&gt;
&lt;br /&gt;
	if item.name and item.type and is_section then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local tokens = lexer(item.code:match(&#039;^[^\n]*&#039;))[1]&lt;br /&gt;
	local t, i = tokens[1], 1&lt;br /&gt;
	local item_name, item_type&lt;br /&gt;
	local lexemes = {}&lt;br /&gt;
&lt;br /&gt;
	while t do&lt;br /&gt;
		if t.type ~= &#039;whitespace&#039; then&lt;br /&gt;
			lexemes[#lexemes + 1] = tokens[i]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		t, i = tokens[i + 1], i + 1&lt;br /&gt;
	end&lt;br /&gt;
	t, i = lexemes[1], 1&lt;br /&gt;
&lt;br /&gt;
	while t do&lt;br /&gt;
		if t.data == &#039;=&#039; and not item.name then&lt;br /&gt;
			item_name = utils.deduce_name(lexemes, i - 1, { lookbehind = true })&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if t.data == &#039;function&#039; and not item.name then&lt;br /&gt;
			item_type = &#039;function&#039;&lt;br /&gt;
			if lexemes[i + 1] and lexemes[i + 1].data ~= &#039;(&#039; then&lt;br /&gt;
				item_name = utils.deduce_name(lexemes, i + 1, { lookahead = true })&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if t.data == &#039;{&#039; or t.data == &#039;{}&#039; and not item.type then&lt;br /&gt;
			item_type = &#039;table&#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if t.data == &#039;local&#039; and not is_section then&lt;br /&gt;
			local implied_local = utils.process_tag(&#039;@local&#039;)&lt;br /&gt;
			table.insert(item.tags, implied_local)&lt;br /&gt;
			item.tags[&#039;local&#039;] = mw.clone(implied_local)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		t, i = lexemes[i + 1], i + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	item.name = item.name or item_name or &#039;&#039;&lt;br /&gt;
	item.type = item.type or item_type&lt;br /&gt;
	if #(item.types or {}) == 0 then&lt;br /&gt;
		item.types[1] = item.type&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Array hash map conversion utility.&lt;br /&gt;
--  @function           utils.hash_map&lt;br /&gt;
--  @param              {table} item Item documentation data array.&lt;br /&gt;
--  @return             {table} Item documentation data map.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.hash_map(array)&lt;br /&gt;
	local map = array&lt;br /&gt;
	for _, element in ipairs(array) do&lt;br /&gt;
		if map[element.name] and not map[element.name].name then&lt;br /&gt;
			table.insert(map[element.name], mw.clone(element))&lt;br /&gt;
		elseif map[element.name] and map[element.name].name then&lt;br /&gt;
			map[element.name] = { map[element.name], mw.clone(element) }&lt;br /&gt;
		else&lt;br /&gt;
			map[element.name] = mw.clone(element)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return map&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Item export utility.&lt;br /&gt;
--  @function           utils.export_item&lt;br /&gt;
--  @param              {table} documentation Package documentation data.&lt;br /&gt;
--  @param              {string} item_reference Identifier name for item.&lt;br /&gt;
--  @param              {string} item_index Identifier name for item.&lt;br /&gt;
--  @param              {string} item_alias Export alias for item.&lt;br /&gt;
--  @param              {boolean} factory_item Whether the documentation item is a factory function.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.export_item(documentation, item_reference, item_index, item_alias, factory_item)&lt;br /&gt;
	for _, item in ipairs(documentation.items) do&lt;br /&gt;
		if item_reference == item.name then&lt;br /&gt;
			item.tags[&#039;local&#039;] = nil&lt;br /&gt;
			item.tags[&#039;private&#039;] = nil&lt;br /&gt;
&lt;br /&gt;
			for index, tag in ipairs(item.tags) do&lt;br /&gt;
				if p.tags._privacy_tags[tag.name] then&lt;br /&gt;
					table.remove(item.tags, index)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			item.type, item.types[1] = &#039;member&#039;, &#039;member&#039;&lt;br /&gt;
&lt;br /&gt;
			local accessor&lt;br /&gt;
			if item_alias:find(&#039;^%[&#039;) then&lt;br /&gt;
				accessor = &#039;&#039;&lt;br /&gt;
			else&lt;br /&gt;
				local is_class = documentation.type == &#039;classmod&#039; or factory_item&lt;br /&gt;
				if is_class and not item.tags[&#039;static&#039;] then&lt;br /&gt;
					accessor = &#039;:&#039;&lt;br /&gt;
				else&lt;br /&gt;
					accessor = &#039;.&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if factory_item then&lt;br /&gt;
				item.alias = utils.join{&lt;br /&gt;
					documentation.items[item_index].tags[&#039;factory&#039;].value,&lt;br /&gt;
					accessor,&lt;br /&gt;
					item_alias&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
			else&lt;br /&gt;
				item.alias = utils.join{&lt;br /&gt;
					((documentation.tags[&#039;alias&#039;] or {}).value or documentation.name),&lt;br /&gt;
					accessor,&lt;br /&gt;
					item_alias&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			item.hierarchy = utils.parse_hierarchy(item.alias)&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Subitem tag correction utility.&lt;br /&gt;
--  @function           utils.correct_subitem_tag&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.correct_subitem_tag(item)&lt;br /&gt;
	local field_tag = item.tags[&#039;field&#039;]&lt;br /&gt;
	if item.type ~= &#039;function&#039; or not field_tag then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if field_tag.name then&lt;br /&gt;
		field_tag.name = &#039;param&#039;&lt;br /&gt;
	else&lt;br /&gt;
		for _, tag_el in ipairs(field_tag) do&lt;br /&gt;
			tag_el.name = &#039;param&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local param_tag = item.tags[&#039;param&#039;]&lt;br /&gt;
	if param_tag and not param_tag.name then&lt;br /&gt;
		if field_tag.name then&lt;br /&gt;
			table.insert(param_tag, field_tag)&lt;br /&gt;
		else&lt;br /&gt;
			for _, tag_el in ipairs(field_tag) do&lt;br /&gt;
				table.insert(param_tag, tag_el)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif param_tag and param_tag.name then&lt;br /&gt;
		if field_tag.name then&lt;br /&gt;
			param_tag = { param_tag, field_tag }&lt;br /&gt;
&lt;br /&gt;
		else&lt;br /&gt;
			for i, tag_el in ipairs(field_tag) do&lt;br /&gt;
				if i == 1  then&lt;br /&gt;
					param_tag = { param_tag }&lt;br /&gt;
				end&lt;br /&gt;
				for _, tag_el in ipairs(field_tag) do&lt;br /&gt;
					table.insert(param_tag, tag_el)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		param_tag = field_tag&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	item.tags[&#039;field&#039;] = nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Item override tag utility.&lt;br /&gt;
--  @function           utils.override_item_tag&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @param              {string} name Tag name.&lt;br /&gt;
--  @param[opt]         {string} alias Target alias for tag.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.override_item_tag(item, name, alias)&lt;br /&gt;
	if item.tags[name] then&lt;br /&gt;
		item[alias or name] = item.tags[name].value&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Identity function.&lt;br /&gt;
--  @function           utils.identity&lt;br /&gt;
--  @param              x The variable by reference.&lt;br /&gt;
--  @return             The parameter `x` by reference.&lt;br /&gt;
--  @local&lt;br /&gt;
function utils.identity(x)&lt;br /&gt;
	return x&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Argument processing&lt;br /&gt;
-- @param				{string} funcName name of function&lt;br /&gt;
-- @return				function to process arguments&lt;br /&gt;
-- @local&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
	return function (f)&lt;br /&gt;
		local args = require(&amp;quot;Module:Arguments&amp;quot;).getArgs(f, {&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
				if type(value) == &#039;string&#039; then&lt;br /&gt;
					value = value:match(&#039;^%s*(.-)%s*$&#039;) -- Remove whitespace.&lt;br /&gt;
					if key == &#039;heading&#039; or value ~= &#039;&#039; then&lt;br /&gt;
						return value&lt;br /&gt;
					else&lt;br /&gt;
						return nil&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					return value&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
		return p[funcName](args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--  Docbunto rendering logic.&lt;br /&gt;
local frontend = {}&lt;br /&gt;
&lt;br /&gt;
--- Markdown header converter.&lt;br /&gt;
--  @function           urils.markdown_header&lt;br /&gt;
--  @param              {string} hash Leading hash.&lt;br /&gt;
--  @param              {string} text Header text.&lt;br /&gt;
--  @return             {string} MediaWiki header.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.markdown_header(hash, text)&lt;br /&gt;
	local symbol = &#039;=&#039;&lt;br /&gt;
	return utils.join{&lt;br /&gt;
		&#039;\n&#039;,&lt;br /&gt;
		symbol:rep(#hash), &#039; &#039;, text, &#039; &#039;, symbol:rep(#hash),&lt;br /&gt;
		&#039;\n&#039;&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Item reference formatting.&lt;br /&gt;
--  @function           urils.item_reference&lt;br /&gt;
--  @param              {string} ref Item reference.&lt;br /&gt;
--  @return             {string} Internal MediaWiki link to article item.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.item_reference(ref)&lt;br /&gt;
	local temp = mw.text.split(ref, &#039;|&#039;)&lt;br /&gt;
	local item = temp[1]&lt;br /&gt;
	local text = temp[2] or temp[1]&lt;br /&gt;
&lt;br /&gt;
	if references.items[item] then&lt;br /&gt;
		local interwiki = &#039;mw&#039;&lt;br /&gt;
		item = interwiki .. references.items[item]&lt;br /&gt;
	else&lt;br /&gt;
		item = &#039;#&#039; .. item&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.text.tag{&lt;br /&gt;
		name = &#039;code&#039;,&lt;br /&gt;
		content = utils.join{ &#039;[[&#039;, item, &#039;|&#039;, text, &#039;]]&#039; }&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Doclet type reference preprocessor.&lt;br /&gt;
--  Formats types with links to the [[mw:Extension:Scribunto/Lua reference manual|Lua reference manual]].&lt;br /&gt;
--  @function           frontend.type_reference&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @param              {options} options Configuration options.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.type_reference(item, options)&lt;br /&gt;
	local interwiki = &#039;mw:&#039;&lt;br /&gt;
&lt;br /&gt;
	if&lt;br /&gt;
		not options.noluaref and&lt;br /&gt;
		item.value and&lt;br /&gt;
		item.value:match(&#039;^%S+&#039;) == mw.text.tag(&#039;code&#039;, nil, &#039;...&#039;)&lt;br /&gt;
	then&lt;br /&gt;
		item.value = item.value:gsub(&#039;^(%S+)&#039;, mw.text.tag{&lt;br /&gt;
			name = &#039;code&#039;,&lt;br /&gt;
			content = utils.join{ &#039;[[&#039;, interwiki, &#039;Lua reference manual#varargs|...]]&#039; }&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Handle tag type references.&lt;br /&gt;
	item.types = item.types or item.type and { item.type }&lt;br /&gt;
&lt;br /&gt;
	if not item.types then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for index, item_type in ipairs(item.types) do&lt;br /&gt;
		item.types[index] = item.types[index]:gsub(&#039;[%w_. ]+&#039;, function(item_type)&lt;br /&gt;
			local data = references.types[item_type]&lt;br /&gt;
			local name = data and data.name or item_type&lt;br /&gt;
			if not name:match(&#039;%.&#039;) and not name:match(&#039;^%u&#039;) and data then&lt;br /&gt;
				name = i18n:msg(&#039;type-&#039; .. name)&lt;br /&gt;
			end&lt;br /&gt;
			if data and not options.noluaref then&lt;br /&gt;
				return utils.join{ &#039;[[&#039;, interwiki, data.link, &#039;|&#039;, name , &#039;]]&#039; }&lt;br /&gt;
			elseif&lt;br /&gt;
				item_type:find(i18n:msg(&#039;line-no&#039;):gsub(&#039;$1&#039;, &#039;&#039;))&lt;br /&gt;
			then&lt;br /&gt;
				return utils.join { &#039;[[&#039; , options.file , &#039;#L-&#039;,  item_type:sub(6), &#039;|&#039;, name, &#039;]]&#039; }&lt;br /&gt;
			elseif&lt;br /&gt;
				not options.noluaref and&lt;br /&gt;
				not p.tags._generic_tags[item_type]&lt;br /&gt;
			then&lt;br /&gt;
				return utils.join { &#039;[[#&#039;, item_type, &#039;|&#039;, name, &#039;]]&#039; }&lt;br /&gt;
			end&lt;br /&gt;
		end)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	item.type = table.concat(item.types, i18n:msg(&#039;separator-dot&#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Markdown preprocessor to MediaWiki format.&lt;br /&gt;
--  @function           frontend.markdown&lt;br /&gt;
--  @param              {string} str Unprocessed Markdown string.&lt;br /&gt;
--  @return             {string} MediaWiki-compatible markup with HTML formatting.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.markdown(str)&lt;br /&gt;
	-- Bold &amp;amp; italic tags.&lt;br /&gt;
	str = str:gsub(&#039;%*%*%*([^\n*]+)%*%*%*&#039;, &#039;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;%1&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;&#039;)&lt;br /&gt;
	str = str:gsub(&#039;%*%*([^\n*]+)%*%*&#039;, &#039;&amp;lt;b&amp;gt;%1&amp;lt;/b&amp;gt;&#039;)&lt;br /&gt;
	str = str:gsub(&#039;%*([^\n*]+)%*&#039;, &#039;&amp;lt;i&amp;gt;%1&amp;lt;/i&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Self-closing header support.&lt;br /&gt;
	str = str:gsub(&#039;%f[^\n%z](#+) *([^\n#]+) *#+%s&#039;, frontend.markdown_header)&lt;br /&gt;
&lt;br /&gt;
	-- External and internal links.&lt;br /&gt;
	str = str:gsub(&#039;%[([^\n%]]+)%]%(([^\n][^\n)]-)%)&#039;, &#039;[%2 %1]&#039;)&lt;br /&gt;
	str = str:gsub(&#039;%{@link%s+([^}]+)%}&#039;, &#039;[%1]&#039;)&lt;br /&gt;
	str = str:gsub(&#039;%@{([^\n}]+)}&#039;, frontend.item_reference)&lt;br /&gt;
&lt;br /&gt;
	-- Programming &amp;amp; scientific notation.&lt;br /&gt;
	str = str:gsub(&#039;%f[&amp;quot;`]`([^\n`]+)`%f[^&amp;quot;`]&#039;, &#039;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;%1&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&#039;)&lt;br /&gt;
	str = str:gsub(&#039;%$%$([^\n$]+)%$%$&#039;, &#039;&amp;lt;math display=&amp;quot;inline&amp;quot;&amp;gt;%1&amp;lt;/math&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Strikethroughs.&lt;br /&gt;
	str = str:gsub(&#039;~~([^\n~]+)~~&#039;, &#039;&amp;lt;del&amp;gt;%1&amp;lt;/del&amp;gt;&#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- HTML output.&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Doclet function item preprocessor.&lt;br /&gt;
--  Formats item name as a function call with top-level arguments.&lt;br /&gt;
--  @function           frontend.pretask_function_name&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @param              {options} options Configuration options.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.pretask_function_name(item, options)&lt;br /&gt;
	local target = item.alias and &#039;alias&#039; or &#039;name&#039;&lt;br /&gt;
&lt;br /&gt;
	item[target] = item[target] .. &#039;(&#039;&lt;br /&gt;
&lt;br /&gt;
	if&lt;br /&gt;
		item.tags[&#039;param&#039;] and&lt;br /&gt;
		item.tags[&#039;param&#039;].value and&lt;br /&gt;
		not item.tags[&#039;param&#039;].value:find(&#039;^[%w_]+[.[]&#039;)&lt;br /&gt;
	then&lt;br /&gt;
		if (item.tags[&#039;param&#039;].modifiers or {})[&#039;opt&#039;] then&lt;br /&gt;
			local optional = mw.html.create(&#039;span&#039;)&lt;br /&gt;
			optional:css(&#039;opacity&#039;, &#039;0.65&#039;)&lt;br /&gt;
			optional:wikitext(item.tags[&#039;param&#039;].value:match(&#039;^(%S+)&#039;))&lt;br /&gt;
			item[target] = item[target] .. tostring(optional)&lt;br /&gt;
		else&lt;br /&gt;
			item[target] = item[target] .. item.tags[&#039;param&#039;].value:match(&#039;^(%S*)&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif item.tags[&#039;param&#039;] then&lt;br /&gt;
		for index, tag in ipairs(item.tags[&#039;param&#039;]) do&lt;br /&gt;
			if not tag.value:find(&#039;^[%w_]+[.[]&#039;) then&lt;br /&gt;
				if (tag.modifiers or {})[&#039;opt&#039;] then&lt;br /&gt;
					local param = mw.html.create(&#039;span&#039;)&lt;br /&gt;
					param:css(&#039;opacity&#039;, &#039;0.65&#039;)&lt;br /&gt;
					param:wikitext((index &amp;gt; 1 and &#039;, &#039; or &#039;&#039;) .. tag.value:match(&#039;^%S+&#039;))&lt;br /&gt;
					item[target] = item[target] .. tostring(param)&lt;br /&gt;
				else&lt;br /&gt;
					item[target] = item[target] .. (index &amp;gt; 1 and &#039;, &#039; or &#039;&#039;) .. tag.value:match(&#039;^(%S+)&#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	item[target] = item[target] .. &#039;)&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Doclet parameter/field subitem preprocessor.&lt;br /&gt;
--  Indents and wraps variable prefix with `code` tag.&lt;br /&gt;
--  @function           pretask_variable_prefix&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @param              {options} options Configuration options.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.pretask_variable_prefix(item, options)&lt;br /&gt;
	local indent_symbol = options.ulist and &#039;*&#039; or &#039;:&#039;&lt;br /&gt;
	local indent_level, indentation, item_id&lt;br /&gt;
&lt;br /&gt;
	if item.value then&lt;br /&gt;
		indent_level = item.value:match(&#039;^%S*&#039;) == &#039;...&#039;&lt;br /&gt;
			and 0&lt;br /&gt;
			or  select(2, item.value:match(&#039;^%S*&#039;):gsub(&#039;[.[]&#039;, &#039;&#039;))&lt;br /&gt;
		indentation = indent_symbol:rep(indent_level)&lt;br /&gt;
		item_id = options.item_id&lt;br /&gt;
		item.value = indentation .. item.value:gsub(&lt;br /&gt;
			&#039;^(%S+)&#039;,&lt;br /&gt;
			mw.text.tag{&lt;br /&gt;
				name = &#039;code&#039;,&lt;br /&gt;
				attrs = { id = item_id .. &#039;~%1&#039; },&lt;br /&gt;
				content = &#039;%1&#039;&lt;br /&gt;
			},&lt;br /&gt;
			1&lt;br /&gt;
		)&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	elseif item then&lt;br /&gt;
		for _, item_el in ipairs(item) do&lt;br /&gt;
			frontend.pretask_variable_prefix(item_el, options)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Doclet usage subitem preprocessor.&lt;br /&gt;
--  Formats usage example with `&amp;lt;syntaxhighlight&amp;gt;` tag.&lt;br /&gt;
--  @function           frontend.pretask_usage_highlight&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @param              {options} options Configuration options.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.pretask_usage_highlight(item, options)&lt;br /&gt;
	if item.value then&lt;br /&gt;
		item.value = unindent(mw.text.trim(item.value))&lt;br /&gt;
		if item.value:find(&#039;^{{.+}}$&#039;) then&lt;br /&gt;
			item.value = item.value:gsub(&#039;=&#039;, mw.text.nowiki)&lt;br /&gt;
			local multi_line = item.value:find(&#039;\n&#039;) and &#039;|m = 1|&#039; or &#039;|&#039;&lt;br /&gt;
&lt;br /&gt;
			if item.value:match(&#039;^{{([^:]+)&#039;) == &#039;#invoke&#039; then&lt;br /&gt;
				item.value = item.value:gsub(&#039;^{{#invoke:&#039;, &#039;{{mlx&#039; .. multi_line)&lt;br /&gt;
&lt;br /&gt;
			else&lt;br /&gt;
				if options.entrypoint then&lt;br /&gt;
					item.value = item.value:gsub(&#039;^([^|]+)|%s*([^|}]-)(%s*)([|}])&#039;,&#039;%1|&amp;quot;%2&amp;quot;%3%4&#039;)&lt;br /&gt;
				end&lt;br /&gt;
				item.value = item.value:gsub(&#039;^{{&#039;, &#039;{{tlx&#039; .. multi_line)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			local highlight_class = tonumber(mw.site.currentVersion:match(&#039;^%d%.%d+&#039;)) &amp;gt; 1.19&lt;br /&gt;
				and &#039;mw-highlight&#039;&lt;br /&gt;
				or  &#039;mw-geshi&#039;&lt;br /&gt;
&lt;br /&gt;
			if item.value:find(&#039;\n&#039;) then&lt;br /&gt;
				local highlight_div = mw.html.create(&#039;div&#039;)&lt;br /&gt;
				highlight_div.addClass(highlight_class)&lt;br /&gt;
				highlight_div.addClass(&#039;mw-content-ltr&#039;)&lt;br /&gt;
				highlight_div:attr(&#039;dir&#039;, &#039;ltr&#039;)&lt;br /&gt;
				highlight_div:wikitext(item.value)&lt;br /&gt;
				item.value = tostring(highlight_div)&lt;br /&gt;
&lt;br /&gt;
			else&lt;br /&gt;
				item.value = mw.text.tag{&lt;br /&gt;
					name = &#039;span&#039;,&lt;br /&gt;
					attrs = { class = &#039;code&#039; },&lt;br /&gt;
					content = item.value&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		else&lt;br /&gt;
			local highlight_tag = mw.html.create(&#039;syntaxhighlight&#039;)&lt;br /&gt;
			highlight_tag:attr(&#039;lang&#039;, &#039;lua&#039;)&lt;br /&gt;
			if not item.value:find(&#039;\n&#039;) then&lt;br /&gt;
				highlight_tag:attr(&#039;inline&#039;, &#039;inline&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			highlight_tag:wikitext(item.value)&lt;br /&gt;
			item.value = tostring(highlight_tag)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif item then&lt;br /&gt;
		for _, item_el in ipairs(item) do&lt;br /&gt;
			frontend.pretask_usage_highlight(item_el, options)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Doclet error subitem preprocessor.&lt;br /&gt;
--  Formats line numbers (`{#}`) in error tag values.&lt;br /&gt;
--  @function           frontend.pretask_error_line&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.pretask_error_line(item, options)&lt;br /&gt;
	if item.name then&lt;br /&gt;
		local line&lt;br /&gt;
&lt;br /&gt;
		if item.modifiers and item.modifiers.line then&lt;br /&gt;
			line = item.modifiers.line&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		for mod in pairs(item.modifiers or {}) do&lt;br /&gt;
			if mod:find(&#039;^%d+$&#039;) then line = mod end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if line then&lt;br /&gt;
			if item.types then&lt;br /&gt;
				item.types[#item.types + 1] = i18n:msg(&#039;line-no&#039;, line)&lt;br /&gt;
&lt;br /&gt;
			else&lt;br /&gt;
				item.type = i18n:msg(&#039;line-no&#039;, line)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	elseif item then&lt;br /&gt;
		for _, item_el in ipairs(item) do&lt;br /&gt;
			frontend.pretask_error_line(item_el, options)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Doclet item renderer.&lt;br /&gt;
--  @function           frontend.render_item&lt;br /&gt;
--  @param              {table} stream Wikitext documentation stream.&lt;br /&gt;
--  @param              {table} item Item documentation data.&lt;br /&gt;
--  @param              {options} options Configuration options.&lt;br /&gt;
--  @param[opt]         {function} pretask Item data preprocessor.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.render_item(stream, item, options, pretask)&lt;br /&gt;
	if pretask then pretask(item, options) end&lt;br /&gt;
	local item_name = item.alias or item.name&lt;br /&gt;
&lt;br /&gt;
	frontend.type_reference(item, options)&lt;br /&gt;
&lt;br /&gt;
	local item_type = item.type&lt;br /&gt;
&lt;br /&gt;
	for _, name in ipairs(p.tags._subtype_hierarchy) do&lt;br /&gt;
		if item.tags[name] then&lt;br /&gt;
			item_type = item_type .. i18n:msg(&#039;separator-dot&#039;) .. name&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	item_type = i18n:msg(&#039;parentheses&#039;, item_type)&lt;br /&gt;
&lt;br /&gt;
	if options.strip and item.export and item.hierarchy then&lt;br /&gt;
		item_name = item_name:gsub(&#039;^[%w_]+[.[]?&#039;, &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- add single spaces between parentheses similar to&lt;br /&gt;
	-- MediaWiki documentation&lt;br /&gt;
	if not item_name:find( &#039;()&#039;, 1, true ) then&lt;br /&gt;
		item_name = item_name:gsub(&#039;%(&#039;, &#039;( &#039;)&lt;br /&gt;
		item_name = item_name:gsub(&#039;%)&#039;, &#039; )&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	item_name = item_name:gsub(&#039;%[&#039;, &#039;[ &#039;)&lt;br /&gt;
	item_name = item_name:gsub(&#039;%]&#039;, &#039; ]&#039;)&lt;br /&gt;
&lt;br /&gt;
	local code_node = mw.html.create(&#039;code&#039;)&lt;br /&gt;
		:attr(&#039;id&#039;, options.item_id)&lt;br /&gt;
		:wikitext(item_name)&lt;br /&gt;
&lt;br /&gt;
	if not usingOptionsContent then&lt;br /&gt;
		local span_node = stream:wikitext(&#039;;&#039;)&lt;br /&gt;
			:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(&#039;plainlinks docbunto-link&#039;)&lt;br /&gt;
		if fileTooBig or not syntaxhighlightPresent then&lt;br /&gt;
			span_node:wikitext(&#039;[{{fullurl:&#039; .. options.file .. &#039;|action=edit#mw-ce-l&#039; .. item.lineno .. &#039;}} &#039; .. tostring(code_node) .. &#039;]&#039;)&lt;br /&gt;
		elseif title.namespace == 828 and options.file == title.text then&lt;br /&gt;
			span_node:wikitext(&#039;[[&#039; .. &#039;#L-&#039; .. item.lineno .. &#039;|&#039; .. tostring(code_node) .. &#039;]]&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			span_node:wikitext(&#039;[[&#039; .. options.file .. &#039;#L-&#039; .. item.lineno .. &#039;|&#039; ..  tostring(code_node) .. &#039;]]&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		stream:wikitext(&#039;;&#039; .. tostring(code_node))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	stream&lt;br /&gt;
		:wikitext(item_type)&lt;br /&gt;
		:newline()&lt;br /&gt;
&lt;br /&gt;
	if (#(item.summary or &#039;&#039;) + #item.description) ~= 0 then&lt;br /&gt;
		local separator = #(item.summary or &#039;&#039;) ~= 0 and #item.description ~= 0&lt;br /&gt;
			and (item.description:find(patterns.DOCBUNTO_WIKITEXT) and &#039;\n&#039; or patterns.DOCBUNTO_CONCAT)&lt;br /&gt;
			or  &#039;&#039;&lt;br /&gt;
		local intro = (item.summary or &#039;&#039;) .. separator .. item.description&lt;br /&gt;
		intro = intro&lt;br /&gt;
			:gsub(&#039;\n([{:#*])&#039;, &#039;\n:%1&#039;)&lt;br /&gt;
			:gsub(&#039;\n\n([^=])&#039;, &#039;\n:%1&#039;)&lt;br /&gt;
		stream:wikitext(&#039;:&#039; .. intro):newline()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Doclet tag renderer.&lt;br /&gt;
--  @function           frontend.render_tag&lt;br /&gt;
--  @param              {table} stream Wikitext documentation stream.&lt;br /&gt;
--  @param              {string} name Item tag name.&lt;br /&gt;
--  @param              {table} tag Item tag data.&lt;br /&gt;
--  @param              {options} options Configuration options.&lt;br /&gt;
--  @param[opt]         {function} pretask Item data preprocessor.&lt;br /&gt;
--  @local&lt;br /&gt;
function frontend.render_tag(stream, name, tag, options, pretask)&lt;br /&gt;
	if pretask then pretask(tag, options) end&lt;br /&gt;
	if tag.value then&lt;br /&gt;
		frontend.type_reference(tag, options)&lt;br /&gt;
		local tag_name = i18n:msg(&#039;tag-&#039; .. name, &#039;1&#039;)&lt;br /&gt;
&lt;br /&gt;
		-- Handle ul/ol/dl comment support.&lt;br /&gt;
		stream:wikitext(&#039;:&#039;)&lt;br /&gt;
			:tag(&#039;b&#039;)&lt;br /&gt;
				:wikitext(tag_name)&lt;br /&gt;
				:done():done()&lt;br /&gt;
			:wikitext(i18n:msg(&#039;separator-semicolon&#039;))&lt;br /&gt;
			:wikitext((mw.text.trim(tag.value):gsub(&#039;\n([{:#*])&#039;, &#039;\n:%1&#039;)))&lt;br /&gt;
&lt;br /&gt;
		if tag.value:find(&#039;\n[{:#*]&#039;) and (tag.type or (tag.modifiers or {})[&#039;opt&#039;]) then&lt;br /&gt;
			stream:newline():wikitext(&#039;:&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Type and optional appositive for tag.&lt;br /&gt;
		if tag.type and (tag.modifiers or {})[&#039;opt&#039;] then&lt;br /&gt;
			stream:wikitext(i18n:msg{&lt;br /&gt;
				key = &#039;parentheses&#039;,&lt;br /&gt;
				args = {&lt;br /&gt;
					tag.type ..&lt;br /&gt;
					i18n:msg(&#039;separator-colon&#039;) ..&lt;br /&gt;
					i18n:msg(&#039;optional&#039;)&lt;br /&gt;
				}&lt;br /&gt;
			})&lt;br /&gt;
&lt;br /&gt;
		elseif tag.type then&lt;br /&gt;
			stream:wikitext(i18n:msg{&lt;br /&gt;
				key = &#039;parentheses&#039;,&lt;br /&gt;
				args = { tag.type }&lt;br /&gt;
			})&lt;br /&gt;
&lt;br /&gt;
		elseif (tag.modifiers or {})[&#039;opt&#039;] then&lt;br /&gt;
			stream:wikitext(i18n:msg{&lt;br /&gt;
				key = &#039;parentheses&#039;,&lt;br /&gt;
				args = { i18n:msg(&#039;optional&#039;) }&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		stream:newline()&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		local tag_name = i18n:msg(&#039;tag-&#039; .. name, tostring(#tag))&lt;br /&gt;
		stream&lt;br /&gt;
			:wikitext(&#039;:&#039;)&lt;br /&gt;
			:tag(&#039;b&#039;)&lt;br /&gt;
				:wikitext(tag_name)&lt;br /&gt;
				:done():done()&lt;br /&gt;
			:wikitext(i18n:msg(&#039;separator-semicolon&#039;))&lt;br /&gt;
			:newline()&lt;br /&gt;
&lt;br /&gt;
		for _, tag_el in ipairs(tag) do&lt;br /&gt;
			frontend.type_reference(tag_el, options)&lt;br /&gt;
			local marker = options.ulist and &#039;*&#039; or &#039;:&#039;&lt;br /&gt;
			stream:wikitext(&#039;:&#039; .. marker .. tag_el.value:gsub(&#039;\n([{:#*])&#039;, &#039;\n:&#039; .. marker .. &#039;%1&#039;))&lt;br /&gt;
&lt;br /&gt;
			if tag_el.value:find(&#039;\n[{:#*]&#039;) and (tag_el.type or (tag_el.modifiers or {})[&#039;opt&#039;]) then&lt;br /&gt;
				stream:newline():wikitext(&#039;:&#039; .. marker .. (tag_el.value:match(&#039;^[*:]+&#039;) or &#039;&#039;))&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if tag_el.type and (tag_el.modifiers or {})[&#039;opt&#039;] then&lt;br /&gt;
				stream:wikitext(i18n:msg{&lt;br /&gt;
					key = &#039;parentheses&#039;,&lt;br /&gt;
					args = {&lt;br /&gt;
						tag_el.type ..&lt;br /&gt;
						i18n:msg(&#039;separator-colon&#039;) ..&lt;br /&gt;
						i18n:msg(&#039;optional&#039;)&lt;br /&gt;
					}&lt;br /&gt;
				})&lt;br /&gt;
&lt;br /&gt;
			elseif tag_el.type then&lt;br /&gt;
				stream:wikitext(i18n:msg{&lt;br /&gt;
					key = &#039;parentheses&#039;,&lt;br /&gt;
					args = { tag_el.type }&lt;br /&gt;
				})&lt;br /&gt;
&lt;br /&gt;
			elseif (tag_el.modifiers or {})[&#039;opt&#039;] then&lt;br /&gt;
				stream:wikitext(i18n:msg{&lt;br /&gt;
					key = &#039;parentheses&#039;,&lt;br /&gt;
					args = { i18n:msg(&#039;optional&#039;) }&lt;br /&gt;
				})&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			stream:newline()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Template entrypoint for [[Template:Docbunto]].&lt;br /&gt;
--  @function           p._main&lt;br /&gt;
--  @param              {table} args Arguments&lt;br /&gt;
--  @return             {string} Module documentation output.&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	frame = mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
	local modname = mw.text.trim(args[1] or args.file or DEFAULT_TITLE)&lt;br /&gt;
&lt;br /&gt;
	local options = {}&lt;br /&gt;
	options.file = modname&lt;br /&gt;
	options.all = yesno(args.all or false)&lt;br /&gt;
	options.autodoc = yesno(args.autodoc or false)&lt;br /&gt;
	options.boilerplate = yesno(args.boilerplate or options.autodoc or false)&lt;br /&gt;
	options.box = yesno(args.box or args.infobox or options.autodoc or false)&lt;br /&gt;
	options.caption = args.caption&lt;br /&gt;
	options.card = yesno(args.card or (title.namespace == 828 and not options.autodoc))&lt;br /&gt;
	options.code = yesno(args.code or false)&lt;br /&gt;
	options.colon = yesno(args.colon or false)&lt;br /&gt;
	options.footer = yesno(args.footer or title.namespace == 828)&lt;br /&gt;
	options.image = args.image&lt;br /&gt;
	options.migration = yesno(args.migration or false)&lt;br /&gt;
	options.noluaref = yesno(args.noluaref or false)&lt;br /&gt;
	options.plain = yesno(args.plain or false)&lt;br /&gt;
	options.preface = args.preface&lt;br /&gt;
	options.simple = yesno(args.simple or false)&lt;br /&gt;
	options.sort = yesno(args.sort or false)&lt;br /&gt;
	options.strip = yesno(args.strip or false)&lt;br /&gt;
	options.verbose = yesno(args.verbose or false)&lt;br /&gt;
	options.ulist = yesno(args.ulist or false)&lt;br /&gt;
	return p.build(modname, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Entrypoint for the module.&lt;br /&gt;
--  @function		   p.main&lt;br /&gt;
--  @param			  {Frame} frame Module frame.&lt;br /&gt;
--  @return			 {string} Module documentation output.&lt;br /&gt;
p.main = makeInvokeFunc(&#039;_main&#039;)&lt;br /&gt;
&lt;br /&gt;
--- Scribunto documentation generator entrypoint.&lt;br /&gt;
--  @function           p.build&lt;br /&gt;
--  @param[opt]         {string} modname Module page name (without namespace).&lt;br /&gt;
--                      Default: second-level subpage.&lt;br /&gt;
--  @param[opt]         {options} options Configuration options.&lt;br /&gt;
function p.build(modname, options)&lt;br /&gt;
	modname = modname or DEFAULT_TITLE&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	local tagdata = p.taglet(modname, options)&lt;br /&gt;
	local docdata = p.doclet(tagdata, options)&lt;br /&gt;
&lt;br /&gt;
	return docdata&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Docbunto taglet parser for Scribunto modules.&lt;br /&gt;
--  @function           p.taglet&lt;br /&gt;
--  @param[opt]         {string} modname Module page name (without namespace).&lt;br /&gt;
--  @param[opt]         {options} options Configuration options.&lt;br /&gt;
--  @error[line=1081]   {string} &#039;Lua source code not found in $1&#039;&lt;br /&gt;
--  @error[line=1087]   {string} &#039;documentation markup for Docbunto not found in $1&#039;&lt;br /&gt;
--  @return             {table} Module documentation data.&lt;br /&gt;
function p.taglet(modname, options)&lt;br /&gt;
	modname = modname or DEFAULT_TITLE&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	local filepath = mw.site.namespaces[828].name .. &#039;:&#039; .. modname&lt;br /&gt;
	local content = mw.title.new(filepath):getContent()&lt;br /&gt;
&lt;br /&gt;
	-- Content checks.&lt;br /&gt;
	if options.content then&lt;br /&gt;
		content = options.content&lt;br /&gt;
		usingOptionsContent = true&lt;br /&gt;
	else&lt;br /&gt;
		content = mw.title.new(filepath):getContent() or error(i18n:msg(&#039;no-content&#039;, filepath), 0)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Syntax highlighting is disabled for files above a specific size&lt;br /&gt;
	fileTooBig = content:len() &amp;gt; 102400&lt;br /&gt;
&lt;br /&gt;
	if&lt;br /&gt;
		not content:match(&#039;%-%-%-&#039;) and&lt;br /&gt;
		not content:match(options.colon and &#039;%w+:&#039; or &#039;@%w+&#039;)&lt;br /&gt;
	then&lt;br /&gt;
		error(i18n:msg(&#039;no-markup&#039;, filepath))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	-- Remove leading escapes.&lt;br /&gt;
	content = content:gsub(&#039;^%-%-+%s*&amp;lt;[^&amp;gt;]+&amp;gt;\n&#039;, &#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Remove closing pretty comments.&lt;br /&gt;
	content = content:gsub(&#039;\n%-%-%-%-%-+(\n[^-]+)&#039;, &#039;\n-- %1&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Remove boilerplate block comments.&lt;br /&gt;
	if options.boilerplate then&lt;br /&gt;
		content = content:gsub(&#039;^%-%-%[=*%[\n.-\n%-?%-?%]%=*]%-?%-?%s+&#039;, &#039;&#039;)&lt;br /&gt;
		content = content:gsub(&#039;%s+%-%-%[=*%[\n.-\n%-?%-?%]%=*]%-?%-?$&#039;, &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Configure patterns for colon mode and Unicode character encoding.&lt;br /&gt;
	options.unicode = type(content:find(&#039;[^%w%c%p%s]+&#039;)) == &#039;number&#039;&lt;br /&gt;
	options.iso639_th = type(content:find(&#039;\224\184[\129-\155]&#039;)) == &#039;number&#039;&lt;br /&gt;
	utils.configure_patterns(options)&lt;br /&gt;
&lt;br /&gt;
	-- Content lexing.&lt;br /&gt;
	local lines = lexer(content)&lt;br /&gt;
	local tokens = {}&lt;br /&gt;
	local dummy_token = {&lt;br /&gt;
		data = &#039;&#039;,&lt;br /&gt;
		posFirst = 1,&lt;br /&gt;
		posLast = 1&lt;br /&gt;
	}&lt;br /&gt;
	local token_closure = 0&lt;br /&gt;
	for _, line in ipairs(lines) do&lt;br /&gt;
		if #line == 0 then&lt;br /&gt;
			dummy_token.type = token_closure == 0&lt;br /&gt;
				and &#039;whitespace&#039;&lt;br /&gt;
				or  tokens[#tokens].type&lt;br /&gt;
			table.insert(tokens, mw.clone(dummy_token))&lt;br /&gt;
		else&lt;br /&gt;
			for _, token in ipairs(line) do&lt;br /&gt;
				 if token.data:find(&#039;^%[=*%[$&#039;) or token.data:find(&#039;^%-%-%[=*%[$&#039;) then&lt;br /&gt;
					token_closure = 1&lt;br /&gt;
				end&lt;br /&gt;
				if token.data:find(&#039;]=*]&#039;) then&lt;br /&gt;
					token_closure = 0&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(tokens, token)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start documentation data.&lt;br /&gt;
	local documentation = {}&lt;br /&gt;
	documentation.filename = filepath&lt;br /&gt;
	documentation.description = &#039;&#039;&lt;br /&gt;
	documentation.code = content&lt;br /&gt;
	documentation.comments = {}&lt;br /&gt;
	documentation.tags = {}&lt;br /&gt;
	documentation.items = {}&lt;br /&gt;
	local line_no = 0&lt;br /&gt;
	local item_index = 0&lt;br /&gt;
&lt;br /&gt;
	-- Taglet tracking variables.&lt;br /&gt;
	local start_mode = true&lt;br /&gt;
	local comment_mode = false&lt;br /&gt;
	local doctag_mode = false&lt;br /&gt;
&lt;br /&gt;
	local export_mode = false&lt;br /&gt;
	local special_tag = false&lt;br /&gt;
	local pragma_mode = false&lt;br /&gt;
	local factory_mode = false&lt;br /&gt;
	local return_mode = false&lt;br /&gt;
&lt;br /&gt;
	local comment_tail = &#039;&#039;&lt;br /&gt;
	local tag_name = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	local new_item = false&lt;br /&gt;
	local new_tag = false&lt;br /&gt;
	local new_tag_item = false&lt;br /&gt;
	local new_item_code = false&lt;br /&gt;
	local pretty_comment = false&lt;br /&gt;
	local comment_brace = false&lt;br /&gt;
&lt;br /&gt;
	local t, i, item = tokens[1], 1&lt;br /&gt;
&lt;br /&gt;
	local p_success, p_error = pcall(function()&lt;br /&gt;
&lt;br /&gt;
	while t do&lt;br /&gt;
		-- Taglet variable update.&lt;br /&gt;
		new_item = t.data:find(&#039;^%-%-%-&#039;) or t.data:find(&#039;^%-%-%[%=*%[$&#039;)&lt;br /&gt;
		comment_tail = t.data:gsub(&#039;^%-%-+&#039;, &#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
		tag_name = comment_tail:match(patterns.DOCBUNTO_TAG)&lt;br /&gt;
		tag_name = p.tags._alias[tag_name] or tag_name&lt;br /&gt;
&lt;br /&gt;
		new_tag = type(p.tags[tag_name]) == &#039;string&#039;&lt;br /&gt;
		local last_token = t.posFirst ~= 1 and 2 or 1&lt;br /&gt;
		new_tag_item = (&lt;br /&gt;
			new_tag and i &amp;gt; 1 and tokens[i - last_token].type ~= &#039;comment&#039;&lt;br /&gt;
			and not tokens[i - last_token].data:find(patterns.DOCBUNTO_TAG_COMMENT)&lt;br /&gt;
		)&lt;br /&gt;
		pretty_comment =&lt;br /&gt;
			t.data:find(&#039;^%-%-%-+%s*$&#039;)             or&lt;br /&gt;
			t.data:find(&#039;[^-]+%-%-%-+%s*$&#039;)         or&lt;br /&gt;
			t.data:find(&#039;%-*[ \t]*&amp;lt;nowiki&amp;gt;$&#039;)       or&lt;br /&gt;
			t.data:find(&#039;%-*[ \t]*&amp;lt;pre&amp;gt;$&#039;)&lt;br /&gt;
		comment_brace =&lt;br /&gt;
			t.data:find(&#039;^%-%-%[=*%[$&#039;)             or&lt;br /&gt;
			t.data:find(&#039;^%-%-%]=*%]$&#039;)             or&lt;br /&gt;
			t.data:find(&#039;^%]=*%]%-%-$&#039;)&lt;br /&gt;
		pragma_mode = tag_name == &#039;pragma&#039;&lt;br /&gt;
		export_mode = tag_name == &#039;export&#039; and not doctag_mode&lt;br /&gt;
		special_tag = pragma_mode or export_mode&lt;br /&gt;
		local tags, tag, subtokens, separator&lt;br /&gt;
&lt;br /&gt;
		-- Line counter.&lt;br /&gt;
		if t.posFirst == 1 then&lt;br /&gt;
			line_no = line_no + 1&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Data insertion logic.&lt;br /&gt;
		if t.type == &#039;comment&#039; then&lt;br /&gt;
			if new_item then&lt;br /&gt;
				comment_mode = true&lt;br /&gt;
			end&lt;br /&gt;
			if (new_tag or new_tag_item) and not special_tag then&lt;br /&gt;
				comment_mode = true&lt;br /&gt;
				doctag_mode = true&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Module-level documentation taglet.&lt;br /&gt;
			if start_mode then&lt;br /&gt;
				table.insert(documentation.comments, t.data)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Module description.&lt;br /&gt;
			if&lt;br /&gt;
				start_mode and comment_mode and&lt;br /&gt;
				not new_tag and not doctag_mode and&lt;br /&gt;
				not pretty_comment and not comment_brace&lt;br /&gt;
			then&lt;br /&gt;
				separator = mw.text.trim(comment_tail):find(patterns.DOCBUNTO_WIKITEXT)&lt;br /&gt;
					and &#039;\n&#039;&lt;br /&gt;
					or  (#documentation.description ~= 0 and patterns.DOCBUNTO_CONCAT or &#039;&#039;)&lt;br /&gt;
				documentation.description = utils.join{&lt;br /&gt;
					documentation.description,&lt;br /&gt;
					separator,&lt;br /&gt;
					mw.text.trim(comment_tail)&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Switch from module description to module-level tag list.&lt;br /&gt;
			if start_mode and new_tag and not export_mode then&lt;br /&gt;
				doctag_mode = true&lt;br /&gt;
				table.insert(documentation.tags, utils.process_tag(comment_tail))&lt;br /&gt;
&lt;br /&gt;
			-- Concatenating module-level tag with more information.&lt;br /&gt;
			elseif&lt;br /&gt;
				start_mode and doctag_mode and&lt;br /&gt;
				not pretty_comment and not comment_brace&lt;br /&gt;
			then&lt;br /&gt;
				tags = documentation.tags&lt;br /&gt;
				if p.tags[tags[#tags].name] == TAG_MULTI then&lt;br /&gt;
					separator = mw.text.trim(comment_tail):find(patterns.DOCBUNTO_WIKITEXT)&lt;br /&gt;
						and &#039;\n&#039;&lt;br /&gt;
						or  patterns.DOCBUNTO_CONCAT&lt;br /&gt;
					tags[#tags].value = utils.join{&lt;br /&gt;
						tags[#tags].value,&lt;br /&gt;
						separator,&lt;br /&gt;
						mw.text.trim(comment_tail)&lt;br /&gt;
					}&lt;br /&gt;
				elseif p.tags[tags[#tags].name] == TAG_MULTI_LINE then&lt;br /&gt;
					tags[#tags].value = utils.join{&lt;br /&gt;
						tags[#tags].value,&lt;br /&gt;
						&#039;\n&#039;,&lt;br /&gt;
						comment_tail&lt;br /&gt;
					}&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Detect a new documentation item.&lt;br /&gt;
			if not start_mode and (new_item or new_tag_item) and not special_tag then&lt;br /&gt;
				table.insert(documentation.items, {})&lt;br /&gt;
				item_index = item_index + 1&lt;br /&gt;
				item = documentation.items[item_index]&lt;br /&gt;
				item.lineno = line_no&lt;br /&gt;
				item.code = &#039;&#039;&lt;br /&gt;
				item.comments = {}&lt;br /&gt;
				item.description = &#039;&#039;&lt;br /&gt;
				item.tags = {}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Concatenate an item with more information.&lt;br /&gt;
			if&lt;br /&gt;
				not start_mode and comment_mode and&lt;br /&gt;
				not new_tag and not doctag_mode and&lt;br /&gt;
				not pretty_comment and not comment_brace&lt;br /&gt;
			then&lt;br /&gt;
				separator = (mw.text.trim(comment_tail):find(patterns.DOCBUNTO_WIKITEXT))&lt;br /&gt;
					and &#039;\n&#039;&lt;br /&gt;
					or  (#item.description ~= 0 and patterns.DOCBUNTO_CONCAT or &#039;&#039;)&lt;br /&gt;
				item.description = utils.join{&lt;br /&gt;
					item.description,&lt;br /&gt;
					separator,&lt;br /&gt;
					mw.text.trim(comment_tail)&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Switch from item information to item tags.&lt;br /&gt;
			if not start_mode and new_tag and not special_tag then&lt;br /&gt;
				doctag_mode = true&lt;br /&gt;
				table.insert(item.tags, utils.process_tag(comment_tail))&lt;br /&gt;
&lt;br /&gt;
			-- Extend item tags with lines of further information.&lt;br /&gt;
			elseif&lt;br /&gt;
				not start_mode and doctag_mode and&lt;br /&gt;
				not pretty_comment and not comment_brace&lt;br /&gt;
			then&lt;br /&gt;
				tags = item.tags&lt;br /&gt;
				if p.tags[tags[#tags].name] == TAG_MULTI then&lt;br /&gt;
					separator = mw.text.trim(comment_tail):find(patterns.DOCBUNTO_WIKITEXT)&lt;br /&gt;
						and &#039;\n&#039;&lt;br /&gt;
						or  patterns.DOCBUNTO_CONCAT&lt;br /&gt;
					tags[#tags].value = utils.join{&lt;br /&gt;
						tags[#tags].value,&lt;br /&gt;
						separator,&lt;br /&gt;
						mw.text.trim(comment_tail)&lt;br /&gt;
					}&lt;br /&gt;
				elseif p.tags[tags[#tags].name] == TAG_MULTI_LINE then&lt;br /&gt;
					tags[#tags].value = utils.join{&lt;br /&gt;
						tags[#tags].value,&lt;br /&gt;
						&#039;\n&#039;,&lt;br /&gt;
						comment_tail&lt;br /&gt;
					}&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Save pre-item comments to item information.&lt;br /&gt;
			if not start_mode and (comment_mode or doctag_mode) then&lt;br /&gt;
				table.insert(item.comments, t.data)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Export tag support.&lt;br /&gt;
			if export_mode then&lt;br /&gt;
				factory_mode = t.posFirst ~= 1&lt;br /&gt;
				if factory_mode then&lt;br /&gt;
					item.exports = true&lt;br /&gt;
				else&lt;br /&gt;
					documentation.exports = true&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- Parse export token data while concatenating code.&lt;br /&gt;
				subtokens = {}&lt;br /&gt;
				while t and (not factory_mode or (factory_mode and t.data ~= &#039;end&#039;)) do&lt;br /&gt;
					if factory_mode then&lt;br /&gt;
						item.code = utils.join{&lt;br /&gt;
							item.code,&lt;br /&gt;
							(t.posFirst == 1 and &#039;\n&#039; or &#039;&#039;),&lt;br /&gt;
							t.data&lt;br /&gt;
						}&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					-- Fetch our item export tokens aka &amp;quot;subtokens&amp;quot;.&lt;br /&gt;
					t, i = tokens[i + 1], i + 1&lt;br /&gt;
					if t and t.posFirst == 1 then&lt;br /&gt;
						line_no = line_no + 1&lt;br /&gt;
					end&lt;br /&gt;
					if t and t.type ~= &#039;whitespace&#039; and t.type ~= &#039;keyword&#039; and t.type ~= &#039;comment&#039; then&lt;br /&gt;
						table.insert(subtokens, t)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- Tracking and boolean variables for parsing exports.&lt;br /&gt;
				local separator = { [&#039;,&#039;] = true, [&#039;;&#039;] = true }&lt;br /&gt;
				local brace = { [&#039;{&#039;] = true, [&#039;}&#039;] = true }&lt;br /&gt;
&lt;br /&gt;
				local item_reference, item_alias = &#039;&#039;, &#039;&#039;&lt;br /&gt;
				local sequence_index, has_key = 0, false&lt;br /&gt;
				local subtoken, index = subtokens[2], 2&lt;br /&gt;
&lt;br /&gt;
				-- Logic that exports items to an item or module.&lt;br /&gt;
				while not brace[subtoken.data] do&lt;br /&gt;
					if subtoken.data == &#039;=&#039; then&lt;br /&gt;
						has_key = true&lt;br /&gt;
&lt;br /&gt;
					elseif not separator[subtoken.data] then&lt;br /&gt;
						if has_key then&lt;br /&gt;
							item_reference = item_reference .. subtoken.data&lt;br /&gt;
						else&lt;br /&gt;
							item_alias = item_alias .. subtoken.data&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					if subtokens[index + 1] and separator[subtokens[index + 1].data] or brace[subtokens[index + 1].data] then&lt;br /&gt;
						if not has_key then&lt;br /&gt;
							sequence_index = sequence_index + 1&lt;br /&gt;
							item_reference, item_alias = item_alias, item_reference&lt;br /&gt;
							item_alias = &#039;[&#039; .. tostring(sequence_index) .. &#039;]&#039;&lt;br /&gt;
						end&lt;br /&gt;
&lt;br /&gt;
						utils.export_item(documentation, item_reference, item_index, item_alias, factory_mode)&lt;br /&gt;
						item_reference, item_alias, has_key = &#039;&#039;, &#039;&#039;, false&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					subtoken, index = subtokens[index + 1], index + 1&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if not factory_mode then&lt;br /&gt;
					break -- end of file&lt;br /&gt;
				else&lt;br /&gt;
					factory_mode = false -- end of item&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Pragma tag support.&lt;br /&gt;
			if pragma_mode then&lt;br /&gt;
				tag = utils.process_tag(comment_tail)&lt;br /&gt;
				if tag.modifiers then&lt;br /&gt;
					options[tag.value] = yesno((next((tag ).modifiers or {})), true)&lt;br /&gt;
				elseif tag.value:find(&#039; &#039;) then&lt;br /&gt;
					local index = tag.value:find(&#039; &#039;)&lt;br /&gt;
					local key = tag.value:sub(1, index - 1)&lt;br /&gt;
					local val = tag.value:sub(index + 1)&lt;br /&gt;
					options[key] = yesno(val)&lt;br /&gt;
				elseif options[tag.value] == nil then&lt;br /&gt;
					options[tag.value] = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Package data post-processing.&lt;br /&gt;
		if (t.type ~= &#039;comment&#039; or t.data:find(&#039;^%-%-%]=*%]$&#039;) or t.data:find(&#039;^%]=*%]%-%-$&#039;)) and (comment_mode or doctag_mode) and start_mode then&lt;br /&gt;
			documentation.tags = utils.hash_map(documentation.tags)&lt;br /&gt;
			documentation.name = utils.extract_name(documentation, { project = true })&lt;br /&gt;
			documentation.info = utils.extract_info(documentation)&lt;br /&gt;
			documentation.types = utils.extract_types(documentation) or { &#039;module&#039; }&lt;br /&gt;
			documentation.type = documentation.types[1]&lt;br /&gt;
&lt;br /&gt;
			-- N.B: summary field = 1st comment sentence; description = text remainder.&lt;br /&gt;
			if #documentation.description ~= 0 then&lt;br /&gt;
				documentation.summary = match(documentation.description, patterns.DOCBUNTO_SUMMARY)&lt;br /&gt;
				documentation.description = documentation.description:sub(select(2, documentation.description:find(&#039;%s*&#039;, #documentation.summary + 1)) + 1)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			documentation.description = documentation.description:gsub(&#039;%s%s+&#039;, &#039;\n\n&#039;)&lt;br /&gt;
			documentation.executable = p.tags._code_types[documentation.type] and true or false&lt;br /&gt;
			utils.correct_subitem_tag(documentation)&lt;br /&gt;
			utils.override_item_tag(documentation, &#039;name&#039;)&lt;br /&gt;
			utils.override_item_tag(documentation, &#039;alias&#039;)&lt;br /&gt;
			utils.override_item_tag(documentation, &#039;summary&#039;)&lt;br /&gt;
			utils.override_item_tag(documentation, &#039;description&#039;)&lt;br /&gt;
			utils.override_item_tag(documentation, &#039;class&#039;, &#039;type&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Item data post-processing.&lt;br /&gt;
		if&lt;br /&gt;
			(t.type ~= &#039;comment&#039; or t.data:find(&#039;^%-%-%]=*%]$&#039;) or t.data:find(&#039;^%]=*%]%-%-$&#039;))&lt;br /&gt;
			and (comment_mode or doctag_mode) and item_index ~= 0&lt;br /&gt;
		then&lt;br /&gt;
			item.tags = utils.hash_map(item.tags)&lt;br /&gt;
			item.name = utils.extract_name(item)&lt;br /&gt;
			item.types = utils.extract_types(item)&lt;br /&gt;
			item.type = item.types[1]&lt;br /&gt;
&lt;br /&gt;
			if #item.description ~= 0 then&lt;br /&gt;
				item.summary = match(item.description, patterns.DOCBUNTO_SUMMARY)&lt;br /&gt;
				item.description = item.description:sub(select(2, item.description:find(&#039;%s*&#039;, #item.summary + 1)) + 1)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			item.description = item.description:gsub(&#039;%s%s+&#039;, &#039;\n\n&#039;)&lt;br /&gt;
			new_item_code = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Documentation block reset.&lt;br /&gt;
		if t.type ~= &#039;comment&#039; or t.data:find(&#039;^%-%-%]=*%]$&#039;) or t.data:find(&#039;^%]=*%]%-%-$&#039;) then&lt;br /&gt;
			start_mode = false&lt;br /&gt;
			comment_mode = false&lt;br /&gt;
			doctag_mode = false&lt;br /&gt;
			export_mode = false&lt;br /&gt;
			pragma_mode = false&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Don&#039;t concatenate module return value into item code.&lt;br /&gt;
		if t.data == &#039;return&#039; and t.posFirst == 1 then&lt;br /&gt;
			return_mode = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Item code concatenation.&lt;br /&gt;
		if item_index ~= 0 and not doctag_mode and not comment_mode and not comment_brace and not return_mode then&lt;br /&gt;
			separator = #item.code ~= 0 and t.posFirst == 1 and &#039;\n&#039; or &#039;&#039;&lt;br /&gt;
			item.code = utils.join{ item.code, separator, t.data }&lt;br /&gt;
&lt;br /&gt;
			-- Code analysis on item headline.&lt;br /&gt;
			if new_item_code and item.code:find(&#039;\n&#039;) and t.posFirst == 1 then&lt;br /&gt;
				utils.code_heuristic(item)&lt;br /&gt;
				new_item_code = false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		t, i = tokens[i + 1], i + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	documentation.lineno = line_no&lt;br /&gt;
&lt;br /&gt;
	local package_name = (documentation.tags[&#039;alias&#039;] or {}).value or documentation.name or DEFAULT_VARIABLE&lt;br /&gt;
	local package_alias = (documentation.tags[&#039;alias&#039;] or {}).value or &#039;p&#039;&lt;br /&gt;
	local export_ptn = &#039;^%s([.[])&#039;&lt;br /&gt;
&lt;br /&gt;
	for _, item in ipairs(documentation.items) do&lt;br /&gt;
		if item.name == package_alias or (item.name and item.name:match(&#039;^&#039; .. package_alias .. &#039;[.[]&#039;)) then&lt;br /&gt;
			item.alias = item.name:gsub(export_ptn:format(package_alias), documentation.name .. &#039;%1&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if&lt;br /&gt;
			item.name == package_name or&lt;br /&gt;
			item.tags[&#039;export&#039;] or&lt;br /&gt;
			(item.name and package_name and item.name:find(export_ptn:format(package_name))) or&lt;br /&gt;
			(item.alias and package_name and item.alias:find(export_ptn:format(package_name)))&lt;br /&gt;
		then&lt;br /&gt;
			item.export = true&lt;br /&gt;
&lt;br /&gt;
			item.tags[&#039;local&#039;] = nil&lt;br /&gt;
			item.tags[&#039;private&#039;] = nil&lt;br /&gt;
&lt;br /&gt;
			for index, tag in ipairs(item.tags) do&lt;br /&gt;
				if tag.name == &#039;local&#039; or tag.name == &#039;private&#039; then&lt;br /&gt;
					table.remove(item.tags, index)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if item.name and (item.name:find(&#039;[.:]&#039;) or item.name:find(&#039;%[[\&#039;&amp;quot;]&#039;)) then&lt;br /&gt;
			item.hierarchy = utils.parse_hierarchy(item.name)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		item.type = item.type or ((item.alias or item.name or &#039;&#039;):find(&#039;[.[]&#039;) and &#039;member&#039; or &#039;variable&#039;)&lt;br /&gt;
&lt;br /&gt;
		utils.correct_subitem_tag(item)&lt;br /&gt;
		utils.override_item_tag(item, &#039;name&#039;)&lt;br /&gt;
		utils.override_item_tag(item, &#039;alias&#039;)&lt;br /&gt;
		utils.override_item_tag(item, &#039;summary&#039;)&lt;br /&gt;
		utils.override_item_tag(item, &#039;description&#039;)&lt;br /&gt;
		utils.override_item_tag(item, &#039;class&#039;, &#039;type&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Sort documentation items by their access level.&lt;br /&gt;
	-- Items are sorted by whether they are exported at the module level.&lt;br /&gt;
	-- Items are then subsorted by whether the item is `@local` aka `@private`.&lt;br /&gt;
	table.sort(documentation.items, function(item1, item2)&lt;br /&gt;
		local inaccessible1 = item1.tags[&#039;local&#039;] or item1.tags[&#039;private&#039;]&lt;br /&gt;
		local inaccessible2 = item2.tags[&#039;local&#039;] or item2.tags[&#039;private&#039;]&lt;br /&gt;
	&lt;br /&gt;
			-- Send package items to the top.&lt;br /&gt;
		if item1.export and not item2.export then&lt;br /&gt;
			return true&lt;br /&gt;
		elseif item2.export and not item1.export then&lt;br /&gt;
			return false&lt;br /&gt;
	&lt;br /&gt;
		-- Send private items to the bottom.&lt;br /&gt;
		elseif inaccessible1 and not inaccessible2 then&lt;br /&gt;
			return false&lt;br /&gt;
		elseif inaccessible2 and not inaccessible1 then&lt;br /&gt;
			return true&lt;br /&gt;
	&lt;br /&gt;
		-- Optional alphabetical sort.&lt;br /&gt;
		elseif options.sort then&lt;br /&gt;
			return (item1.alias or item1.name) &amp;lt; (item2.alias or item2.name)&lt;br /&gt;
	&lt;br /&gt;
		-- Sort via source code order by default.&lt;br /&gt;
		else&lt;br /&gt;
			return item1.lineno &amp;lt; item2.lineno&lt;br /&gt;
		end&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
	end)&lt;br /&gt;
&lt;br /&gt;
	if not p_success then&lt;br /&gt;
		mw.addWarning(&amp;quot;Docbunto error: &amp;quot; .. p_error)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return documentation&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Doclet renderer for Docbunto taglet data.&lt;br /&gt;
--  @function           p.doclet&lt;br /&gt;
--  @param              {table} data Taglet documentation data.&lt;br /&gt;
--  @param[opt]         {options} options Configuration options.&lt;br /&gt;
--  @return             {string} Wikitext documentation output.&lt;br /&gt;
function p.doclet(data, options)&lt;br /&gt;
	local documentation = mw.html.create()&lt;br /&gt;
	local namespace_ptn = utils.join{ &#039;^&#039;,  mw.site.namespaces[828].name, &#039;:&#039; }&lt;br /&gt;
	local codepage = data.filename:gsub(namespace_ptn, &#039;&#039;, 1)&lt;br /&gt;
&lt;br /&gt;
	options = options or {}&lt;br /&gt;
	options.file = data.filename&lt;br /&gt;
	frame = frame or mw.getCurrentFrame():getParent() or mw.getCurrentFrame()&lt;br /&gt;
&lt;br /&gt;
	local maybe_md = options.plain and utils.identity or frontend.markdown&lt;br /&gt;
	local tohtml = function(str)&lt;br /&gt;
		return frame:preprocess(maybe_md(str))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Disable edit sections for automatic documentation pages.&lt;br /&gt;
	if not options.code then&lt;br /&gt;
		documentation:wikitext(frame:preprocess(&#039;__NOEDITSECTION__&#039;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	-- Information&lt;br /&gt;
	if not options.code and options.box then&lt;br /&gt;
		local custom, infobox = pcall(require, &#039;Module:Docbunto/infobox&#039;)&lt;br /&gt;
		if custom and type(infobox) == &#039;function&#039; then&lt;br /&gt;
			documentation:wikitext(infobox(data, codepage, frame, options, title, maybe_md)):newline()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Documentation lede.&lt;br /&gt;
	if not options.code and (#(data.summary or &#039;&#039;) + #data.description) ~= 0 then&lt;br /&gt;
		local separator = #(data.summary or &#039;&#039;) ~= 0 and #data.description ~= 0&lt;br /&gt;
			and (data.description:find(patterns.DOCBUNTO_WIKITEXT) and &#039;\n\n&#039; or patterns.DOCBUNTO_CONCAT)&lt;br /&gt;
			or  &#039;&#039;&lt;br /&gt;
		local intro = utils.join{ data.summary or &#039;&#039;, separator, data.description }&lt;br /&gt;
		intro = tohtml(intro:gsub(&#039;^(&#039; .. codepage .. &#039;)&#039;, mw.text.tag(&#039;b&#039;, nil, &#039;%1&#039;)))&lt;br /&gt;
		if options.migration then&lt;br /&gt;
			documentation:wikitext(frame:preprocess(mw.text.tag{&lt;br /&gt;
				name = &#039;syntaxhighlight&#039;,&lt;br /&gt;
				content = intro&lt;br /&gt;
			})):newline():newline()&lt;br /&gt;
		else&lt;br /&gt;
			documentation:wikitext(intro):newline():newline()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Custom documentation preface.&lt;br /&gt;
	if options.preface then&lt;br /&gt;
		documentation:wikitext(options.preface):newline():newline()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start code documentation.&lt;br /&gt;
	local codedoc = mw.html.create()&lt;br /&gt;
	local function_module = data.tags[&#039;param&#039;] or data.tags[&#039;return&#039;]&lt;br /&gt;
	local header_type =&lt;br /&gt;
		documentation.type == &#039;classmod&#039;&lt;br /&gt;
			and &#039;class&#039;&lt;br /&gt;
		or  function_module&lt;br /&gt;
			and &#039;function&#039;&lt;br /&gt;
			or  &#039;items&#039;&lt;br /&gt;
	if (function_module or #data.items ~= 0) and not options.code or options.preface then&lt;br /&gt;
		codedoc&lt;br /&gt;
			:tag(&#039;h2&#039;)&lt;br /&gt;
				:wikitext(i18n:msg(&#039;header-documentation&#039;))&lt;br /&gt;
				:done()&lt;br /&gt;
			:newline()&lt;br /&gt;
	end&lt;br /&gt;
	if (function_module or #data.items ~= 0) then&lt;br /&gt;
		codedoc&lt;br /&gt;
			:tag(&#039;h3&#039;)&lt;br /&gt;
				:wikitext(i18n:msg(&#039;header-&#039; .. header_type))&lt;br /&gt;
				:done()&lt;br /&gt;
			:newline()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Function module support.&lt;br /&gt;
	if function_module then&lt;br /&gt;
		data.type, data.types[1] = &#039;function&#039;, &#039;function&#039;&lt;br /&gt;
&lt;br /&gt;
		options.item_id = data.name&lt;br /&gt;
		if not options.code or not options.verbose then data.description = &#039;&#039; end&lt;br /&gt;
		frontend.render_item(codedoc, data, options, frontend.pretask_function_name)&lt;br /&gt;
&lt;br /&gt;
		if not options.simple and data.tags[&#039;param&#039;] then&lt;br /&gt;
			frontend.render_tag(codedoc, &#039;param&#039;, data.tags[&#039;param&#039;], options, frontend.pretask_variable_prefix)&lt;br /&gt;
		end&lt;br /&gt;
		if not options.simple and data.tags[&#039;error&#039;] then&lt;br /&gt;
			frontend.render_tag(codedoc, &#039;error&#039;, data.tags[&#039;error&#039;], options, frontend.pretask_error_line)&lt;br /&gt;
		end&lt;br /&gt;
		if not options.simple and data.tags[&#039;return&#039;] then&lt;br /&gt;
			frontend.render_tag(codedoc, &#039;return&#039;, data.tags[&#039;return&#039;], options)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render documentation items.&lt;br /&gt;
	local other_header = false&lt;br /&gt;
	local private_header = false&lt;br /&gt;
	local inaccessible&lt;br /&gt;
	for _, item in ipairs(data.items) do&lt;br /&gt;
		inaccessible = item.tags[&#039;local&#039;] or item.tags[&#039;private&#039;]&lt;br /&gt;
		if not options.all and inaccessible then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if&lt;br /&gt;
			not other_header and item.type ~= &#039;section&#039; and item.type ~= &#039;type&#039; and&lt;br /&gt;
			not item.export and not item.hierarchy and not inaccessible&lt;br /&gt;
		then&lt;br /&gt;
			codedoc&lt;br /&gt;
				:tag(&#039;h3&#039;)&lt;br /&gt;
					:wikitext(i18n:msg(&#039;header-other&#039;))&lt;br /&gt;
					:done()&lt;br /&gt;
				:newline()&lt;br /&gt;
			other_header = true&lt;br /&gt;
		end&lt;br /&gt;
		if not private_header and options.all and inaccessible then&lt;br /&gt;
			codedoc&lt;br /&gt;
				:tag(&#039;h3&#039;)&lt;br /&gt;
					:wikitext(i18n:msg(&#039;header-private&#039;))&lt;br /&gt;
					:done()&lt;br /&gt;
				:newline()&lt;br /&gt;
			private_header = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if item.type == &#039;section&#039; then&lt;br /&gt;
			codedoc&lt;br /&gt;
				:tag(&#039;h3&#039;)&lt;br /&gt;
					:wikitext((mw.ustring.gsub(item.summary or item.alias or item.name, &#039;[.։。।෴۔።]$&#039;, &#039;&#039;)))&lt;br /&gt;
					:done()&lt;br /&gt;
				:newline()&lt;br /&gt;
			if #item.description ~= 0 then&lt;br /&gt;
				codedoc:wikitext(mw.text.trim(item.description)):newline()&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		elseif item.type == &#039;type&#039; then&lt;br /&gt;
			if options.strip and item.export and item.hierarchy then&lt;br /&gt;
				if item.alias then&lt;br /&gt;
					item.alias = item.alias:gsub(&#039;^[%w_]+[.[]?&#039;, &#039;&#039;)&lt;br /&gt;
				else&lt;br /&gt;
					item.name = item.name:gsub(&#039;^[%w_]+[.[]?&#039;, &#039;&#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			codedoc&lt;br /&gt;
				:tag(&#039;h3&#039;)&lt;br /&gt;
					:wikitext(mw.text.tag(&#039;code&#039;, {}, item.alias or item.name))&lt;br /&gt;
					:done()&lt;br /&gt;
				:newline()&lt;br /&gt;
			if (#(item.summary or &#039;&#039;) + #item.description) ~= 0 then&lt;br /&gt;
				local separator = #(item.summary or &#039;&#039;) ~= 0 and #item.description ~= 0&lt;br /&gt;
					and (item.description:find(patterns.DOCBUNTO_WIKITEXT) and &#039;\n\n&#039; or patterns.DOCBUNTO_CONCAT)&lt;br /&gt;
					or  &#039;&#039;&lt;br /&gt;
				codedoc:wikitext((item.summary or &#039;&#039;) .. separator .. item.description):newline()&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		elseif item.type == &#039;function&#039; then&lt;br /&gt;
			options.item_id = item.alias or item.name&lt;br /&gt;
			frontend.render_item(codedoc, item, options, frontend.pretask_function_name)&lt;br /&gt;
			if not options.simple and item.tags[&#039;param&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;param&#039;, item.tags[&#039;param&#039;], options, frontend.pretask_variable_prefix)&lt;br /&gt;
			end&lt;br /&gt;
			if not options.simple and item.tags[&#039;error&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;error&#039;, item.tags[&#039;error&#039;], options, frontend.pretask_error_line)&lt;br /&gt;
			end&lt;br /&gt;
			if not options.simple and item.tags[&#039;return&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;return&#039;, item.tags[&#039;return&#039;], options)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
		elseif&lt;br /&gt;
			item.type == &#039;table&#039; or&lt;br /&gt;
			item.type ~= nil and (&lt;br /&gt;
				item.type == &#039;member&#039; or&lt;br /&gt;
				item.type == &#039;variable&#039;&lt;br /&gt;
			) and (item.alias or item.name)&lt;br /&gt;
		then&lt;br /&gt;
			options.item_id = item.alias or item.name&lt;br /&gt;
			frontend.render_item(codedoc, item, options)&lt;br /&gt;
			if not options.simple and item.tags[&#039;field&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;field&#039;, item.tags[&#039;field&#039;], options, frontend.pretask_variable_prefix)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if item.type ~= &#039;section&#039; and item.type ~= &#039;type&#039; then&lt;br /&gt;
			if not options.simple and item.tags[&#039;note&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;note&#039;, item.tags[&#039;note&#039;], options)&lt;br /&gt;
			end&lt;br /&gt;
			if not options.simple and item.tags[&#039;warning&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;warning&#039;, item.tags[&#039;warning&#039;], options)&lt;br /&gt;
			end&lt;br /&gt;
			if not options.simple and item.tags[&#039;fixme&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;fixme&#039;, item.tags[&#039;fixme&#039;], options)&lt;br /&gt;
			end&lt;br /&gt;
			if not options.simple and item.tags[&#039;todo&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;todo&#039;, item.tags[&#039;todo&#039;], options)&lt;br /&gt;
				hasTodoItems = true&lt;br /&gt;
			end&lt;br /&gt;
			if not options.simple and item.tags[&#039;usage&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;usage&#039;, item.tags[&#039;usage&#039;], options, frontend.pretask_usage_highlight)&lt;br /&gt;
			end&lt;br /&gt;
			if not options.simple and item.tags[&#039;see&#039;] then&lt;br /&gt;
				frontend.render_tag(codedoc, &#039;see&#039;, item.tags[&#039;see&#039;], options)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render module-level annotations.&lt;br /&gt;
	local header_level = options.code and &#039;h3&#039; or &#039;h2&#039;&lt;br /&gt;
	local header_text&lt;br /&gt;
	for _, tag_name in ipairs(p.tags._annotation_hierarchy) do&lt;br /&gt;
		if data.tags[tag_name] then&lt;br /&gt;
			header_text =  i18n:msg(&#039;tag-&#039; .. tag_name, data.tags[tag_name].value and &#039;1&#039; or &#039;2&#039;)&lt;br /&gt;
			header_text = &#039;&amp;lt;&#039; .. header_level .. &#039;&amp;gt;&#039; .. &#039; &#039; .. header_text .. &#039; &#039; .. &#039;&amp;lt;/&#039; .. header_level .. &#039;&amp;gt;&#039;&lt;br /&gt;
			codedoc:newline():wikitext(header_text):newline()&lt;br /&gt;
			if data.tags[tag_name].value then&lt;br /&gt;
				codedoc:wikitext(data.tags[tag_name].value):newline()&lt;br /&gt;
			else&lt;br /&gt;
				for _, tag_el in ipairs(data.tags[tag_name]) do&lt;br /&gt;
					codedoc:wikitext(&#039;* &#039; .. tag_el.value):newline()&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Byline for autogeneration.&lt;br /&gt;
	if options.footer then&lt;br /&gt;
		codedoc:newline()&lt;br /&gt;
		codedoc:tag(&#039;hr&#039;):done()&lt;br /&gt;
		codedoc:newline()&lt;br /&gt;
		codedoc:tag(&#039;p&#039;):css( &#039;text-align&#039;, &#039;right&#039; ):wikitext(i18n:msg(&#039;message-autogeneration&#039;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add nowiki tags for EOF termination in tests.&lt;br /&gt;
	codedoc:tag(&#039;nowiki&#039;, { selfClosing = true })&lt;br /&gt;
&lt;br /&gt;
	-- Code documentation formatting.&lt;br /&gt;
	codedoc = tohtml(tostring(codedoc))&lt;br /&gt;
&lt;br /&gt;
	documentation:wikitext(codedoc)&lt;br /&gt;
&lt;br /&gt;
	-- Endmatter table for module information.&lt;br /&gt;
	if options.card then&lt;br /&gt;
		local endmatter = mw.html.create(&#039;table&#039;)&lt;br /&gt;
		endmatter:addClass(&#039;wikitable&#039;)&lt;br /&gt;
		endmatter:css(&#039;width&#039;, &#039;75%&#039;)&lt;br /&gt;
		endmatter:css(&#039;margin&#039;, &#039;0 auto 1em auto&#039;)&lt;br /&gt;
		&lt;br /&gt;
		local module_type = data.type == &#039;module&#039;&lt;br /&gt;
			and i18n:msg(&#039;invocable-module&#039;)&lt;br /&gt;
			or i18n:msg(&#039;meta-module&#039;)&lt;br /&gt;
&lt;br /&gt;
		endmatter&lt;br /&gt;
			:tag(&#039;caption&#039;)&lt;br /&gt;
			:wikitext(&#039;Module information card (autogenerated)&#039;)&lt;br /&gt;
	&lt;br /&gt;
		endmatter&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;th&#039;):attr(&#039;scope&#039;, &#039;col&#039;):wikitext(&#039;Name&#039;):done()&lt;br /&gt;
				:tag(&#039;th&#039;):attr(&#039;scope&#039;, &#039;col&#039;):wikitext(&#039;Value&#039;):done()&lt;br /&gt;
	&lt;br /&gt;
		if options.image or data.info and data.info[&#039;image&#039;] then&lt;br /&gt;
			endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;endmatter-image&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:attr(&#039;align&#039;, &#039;center&#039;)&lt;br /&gt;
						:wikitext(&#039;[[File:&#039; .. (options.image or data.info[&#039;image&#039;]) .. &#039;|270px|center]]&#039;)&lt;br /&gt;
					:done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if options.caption or data.info and data.info[&#039;caption&#039;] then&lt;br /&gt;
			 endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;endmatter-caption&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:attr(&#039;align&#039;, options.image or data.info[&#039;image&#039;] and &#039;center&#039; or &#039;left&#039;)&lt;br /&gt;
						:wikitext(tohtml(options.caption or data.info[&#039;caption&#039;]))&lt;br /&gt;
					:done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext((gsub(i18n:msg(&#039;type-variable&#039;), &#039;^%w&#039;, mw.ustring.upper))):done()&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:attr(&#039;align&#039;, options.image or data.info and data.info[&#039;image&#039;] and &#039;center&#039; or &#039;left&#039;)&lt;br /&gt;
						:wikitext(mw.text.tag({&lt;br /&gt;
							name = options.image or data.info and data.info[&#039;image&#039;] and &#039;h1&#039; or &#039;span&#039;,&lt;br /&gt;
							content = mw.text.tag({&lt;br /&gt;
								name = &#039;b&#039;,&lt;br /&gt;
								content = mw.text.tag({&lt;br /&gt;
									name = &#039;code&#039;, &lt;br /&gt;
									content = data.name or DEFAULT_VARIABLE&lt;br /&gt;
								})&lt;br /&gt;
							})&lt;br /&gt;
						})):done()&lt;br /&gt;
					:done()&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):wikitext(i18n:msg(&#039;code&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;):wikitext(tohtml(&#039;[[&#039; .. data.filename .. &#039;]]&#039;)):done()&lt;br /&gt;
				:done()&lt;br /&gt;
	&lt;br /&gt;
		if data.info and data.info[&#039;release&#039;] then&lt;br /&gt;
			endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;release-status&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;):wikitext(tohtml(data.info[&#039;release&#039;])):done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if data.summary then&lt;br /&gt;
			endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;description&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;):wikitext(tohtml(data.summary)):done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if data.info and data.info[&#039;author&#039;] then&lt;br /&gt;
			endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;author&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;):newline():wikitext(tohtml(data.info[&#039;author&#039;])):done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if data.info and data.info[&#039;attribution&#039;] then&lt;br /&gt;
			endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;using-code-by&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;):wikitext(tohtml(data.info[&#039;attribution&#039;])):done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if data.info and data.info[&#039;credit&#039;] then&lt;br /&gt;
			endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;other-attribution&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;):wikitext(tohtml(data.info[&#039;credit&#039;])):done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if data.info and data.info[&#039;require&#039;] then&lt;br /&gt;
			data.info[&#039;require&#039;] = data.info[&#039;require&#039;]&lt;br /&gt;
				:gsub(&#039;^[^[%s]+$&#039;, &#039;[[%1]]&#039;)&lt;br /&gt;
				:gsub(&#039;%* ([^[%s]+)&#039;, &#039;* [[%1]]&#039;)&lt;br /&gt;
			endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;dependencies&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;):newline():wikitext(tohtml(data.info[&#039;require&#039;])):done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if data.info and data.info[&#039;demo&#039;] then&lt;br /&gt;
			endmatter&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;):attr(&#039;scope&#039;, &#039;row&#039;):wikitext(i18n:msg(&#039;examples&#039;)):done()&lt;br /&gt;
					:tag(&#039;td&#039;):wikitext(tohtml(data.info[&#039;demo&#039;])):done()&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		endmatter:newline()&lt;br /&gt;
		endmatter = tostring(endmatter)&lt;br /&gt;
		documentation:newline():newline()&lt;br /&gt;
		documentation:wikitext(endmatter)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	documentation = tostring(documentation)&lt;br /&gt;
	if hasTodoItems and options.autodoc &lt;br /&gt;
		and mw.title.new(&#039;Module:&#039; .. options.file).fullText == mw.title.getCurrentTitle().fullText then&lt;br /&gt;
		documentation = documentation .. &#039;[[Category:&#039; .. i18n:msg(&#039;todo&#039;) .. &#039;]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if mw.title.new(&#039;Module:Docbunto/styles.css&#039;).exists then&lt;br /&gt;
		documentation = documentation .. frame:extensionTag(&#039;templatestyles&#039;, &#039;&#039;, {src = &#039;Module:Docbunto/styles.css&#039;})&lt;br /&gt;
	end&lt;br /&gt;
	return documentation&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Token dictionary for Docbunto tags.&lt;br /&gt;
--  Maps Docbunto tag names to tag tokens.&lt;br /&gt;
--   * Multi-line tags use the `&#039;M&#039;` token.&lt;br /&gt;
--   * Multi-line preformatted tags use the `&#039;ML&#039;` token.&lt;br /&gt;
--   * Identifier tags use the `&#039;ID&#039;` token.&lt;br /&gt;
--   * Single-line tags use the `&#039;S&#039;` token.&lt;br /&gt;
--   * Flags use the `&#039;N&#039;` token.&lt;br /&gt;
--   * Type tags use the `&#039;T&#039;` token.&lt;br /&gt;
--  @table              p.tags&lt;br /&gt;
p.tags = {&lt;br /&gt;
	-- Item-level tags, available for global use.&lt;br /&gt;
	[&#039;param&#039;] = &#039;M&#039;, [&#039;see&#039;] = &#039;M&#039;, [&#039;note&#039;] = &#039;M&#039;, [&#039;usage&#039;] = &#039;ML&#039;,&lt;br /&gt;
	[&#039;description&#039;] = &#039;M&#039;, [&#039;field&#039;] = &#039;M&#039;, [&#039;return&#039;] = &#039;M&#039;,&lt;br /&gt;
	[&#039;fixme&#039;] = &#039;M&#039;, [&#039;todo&#039;] = &#039;M&#039;, [&#039;warning&#039;] = &#039;M&#039;, [&#039;error&#039;] = &#039;M&#039;;&lt;br /&gt;
	[&#039;class&#039;] = &#039;ID&#039;, [&#039;name&#039;] = &#039;ID&#039;, [&#039;alias&#039;] = &#039;ID&#039;;&lt;br /&gt;
	[&#039;summary&#039;] = &#039;S&#039;, [&#039;pragma&#039;] = &#039;S&#039;, [&#039;factory&#039;] = &#039;S&#039;,&lt;br /&gt;
	[&#039;release&#039;] = &#039;S&#039;, [&#039;author&#039;] = &#039;S&#039;, [&#039;copyright&#039;] = &#039;S&#039;, [&#039;license&#039;] = &#039;S&#039;,&lt;br /&gt;
	[&#039;image&#039;] = &#039;S&#039;, [&#039;caption&#039;] = &#039;S&#039;, [&#039;require&#039;] = &#039;S&#039;, [&#039;attribution&#039;] = &#039;S&#039;,&lt;br /&gt;
	[&#039;credit&#039;] = &#039;S&#039;, [&#039;demo&#039;] = &#039;S&#039;;&lt;br /&gt;
	[&#039;local&#039;] = &#039;N&#039;, [&#039;export&#039;] = &#039;N&#039;, [&#039;private&#039;] = &#039;N&#039;, [&#039;constructor&#039;] = &#039;N&#039;,&lt;br /&gt;
	[&#039;static&#039;] = &#039;N&#039;;&lt;br /&gt;
	-- Project-level tags, all scoped to a file.&lt;br /&gt;
	[&#039;module&#039;] = &#039;T&#039;, [&#039;script&#039;] = &#039;T&#039;, [&#039;classmod&#039;] = &#039;T&#039;, [&#039;topic&#039;] = &#039;T&#039;,&lt;br /&gt;
	[&#039;submodule&#039;] = &#039;T&#039;, [&#039;example&#039;] = &#039;T&#039;, [&#039;file&#039;] = &#039;T&#039;;&lt;br /&gt;
	-- Module-level tags, used to register module items.&lt;br /&gt;
	[&#039;function&#039;] = &#039;T&#039;, [&#039;table&#039;] = &#039;T&#039;, [&#039;member&#039;] = &#039;T&#039;, [&#039;variable&#039;] = &#039;T&#039;,&lt;br /&gt;
	[&#039;section&#039;] = &#039;T&#039;, [&#039;type&#039;] = &#039;T&#039;;&lt;br /&gt;
}&lt;br /&gt;
p.tags._alias = {&lt;br /&gt;
	-- Normal aliases.&lt;br /&gt;
	[&#039;about&#039;]       = &#039;summary&#039;,&lt;br /&gt;
	[&#039;abstract&#039;]    = &#039;summary&#039;,&lt;br /&gt;
	[&#039;brief&#039;]       = &#039;summary&#039;,&lt;br /&gt;
	[&#039;bug&#039;]         = &#039;fixme&#039;,&lt;br /&gt;
	[&#039;argument&#039;]    = &#039;param&#039;,&lt;br /&gt;
	[&#039;credits&#039;]     = &#039;credit&#039;,&lt;br /&gt;
	[&#039;code&#039;]        = &#039;usage&#039;,&lt;br /&gt;
	[&#039;details&#039;]     = &#039;description&#039;,&lt;br /&gt;
	[&#039;discussion&#039;]  = &#039;description&#039;,&lt;br /&gt;
	[&#039;exception&#039;]   = &#039;error&#039;,&lt;br /&gt;
	[&#039;lfunction&#039;]   = &#039;function&#039;,&lt;br /&gt;
	[&#039;package&#039;]     = &#039;module&#039;,&lt;br /&gt;
	[&#039;property&#039;]    = &#039;member&#039;,&lt;br /&gt;
	[&#039;raise&#039;]       = &#039;error&#039;,&lt;br /&gt;
	[&#039;requires&#039;]    = &#039;require&#039;,&lt;br /&gt;
	[&#039;returns&#039;]     = &#039;return&#039;,&lt;br /&gt;
	[&#039;throws&#039;]      = &#039;error&#039;,&lt;br /&gt;
	[&#039;typedef&#039;]     = &#039;type&#039;,&lt;br /&gt;
	-- Typed aliases.&lt;br /&gt;
	[&#039;bool&#039;]        = &#039;field&#039;,&lt;br /&gt;
	[&#039;func&#039;]        = &#039;field&#039;,&lt;br /&gt;
	[&#039;int&#039;]         = &#039;field&#039;,&lt;br /&gt;
	[&#039;number&#039;]      = &#039;field&#039;,&lt;br /&gt;
	[&#039;string&#039;]      = &#039;field&#039;,&lt;br /&gt;
	[&#039;tab&#039;]         = &#039;field&#039;,&lt;br /&gt;
	[&#039;vararg&#039;]      = &#039;param&#039;,&lt;br /&gt;
	[&#039;tfield&#039;]      = &#039;field&#039;,&lt;br /&gt;
	[&#039;tparam&#039;]      = &#039;param&#039;,&lt;br /&gt;
	[&#039;treturn&#039;]     = &#039;return&#039;&lt;br /&gt;
}&lt;br /&gt;
p.tags._type_alias = {&lt;br /&gt;
	-- Implicit type value alias.&lt;br /&gt;
	[&#039;bool&#039;]        = &#039;boolean&#039;,&lt;br /&gt;
	[&#039;func&#039;]        = &#039;function&#039;,&lt;br /&gt;
	[&#039;int&#039;]         = &#039;number&#039;,&lt;br /&gt;
	[&#039;number&#039;]      = &#039;number&#039;,&lt;br /&gt;
	[&#039;string&#039;]      = &#039;string&#039;,&lt;br /&gt;
	[&#039;tab&#039;]         = &#039;table&#039;,&lt;br /&gt;
	[&#039;vararg&#039;]      = &#039;...&#039;,&lt;br /&gt;
	-- Pure typed modifier alias.&lt;br /&gt;
	[&#039;tfield&#039;]      = &#039;variable&#039;,&lt;br /&gt;
	[&#039;tparam&#039;]      = &#039;variable&#039;,&lt;br /&gt;
	[&#039;treturn&#039;]     = &#039;variable&#039;&lt;br /&gt;
}&lt;br /&gt;
p.tags._project_level = {&lt;br /&gt;
	-- Contains code.&lt;br /&gt;
	[&#039;module&#039;]      = true,&lt;br /&gt;
	[&#039;script&#039;]      = true,&lt;br /&gt;
	[&#039;classmod&#039;]    = true,&lt;br /&gt;
	[&#039;submodule&#039;]   = true,&lt;br /&gt;
	[&#039;file&#039;]        = true,&lt;br /&gt;
	-- Contains documentation.&lt;br /&gt;
	[&#039;topic&#039;]       = true,&lt;br /&gt;
	[&#039;example&#039;]     = true&lt;br /&gt;
}&lt;br /&gt;
p.tags._code_types = {&lt;br /&gt;
	[&#039;module&#039;]      = true,&lt;br /&gt;
	[&#039;script&#039;]      = true,&lt;br /&gt;
	[&#039;classmod&#039;]    = true&lt;br /&gt;
}&lt;br /&gt;
p.tags._module_info = {&lt;br /&gt;
	[&#039;image&#039;]       = true,&lt;br /&gt;
	[&#039;caption&#039;]     = true,&lt;br /&gt;
	[&#039;release&#039;]     = true,&lt;br /&gt;
	[&#039;author&#039;]      = true,&lt;br /&gt;
	[&#039;copyright&#039;]   = true,&lt;br /&gt;
	[&#039;license&#039;]     = true,&lt;br /&gt;
	[&#039;require&#039;]     = true,&lt;br /&gt;
	[&#039;credit&#039;]      = true,&lt;br /&gt;
	[&#039;attribution&#039;] = true,&lt;br /&gt;
	[&#039;demo&#039;]        = true&lt;br /&gt;
}&lt;br /&gt;
p.tags._annotation_tags = {&lt;br /&gt;
	[&#039;field&#039;]       = true,&lt;br /&gt;
	[&#039;warning&#039;]     = true,&lt;br /&gt;
	[&#039;fixme&#039;]       = true,&lt;br /&gt;
	[&#039;note&#039;]        = true,&lt;br /&gt;
	[&#039;todo&#039;]        = true,&lt;br /&gt;
	[&#039;see&#039;]         = true&lt;br /&gt;
}&lt;br /&gt;
p.tags._annotation_hierarchy = {&lt;br /&gt;
	&#039;warning&#039;,&lt;br /&gt;
	&#039;fixme&#039;,&lt;br /&gt;
	&#039;note&#039;,&lt;br /&gt;
	&#039;todo&#039;,&lt;br /&gt;
	&#039;see&#039;&lt;br /&gt;
}&lt;br /&gt;
p.tags._privacy_tags = {&lt;br /&gt;
	[&#039;private&#039;]     = true,&lt;br /&gt;
	[&#039;local&#039;]       = true&lt;br /&gt;
}&lt;br /&gt;
p.tags._generic_tags = {&lt;br /&gt;
	[&#039;variable&#039;]    = true,&lt;br /&gt;
	[&#039;member&#039;]      = true&lt;br /&gt;
}&lt;br /&gt;
p.tags._subtype_tags = {&lt;br /&gt;
	[&#039;factory&#039;]     = true,&lt;br /&gt;
	[&#039;local&#039;]       = true,&lt;br /&gt;
	[&#039;private&#039;]     = true,&lt;br /&gt;
	[&#039;constructor&#039;] = true,&lt;br /&gt;
	[&#039;static&#039;]      = true&lt;br /&gt;
}&lt;br /&gt;
p.tags._subtype_hierarchy = {&lt;br /&gt;
	&#039;private&#039;,&lt;br /&gt;
	&#039;local&#039;,&lt;br /&gt;
	&#039;static&#039;,&lt;br /&gt;
	&#039;factory&#039;,&lt;br /&gt;
	&#039;constructor&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:I18n/doc&amp;diff=1065</id>
		<title>Modul:I18n/doc</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:I18n/doc&amp;diff=1065"/>
		<updated>2026-09-09T13:00:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lua autodoc|file=I18n|autodoc=yes}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Module documentation pages]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:I18n&amp;diff=1063</id>
		<title>Modul:I18n</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:I18n&amp;diff=1063"/>
		<updated>2026-09-09T13:00:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- I18n library for message storage in Lua datastores.&lt;br /&gt;
--  The module is designed to enable message separation from modules &amp;amp;&lt;br /&gt;
--  templates. It has support for handling language fallbacks. This&lt;br /&gt;
--  module is a Lua port of [[wikia:dev:I18n-js]] and i18n modules that can be loaded&lt;br /&gt;
--  by it are editable through [[wikia:dev:I18nEdit]].&lt;br /&gt;
--  &lt;br /&gt;
--  On Wikimedia projects, i18n messages are editable &lt;br /&gt;
--  through [[c:Special:PrefixIndex/Data:i18n/|Data:i18n/]] subpages on&lt;br /&gt;
--  Wikimedia Commons.&lt;br /&gt;
--  &lt;br /&gt;
--  @module		 i18n&lt;br /&gt;
--  @version		1.4.0&lt;br /&gt;
--  @require		Module:Entrypoint&lt;br /&gt;
--  @require		Module:Fallbacklist&lt;br /&gt;
--  @author		 [[wikia:dev:User:KockaAdmiralac|KockaAdmiralac]] (original Fandom implementation)&lt;br /&gt;
--  @author		 [[wikia:dev:User:Speedit|Speedit]] (original Fandom implementation)&lt;br /&gt;
--  @author			[[User:Awesome Aasim|Awesome Aasim]] (Wikimedia port)&lt;br /&gt;
--  @attribution	[[wikia:dev:User:Cqm|Cqm]]&lt;br /&gt;
--  @release		beta&lt;br /&gt;
--  @see			[[wikia:dev:I18n|I18n guide]]&lt;br /&gt;
--  @see			[[wikia:dev:I18n-js]]&lt;br /&gt;
--  @see			[[wikia:dev:I18nEdit]]&lt;br /&gt;
--  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local i18n, _i18n = {}, {}&lt;br /&gt;
&lt;br /&gt;
--  Module variables &amp;amp; dependencies.&lt;br /&gt;
local title = mw.title.getCurrentTitle()&lt;br /&gt;
local fallbacks = require(&#039;Module:Fallbacklist&#039;)&lt;br /&gt;
local entrypoint = require(&#039;Module:Entrypoint&#039;)&lt;br /&gt;
local uselang&lt;br /&gt;
&lt;br /&gt;
--- Argument substitution as $n where n &amp;gt; 0.&lt;br /&gt;
--  @function		   _i18n.handleArgs&lt;br /&gt;
--  @param			  {string} msg Message to substitute arguments into.&lt;br /&gt;
--  @param			  {table} args Arguments table to substitute.&lt;br /&gt;
--  @return			 {string} Resulting message.&lt;br /&gt;
--  @local&lt;br /&gt;
function _i18n.handleArgs(msg, args)&lt;br /&gt;
	for i, a in ipairs(args) do&lt;br /&gt;
		msg = (string.gsub(msg, &#039;%$&#039; .. tostring(i), tostring(a)))&lt;br /&gt;
	end&lt;br /&gt;
	return msg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks whether a language code is valid.&lt;br /&gt;
--  @function		   _i18n.isValidCode&lt;br /&gt;
--  @param			  {string} code Language code to check.&lt;br /&gt;
--  @return			 {boolean} Whether the language code is valid.&lt;br /&gt;
--  @local&lt;br /&gt;
function _i18n.isValidCode(code)&lt;br /&gt;
	return type(code) == &#039;string&#039; and #mw.language.fetchLanguageName(code) ~= 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks whether a message contains unprocessed wikitext.&lt;br /&gt;
--  Used to optimise message getter by not preprocessing pure text.&lt;br /&gt;
--  @function		   _i18n.isWikitext&lt;br /&gt;
--  @param			  {string} msg Message to check.&lt;br /&gt;
--  @return			 {boolean} Whether the message contains wikitext.&lt;br /&gt;
function _i18n.isWikitext(msg)&lt;br /&gt;
	return&lt;br /&gt;
		type(msg) == &#039;string&#039; and&lt;br /&gt;
		(&lt;br /&gt;
			msg:find(&#039;%-%-%-%-&#039;) or&lt;br /&gt;
			msg:find(&#039;%f[^\n%z][;:*#] &#039;) or&lt;br /&gt;
			msg:find(&#039;%f[^\n%z]==* *[^\n|]+ =*=%f[\n]&#039;) or&lt;br /&gt;
			msg:find(&#039;%b&amp;lt;&amp;gt;&#039;) or msg:find(&#039;\&#039;\&#039;&#039;) or&lt;br /&gt;
			msg:find(&#039;%[%b[]%]&#039;) or msg:find(&#039;{%b{}}&#039;)&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- I18n datastore class.&lt;br /&gt;
--  This is used to control language translation and access to individual&lt;br /&gt;
--  messages. The datastore instance provides language and message&lt;br /&gt;
--  getter-setter methods, which can be used to internationalize Lua modules.&lt;br /&gt;
--  The language methods (any ending in `Lang`) are all **chainable**.&lt;br /&gt;
--  @type			Data&lt;br /&gt;
local Data = {}&lt;br /&gt;
Data.__index = Data&lt;br /&gt;
&lt;br /&gt;
--- Datastore message getter utility.&lt;br /&gt;
--  This method returns localized messages from the datastore corresponding&lt;br /&gt;
--  to a `key`. These messages may have `$n` parameters, which can be&lt;br /&gt;
--  replaced by optional argument strings supplied by the `msg` call.&lt;br /&gt;
--  &lt;br /&gt;
--  This function supports [[mw:Extension:Scribunto/Lua reference manual#named_arguments|named&lt;br /&gt;
--  arguments]]. The named argument syntax is more versatile despite its&lt;br /&gt;
--  verbosity; it can be used to select message language &amp;amp; source(s).&lt;br /&gt;
--  @function		   Data:msg&lt;br /&gt;
--  @usage&lt;br /&gt;
--  &lt;br /&gt;
--	  ds:msg{&lt;br /&gt;
--		  key = &#039;message-name&#039;,&lt;br /&gt;
--		  lang = &#039;&#039;,&lt;br /&gt;
--		  args = {...},&lt;br /&gt;
--		  sources = {}&lt;br /&gt;
--	  }&lt;br /&gt;
--  &lt;br /&gt;
--  @usage&lt;br /&gt;
--  &lt;br /&gt;
--	  ds:msg(&#039;message-name&#039;, ...)&lt;br /&gt;
--  &lt;br /&gt;
--  @param			  {string|table} opts Message configuration or key.&lt;br /&gt;
--  @param[opt]		 {string} opts.key Message key to return from the&lt;br /&gt;
--					  datastore.&lt;br /&gt;
--  @param[opt]		 {table} opts.args Arguments to substitute into the&lt;br /&gt;
--					  message (`$n`).&lt;br /&gt;
--  @param[opt]		 {table} opts.sources Source names to limit to (see&lt;br /&gt;
--					  `Data:fromSources`).&lt;br /&gt;
--  @param[opt]		 {table} opts.lang Temporary language to use (see&lt;br /&gt;
--					  `Data:inLang`).&lt;br /&gt;
--  @param[opt]		 {string} ... Arguments to substitute into the message&lt;br /&gt;
--					  (`$n`).&lt;br /&gt;
--  @error[115]		 {string} &#039;missing arguments in Data:msg&#039;&lt;br /&gt;
--  @return			 {string} Localised datastore message or `&#039;&amp;lt;key&amp;gt;&#039;`.&lt;br /&gt;
function Data:msg(opts, ...)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- Argument normalization.&lt;br /&gt;
	if not self or not opts then&lt;br /&gt;
		error(&#039;missing arguments in Data:msg&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local key = type(opts) == &#039;table&#039; and opts.key or opts&lt;br /&gt;
	local args = opts.args or {...}&lt;br /&gt;
	-- Configuration parameters.&lt;br /&gt;
	if opts.sources then&lt;br /&gt;
		self:fromSources(unpack(opts.sources))&lt;br /&gt;
	end&lt;br /&gt;
	if opts.lang then&lt;br /&gt;
		self:inLang(opts.lang)&lt;br /&gt;
	end&lt;br /&gt;
	-- Source handling.&lt;br /&gt;
	local source_n = self.tempSources or self._sources&lt;br /&gt;
	local source_i = {}&lt;br /&gt;
	for n, i in pairs(source_n) do&lt;br /&gt;
		source_i[i] = n&lt;br /&gt;
	end&lt;br /&gt;
	self.tempSources = nil&lt;br /&gt;
	-- Language handling.&lt;br /&gt;
	local lang = self.tempLang or self.defaultLang&lt;br /&gt;
	self.tempLang = nil&lt;br /&gt;
	-- Message fetching.&lt;br /&gt;
	local msg&lt;br /&gt;
	for i, messages in ipairs(self._messages) do&lt;br /&gt;
		-- Message data.&lt;br /&gt;
		local msg = (messages[lang] or {})[key]&lt;br /&gt;
		-- Fallback support (experimental).&lt;br /&gt;
		for _, l in ipairs((fallbacks[lang] or {})) do&lt;br /&gt;
			if msg == nil then&lt;br /&gt;
				msg = (messages[l] or {})[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- Internal fallback to &#039;en&#039;.&lt;br /&gt;
		msg = msg ~= nil and msg or messages.en[key]&lt;br /&gt;
		-- Handling argument substitution from Lua.&lt;br /&gt;
		if msg and source_i[i] and #args &amp;gt; 0 then&lt;br /&gt;
			msg = _i18n.handleArgs(msg, args)&lt;br /&gt;
		end&lt;br /&gt;
		if msg and source_i[i] and lang ~= &#039;qqx&#039; then&lt;br /&gt;
			return frame and _i18n.isWikitext(msg)&lt;br /&gt;
				and frame:preprocess(mw.text.trim(msg))&lt;br /&gt;
				or  mw.text.trim(msg)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&amp;amp;#x29FC;&#039; .. mw.text.nowiki(key) .. &#039;&amp;amp;#x29FD;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Datastore template parameter getter utility.&lt;br /&gt;
--  This method, given a table of arguments, tries to find a parameter&#039;s&lt;br /&gt;
--  localized name in the datastore and returns its value, or nil if&lt;br /&gt;
--  not present.&lt;br /&gt;
--&lt;br /&gt;
--  This method always uses the wiki&#039;s content language.&lt;br /&gt;
--  @function		   Data:parameter&lt;br /&gt;
--  @param			  {string} parameter Parameter&#039;s key in the datastore&lt;br /&gt;
--  @param			  {table} args Arguments to find the parameter in&lt;br /&gt;
--  @error[176]		 {string} &#039;missing arguments in Data:parameter&#039;&lt;br /&gt;
--  @return			 {string|nil} Parameter&#039;s value or nil if not present&lt;br /&gt;
function Data:parameter(key, args)&lt;br /&gt;
	-- Argument normalization.&lt;br /&gt;
	if not self or not key or not args then&lt;br /&gt;
		error(&#039;missing arguments in Data:parameter&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local contentLang = mw.language.getContentLanguage():getCode()&lt;br /&gt;
	-- Message fetching.&lt;br /&gt;
	for i, messages in ipairs(self._messages) do&lt;br /&gt;
		local msg = (messages[contentLang] or {})[key]&lt;br /&gt;
		if msg ~= nil and args[msg] ~= nil then&lt;br /&gt;
			return args[msg]&lt;br /&gt;
		end&lt;br /&gt;
		for _, l in ipairs((fallbacks[contentLang] or {})) do&lt;br /&gt;
			if msg == nil or args[msg] == nil then&lt;br /&gt;
				-- Check next fallback.&lt;br /&gt;
				msg = (messages[l] or {})[key]&lt;br /&gt;
			else&lt;br /&gt;
				-- A localized message was found.&lt;br /&gt;
				return args[msg]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- Fallback to English.&lt;br /&gt;
		msg = messages.en[key]&lt;br /&gt;
		if msg ~= nil and args[msg] ~= nil then&lt;br /&gt;
			return args[msg]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Datastore temporary source setter to a specificed subset of datastores.&lt;br /&gt;
--  By default, messages are fetched from the datastore in the same&lt;br /&gt;
--  order of priority as `i18n.loadMessages`.&lt;br /&gt;
--  @function		   Data:fromSource&lt;br /&gt;
--  @param			  {string} ... Source name(s) to use.&lt;br /&gt;
--  @return			 {Data} Datastore instance.&lt;br /&gt;
function Data:fromSource(...)&lt;br /&gt;
	local c = select(&#039;#&#039;, ...)&lt;br /&gt;
	if c ~= 0 then&lt;br /&gt;
		self.tempSources = {}&lt;br /&gt;
		for i = 1, c do&lt;br /&gt;
			local n = select(i, ...)&lt;br /&gt;
			if type(n) == &#039;string&#039; and type(self._sources[n]) == &#039;number&#039; then&lt;br /&gt;
				self.tempSources[n] = self._sources[n]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Datastore default language getter.&lt;br /&gt;
--  @function		   Data:getLang&lt;br /&gt;
--  @return			 {string} Default language to serve datastore messages in.&lt;br /&gt;
function Data:getLang()&lt;br /&gt;
	return self.defaultLang&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Datastore language setter to `wgUserLanguage`.&lt;br /&gt;
--  @function		   Data:useUserLang&lt;br /&gt;
--  @return			 {Data} Datastore instance.&lt;br /&gt;
--  @note			   Scribunto only registers `wgUserLanguage` when an&lt;br /&gt;
--					  invocation is at the top of the call stack.&lt;br /&gt;
function Data:useUserLang()&lt;br /&gt;
	self.defaultLang = i18n.getLang() or self.defaultLang&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Datastore language setter to `wgContentLanguage`.&lt;br /&gt;
--  @function		   Data:useContentLang&lt;br /&gt;
--  @return			 {Data} Datastore instance.&lt;br /&gt;
function Data:useContentLang()&lt;br /&gt;
	self.defaultLang = mw.language.getContentLanguage():getCode()&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Datastore language setter to specificed language.&lt;br /&gt;
--  @function		   Data:useLang&lt;br /&gt;
--  @param			  {string} code Language code to use.&lt;br /&gt;
--  @return			 {Data} Datastore instance.&lt;br /&gt;
function Data:useLang(code)&lt;br /&gt;
	self.defaultLang = _i18n.isValidCode(code)&lt;br /&gt;
		and code&lt;br /&gt;
		or  self.defaultLang&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Temporary datastore language setter to `wgUserLanguage`.&lt;br /&gt;
--  The datastore language reverts to the default language in the next&lt;br /&gt;
--  @{Data:msg} call.&lt;br /&gt;
--  @function		   Data:inUserLang&lt;br /&gt;
--  @return			 {Data} Datastore instance.&lt;br /&gt;
function Data:inUserLang()&lt;br /&gt;
	self.tempLang = i18n.getLang() or self.tempLang&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Temporary datastore language setter to `wgContentLanguage`.&lt;br /&gt;
--  Only affects the next @{Data:msg} call.&lt;br /&gt;
--  @function		   Data:inContentLang&lt;br /&gt;
--  @return			 {Data} Datastore instance.&lt;br /&gt;
function Data:inContentLang()&lt;br /&gt;
	self.tempLang = mw.language.getContentLanguage():getCode()&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Temporary datastore language setter to a specificed language.&lt;br /&gt;
--  Only affects the next @{Data:msg} call.&lt;br /&gt;
--  @function		   Data:inLang&lt;br /&gt;
--  @param			  {string} code Language code to use.&lt;br /&gt;
--  @return			 {Data} Datastore instance.&lt;br /&gt;
function Data:inLang(code)&lt;br /&gt;
	self.tempLang = _i18n.isValidCode(code)&lt;br /&gt;
		and code&lt;br /&gt;
		or  self.tempLang&lt;br /&gt;
	return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--  Package functions.&lt;br /&gt;
&lt;br /&gt;
--- Localized message getter by key.&lt;br /&gt;
--  Can be used to fetch messages in a specific language code through `uselang`&lt;br /&gt;
--  parameter. Extra numbered parameters can be supplied for substitution into&lt;br /&gt;
--  the datastore message.&lt;br /&gt;
--  @function		   i18n.getMsg&lt;br /&gt;
--  @param			  {table} frame Frame table from invocation.&lt;br /&gt;
--  @param			  {table} frame.args Metatable containing arguments.&lt;br /&gt;
--  @param			  {string} frame.args[1] ROOTPAGENAME of i18n submodule.&lt;br /&gt;
--  @param			  {string} frame.args[2] Key of i18n message.&lt;br /&gt;
--  @param[opt]		 {string} frame.args.lang Default language of message.&lt;br /&gt;
--  @error[271]		 {string} &#039;missing arguments in i18n.getMsg&#039;&lt;br /&gt;
--  @return			 {string} I18n message in localised language.&lt;br /&gt;
function i18n.getMsg(frame)&lt;br /&gt;
	if&lt;br /&gt;
		not frame or&lt;br /&gt;
		not frame.args or&lt;br /&gt;
		not frame.args[1] or&lt;br /&gt;
		not frame.args[2]&lt;br /&gt;
	then&lt;br /&gt;
		error(&#039;missing arguments in i18n.getMsg&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local source = frame.args[1]&lt;br /&gt;
	local key = frame.args[2]&lt;br /&gt;
	-- Pass through extra arguments.&lt;br /&gt;
	local repl = {}&lt;br /&gt;
	for i, a in ipairs(frame.args) do&lt;br /&gt;
		if i &amp;gt;= 3 then&lt;br /&gt;
			repl[i-2] = a&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Load message data.&lt;br /&gt;
	local ds = i18n.loadMessages(source)&lt;br /&gt;
	-- Pass through language argument.&lt;br /&gt;
	ds:inLang(frame.args.uselang)&lt;br /&gt;
	-- Return message.&lt;br /&gt;
	return ds:msg { key = key, args = repl }&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
--- I18n message datastore loader.&lt;br /&gt;
--  @function		   i18n.loadMessages&lt;br /&gt;
--  @param			  {string} ... ROOTPAGENAME/path for target i18n&lt;br /&gt;
--					  submodules.&lt;br /&gt;
--  @error[322]		 {string} &#039;no source supplied to i18n.loadMessages&#039;&lt;br /&gt;
--  @return			 {table} I18n datastore instance.&lt;br /&gt;
--  @usage			  require(&#039;Module:I18n&#039;).loadMessages(&#039;1&#039;, &#039;2&#039;)&lt;br /&gt;
function i18n.loadMessages(...)&lt;br /&gt;
	local ds&lt;br /&gt;
	local i = 0&lt;br /&gt;
	local s = {}&lt;br /&gt;
	for j = 1, select(&#039;#&#039;, ...) do&lt;br /&gt;
		local source = select(j, ...)&lt;br /&gt;
		if type(source) == &#039;string&#039; and source ~= &#039;&#039; then&lt;br /&gt;
			i = i + 1&lt;br /&gt;
			s[source] = i&lt;br /&gt;
			if not ds then&lt;br /&gt;
				-- Instantiate datastore.&lt;br /&gt;
				ds = {}&lt;br /&gt;
				ds._messages = {}&lt;br /&gt;
				-- Set default language.&lt;br /&gt;
				setmetatable(ds, Data)&lt;br /&gt;
				ds:useUserLang()&lt;br /&gt;
			end&lt;br /&gt;
			source = string.gsub(source, &#039;^.&#039;, mw.ustring.upper)&lt;br /&gt;
			local success, messages = pcall(mw.loadData, mw.ustring.find(source, &#039;:&#039;)&lt;br /&gt;
				and source&lt;br /&gt;
				or  &#039;Module:&#039; .. source .. &#039;/i18n&#039;)&lt;br /&gt;
			if success then&lt;br /&gt;
				local msgCopy = {}&lt;br /&gt;
				local langSecond = nil&lt;br /&gt;
				for lang_id, msgtbl in pairs(messages) do&lt;br /&gt;
					if langSecond == nil then&lt;br /&gt;
						if lang_id == &amp;quot;qqq&amp;quot; or fallbacks[lang_id] ~= nil then&lt;br /&gt;
							langSecond = false&lt;br /&gt;
						else&lt;br /&gt;
							langSecond = true&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					for id_lang, msg in pairs(msgtbl) do&lt;br /&gt;
						if langSecond then&lt;br /&gt;
							msgCopy[id_lang] = msgCopy[id_lang] or {}&lt;br /&gt;
							msgCopy[id_lang][lang_id] = msg&lt;br /&gt;
						else&lt;br /&gt;
							msgCopy[lang_id] = msgCopy[lang_id] or {}&lt;br /&gt;
							msgCopy[lang_id][id_lang] = msg&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				ds._messages[i] = msgCopy&lt;br /&gt;
			end&lt;br /&gt;
			local tab = mw.ext.data.get(&#039;I18n/&#039; .. source .. &#039;.tab&#039;, &#039;_&#039;)&lt;br /&gt;
			local T = {}&lt;br /&gt;
			if not success and not tab then error(&amp;quot;i18n for &amp;quot; .. source .. &amp;quot; is missing&amp;quot;) end&lt;br /&gt;
			for _, row in pairs(tab.data) do -- convert the output into a dictionary table&lt;br /&gt;
				local id, t = unpack(row)&lt;br /&gt;
				for lang, msg in pairs(t) do&lt;br /&gt;
					if not T[lang] then T[lang] = {} end&lt;br /&gt;
					T[lang][id] = msg&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not success then&lt;br /&gt;
				ds._messages[i] = T&lt;br /&gt;
			else&lt;br /&gt;
				for lang, msgTbl in pairs(T) do&lt;br /&gt;
					ds._messages[i][lang] = ds._messages[i][lang] or msgTbl&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not ds then&lt;br /&gt;
		error(&#039;no source supplied to i18n.loadMessages&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		-- Attach source index map.&lt;br /&gt;
		ds._sources = s&lt;br /&gt;
		-- Return datastore instance.&lt;br /&gt;
		return ds&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Language code getter.&lt;br /&gt;
--  Can validate a template&#039;s language code through `uselang` parameter.&lt;br /&gt;
--  @function		   i18n.getLang&lt;br /&gt;
--  @return			 {string} Language code.&lt;br /&gt;
function i18n.getLang()&lt;br /&gt;
	local frame = mw.getCurrentFrame() or {}&lt;br /&gt;
	local parentFrame = frame.getParent and frame:getParent() or {}&lt;br /&gt;
&lt;br /&gt;
	local code = mw.language.getContentLanguage():getCode()&lt;br /&gt;
	local subPage = title.subpageText&lt;br /&gt;
&lt;br /&gt;
	-- Language argument test.&lt;br /&gt;
	local langOverride =&lt;br /&gt;
		(frame.args or {}).uselang or&lt;br /&gt;
		(parentFrame.args or {}).uselang&lt;br /&gt;
	if _i18n.isValidCode(langOverride) then&lt;br /&gt;
		code = langOverride&lt;br /&gt;
&lt;br /&gt;
	-- Subpage language test.&lt;br /&gt;
	elseif title.isSubpage and _i18n.isValidCode(subPage) then&lt;br /&gt;
		code = _i18n.isValidCode(subPage) and subPage or code&lt;br /&gt;
&lt;br /&gt;
	-- User language test.&lt;br /&gt;
	elseif parentFrame.preprocess or frame.preprocess then&lt;br /&gt;
		uselang = uselang&lt;br /&gt;
			or  parentFrame.preprocess&lt;br /&gt;
				and parentFrame:preprocess(&#039;{{int:lang}}&#039;)&lt;br /&gt;
				or  frame:preprocess(&#039;{{int:lang}}&#039;)&lt;br /&gt;
		local decodedLang = mw.text.decode(uselang) &lt;br /&gt;
		if decodedLang ~= &#039;&amp;lt;lang&amp;gt;&#039; and decodedLang ~= &#039;⧼lang⧽&#039; then&lt;br /&gt;
			code = decodedLang == &#039;(lang)&#039;&lt;br /&gt;
				and &#039;qqx&#039;&lt;br /&gt;
				or  uselang&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return code&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Credit to http://stackoverflow.com/a/1283608/2644759&lt;br /&gt;
-- cc-by-sa 3.0&lt;br /&gt;
local function tableMerge(t1, t2, overwrite)&lt;br /&gt;
	for k,v in pairs(t2) do&lt;br /&gt;
		if type(v) == &amp;quot;table&amp;quot; and type(t1[k]) == &amp;quot;table&amp;quot; then&lt;br /&gt;
			-- since type(t1[k]) == type(v) == &amp;quot;table&amp;quot;, so t1[k] and v is true&lt;br /&gt;
			tableMerge(t1[k], v, overwrite) -- t2[k] == v&lt;br /&gt;
		else&lt;br /&gt;
			if overwrite or t1[k] == nil then t1[k] = v end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return t1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Given an i18n table instantiates the values (deprecated)&lt;br /&gt;
--  @function i18n.loadI18n&lt;br /&gt;
--  @param {string} name name of module with i18n&lt;br /&gt;
--  @param {table} i18n_arg existing i18n&lt;br /&gt;
function i18n.loadI18n(name, i18n_arg)&lt;br /&gt;
	local exist, res = pcall(require, name)&lt;br /&gt;
	if exist and next(res) ~= nil then&lt;br /&gt;
		if i18n_arg then&lt;br /&gt;
			tableMerge(i18n_arg, res.i18n, true)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Loads an i18n for a specific frame (deprecated)&lt;br /&gt;
--  @function i18n.loadI18nFrame&lt;br /&gt;
--  @param {string} name name of module with i18n&lt;br /&gt;
--  @param {table} i18n_arg existing i18n&lt;br /&gt;
function i18n.loadI18nFrame(frame, i18n_arg)&lt;br /&gt;
	return i18n.loadI18n(frame:getTitle()..&amp;quot;/i18n&amp;quot;, i18n_arg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Wrapper for the module.&lt;br /&gt;
--  @function		   i18n.main&lt;br /&gt;
--  @param			  {table} frame Frame invocation object.&lt;br /&gt;
--  @return			 {string} Module output in template context.&lt;br /&gt;
--  @usage			  {{#invoke:i18n|main}}&lt;br /&gt;
i18n.main = entrypoint(i18n)&lt;br /&gt;
&lt;br /&gt;
return require(&amp;quot;Module:Deprecated&amp;quot;)(i18n, &lt;br /&gt;
	{&lt;br /&gt;
		[&amp;quot;loadI18n&amp;quot;] = {&lt;br /&gt;
			deprecated = true,&lt;br /&gt;
			replacement = &amp;quot;use &amp;lt;code&amp;gt;i18n.loadMessages&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		[&amp;quot;loadI18nFrame&amp;quot;] = {&lt;br /&gt;
			deprecated = true,&lt;br /&gt;
			replacement = &amp;quot;use &amp;lt;code&amp;gt;i18n.loadMessages&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Sister_project_logo/data&amp;diff=1061</id>
		<title>Modul:Sister project logo/data</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Sister_project_logo/data&amp;diff=1061"/>
		<updated>2026-09-09T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- map of verbose project names to canonical ones&lt;br /&gt;
local projectMap = {&lt;br /&gt;
	commons = &#039;c&#039;, commonscat = &#039;c&#039;, [&amp;quot;wikimedia commons&amp;quot;] = &#039;c&#039;, meta = &#039;m&#039;, metawiki = &#039;m&#039;, [&amp;quot;meta-wiki&amp;quot;] = &#039;m&#039;,&lt;br /&gt;
	wikibooks = &#039;b&#039;, wbk = &#039;b&#039;, wb = &#039;b&#039;, cookbook = &#039;b&#039;, wikijunior = &#039;b&#039;,&lt;br /&gt;
	wikidata = &#039;d&#039;, data = &#039;d&#039;, wikiquote = &#039;q&#039;, quote = &#039;q&#039;, wqt = &#039;q&#039;,&lt;br /&gt;
	wikipedia = &#039;iw&#039;, wp = &#039;iw&#039;, w = &#039;iw&#039;, iw1 = &#039;iw&#039;, iw2 = &#039;iw&#039;,&lt;br /&gt;
	wikisource = &#039;s&#039;, source = &#039;s&#039;, ws = &#039;s&#039;, wikisource2 = &#039;s&#039;, source2 = &#039;s&#039;, ws2 = &#039;s&#039;, s2 = &#039;s&#039;,&lt;br /&gt;
	wiktionary = &#039;wikt&#039;, wkt = &#039;wikt&#039;, wdy = &#039;wikt&#039;,&lt;br /&gt;
	wikinews = &#039;n&#039;, news = &#039;n&#039;, wnw = &#039;n&#039;, wikispecies = &#039;species&#039;, wikiversity=&#039;v&#039;, wvy=&#039;v&#039;,&lt;br /&gt;
	wikivoyage = &#039;voy&#039;, voyage = &#039;voy&#039;, mediawiki = &#039;mw&#039;, outreachwiki = &#039;outreach&#039;, wikifunctions = &#039;f&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- logos per project&lt;br /&gt;
local logo = {&lt;br /&gt;
    c = &amp;quot;Commons-logo.svg&amp;quot;,&lt;br /&gt;
    m = &#039;Wikimedia Community Logo.svg&#039;,&lt;br /&gt;
    b = &#039;Wikibooks-logo.svg&#039;,&lt;br /&gt;
    d = &#039;Wikidata-logo.svg&#039;,&lt;br /&gt;
    q = &#039;Wikiquote-logo.svg&#039;,&lt;br /&gt;
    iw = &#039;Wikipedia-logo-v2.svg&#039;,&lt;br /&gt;
    s = &#039;Wikisource-logo.svg&#039;,&lt;br /&gt;
    wikt = &#039;Wiktionary-logo-en-v2.svg&#039;,&lt;br /&gt;
    n = &#039;Wikinews-logo.svg&#039;,&lt;br /&gt;
    species = &#039;Wikispecies-logo.svg&#039;,&lt;br /&gt;
    v  = &#039;Wikiversity logo 2017.svg&#039;,&lt;br /&gt;
    voy  = &#039;Wikivoyage-Logo-v3-icon.svg&#039;,&lt;br /&gt;
    mw = &#039;MediaWiki-2020-icon.svg&#039;,&lt;br /&gt;
    outreach  = &#039;Wikimedia Outreach.png&#039;,&lt;br /&gt;
    incubator = &#039;Incubator-notext.svg&#039;,&lt;br /&gt;
    f = &#039;Wikifunctions-logo.svg&#039;,&lt;br /&gt;
	wm = &#039;Wikimedia-logo.svg&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- which logos are PD and don&#039;t need link/alt&lt;br /&gt;
local PDicon = {&lt;br /&gt;
    m=true,q=true,d=true,outreach=true,wm=true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- which logos are dark and light and should flip in dark mode&lt;br /&gt;
local darkOnLight = {wikt=true}&lt;br /&gt;
&lt;br /&gt;
-- descriptive alt&lt;br /&gt;
local logoAlt = {&lt;br /&gt;
	c = &#039;Wikimedia Commons logo&#039;,&lt;br /&gt;
    m = &#039;Meta-Wiki logo&#039;,&lt;br /&gt;
    b = &#039;Wikibooks logo&#039;,&lt;br /&gt;
    d = &#039;Wikidata logo&#039;,&lt;br /&gt;
    q = &#039;Wikiquote logo&#039;,&lt;br /&gt;
    iw = &#039;Wikipedia logo&#039;,&lt;br /&gt;
    s = &#039;Wikisource logo&#039;,&lt;br /&gt;
    wikt = &#039;Wiktionary logo&#039;,&lt;br /&gt;
    n = &#039;Wikinews logo&#039;,&lt;br /&gt;
    species = &#039;Wikispecies logo&#039;,&lt;br /&gt;
    v = &#039;Wikiversity logo&#039;,&lt;br /&gt;
    voy = &#039;Wikivoyage logo&#039;,&lt;br /&gt;
    mw = &#039;MediaWiki logo&#039;,&lt;br /&gt;
    outreach = &#039;Wikimedia Outreach logo&#039;,&lt;br /&gt;
    incubator = &#039;Wikimedia Incubator logo&#039;,&lt;br /&gt;
    f = &#039;Wikifunctions logo&#039;,&lt;br /&gt;
    wm = &#039;Wikimedia logo&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- size for [[Template:Wikipedia&#039;s sister projects]], defaults to 35px&lt;br /&gt;
local largeSize = {&lt;br /&gt;
	c = &#039;31px&#039;,&lt;br /&gt;
    d = &#039;47px&#039;,&lt;br /&gt;
	n = &#039;51px&#039;,&lt;br /&gt;
	v = &#039;41px&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return {projectMap=projectMap, logo=logo, PDicon=PDicon, darkOnLight=darkOnLight, logoAlt=logoAlt, largeSize=largeSize}&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Sister_project_logo&amp;diff=1059</id>
		<title>Modul:Sister project logo</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Sister_project_logo&amp;diff=1059"/>
		<updated>2026-09-09T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Lazy-load logo file names and other metadata&lt;br /&gt;
local data = mw.loadData(&#039;Module:Sister project logo/data&#039;)&lt;br /&gt;
&lt;br /&gt;
-- Convert table of arguments into wiki image markup&lt;br /&gt;
local function imageMarkup(args)&lt;br /&gt;
	local x = {}&lt;br /&gt;
	-- positional arguments first&lt;br /&gt;
	for _, arg in ipairs(args) do&lt;br /&gt;
		table.insert(x,arg)&lt;br /&gt;
	end&lt;br /&gt;
	-- named arguments converted to foo=bar&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if not tonumber(k) then&lt;br /&gt;
			table.insert(x,k..&#039;=&#039;..v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;[[&#039;..table.concat(x,&#039;|&#039;)..&#039;]]&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local localArgs = {}&lt;br /&gt;
	-- map possibly verbose project argument into canonical project string&lt;br /&gt;
	local project = args.project and args.project:lower()&lt;br /&gt;
	project = data.projectMap[project] or project&lt;br /&gt;
	-- image=none means bail (for [[Template:Sister project]])&lt;br /&gt;
	if args.image == &#039;none&#039; then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	-- if image specified, return it instead of stored logo (for [[Template:Sister project]])&lt;br /&gt;
	elseif args.image then&lt;br /&gt;
		return args.image&lt;br /&gt;
	else&lt;br /&gt;
		local logoImage = data.logo[project]&lt;br /&gt;
		-- if project is unknown, use Wikimedia logo (for [[Template:Sister project]])&lt;br /&gt;
		if not logoImage then&lt;br /&gt;
			project = &#039;wm&#039;&lt;br /&gt;
		    logoImage = data.logo[&#039;wm&#039;]&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(localArgs,&#039;File:&#039;..logoImage)&lt;br /&gt;
	end&lt;br /&gt;
	-- size=large means use sizes from [[Template:Wikipedia&#039;s sister projects]]&lt;br /&gt;
	-- size defaults to 40x40px (for [[Template:Sister project]])&lt;br /&gt;
	table.insert(localArgs,args.size == &#039;large&#039; and (data.largeSize[project] or &#039;35px&#039;) or args.size or &#039;40x40px&#039;)&lt;br /&gt;
	-- if logo is PD, blank link and alt (to suppress from screen readers)&lt;br /&gt;
    if data.PDicon[project] then&lt;br /&gt;
		localArgs.link = &#039;&#039;&lt;br /&gt;
		localArgs.alt = &#039;&#039;&lt;br /&gt;
	else&lt;br /&gt;
		localArgs.alt = data.logoAlt[project]&lt;br /&gt;
	end&lt;br /&gt;
	-- For dark mode, flip dark-on-light icons to be light-on-dark&lt;br /&gt;
	-- Also: use editor-specified classes (for [[Template:Sister-inline]])&lt;br /&gt;
	localArgs.class = &amp;quot;noviewer&amp;quot;..(data.darkOnLight[project] and &amp;quot; skin-invert-image&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
                                ..(args.class and &amp;quot; &amp;quot;..args.class or &amp;quot;&amp;quot;)&lt;br /&gt;
	return imageMarkup(localArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame)&lt;br /&gt;
	return p._main(args) or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Infobox_tracking_cats&amp;diff=1057</id>
		<title>Mal:Infobox tracking cats</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Infobox_tracking_cats&amp;diff=1057"/>
		<updated>2026-09-09T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Template:Infobox tracking categories]]&lt;br /&gt;
&lt;br /&gt;
{{R for convenience}}&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Check_for_conflicting_parameters&amp;diff=1055</id>
		<title>Modul:Check for conflicting parameters</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Check_for_conflicting_parameters&amp;diff=1055"/>
		<updated>2026-09-09T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	return s:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isnotempty(s)&lt;br /&gt;
	return s and s:match(&#039;%S&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.check(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args&lt;br /&gt;
	local checknested = isnotempty(args[&#039;nested&#039;])&lt;br /&gt;
	local delimiter = isnotempty(args[&#039;delimiter&#039;]) and args[&#039;delimiter&#039;] or &#039;;&#039;&lt;br /&gt;
	local argpairs = {}&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			local plist = mw.text.split(v, delimiter)&lt;br /&gt;
			local pfound = {}&lt;br /&gt;
			local count = 0&lt;br /&gt;
			for ii, vv in ipairs(plist) do&lt;br /&gt;
				vv = trim(vv)&lt;br /&gt;
				if checknested and pargs[vv] or isnotempty(pargs[vv]) then&lt;br /&gt;
					count = count + 1&lt;br /&gt;
					table.insert(pfound, vv)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if count &amp;gt; 1 then&lt;br /&gt;
				table.insert(argpairs, pfound)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local warnmsg = {}&lt;br /&gt;
	local res = &#039;&#039;&lt;br /&gt;
	local cat = &#039;&#039;&lt;br /&gt;
	if args[&#039;cat&#039;] and mw.ustring.match(args[&#039;cat&#039;],&#039;^[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]:&#039;) then&lt;br /&gt;
		cat = args[&#039;cat&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	local template = args[&#039;template&#039;] and &#039; in &#039; .. args[&#039;template&#039;]  or &#039;&#039;&lt;br /&gt;
	if #argpairs &amp;gt; 0 then&lt;br /&gt;
		for i, v in ipairs( argpairs ) do&lt;br /&gt;
			table.insert(&lt;br /&gt;
				warnmsg,&lt;br /&gt;
				mw.ustring.format(&lt;br /&gt;
					&#039;Using more than one of the following parameters%s: &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;.&#039;,&lt;br /&gt;
					template,&lt;br /&gt;
					table.concat(v, &#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;)&lt;br /&gt;
				)&lt;br /&gt;
			)&lt;br /&gt;
			if cat ~= &#039;&#039; then&lt;br /&gt;
				res = res .. &#039;[[&#039; .. cat .. &#039;|&#039; .. (v[1] == &#039;&#039; and &#039; &#039; or &#039;&#039;) .. v[1] .. &#039;]]&#039;&lt;br /&gt;
			end	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #warnmsg &amp;gt; 0 then&lt;br /&gt;
		res = require(&#039;Module:If preview&#039;)._warning({&lt;br /&gt;
			table.concat(warnmsg, &#039;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
		}) .. res&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Infobox_tracking_categories&amp;diff=1053</id>
		<title>Mal:Infobox tracking categories</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Infobox_tracking_categories&amp;diff=1053"/>
		<updated>2026-09-09T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifexist: Category:Pages using {{lcfirst:{{If empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with conflicting parameters|&lt;br /&gt;
* {{Category link with count|Category:Pages using {{lcfirst:{{If empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with conflicting parameters}}}}{{#ifexist: Category:Pages using {{lcfirst:{{If empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with deprecated parameters|&lt;br /&gt;
* {{Category link with count|Category:Pages using {{lcfirst:{{If empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with deprecated parameters}}}}{{#ifexist: Category:Pages using {{lcfirst:{{If empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with unknown parameters|&lt;br /&gt;
* {{Category link with count|Category:Pages using {{lcfirst:{{If empty|{{{1|}}}|{{BASEPAGENAME}}}}}} with unknown parameters}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Modul:Date_time&amp;diff=1049</id>
		<title>Modul:Date time</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Modul:Date_time&amp;diff=1049"/>
		<updated>2026-09-09T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
Module:Date time – Date formatting and validation module.&lt;br /&gt;
&lt;br /&gt;
This module provides functions for validating and formatting dates in templates such as&lt;br /&gt;
{{Start date}}, {{End date}}, {{Start date and age}}, and {{End date and age}}. &lt;br /&gt;
It handles:&lt;br /&gt;
- Validation of date components (year, month, day)&lt;br /&gt;
- Validation of time components (hour, minute, second)&lt;br /&gt;
- Timezone formatting and validation&lt;br /&gt;
- Generation of appropriate hCalendar microformat markup&lt;br /&gt;
- &amp;quot;time-ago&amp;quot; calculations&lt;br /&gt;
&lt;br /&gt;
Design notes:&lt;br /&gt;
- Functions are organized into helper, validation, and formatting sections&lt;br /&gt;
- Error handling uses a consistent pattern with centralized error messages&lt;br /&gt;
- Timezone validation supports standard ISO 8601 formats&lt;br /&gt;
- Leap year calculation is cached for performance&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
require(&amp;quot;strict&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
---------------&lt;br /&gt;
-- Constants --&lt;br /&gt;
---------------&lt;br /&gt;
&lt;br /&gt;
local HTML_SPACE = &amp;quot;&amp;amp;#32;&amp;quot;&lt;br /&gt;
local HTML_NBSP = &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Error message constants&lt;br /&gt;
local ERROR_MESSAGES = {&lt;br /&gt;
	integers = &amp;quot;All values must be integers&amp;quot;,&lt;br /&gt;
	has_leading_zeros = &amp;quot;Values cannot have unnecessary leading zeros&amp;quot;,&lt;br /&gt;
	missing_year = &amp;quot;Year value is required&amp;quot;,&lt;br /&gt;
	invalid_month = &amp;quot;Value is not a valid month&amp;quot;,&lt;br /&gt;
	missing_month = &amp;quot;Month value is required when a day is provided&amp;quot;,&lt;br /&gt;
	invalid_day = &amp;quot;Value is not a valid day (Month %d has %d days)&amp;quot;,&lt;br /&gt;
	invalid_hour = &amp;quot;Value is not a valid hour&amp;quot;,&lt;br /&gt;
	invalid_minute = &amp;quot;Value is not a valid minute&amp;quot;,&lt;br /&gt;
	invalid_second = &amp;quot;Value is not a valid second&amp;quot;,&lt;br /&gt;
	timezone_incomplete_date = &amp;quot;A timezone cannot be set without a day and hour&amp;quot;,&lt;br /&gt;
	invalid_timezone = &amp;quot;Value is not a valid timezone&amp;quot;,&lt;br /&gt;
	yes_value_parameter = &#039;%s must be either &amp;quot;yes&amp;quot; or &amp;quot;y&amp;quot;&#039;,&lt;br /&gt;
	duplicate_parameters = &#039;Duplicate parameters used: %s and %s&#039;,&lt;br /&gt;
	template = &amp;quot;Template not supported&amp;quot;,&lt;br /&gt;
	time_without_hour = &amp;quot;Minutes and seconds require an hour value&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Template class mapping&lt;br /&gt;
-- &amp;quot;itvstart&amp;quot; and &amp;quot;itvend&amp;quot; are unique classes used by the TV infoboxes,&lt;br /&gt;
-- which only allow the usage of {{Start date}} and {{End date}}.&lt;br /&gt;
local TEMPLATE_CLASSES = {&lt;br /&gt;
	[&amp;quot;start date&amp;quot;] = &amp;quot;bday dtstart published updated itvstart&amp;quot;,&lt;br /&gt;
	[&amp;quot;start date and age&amp;quot;] = &amp;quot;bday dtstart published updated&amp;quot;,&lt;br /&gt;
	[&amp;quot;end date&amp;quot;] = &amp;quot;dtend itvend&amp;quot;,&lt;br /&gt;
	[&amp;quot;end date and age&amp;quot;] = &amp;quot;dtend&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Templates that require &amp;quot;time ago&amp;quot; calculations&lt;br /&gt;
local TIME_AGO = {&lt;br /&gt;
	[&amp;quot;start date and age&amp;quot;] = true,&lt;br /&gt;
	[&amp;quot;end date and age&amp;quot;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- English month names&lt;br /&gt;
local MONTHS = {&lt;br /&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;,&lt;br /&gt;
	&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;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Error category&lt;br /&gt;
local ERROR_CATEGORY = &amp;quot;[[Category:Pages using Module:Date time with invalid values]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Namespaces where error categories should be applied&lt;br /&gt;
local CATEGORY_NAMESPACES = {&lt;br /&gt;
	[0] = true,		-- Article&lt;br /&gt;
	[1] = true,		-- Article talk&lt;br /&gt;
	[4] = true,		-- Wikipedia&lt;br /&gt;
	[10] = true,	-- Template&lt;br /&gt;
	[100] = true,	-- Portal&lt;br /&gt;
	[118] = true	-- Draft&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Cached leap year calculations for performance&lt;br /&gt;
local leap_year_cache = {}&lt;br /&gt;
&lt;br /&gt;
-- Local variables for error handling&lt;br /&gt;
local help_link&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
-- Helper Functions --&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--- Pads a number with leading zeros to ensure a minimum of two digits.&lt;br /&gt;
-- @param value (number|string) The value to pad with leading zeros&lt;br /&gt;
-- @return string The value padded to at least two digits, or nil if input is nil&lt;br /&gt;
local function pad_left_zeros(value)&lt;br /&gt;
	if value == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local str = tostring(value)&lt;br /&gt;
	return string.rep(&amp;quot;0&amp;quot;, math.max(0, 2 - #str)) .. str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Replaces [[U+2212]] (Unicode minus) with [[U+002D]] (ASCII hyphen) or vice versa.&lt;br /&gt;
-- @param value (string) The string value to process&lt;br /&gt;
-- @param to_unicode (boolean) If true, converts ASCII hyphen to Unicode minus;&lt;br /&gt;
--                            If false, converts Unicode minus to ASCII hyphen&lt;br /&gt;
-- @return string The processed string with appropriate minus characters, or nil if input is nil&lt;br /&gt;
local function replace_minus_character(value, to_unicode)&lt;br /&gt;
	if not value then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if to_unicode then&lt;br /&gt;
		return value:gsub(&amp;quot;-&amp;quot;, &amp;quot;−&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return value:gsub(&amp;quot;−&amp;quot;, &amp;quot;-&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Normalizes timezone format by ensuring proper padding of hours.&lt;br /&gt;
-- @param timezone (string) The timezone string to normalize&lt;br /&gt;
-- @return string The normalized timezone string with properly padded hours, or nil if input is nil&lt;br /&gt;
local function fix_timezone(timezone)&lt;br /&gt;
	if not timezone then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Replace U+2212 (Unicode minus) with U+002D (ASCII hyphen)&lt;br /&gt;
	timezone = replace_minus_character(timezone, false)&lt;br /&gt;
&lt;br /&gt;
	-- Match the timezone pattern for ±H:MM format&lt;br /&gt;
	local sign, hour, minutes = timezone:match(&amp;quot;^([+-])(%d+):(%d+)$&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if sign and hour and minutes then&lt;br /&gt;
		-- Pad the hour with a leading zero if necessary&lt;br /&gt;
		hour = pad_left_zeros(hour)&lt;br /&gt;
		return sign .. hour .. &amp;quot;:&amp;quot; .. minutes&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- If no match, return the original timezone (this handles invalid or already padded timezones)&lt;br /&gt;
	return timezone&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks if a timezone string is valid according to standard timezone formats.&lt;br /&gt;
-- Valid timezones range from UTC-12:00 to UTC+14:00.&lt;br /&gt;
-- @param timezone (string) The timezone string to validate&lt;br /&gt;
-- @return boolean true if the timezone is valid, false otherwise&lt;br /&gt;
local function is_timezone_valid(timezone)&lt;br /&gt;
	-- Consolidated timezone pattern for better performance&lt;br /&gt;
	local valid_patterns = {&lt;br /&gt;
		-- Z (UTC)&lt;br /&gt;
		&amp;quot;^Z$&amp;quot;,&lt;br /&gt;
		-- Full timezone with minutes ±HH:MM&lt;br /&gt;
		&amp;quot;^[+]0[1-9]:[0-5][0-9]$&amp;quot;,&lt;br /&gt;
		&amp;quot;^[+-]0[1-9]:[0-5][0-9]$&amp;quot;, &lt;br /&gt;
		&amp;quot;^[+-]1[0-2]:[0-5][0-9]$&amp;quot;,&lt;br /&gt;
		&amp;quot;^[+]1[34]:[0-5][0-9]$&amp;quot;,&lt;br /&gt;
		-- Whole hour timezones ±HH&lt;br /&gt;
		&amp;quot;^[+-]0[1-9]$&amp;quot;,&lt;br /&gt;
		&amp;quot;^[+-]1[0-2]$&amp;quot;,&lt;br /&gt;
		&amp;quot;^[+]1[34]$&amp;quot;,&lt;br /&gt;
		-- Special cases&lt;br /&gt;
		&amp;quot;^[+]00:00$&amp;quot;,&lt;br /&gt;
		&amp;quot;^[+]00$&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	-- Additional checks for invalid -00 and -00:00 cases&lt;br /&gt;
	if timezone == &amp;quot;-00&amp;quot; or timezone == &amp;quot;-00:00&amp;quot; then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, pattern in ipairs(valid_patterns) do&lt;br /&gt;
		if string.match(timezone, pattern) 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;
--- Checks if a given year is a leap year.&lt;br /&gt;
-- Uses a cache for better performance.&lt;br /&gt;
-- @param year (number) The year to check for leap year status&lt;br /&gt;
-- @return boolean true if the year is a leap year, false otherwise&lt;br /&gt;
local function is_leap_year(year)&lt;br /&gt;
	if leap_year_cache[year] == nil then&lt;br /&gt;
		leap_year_cache[year] = (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0)&lt;br /&gt;
	end&lt;br /&gt;
	return leap_year_cache[year]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Returns the number of days in a given month of a specified year.&lt;br /&gt;
-- Handles leap years for February.&lt;br /&gt;
-- @param year (number) The year to check for leap year conditions&lt;br /&gt;
-- @param month (number) The month (1-12) for which to return the number of days&lt;br /&gt;
-- @return number The number of days in the specified month, accounting for leap years&lt;br /&gt;
local function get_days_in_month(year, month)&lt;br /&gt;
	local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }&lt;br /&gt;
&lt;br /&gt;
	if month == 2 and is_leap_year(year) then&lt;br /&gt;
		return 29&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return days_in_month[month] or 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks if a given value has invalid leading zeros.&lt;br /&gt;
-- @param value (string) The value to check for leading zeros&lt;br /&gt;
-- @param field_type (string) Field type (&amp;quot;day&amp;quot;, &amp;quot;month&amp;quot;, &amp;quot;hour&amp;quot;, &amp;quot;minute&amp;quot;, &amp;quot;second&amp;quot;)&lt;br /&gt;
-- @return boolean true if the value has invalid leading zeros, false otherwise&lt;br /&gt;
local function has_leading_zeros(value, field_type)&lt;br /&gt;
	value = tostring(value)&lt;br /&gt;
&lt;br /&gt;
	-- Common checks for day and month&lt;br /&gt;
	if field_type == &amp;quot;day&amp;quot; or field_type == &amp;quot;month&amp;quot; then&lt;br /&gt;
		-- Reject &amp;quot;00&amp;quot; and values with leading zero followed by more than one digit&lt;br /&gt;
		return value == &amp;quot;00&amp;quot; or &lt;br /&gt;
		       string.match(value, &amp;quot;^0[0-9][0-9]$&amp;quot;) ~= nil or &lt;br /&gt;
		       string.match(value, &amp;quot;^0[1-9][0-9]&amp;quot;) ~= nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Checks for hour, minute, second&lt;br /&gt;
	if field_type == &amp;quot;hour&amp;quot; or field_type == &amp;quot;minute&amp;quot; or field_type == &amp;quot;second&amp;quot; then&lt;br /&gt;
		-- Allow &amp;quot;00&amp;quot; and &amp;quot;01&amp;quot; to &amp;quot;09&amp;quot;&lt;br /&gt;
		if value == &amp;quot;00&amp;quot; or string.match(value, &amp;quot;^0[1-9]$&amp;quot;) then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Reject values starting with &amp;quot;0&amp;quot; followed by more than one digit&lt;br /&gt;
		return string.match(value, &amp;quot;^0[0-9][0-9]+$&amp;quot;) ~= nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks if a given value is an integer.&lt;br /&gt;
-- @param value (string|number) The value to check&lt;br /&gt;
-- @return boolean true if the value is a valid integer, false otherwise&lt;br /&gt;
local function is_integer(value)&lt;br /&gt;
	if not value then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	-- Check if the value is a number first&lt;br /&gt;
	local num_value = tonumber(value)&lt;br /&gt;
	if not num_value then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	-- Check if it&#039;s an integer by comparing floor with the original&lt;br /&gt;
	if math.floor(num_value) ~= num_value then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	-- For string inputs, check for decimal point to reject values like &amp;quot;7.&amp;quot;&lt;br /&gt;
	if type(value) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		-- If the string contains a decimal point, it&#039;s not an integer&lt;br /&gt;
		if string.find(value, &amp;quot;%.&amp;quot;) 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;
--- Returns the name of a month based on its numerical representation.&lt;br /&gt;
-- @param month_number (number) The month number (1-12)&lt;br /&gt;
-- @return string|nil The name of the month, or nil if invalid&lt;br /&gt;
local function get_month_name(month_number)&lt;br /&gt;
	month_number = tonumber(month_number)&lt;br /&gt;
	return MONTHS[month_number]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generates an error message wrapped in HTML.&lt;br /&gt;
-- @param message (string) The error message to format&lt;br /&gt;
-- @param add_tracking_category (boolean, optional) If false, omits the tracking category&lt;br /&gt;
-- @return string An HTML-formatted error message with help link and error category&lt;br /&gt;
local function generate_error(message, add_tracking_category)&lt;br /&gt;
	local category = ERROR_CATEGORY&lt;br /&gt;
&lt;br /&gt;
	if add_tracking_category == false then&lt;br /&gt;
		category = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get current page title object&lt;br /&gt;
	local article_title = mw.title.getCurrentTitle()&lt;br /&gt;
	&lt;br /&gt;
	-- Special case for testcases pages&lt;br /&gt;
	local is_test_page = article_title.subpageText == &amp;quot;testcases&amp;quot;&lt;br /&gt;
	local allow_this_test_page = article_title.fullText == &amp;quot;Module talk:Date time/testcases&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	-- Remove category if the page is not in a tracked namespace or is any other testcases other than this module&lt;br /&gt;
	if (not CATEGORY_NAMESPACES[article_title.namespace] and not allow_this_test_page)&lt;br /&gt;
	or (is_test_page and not allow_this_test_page) then&lt;br /&gt;
		category = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Error: &#039; .. message .. &#039;&amp;lt;/strong&amp;gt; &#039; .. help_link .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------&lt;br /&gt;
-- Formatting Functions --&lt;br /&gt;
--------------------------&lt;br /&gt;
&lt;br /&gt;
--- Formats the time portion of a datetime string.&lt;br /&gt;
-- @param hour (string) The hour component&lt;br /&gt;
-- @param minute (string) The minute component&lt;br /&gt;
-- @param second (string) The second component&lt;br /&gt;
-- @return string The formatted time string, or empty string if hour is nil&lt;br /&gt;
local function format_time_string(hour, minute, second)&lt;br /&gt;
	if not hour then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local time_string = string.format(&amp;quot;%s:%s&amp;quot;, hour, minute)&lt;br /&gt;
&lt;br /&gt;
	if second and second ~= &amp;quot;00&amp;quot; and minute ~= &amp;quot;00&amp;quot; then&lt;br /&gt;
		time_string = string.format(&amp;quot;%s:%s&amp;quot;, time_string, second)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return time_string .. &amp;quot;,&amp;quot; .. HTML_SPACE&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Formats the date portion of a datetime string based on the specified format.&lt;br /&gt;
-- @param year (string) The year component&lt;br /&gt;
-- @param month (string) The month component&lt;br /&gt;
-- @param day (string) The day component&lt;br /&gt;
-- @param date_format_dmy (string) The date format (&amp;quot;yes&amp;quot; or &amp;quot;y&amp;quot; for day-month-year, otherwise month-day-year)&lt;br /&gt;
-- @return string The formatted date string, or empty string if year is nil&lt;br /&gt;
local function format_date_string(year, month, day, date_format_dmy)&lt;br /&gt;
	if not year then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local date_string&lt;br /&gt;
	if month then&lt;br /&gt;
		local month_name = get_month_name(month)&lt;br /&gt;
		&lt;br /&gt;
		if day then&lt;br /&gt;
			day = tonumber(day)&lt;br /&gt;
			if date_format_dmy then&lt;br /&gt;
				date_string = day .. HTML_NBSP .. month_name&lt;br /&gt;
			else&lt;br /&gt;
				date_string = month_name .. HTML_NBSP .. day .. &amp;quot;,&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			date_string = date_string .. HTML_NBSP .. year&lt;br /&gt;
		else&lt;br /&gt;
			date_string = month_name .. HTML_NBSP .. year&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		date_string = year&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return date_string&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Formats the timezone portion of a datetime string.&lt;br /&gt;
-- @param timezone (string) The timezone component&lt;br /&gt;
-- @return string The formatted timezone string, or empty string if timezone is nil&lt;br /&gt;
local function format_timezone(timezone)&lt;br /&gt;
	if not timezone then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return HTML_SPACE .. (timezone == &amp;quot;Z&amp;quot; and &amp;quot;(UTC)&amp;quot; or &amp;quot;(&amp;quot; .. timezone .. &amp;quot;)&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generates an hCalendar microformat string for the given date-time values.&lt;br /&gt;
-- @param date_time_values (table) A table containing date and time components&lt;br /&gt;
-- @param classes (string) The CSS classes to apply to the microformat span&lt;br /&gt;
-- @return string The HTML for the hCalendar microformat&lt;br /&gt;
local function generate_h_calendar(date_time_values, classes)&lt;br /&gt;
	local parts = {}&lt;br /&gt;
&lt;br /&gt;
	if date_time_values.year then&lt;br /&gt;
		table.insert(parts, date_time_values.year)&lt;br /&gt;
&lt;br /&gt;
		if date_time_values.month then&lt;br /&gt;
			table.insert(parts, &amp;quot;-&amp;quot; .. date_time_values.month)&lt;br /&gt;
&lt;br /&gt;
			if date_time_values.day then&lt;br /&gt;
				table.insert(parts, &amp;quot;-&amp;quot; .. date_time_values.day)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if date_time_values.hour then&lt;br /&gt;
			table.insert(parts, &amp;quot;T&amp;quot; .. date_time_values.hour)&lt;br /&gt;
&lt;br /&gt;
			if date_time_values.minute then&lt;br /&gt;
				table.insert(parts, &amp;quot;:&amp;quot; .. date_time_values.minute)&lt;br /&gt;
&lt;br /&gt;
				if date_time_values.second then&lt;br /&gt;
					table.insert(parts, &amp;quot;:&amp;quot; .. date_time_values.second)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local h_calendar_content = table.concat(parts) .. (date_time_values.timezone or &amp;quot;&amp;quot;)&lt;br /&gt;
	local class_span = string.format(&#039;&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;&#039;, classes)&lt;br /&gt;
&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&#039;&amp;lt;span style=&amp;quot;display: none;&amp;quot;&amp;gt;%s(%s)&amp;lt;/span&amp;gt;&#039;, &lt;br /&gt;
		HTML_NBSP, &lt;br /&gt;
		class_span .. h_calendar_content .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generates a &amp;quot;time ago&amp;quot; string for age calculation templates.&lt;br /&gt;
-- @param date_time_values (table) Table containing date components (year, month, day)&lt;br /&gt;
-- @param br (boolean) Whether to include a line break before the time ago text&lt;br /&gt;
-- @param p (boolean) Whether to format with parentheses around the time ago text&lt;br /&gt;
-- @return string Formatted &amp;quot;time ago&amp;quot; text wrapped in a noprint span&lt;br /&gt;
local function get_time_ago(date_time_values, br, p)&lt;br /&gt;
	-- Build timestamp based on available date components&lt;br /&gt;
	local timestamp&lt;br /&gt;
	local min_magnitude&lt;br /&gt;
	&lt;br /&gt;
	if date_time_values.day then&lt;br /&gt;
		-- Format with padding for month and day if needed&lt;br /&gt;
		timestamp = string.format(&amp;quot;%d-%02d-%02d&amp;quot;, &lt;br /&gt;
								 date_time_values.year, &lt;br /&gt;
								 date_time_values.month, &lt;br /&gt;
								 date_time_values.day)&lt;br /&gt;
		min_magnitude = &amp;quot;days&amp;quot;&lt;br /&gt;
	elseif date_time_values.month then&lt;br /&gt;
		-- Format with padding for month if needed&lt;br /&gt;
		timestamp = string.format(&amp;quot;%d-%02d&amp;quot;, &lt;br /&gt;
								 date_time_values.year, &lt;br /&gt;
								 date_time_values.month)&lt;br /&gt;
&lt;br /&gt;
		-- Get the current date&lt;br /&gt;
		local current_date = os.date(&amp;quot;*t&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
		-- Compute the difference in months&lt;br /&gt;
		local year_diff = current_date.year - date_time_values.year&lt;br /&gt;
		local month_diff = (year_diff * 12) + (current_date.month - date_time_values.month)&lt;br /&gt;
&lt;br /&gt;
		-- If the difference is less than 12 months, use &amp;quot;months&amp;quot;, otherwise &amp;quot;years&amp;quot;&lt;br /&gt;
		if month_diff &amp;lt; 12 then&lt;br /&gt;
			min_magnitude = &amp;quot;months&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			min_magnitude = &amp;quot;years&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		timestamp = tostring(date_time_values.year)&lt;br /&gt;
		min_magnitude = &amp;quot;years&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Calculate time ago using [[Module:Time]] ago&lt;br /&gt;
	local m_time_ago = require(&amp;quot;Module:Time ago&amp;quot;)._main&lt;br /&gt;
	local time_ago = m_time_ago({timestamp, [&amp;quot;min_magnitude&amp;quot;] = min_magnitude})&lt;br /&gt;
	&lt;br /&gt;
	-- Format the result based on br and p parameters&lt;br /&gt;
	if br then&lt;br /&gt;
		time_ago = p and (&amp;quot;&amp;lt;br/&amp;gt;(&amp;quot; .. time_ago .. &amp;quot;)&amp;quot;) or (&amp;quot;;&amp;lt;br/&amp;gt;&amp;quot; .. time_ago)&lt;br /&gt;
	else&lt;br /&gt;
		time_ago = p and (HTML_SPACE .. &amp;quot;(&amp;quot; .. time_ago .. &amp;quot;)&amp;quot;) or (&amp;quot;;&amp;quot; .. HTML_SPACE .. time_ago)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Wrap in noprint span&lt;br /&gt;
	return &amp;quot;&amp;lt;span class=\&amp;quot;noprint\&amp;quot;&amp;gt;&amp;quot; .. time_ago .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------&lt;br /&gt;
-- Validation Functions --&lt;br /&gt;
--------------------------&lt;br /&gt;
&lt;br /&gt;
--- Validates the date and time values provided.&lt;br /&gt;
-- @param args (table) Table containing date and time values and optional parameters&lt;br /&gt;
-- @return nil|string Nil if validation passes, or an error message if validation fails&lt;br /&gt;
local function _validate_date_time(args)&lt;br /&gt;
	local template_name = args.template or &amp;quot;start date&amp;quot;&lt;br /&gt;
	help_link = string.format(&amp;quot;&amp;lt;small&amp;gt;[[:Template:%s|(help)]]&amp;lt;/small&amp;gt;&amp;quot;, template_name)&lt;br /&gt;
&lt;br /&gt;
	-- Store and validate date-time values&lt;br /&gt;
	local date_time_values = {&lt;br /&gt;
		year = args[1], &lt;br /&gt;
		month = args[2], &lt;br /&gt;
		day = args[3],&lt;br /&gt;
		hour = args[4], &lt;br /&gt;
		minute = args[5], &lt;br /&gt;
		second = args[6]&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	-- Validate each value&lt;br /&gt;
	for key, value in pairs(date_time_values) do&lt;br /&gt;
		if value then&lt;br /&gt;
			-- Check for integer and leading zeros&lt;br /&gt;
			if not is_integer(value) then&lt;br /&gt;
				return generate_error(ERROR_MESSAGES.integers)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if has_leading_zeros(tostring(value), key) then&lt;br /&gt;
				return generate_error(ERROR_MESSAGES.has_leading_zeros)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- Convert to number&lt;br /&gt;
			date_time_values[key] = tonumber(value)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Validate date components&lt;br /&gt;
	if not date_time_values.year then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.missing_year)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if date_time_values.month and (date_time_values.month &amp;lt; 1 or date_time_values.month &amp;gt; 12) then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.invalid_month)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if date_time_values.day then&lt;br /&gt;
		if not date_time_values.month then&lt;br /&gt;
			return generate_error(ERROR_MESSAGES.missing_month)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local max_day = get_days_in_month(date_time_values.year, date_time_values.month)&lt;br /&gt;
		if date_time_values.day &amp;lt; 1 or date_time_values.day &amp;gt; max_day then&lt;br /&gt;
			return generate_error(string.format(ERROR_MESSAGES.invalid_day, date_time_values.month, max_day))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Validate time components&lt;br /&gt;
	if (date_time_values.minute or date_time_values.second) and not date_time_values.hour then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.time_without_hour)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if date_time_values.hour and (date_time_values.hour &amp;lt; 0 or date_time_values.hour &amp;gt; 23) then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.invalid_hour)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if date_time_values.minute and (date_time_values.minute &amp;lt; 0 or date_time_values.minute &amp;gt; 59) then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.invalid_minute)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if date_time_values.second and (date_time_values.second &amp;lt; 0 or date_time_values.second &amp;gt; 59) then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.invalid_second)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Timezone cannot be set without a specific date and hour&lt;br /&gt;
	if args[7] and not (date_time_values.day and date_time_values.hour) then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.timezone_incomplete_date)&lt;br /&gt;
	elseif args[7] and not is_timezone_valid(args[7]) then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.invalid_timezone)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Validate that there aren&#039;t any duplicate parameters&lt;br /&gt;
	if args.p and args.paren then&lt;br /&gt;
		return generate_error(string.format(ERROR_MESSAGES.duplicate_parameters, &amp;quot;p&amp;quot;, &amp;quot;paren&amp;quot;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Validate parameters that use &amp;quot;y&amp;quot; or &amp;quot;yes&amp;quot; for values	&lt;br /&gt;
	local boolean_params = {&#039;df&#039;, &#039;p&#039;, &#039;paren&#039;, &#039;br&#039;}&lt;br /&gt;
	for _, param_name in ipairs(boolean_params) do&lt;br /&gt;
		if args[param_name] and not (args[param_name] == &amp;quot;yes&amp;quot; or args[param_name] == &amp;quot;y&amp;quot;) then&lt;br /&gt;
			return generate_error(string.format(ERROR_MESSAGES.yes_value_parameter, param_name))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
-- Public Functions --&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--- Validates date-time values from template arguments.&lt;br /&gt;
-- @param frame (table) The MediaWiki frame containing template arguments&lt;br /&gt;
-- @return nil|string Result of date-time validation&lt;br /&gt;
function p.validate_date_time(frame)&lt;br /&gt;
	local get_args = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
	local args = get_args(frame)&lt;br /&gt;
	&lt;br /&gt;
	-- Sanitize inputs&lt;br /&gt;
	args[7] = fix_timezone(args[7])&lt;br /&gt;
	&lt;br /&gt;
	return _validate_date_time(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generates a formatted date string with microformat markup.&lt;br /&gt;
-- @param frame (table) The MediaWiki frame containing template arguments&lt;br /&gt;
-- @return string A formatted date string, or an error message if validation fails&lt;br /&gt;
function p.generate_date(frame)&lt;br /&gt;
	local get_args = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
	local args = get_args(frame)&lt;br /&gt;
&lt;br /&gt;
	-- Sanitize inputs&lt;br /&gt;
	args[7] = fix_timezone(args[7])&lt;br /&gt;
&lt;br /&gt;
	local validation_error = _validate_date_time(args)&lt;br /&gt;
	if validation_error then&lt;br /&gt;
		return validation_error&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local classes = TEMPLATE_CLASSES[args.template or &amp;quot;start date&amp;quot;]&lt;br /&gt;
	if not classes then&lt;br /&gt;
		return generate_error(ERROR_MESSAGES.template, false)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Process date-time values&lt;br /&gt;
	local date_time_values = {&lt;br /&gt;
		year = args[1], &lt;br /&gt;
		month = pad_left_zeros(args[2]), &lt;br /&gt;
		day = pad_left_zeros(args[3]),&lt;br /&gt;
		hour = pad_left_zeros(args[4]), &lt;br /&gt;
		minute = args[5] and pad_left_zeros(args[5]) or &amp;quot;00&amp;quot;,&lt;br /&gt;
		second = args[6] and pad_left_zeros(args[6]) or &amp;quot;00&amp;quot;, &lt;br /&gt;
		timezone = replace_minus_character(args[7], true) -- Restore U+2212 (Unicode minus)&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    -- Generate individual components&lt;br /&gt;
	local time_string = format_time_string(&lt;br /&gt;
		date_time_values.hour, &lt;br /&gt;
		date_time_values.minute, &lt;br /&gt;
		date_time_values.second&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	local date_string = format_date_string(&lt;br /&gt;
		date_time_values.year, &lt;br /&gt;
		date_time_values.month, &lt;br /&gt;
		date_time_values.day, &lt;br /&gt;
		args.df&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	local timezone_string = format_timezone(date_time_values.timezone)&lt;br /&gt;
&lt;br /&gt;
	local time_ago = &amp;quot;&amp;quot;&lt;br /&gt;
	if TIME_AGO[args.template] then&lt;br /&gt;
		time_ago = get_time_ago(&lt;br /&gt;
			date_time_values, &lt;br /&gt;
			args.br,&lt;br /&gt;
			args.p or args.paren&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local h_calendar = generate_h_calendar(date_time_values, classes)&lt;br /&gt;
&lt;br /&gt;
	-- Combine components&lt;br /&gt;
	return time_string .. date_string .. timezone_string .. time_ago .. h_calendar&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Infobox_company/styles.css&amp;diff=1047</id>
		<title>Mal:Infobox company/styles.css</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Infobox_company/styles.css&amp;diff=1047"/>
		<updated>2026-09-09T12:58:09Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template|small=yes}} */&lt;br /&gt;
.ib-company .infobox-label {&lt;br /&gt;
	padding-right: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* always light background for logos, unless specified otherwise */&lt;br /&gt;
.ib-company-logo img {&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ib-company-logo .logo-nobg img {&lt;br /&gt;
	background-color: inherit;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.ib-company-locality,&lt;br /&gt;
.ib-company-country {&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:Sister_project/styles.css&amp;diff=1045</id>
		<title>Mal:Sister project/styles.css</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:Sister_project/styles.css&amp;diff=1045"/>
		<updated>2026-09-09T12:58:08Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template|small=yes}} */&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .sistersitebox {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The Wiktionary logo needs a white background in dark mode since it is a transparent SVG */&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .sistersitebox img[src*=&amp;quot;Wiktionary-logo-en-v2.svg&amp;quot;] {&lt;br /&gt;
		filter: invert(1) brightness(55%) contrast(250%) hue-rotate(180deg);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .sistersitebox img[src*=&amp;quot;Wiktionary-logo-en-v2.svg&amp;quot;] {&lt;br /&gt;
		filter: invert(1) brightness(55%) contrast(250%) hue-rotate(180deg);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
	<entry>
		<id>https://leksikon.araa.no/index.php?title=Mal:TYO2&amp;diff=1043</id>
		<title>Mal:TYO2</title>
		<link rel="alternate" type="text/html" href="https://leksikon.araa.no/index.php?title=Mal:TYO2&amp;diff=1043"/>
		<updated>2026-09-09T12:58:08Z</updated>

		<summary type="html">&lt;p&gt;Marcuspn: Én sideversjon ble importert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Tokyo Stock Exchange]]&lt;/div&gt;</summary>
		<author><name>Marcuspn</name></author>
	</entry>
</feed>