<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://noumenapedia.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikiProject_banner%2Fauxiliary</id>
	<title>Module:WikiProject banner/auxiliary - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://noumenapedia.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikiProject_banner%2Fauxiliary"/>
	<link rel="alternate" type="text/html" href="https://noumenapedia.net/index.php?title=Module:WikiProject_banner/auxiliary&amp;action=history"/>
	<updated>2026-10-28T19:43:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://noumenapedia.net/index.php?title=Module:WikiProject_banner/auxiliary&amp;diff=14948&amp;oldid=prev</id>
		<title>Deleatur yhe: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://noumenapedia.net/index.php?title=Module:WikiProject_banner/auxiliary&amp;diff=14948&amp;oldid=prev"/>
		<updated>2026-09-09T16:37:49Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:37, 9 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Deleatur yhe</name></author>
	</entry>
	<entry>
		<id>https://noumenapedia.net/index.php?title=Module:WikiProject_banner/auxiliary&amp;diff=14947&amp;oldid=prev</id>
		<title>wikipedia&gt;MSGJ: use color from config for a-class</title>
		<link rel="alternate" type="text/html" href="https://noumenapedia.net/index.php?title=Module:WikiProject_banner/auxiliary&amp;diff=14947&amp;oldid=prev"/>
		<updated>2026-03-02T22:25:09Z</updated>

		<summary type="html">&lt;p&gt;use color from config for a-class&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
local sandbox-- = &amp;#039;/sandbox&amp;#039; -- BE SURE TO COMMENT OUT this definition when deploying to live&lt;br /&gt;
local cfg = mw.loadData(&amp;#039;Module:WikiProject banner/config&amp;#039; .. (sandbox or &amp;#039;&amp;#039;))&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local lang = mw.getLanguage(cfg.language)&lt;br /&gt;
&lt;br /&gt;
p.b_checklist = function(args, raw_args, class, demo, assessment_link)&lt;br /&gt;
---------------------------&lt;br /&gt;
-- B-class checklist ------&lt;br /&gt;
---------------------------&lt;br /&gt;
local show_checklist = false&lt;br /&gt;
local parameters_used = args.b1 or args.b2 or args.b3 or args.b4 or args.b5 or args.b6&lt;br /&gt;
if (class==&amp;#039;B&amp;#039; or class==&amp;#039;C&amp;#039; or class==&amp;#039;BL&amp;#039; or class==&amp;#039;CL&amp;#039;)-- always displayed on C or B&lt;br /&gt;
	or ((class==&amp;#039;Start&amp;#039; or class==&amp;#039;List&amp;#039;) and yesno(args.B_DISPLAY_ON_START))-- show on Start/List if option selected&lt;br /&gt;
	or ((class==&amp;#039;Start&amp;#039; or class==&amp;#039;Stub&amp;#039;) and parameters_used) then-- show on Start or Stub if any parameters used&lt;br /&gt;
	show_checklist = true&lt;br /&gt;
end&lt;br /&gt;
if show_checklist then&lt;br /&gt;
	local scale = args.QUALITY_CRITERIA==&amp;#039;custom&amp;#039; and assessment_link and assessment_link..&amp;#039;#&amp;#039;..lang:ucfirst(cfg.quality.name)&lt;br /&gt;
		or cfg.b_checklist.default_scale&lt;br /&gt;
	local text = cfg.b_checklist.text:format(&lt;br /&gt;
		parameters_used and cfg.b_checklist.checked or cfg.b_checklist.not_checked,&lt;br /&gt;
		scale&lt;br /&gt;
	)&lt;br /&gt;
	local syntax = mw.html.create(&amp;#039;ul&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;font-size&amp;#039;, &amp;#039;88%&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;margin&amp;#039;, &amp;#039;0px&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;font-family&amp;#039;, &amp;#039;monospace, sans-serif&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;padding&amp;#039;, &amp;#039;1em&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;border&amp;#039;, &amp;#039;1px dashed #2f6fab&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;background-color&amp;#039;, &amp;#039;#f9f9f9&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;color&amp;#039;, &amp;#039;black&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;line-height&amp;#039;, &amp;#039;1.1em&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;list-style&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
	local criteria = mw.html.create(&amp;#039;ol&amp;#039;)&lt;br /&gt;
	for i = 1, 6 do&lt;br /&gt;
		local b = raw_args[&amp;#039;b&amp;#039;..i]&lt;br /&gt;
		if b and b~=&amp;#039;unused&amp;#039; then -- criterion in use&lt;br /&gt;
			b = cfg.b_checklist.mask[b:lower()] or cfg.b_checklist.mask.default&lt;br /&gt;
			local image = &amp;#039;[[File:&amp;#039; .. cfg.b_checklist.icon[b] .. &amp;#039;.svg|16x16px|link=|alt=]]&amp;#039;&lt;br /&gt;
			local failed_cat = args[&amp;#039;B&amp;#039;..i..&amp;#039;_CAT&amp;#039;]&lt;br /&gt;
			local category = &amp;#039;&amp;#039;&lt;br /&gt;
			if b~=&amp;#039;y&amp;#039; and b~=&amp;#039;x&amp;#039; and failed_cat and not demo then -- criterion failed&lt;br /&gt;
				category = &amp;#039;[[Category:&amp;#039; .. failed_cat .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			if (b==&amp;#039;u&amp;#039; or b==&amp;#039;i&amp;#039;) and args.B_MAIN_CAT and not demo then -- unevaluated or invalid parameter&lt;br /&gt;
				category = category .. &amp;#039;[[Category:&amp;#039; .. args.B_MAIN_CAT .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			local status = mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;font-style&amp;#039;, &amp;#039;italic&amp;#039;)&lt;br /&gt;
				:wikitext(cfg.b_checklist.status[b])&lt;br /&gt;
			local criterion = mw.html.create(&amp;#039;li&amp;#039;)&lt;br /&gt;
				:wikitext(image .. &amp;#039; &amp;#039; .. cfg.b_checklist.criteria[i] .. &amp;#039;: &amp;#039;)&lt;br /&gt;
				:node(status)&lt;br /&gt;
				:wikitext(category)&lt;br /&gt;
			criteria:node(criterion)&lt;br /&gt;
			local new_syntax = mw.html.create(&amp;#039;li&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;nowrap&amp;#039;)&lt;br /&gt;
				:wikitext(cfg.b_checklist.syntax.prompt:format(&lt;br /&gt;
					tostring(i),&lt;br /&gt;
					cfg.b_checklist.criteria[i] .. string.rep(&lt;br /&gt;
						&amp;#039;&amp;amp;nbsp;&amp;#039;,&lt;br /&gt;
						cfg.b_checklist.syntax.max_width-#cfg.b_checklist.criteria[i]&lt;br /&gt;
					)&lt;br /&gt;
				))&lt;br /&gt;
			syntax:node(new_syntax)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local prompt&lt;br /&gt;
	if not parameters_used then&lt;br /&gt;
		prompt = mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:wikitext(cfg.b_checklist.syntax.text:format(tostring(mw.title.getCurrentTitle():fullUrl({action = &amp;#039;edit&amp;#039;}))))&lt;br /&gt;
			:node(syntax)			&lt;br /&gt;
			:wikitext(cfg.b_checklist.syntax.assess)&lt;br /&gt;
	end&lt;br /&gt;
	local col1 = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;class-b&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;padding-bottom&amp;#039;, &amp;#039;5px&amp;#039;)&lt;br /&gt;
		:wikitext(cfg.b_checklist.image)&lt;br /&gt;
	local col211 = mw.html.create(&amp;#039;th&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wpb-collapsed-head mbox-text&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;colspan&amp;#039;, &amp;#039;3&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;font-weight&amp;#039;, &amp;#039;normal&amp;#039;)&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
	local col212 = mw.html.create(&amp;#039;th&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;min-width&amp;#039;, &amp;#039;3em&amp;#039;)-- empty cell for show/hide toggle&lt;br /&gt;
	local row21 = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:node(col211)&lt;br /&gt;
		:node(col212)&lt;br /&gt;
	local col221 = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;font-size&amp;#039;, &amp;#039;90%&amp;#039;)&lt;br /&gt;
		:node(criteria)&lt;br /&gt;
	local col222 = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
		:css(&amp;#039;font-size&amp;#039;, &amp;#039;88%&amp;#039;)&lt;br /&gt;
		:node(prompt)&lt;br /&gt;
	local row22 = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:node(col221)&lt;br /&gt;
		:node(col222)&lt;br /&gt;
	local table2 = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;plainlinks mw-collapsible mw-collapsed&amp;#039;)&lt;br /&gt;
		:node(row21)&lt;br /&gt;
		:node(row22)&lt;br /&gt;
	local col2 = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;wpb-collapsed-notes&amp;#039;)&lt;br /&gt;
		:node(table2)&lt;br /&gt;
	return mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		:node(col1)&lt;br /&gt;
		:node(col2)&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.todo_list = function(args, frame)&lt;br /&gt;
---------------------------&lt;br /&gt;
-- To-do list -------------&lt;br /&gt;
---------------------------&lt;br /&gt;
local list&lt;br /&gt;
if args.TODO_LINK then&lt;br /&gt;
	local link = function(action)&lt;br /&gt;
		local url = mw.uri.fullUrl(args.TODO_LINK, {action = action})&lt;br /&gt;
		return mw.html.create(&amp;#039;li&amp;#039;):wikitext(&amp;#039;[&amp;#039; .. tostring(url) .. &amp;#039; &amp;#039; .. cfg.todo_list[action] .. &amp;#039;]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local links = yesno(args.TODO_EDITLINKS or true, &amp;#039;true&amp;#039;) and frame:expandTemplate{title = &amp;#039;Flatlist&amp;#039;, args = {&lt;br /&gt;
		class = &amp;#039;plainlinks&amp;#039;,&lt;br /&gt;
		style = &amp;#039;text-align:center;font-size:90%;&amp;#039;,&lt;br /&gt;
		[1] = tostring(mw.html.create(&amp;#039;ul&amp;#039;)&lt;br /&gt;
			:node(link(&amp;#039;edit&amp;#039;))&lt;br /&gt;
			:node(link(&amp;#039;history&amp;#039;))&lt;br /&gt;
			:node(link(&amp;#039;watch&amp;#039;))&lt;br /&gt;
			:node(link(&amp;#039;purge&amp;#039;))&lt;br /&gt;
		)&lt;br /&gt;
	}} or &amp;#039;&amp;#039;&lt;br /&gt;
	list = links .. &amp;#039;\n&amp;#039; .. frame:expandTemplate{title = args.TODO_LINK}&lt;br /&gt;
else&lt;br /&gt;
	list = (&amp;#039;\n&amp;#039; .. args.TODO_TEXT) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
local titlecell = mw.html.create(&amp;#039;th&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;padding&amp;#039;, &amp;#039;0.2em 2px 0.2em 0&amp;#039;)&lt;br /&gt;
	:cssText(args.TODO_TITLE_STYLE)&lt;br /&gt;
	:wikitext((args.TODO_TITLE or cfg.todo_list.default_title) .. &amp;#039;:&amp;#039;)&lt;br /&gt;
local listcell = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;padding&amp;#039;, &amp;#039;5px&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;background-color&amp;#039;, &amp;#039;var(--background-color-base, #fff)&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;color&amp;#039;, &amp;#039;inherit&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;border&amp;#039;, &amp;#039;1px solid #a2a9b1&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;margin-top&amp;#039;, &amp;#039;5px&amp;#039;)&lt;br /&gt;
	:cssText(args.TODO_STYLE)&lt;br /&gt;
	:wikitext(list)&lt;br /&gt;
local onecellrow = function(cell)&lt;br /&gt;
	return mw.html.create(&amp;#039;tr&amp;#039;):node(cell)&lt;br /&gt;
end&lt;br /&gt;
local table1 = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
	:addClass(&amp;#039;mw-collapsible mw-collapsed&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
	:node(onecellrow(titlecell))&lt;br /&gt;
	:node(onecellrow(listcell))&lt;br /&gt;
local cell1 = mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
	:attr(&amp;#039;colspan&amp;#039;, &amp;#039;3&amp;#039;)&lt;br /&gt;
	:css(&amp;#039;padding&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
	:node(table1)&lt;br /&gt;
return onecellrow(cell1)&lt;br /&gt;
end&lt;br /&gt;
p.todo_list_ = function(frame)&lt;br /&gt;
	return p.todo_list(frame.args, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.quality_importance_insection = function(args, class, importance, importance_name, assessment_cat, article, tf_prefix)&lt;br /&gt;
---------------------------&lt;br /&gt;
-- Category intersection --&lt;br /&gt;
---------------------------&lt;br /&gt;
local prefix = tf_prefix or &amp;#039;&amp;#039;&lt;br /&gt;
if class==&amp;#039;NA&amp;#039; and (yesno(args[prefix..&amp;#039;QII_SUPPRESS_NA&amp;#039;]) or yesno(args[prefix..&amp;#039;QII_SUPPRESS_NA_CLASS&amp;#039;])) then&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
if importance==&amp;#039;NA&amp;#039; and (yesno(args[prefix..&amp;#039;QII_SUPPRESS_NA&amp;#039;]) or yesno(args[prefix..&amp;#039;QII_SUPPRESS_NA_IMPORTANCE&amp;#039;])) then&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
local form = args[prefix..&amp;#039;QII_FORMAT&amp;#039;]:gsub(&amp;#039;C&amp;#039;, &amp;#039;_C_&amp;#039;):gsub(&amp;#039;I&amp;#039;, &amp;#039;_I_&amp;#039;):gsub(&amp;#039;T&amp;#039;, &amp;#039;_T_&amp;#039;)&lt;br /&gt;
if not class or not importance or not form then&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
local new_class&lt;br /&gt;
if class==&amp;#039;&amp;#039; then&lt;br /&gt;
	new_class = &amp;#039;Unassessed&amp;#039; .. (args[prefix..&amp;#039;QII_UNASSESSED_APPENDIX&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
else&lt;br /&gt;
	new_class = class .. &amp;#039;-Class&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
local check_cat = function (typ)&lt;br /&gt;
	local cat_name = form:gsub(&amp;#039;_C_&amp;#039;, new_class):gsub(&amp;#039;_I_&amp;#039;, importance .. &amp;#039;-&amp;#039; .. importance_name):gsub(&amp;#039;_T_&amp;#039;, assessment_cat .. &amp;#039; &amp;#039; .. typ)&lt;br /&gt;
	local cat = mw.title.new(&amp;#039;Category:&amp;#039; .. cat_name)&lt;br /&gt;
	return cat.exists and #cat:getContent()&amp;gt;0 and cat_name&lt;br /&gt;
end&lt;br /&gt;
local cat = check_cat(article and &amp;#039;articles&amp;#039; or &amp;#039;pages&amp;#039;)&lt;br /&gt;
return cat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.image_needed = function(args)&lt;br /&gt;
---------------------------&lt;br /&gt;
-- Image needed -----------&lt;br /&gt;
---------------------------&lt;br /&gt;
local type = cfg.image_needed.default_type&lt;br /&gt;
if args[&amp;#039;image-type&amp;#039;] then&lt;br /&gt;
	local add_article = function(word)&lt;br /&gt;
		local article = cfg.image_needed.article.consonant&lt;br /&gt;
		if cfg.image_needed.vowels[word:sub(1, 1)] then&lt;br /&gt;
			article = cfg.image_needed.article.vowel&lt;br /&gt;
		end&lt;br /&gt;
		return article .. &amp;#039; &amp;lt;b&amp;gt;&amp;#039; .. word .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	type = add_article(args[&amp;#039;image-type&amp;#039;])&lt;br /&gt;
end&lt;br /&gt;
local details = &amp;#039;&amp;#039;&lt;br /&gt;
if args[&amp;#039;image-details&amp;#039;] then&lt;br /&gt;
	details = &amp;#039; &amp;#039; .. cfg.image_needed.details:format(args[&amp;#039;image-details&amp;#039;])&lt;br /&gt;
end&lt;br /&gt;
local location = &amp;#039;&amp;#039;&lt;br /&gt;
if args[&amp;#039;image-location&amp;#039;] then&lt;br /&gt;
	local location_cat = mw.title.new(&amp;#039;Category:Wikipedians in &amp;#039; .. args[&amp;#039;image-location&amp;#039;])&lt;br /&gt;
	if location_cat.exists then&lt;br /&gt;
		location = &amp;#039; &amp;#039; .. cfg.image_needed.help:format(&amp;#039;[[:&amp;#039; .. location_cat.fullText .. &amp;#039;|&amp;#039; .. location_cat.text .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
local category_exists = function(category)&lt;br /&gt;
	local title = mw.title.new(&amp;#039;Category:&amp;#039; .. category)&lt;br /&gt;
	if title.exists then&lt;br /&gt;
		return category&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return {&lt;br /&gt;
	text = cfg.image_needed.text:format(type, details, location),&lt;br /&gt;
	image_name = args.IM_IMAGE or cfg.image_needed.default_image,&lt;br /&gt;
	category = args[&amp;#039;image-location&amp;#039;] and category_exists(&lt;br /&gt;
		cfg.image_needed.location:format(&lt;br /&gt;
			args[&amp;#039;image-type&amp;#039;] or &amp;#039;photograph&amp;#039;,&lt;br /&gt;
			args[&amp;#039;image-location&amp;#039;]&lt;br /&gt;
		)&lt;br /&gt;
	) or args.IM_LOCATION_CATEGORY,&lt;br /&gt;
	category2 = args[&amp;#039;image-topic&amp;#039;] and category_exists(&lt;br /&gt;
		cfg.image_needed.topic:format(&lt;br /&gt;
			args[&amp;#039;image-type&amp;#039;] or &amp;#039;photograph&amp;#039;,&lt;br /&gt;
			args[&amp;#039;image-topic&amp;#039;]&lt;br /&gt;
		)&lt;br /&gt;
	) or args.IM_TOPIC_CATEGORY&lt;br /&gt;
}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.collaboration = function(args, title)&lt;br /&gt;
---------------------------&lt;br /&gt;
-- Collaboration ----------&lt;br /&gt;
---------------------------&lt;br /&gt;
local image = args.COLL_IMAGE or cfg.collaboration.default_image&lt;br /&gt;
local link = &amp;#039;[[&amp;#039; .. (args.COLL_LINK or &amp;#039;&amp;#039;) .. &amp;#039;|&amp;#039; .. (args.COLL_TEXT or cfg.collaboration.default_text) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
local note_args = {candidate = {}, current = {}, past = {}}&lt;br /&gt;
if yesno(args[&amp;#039;collaboration-candidate&amp;#039;], true) then&lt;br /&gt;
	local subpage_link = (args.COLL_LINK or &amp;#039;&amp;#039;) .. &amp;#039;#&amp;#039; .. title.subjectPageTitle.text&lt;br /&gt;
	note_args.candidate = {&lt;br /&gt;
		text = cfg.collaboration.candidate:format(subpage_link, link),&lt;br /&gt;
		image_name = image,&lt;br /&gt;
		size = cfg.collaboration.size,&lt;br /&gt;
		category = args.COLL_CANDIDATE_CAT&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
if yesno(args[&amp;#039;collaboration-current&amp;#039;], true) then&lt;br /&gt;
	note_args.current = {&lt;br /&gt;
		text = cfg.collaboration.current:format(link),&lt;br /&gt;
		image_name = image,&lt;br /&gt;
		size = cfg.collaboration.size,&lt;br /&gt;
		category = args.COLL_CURRENT_CAT&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
if yesno(args[&amp;#039;collaboration-past&amp;#039;], true) then&lt;br /&gt;
	note_args.past = {&lt;br /&gt;
		text = cfg.collaboration.past:format(link),&lt;br /&gt;
		image_name = image,&lt;br /&gt;
		size = cfg.collaboration.size,&lt;br /&gt;
		category = args.COLL_PAST_CAT&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
return note_args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.a_class = function(args, lang)&lt;br /&gt;
---------------------------&lt;br /&gt;
-- A-class review ---------&lt;br /&gt;
---------------------------&lt;br /&gt;
local status = cfg.a_class.mask[lang:lc(args[&amp;#039;a class&amp;#039;])]&lt;br /&gt;
if status==nil then&lt;br /&gt;
	return {}&lt;br /&gt;
end&lt;br /&gt;
local link_exists = args.ACR_SUBPAGE_LINK and mw.title.new(args.ACR_SUBPAGE_LINK).exists or false&lt;br /&gt;
local link = mw.html.create(&amp;#039;span&amp;#039;):css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
local label = cfg.a_class.status[status]&lt;br /&gt;
if args.ACR_SUBPAGE_LINK and status==&amp;#039;current&amp;#039; and not link_exists and args.ACR_PRELOAD then -- use custom preload template when creating discussion page&lt;br /&gt;
	local url = mw.uri.fullUrl(args.ACR_SUBPAGE_LINK, {&lt;br /&gt;
		action = &amp;#039;edit&amp;#039;,&lt;br /&gt;
		preload = args.ACR_PRELOAD,&lt;br /&gt;
		summary = cfg.a_class.create_summary&lt;br /&gt;
	})&lt;br /&gt;
	link:wikitext(&amp;#039;[&amp;#039; .. tostring(url) .. &amp;#039; &amp;#039; .. label .. &amp;#039;]&amp;#039;)&lt;br /&gt;
else&lt;br /&gt;
	link:wikitext(&amp;#039;[[&amp;#039; .. (args.ACR_SUBPAGE_LINK or &amp;#039;&amp;#039;) .. &amp;#039;|&amp;#039; .. label .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
return {&lt;br /&gt;
	text = cfg.a_class.text:format(&lt;br /&gt;
		tostring(link),&lt;br /&gt;
		args.ACR_REVIEW_LINK or &amp;#039;&amp;#039;&lt;br /&gt;
	),&lt;br /&gt;
	image_name = args.ACR_IMAGE or cfg.a_class.icon[status],&lt;br /&gt;
	size = args.ACR_SIZE or &amp;#039;18x18px&amp;#039;,&lt;br /&gt;
	background = cfg.a_class.background,&lt;br /&gt;
	color = cfg.a_class.color,&lt;br /&gt;
	category = args[cfg.a_class.category[status]],&lt;br /&gt;
	category2 = not link_exists and args.ACR_INVALID_CAT&lt;br /&gt;
}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.peer_review = function(args, title)&lt;br /&gt;
---------------------------&lt;br /&gt;
-- Peer review ------------&lt;br /&gt;
---------------------------&lt;br /&gt;
local image = args.PR_IMAGE or cfg.peer_review.default_image&lt;br /&gt;
local size = args.PR_SIZE or cfg.peer_review.size&lt;br /&gt;
local link = args.PR_LINK or &amp;#039;&amp;#039;&lt;br /&gt;
local pr_title = args[&amp;#039;peer review title&amp;#039;] and mw.title.new(args[&amp;#039;peer review title&amp;#039;]) or title&lt;br /&gt;
local subpage_link = link .. &amp;#039;/&amp;#039; .. pr_title.subjectPageTitle.text&lt;br /&gt;
local invalid_cat = not mw.title.new(subpage_link).exists and args.PR_INVALID_CAT&lt;br /&gt;
local note_args = {current = {}, past = {}}&lt;br /&gt;
if yesno(args[&amp;#039;peer review&amp;#039;], true) then&lt;br /&gt;
	note_args.current = {&lt;br /&gt;
		text = cfg.peer_review.current:format(subpage_link, link),&lt;br /&gt;
		image_name = image,&lt;br /&gt;
		size = size,&lt;br /&gt;
		category = args.PR_CAT,&lt;br /&gt;
		category2 = invalid_cat&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
if yesno(args[&amp;#039;old peer review&amp;#039;], true) then&lt;br /&gt;
	note_args.past = {&lt;br /&gt;
		text = cfg.peer_review.past:format(link, subpage_link),&lt;br /&gt;
		image_name = image,&lt;br /&gt;
		size = size,&lt;br /&gt;
		category = args.PR_OLD_CAT,&lt;br /&gt;
		category2 = invalid_cat&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
return note_args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.map_config = function(config, pargs)&lt;br /&gt;
---------------------------&lt;br /&gt;
-- Map configuration ------&lt;br /&gt;
---------------------------&lt;br /&gt;
local args, raw_args, parent_args, v_par = {}, {}, {}, {}&lt;br /&gt;
local punct = {&amp;#039;-&amp;#039;, &amp;#039;_&amp;#039;, &amp;#039; &amp;#039;}&lt;br /&gt;
local normalise = function(s) -- convert parameter name to lowercase and collapse spaces and commonly used punctuation&lt;br /&gt;
	local norm = s -- string.lower(s) for case insensitivity&lt;br /&gt;
	if type(s)==&amp;#039;string&amp;#039; then -- this will fail for positional parameters&lt;br /&gt;
		for _, p in ipairs(punct) do&lt;br /&gt;
			norm = norm:gsub(p, &amp;#039;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return norm&lt;br /&gt;
end&lt;br /&gt;
if pargs.taskforce then -- split comma-separated list&lt;br /&gt;
	for taskforce in mw.text.gsplit(pargs.taskforce, &amp;#039;,%s*&amp;#039;) do&lt;br /&gt;
		pargs[taskforce] = &amp;#039;yes&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
for k, v in pairs(pargs) do -- build table of normalised parameters&lt;br /&gt;
	local normk = normalise(k)&lt;br /&gt;
	if not parent_args[normk] then&lt;br /&gt;
		parent_args[normk] = v&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
local pan = function(s) -- function to look up normalised argument from parent frame&lt;br /&gt;
	if type(s)==&amp;#039;string&amp;#039; then -- single parameter&lt;br /&gt;
		return parent_args[normalise(s)]&lt;br /&gt;
	elseif type(s)==&amp;#039;table&amp;#039; then -- multiple parameter aliases&lt;br /&gt;
		for _, p in ipairs(s) do&lt;br /&gt;
			local normp = parent_args[normalise(p)]&lt;br /&gt;
			if normp then&lt;br /&gt;
				return normp&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
local AddToValid&lt;br /&gt;
AddToValid = function(s) -- function to add string or table of strings to list of valid parameters&lt;br /&gt;
	if type(s)==&amp;#039;string&amp;#039; then&lt;br /&gt;
		table.insert(v_par, s)&lt;br /&gt;
	elseif type(s)==&amp;#039;table&amp;#039; then&lt;br /&gt;
		for _, p in ipairs(s) do&lt;br /&gt;
			AddToValid(p)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
local first = function(s) -- function gives parameter or first parameter from list of aliases, for use in documentation&lt;br /&gt;
	if type(s)==&amp;#039;string&amp;#039; then -- single parameter&lt;br /&gt;
		return s&lt;br /&gt;
	elseif type(s)==&amp;#039;table&amp;#039; then -- multiple parameter aliases&lt;br /&gt;
		return s[1]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
local current_title = mw.title.getCurrentTitle()&lt;br /&gt;
args.IMAGE_LEFT = config.image and config.image.file or config.image&lt;br /&gt;
args.IMAGE_LEFT_SIZE = config.image and config.image.size&lt;br /&gt;
args.MAIN_TEXT = config.text&lt;br /&gt;
args.MAIN_CAT = config.category&lt;br /&gt;
if config.assessment then&lt;br /&gt;
	args.ASSESSMENT_LINK = config.assessment.link&lt;br /&gt;
	args.ASSESSMENT_CAT = config.assessment.topic&lt;br /&gt;
	if config.assessment.quality then&lt;br /&gt;
		raw_args.class = pargs.class or &amp;#039;&amp;#039; -- pass raw class so it can be tracked by [[Category:WikiProject banners with ignored class parameter]], etc.&lt;br /&gt;
	end&lt;br /&gt;
	if config.assessment.priority then&lt;br /&gt;
		AddToValid{&amp;#039;importance&amp;#039;, &amp;#039;priority&amp;#039;}&lt;br /&gt;
		args.importance = parent_args.importance&lt;br /&gt;
		raw_args.importance = &amp;#039;importance&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
if config.taskforces then&lt;br /&gt;
	args.TF_SIZE = config.taskforces.size&lt;br /&gt;
	args.TF_COLLAPSE = config.taskforces.collapse&lt;br /&gt;
	args.TF_HEADER = config.taskforces.header&lt;br /&gt;
	AddToValid(&amp;#039;taskforce&amp;#039;)&lt;br /&gt;
	if config.taskforces.list then&lt;br /&gt;
		for k, cfg in ipairs(config.taskforces.list) do&lt;br /&gt;
			AddToValid{cfg.parameter, cfg.priority}&lt;br /&gt;
			raw_args[&amp;#039;tf &amp;#039; .. k] = first(cfg.parameter) -- trigger display on template page&lt;br /&gt;
			args[&amp;#039;tf &amp;#039; .. k] = pan(cfg.parameter)&lt;br /&gt;
			args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_NAME&amp;#039;] = cfg.name&lt;br /&gt;
			args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_LINK&amp;#039;] = cfg.link&lt;br /&gt;
			args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_NESTED&amp;#039;] = cfg.nested&lt;br /&gt;
			args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_IMAGE&amp;#039;] = cfg.image&lt;br /&gt;
			args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_SIZE&amp;#039;] = cfg.size&lt;br /&gt;
			args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_MAIN_CAT&amp;#039;] = cfg.category&lt;br /&gt;
			args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_QUALITY&amp;#039;] = cfg.quality and &amp;#039;yes&amp;#039;&lt;br /&gt;
			args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_ASSESSMENT_CAT&amp;#039;] = cfg.topic&lt;br /&gt;
			args[&amp;#039;tf &amp;#039; .. k .. &amp;#039; importance&amp;#039;] = pan(cfg.priority)&lt;br /&gt;
			raw_args[&amp;#039;tf &amp;#039; .. k .. &amp;#039; importance&amp;#039;] = first(cfg.priority)&lt;br /&gt;
			if cfg.additional then&lt;br /&gt;
				for n, a in ipairs(cfg.additional) do&lt;br /&gt;
					AddToValid(a.parameter)&lt;br /&gt;
					args[&amp;#039;tf &amp;#039; .. k .. &amp;#039; cat &amp;#039; .. n] = pan(a.parameter)&lt;br /&gt;
					args[&amp;#039;TF_&amp;#039; .. k .. &amp;#039;_CAT_&amp;#039; .. n] = a.category&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
if config.notes then&lt;br /&gt;
	args.NOTE_SIZE = config.notes.size&lt;br /&gt;
	args.COLLAPSED = config.notes.collapse&lt;br /&gt;
	args.COLLAPSED_HEAD = config.notes.header&lt;br /&gt;
	if config.notes.attention then&lt;br /&gt;
		AddToValid(config.notes.attention.parameter)&lt;br /&gt;
		raw_args.attention = first(config.notes.attention.parameter)&lt;br /&gt;
		args.attention = pan(config.notes.attention.parameter)&lt;br /&gt;
		args.ATTENTION_CAT = config.notes.attention.category&lt;br /&gt;
	end&lt;br /&gt;
	if config.notes.infobox then&lt;br /&gt;
		AddToValid(config.notes.infobox.parameter)&lt;br /&gt;
		raw_args.infobox = first(config.notes.infobox.parameter)&lt;br /&gt;
		args.infobox = pan(config.notes.infobox.parameter)&lt;br /&gt;
		args.INFOBOX_CAT = config.notes.infobox.category&lt;br /&gt;
	end&lt;br /&gt;
	if config.notes.auto then&lt;br /&gt;
		AddToValid(config.notes.auto.parameter)&lt;br /&gt;
		raw_args.auto = first(config.notes.auto.parameter)&lt;br /&gt;
		args.auto = pan(config.notes.auto.parameter)&lt;br /&gt;
		args.AUTO_ASSESS_CAT = config.notes.auto.category&lt;br /&gt;
	end&lt;br /&gt;
	if config.notes.collaboration then&lt;br /&gt;
		args.COLL_LINK = config.notes.collaboration.link:gsub(&amp;#039;_FULLPAGENAME_&amp;#039;, current_title.fullText)&lt;br /&gt;
		args.COLL_TEXT = config.notes.collaboration.name&lt;br /&gt;
		args.COLL_IMAGE = config.notes.collaboration.image&lt;br /&gt;
		AddToValid{config.notes.collaboration.candidate.parameter, config.notes.collaboration.current.parameter, config.notes.collaboration.past.parameter}&lt;br /&gt;
		raw_args[&amp;#039;collaboration-candidate&amp;#039;] = first(config.notes.collaboration.candidate.parameter)&lt;br /&gt;
		args[&amp;#039;collaboration-candidate&amp;#039;] = pan(config.notes.collaboration.candidate.parameter)&lt;br /&gt;
		args.COLL_CANDIDATE_CAT = config.notes.collaboration.candidate.category&lt;br /&gt;
		raw_args[&amp;#039;collaboration-current&amp;#039;] = first(config.notes.collaboration.current.parameter)&lt;br /&gt;
		args[&amp;#039;collaboration-current&amp;#039;] = pan(config.notes.collaboration.current.parameter)&lt;br /&gt;
		args.COLL_CURRENT_CAT  = config.notes.collaboration.current.category&lt;br /&gt;
		raw_args[&amp;#039;collaboration-past&amp;#039;] = first(config.notes.collaboration.past.parameter)&lt;br /&gt;
		args[&amp;#039;collaboration-past&amp;#039;] = pan(config.notes.collaboration.past.parameter)&lt;br /&gt;
		args.COLL_PAST_CAT = config.notes.collaboration.past.category&lt;br /&gt;
	end&lt;br /&gt;
	if config.notes.image then&lt;br /&gt;
		AddToValid{config.notes.image.parameters.needed, config.notes.image.parameters.details, config.notes.image.parameters.type, config.notes.image.parameters.location, config.notes.image.parameters.topic}&lt;br /&gt;
		raw_args[&amp;#039;image-needed&amp;#039;] = first(config.notes.image.parameters.needed)&lt;br /&gt;
		args[&amp;#039;image-needed&amp;#039;] = pan(config.notes.image.parameters.needed)&lt;br /&gt;
		args[&amp;#039;image-type&amp;#039;] = pan(config.notes.image.parameters.type)&lt;br /&gt;
		args[&amp;#039;image-details&amp;#039;] = pan(config.notes.image.parameters.details)&lt;br /&gt;
		args[&amp;#039;image-location&amp;#039;] = pan(config.notes.image.parameters.location)&lt;br /&gt;
		args[&amp;#039;image-topic&amp;#039;] = pan(config.notes.image.parameters.topic)&lt;br /&gt;
		args.IM_IMAGE = config.notes.image.image&lt;br /&gt;
		args.IM_LOCATION_CATEGORY = config.notes.image.categories.location&lt;br /&gt;
		args.IM_TOPIC_CATEGORY = config.notes.image.categories.topic&lt;br /&gt;
	end&lt;br /&gt;
	if config.notes.list then&lt;br /&gt;
		for k, cfg in ipairs(config.notes.list) do&lt;br /&gt;
			AddToValid(cfg.parameter)&lt;br /&gt;
			raw_args[&amp;#039;note &amp;#039; .. k] = first(cfg.parameter) -- trigger display on template page&lt;br /&gt;
			args[&amp;#039;note &amp;#039; .. k] = pan(cfg.parameter)&lt;br /&gt;
			args[&amp;#039;NOTE_&amp;#039;.. k .. &amp;#039;_TEXT&amp;#039;] = cfg.text&lt;br /&gt;
			args[&amp;#039;NOTE_&amp;#039;.. k .. &amp;#039;_IMAGE&amp;#039;] = cfg.image&lt;br /&gt;
			args[&amp;#039;NOTE_&amp;#039;.. k .. &amp;#039;_SIZE&amp;#039;] = cfg.size&lt;br /&gt;
			args[&amp;#039;NOTE_&amp;#039;.. k .. &amp;#039;_CAT&amp;#039;] = cfg.category&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
if config.todo then&lt;br /&gt;
	args.TODO_LINK = config.todo.link&lt;br /&gt;
	args.TODO_TEXT = config.todo.text&lt;br /&gt;
	args.TODO_STYLE = config.todo.style&lt;br /&gt;
	args.TODO_TITLE = config.todo.title&lt;br /&gt;
	args.TODO_TITLE_STYLE = config.todo.title_style&lt;br /&gt;
	args.TODO_EDITLINKS = config.todo.editlinks==false and &amp;#039;no&amp;#039; or &amp;#039;yes&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
if config.doc then&lt;br /&gt;
	args.DOC = config.doc&lt;br /&gt;
end&lt;br /&gt;
args.PORTAL = config.portal&lt;br /&gt;
return args, raw_args, v_par&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;MSGJ</name></author>
	</entry>
</feed>