<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikiProjectBanner%2FK</id>
	<title>Module:WikiProjectBanner/K - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikiProjectBanner%2FK"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:WikiProjectBanner/K&amp;action=history"/>
	<updated>2026-05-07T18:00:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:WikiProjectBanner/K&amp;diff=147661&amp;oldid=prev</id>
		<title>imported&gt;Kephir: .param</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:WikiProjectBanner/K&amp;diff=147661&amp;oldid=prev"/>
		<updated>2014-08-13T16:56:26Z</updated>

		<summary type="html">&lt;p&gt;.param&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
&lt;br /&gt;
-- TODO: a submodule for categorisation may be needed&lt;br /&gt;
-- these also need to be checked for existence by the documentation page&lt;br /&gt;
&lt;br /&gt;
local m_common_data = require(&amp;#039;Module:WikiProjectBanner/common data&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local&lt;br /&gt;
	importance_grades,&lt;br /&gt;
	quality_grades,&lt;br /&gt;
	importance_scales,&lt;br /&gt;
	quality_scales,&lt;br /&gt;
	stock_notices&lt;br /&gt;
	=&lt;br /&gt;
	m_common_data.importance_grades,&lt;br /&gt;
	m_common_data.quality_grades,&lt;br /&gt;
	m_common_data.importance_scales,&lt;br /&gt;
	m_common_data.quality_scales,&lt;br /&gt;
	m_common_data.stock_notices&lt;br /&gt;
&lt;br /&gt;
-- creates a wrapper object which tracks unused template arguments&lt;br /&gt;
local function track_usage(args)&lt;br /&gt;
	local tracker = {}&lt;br /&gt;
	&lt;br /&gt;
	for key in pairs(args) do&lt;br /&gt;
		tracker[key] = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return setmetatable({}, {&lt;br /&gt;
		__index = function (self, key)&lt;br /&gt;
			local value = args[key]&lt;br /&gt;
			tracker[key] = nil&lt;br /&gt;
			self[key] = value&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	}), tracker&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- resolves a quality or importance assessment grade; returns a grade data table and status&lt;br /&gt;
local function resolve_grade(scale_config, scales, grades, args, grade_param, title)&lt;br /&gt;
	if args == true then&lt;br /&gt;
		return grades.na, &amp;#039;demo&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if type(scale_config) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		scale_config = scales[scale_config]&lt;br /&gt;
	elseif not scale_config then&lt;br /&gt;
		scale_config = scales.standard&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ns&lt;br /&gt;
	ns = mw.site.namespaces[title.namespace].subject&lt;br /&gt;
	if ns.id == 0 then&lt;br /&gt;
		ns = &amp;quot;_MAIN&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		ns = ns.canonicalName&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if title.isRedirect and scale_config._REDIRECT then&lt;br /&gt;
		local redir_grade = scale_config._REDIRECT[ns] or scale_config._REDIRECT._OTHER&lt;br /&gt;
		if redir_grade then&lt;br /&gt;
			return grades[redir_grade], &amp;#039;redirect&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	scale_config = scale_config[ns] or scale_config._OTHER&lt;br /&gt;
	if not scale_config then&lt;br /&gt;
		return nil	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if type(scale_config) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		return grades[scale_config]	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local resolver = {}&lt;br /&gt;
	for _, item in ipairs(scale_config) do&lt;br /&gt;
		local grade = grades[item]&lt;br /&gt;
		resolver[item] = grade&lt;br /&gt;
		if grade.aliases then&lt;br /&gt;
			for _, item in ipairs(grade.aliases) do&lt;br /&gt;
				resolver[item] = grade	&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local grade = args[grade_param]&lt;br /&gt;
	if grade then&lt;br /&gt;
		grade = tostring(grade):lower()&lt;br /&gt;
		if resolver[grade] then&lt;br /&gt;
			return resolver[grade], &amp;#039;valid&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return resolver[scale_config[1]], &amp;#039;invalid&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return resolver[scale_config[1]], &amp;#039;default&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- constructs banner markup and the category list. for internal use only (which includes unit tests).&lt;br /&gt;
function export.build_banner(banner_config, banner_hooks, title, banner_args, out, categories)&lt;br /&gt;
	local yesno = require(&amp;#039;Module:yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	out.root = mw.html.create(&amp;#039;&amp;#039;)&lt;br /&gt;
	local state = {} -- for use by hooks only&lt;br /&gt;
	&lt;br /&gt;
	local function call_hook(hookfunc, ...)&lt;br /&gt;
		if not hookfunc then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
		return hookfunc(--[[ not yet determined ]])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- basic skeleton&lt;br /&gt;
	out.wrapper =&lt;br /&gt;
		out.root:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;tmbox tmbox-notice collapsible innercollapse wpb&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	out.header_row =&lt;br /&gt;
		out.wrapper:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;wpb-header&amp;#039;)&lt;br /&gt;
	out.header_name =&lt;br /&gt;
		out.header_row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;, &amp;#039;right&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, &amp;#039;0.3em 1em 0.3em 0.3em&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;width&amp;#039;, &amp;#039;50%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
	out.header_rating =&lt;br /&gt;
		out.header_row:tag(&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;width&amp;#039;, &amp;#039;50%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, &amp;#039;0.3em 0.3em 0.3em 0&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	out.content =&lt;br /&gt;
		out.wrapper:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;padding&amp;#039;, &amp;#039;3px 0 3px 5px&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;background&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;border&amp;#039;, &amp;#039;none&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;padding&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;cellspacing&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	out.has_more = false&lt;br /&gt;
	out.content_more =&lt;br /&gt;
		mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;collapsible collapsed&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;background&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;colspan&amp;#039;, &amp;#039;3&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;
					:wikitext(banner_config.more_header or &amp;quot;More information&amp;quot;)&lt;br /&gt;
				:done()&lt;br /&gt;
			:done()&lt;br /&gt;
&lt;br /&gt;
	-- does anyone still use this?&lt;br /&gt;
	local is_small = (banner_args ~= true) and yesno(banner_args.small)&lt;br /&gt;
	if is_small then&lt;br /&gt;
		out.wrapper:addClass(&amp;quot;mbox-small&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- the blurb&lt;br /&gt;
	local page_type = require(&amp;#039;Module:pagetype&amp;#039;)._main { page = title.fullText }&lt;br /&gt;
	&lt;br /&gt;
	local blurb_row = out.content:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	if banner_config.image_left then&lt;br /&gt;
		out.blurb_image_left = blurb_row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-image&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	out.blurb_text = blurb_row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
	if banner_config.image_right then&lt;br /&gt;
		out.blurb_image_right = blurb_row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-imageright&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	if banner_config.image_left then&lt;br /&gt;
		out.blurb_image_left:wikitext((&amp;#039;[[File:%s|%s]]&amp;#039;):format(&lt;br /&gt;
			banner_config.image_left,&lt;br /&gt;
			is_small&lt;br /&gt;
			and (banner_config.image_left_size_small or &amp;quot;40px&amp;quot;)&lt;br /&gt;
			or (banner_config.image_left_size_big or &amp;quot;80px&amp;quot;)&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if banner_config.image_right then&lt;br /&gt;
		out.blurb_image_right:wikitext((&amp;#039;[[File:%s|%s]]&amp;#039;):format(&lt;br /&gt;
			banner_config.image_right,&lt;br /&gt;
			is_small&lt;br /&gt;
			and (banner_config.image_right_size_small or &amp;quot;40px&amp;quot;)&lt;br /&gt;
			or (banner_config.image_right_size_big or &amp;quot;80px&amp;quot;)&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	out.blurb_text:attr(&amp;#039;colspan&amp;#039;,&lt;br /&gt;
		(banner_config.image_left and 1 or 0) +&lt;br /&gt;
		(banner_config.image_right and 1 or 0) + &lt;br /&gt;
		1&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	if banner_config.portal then&lt;br /&gt;
		local m_portal = require(&amp;quot;Module:Portal&amp;quot;)&lt;br /&gt;
		out.blurb_text:wikitext(m_portal._portal({ banner_config.portal }, {}))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local project_link = banner_config.project_link or (&amp;quot;Wikipedia:WikiProject &amp;quot; .. banner_config.project)&lt;br /&gt;
	local project_name = banner_config.project_name or (&amp;quot;WikiProject &amp;quot; .. banner_config.project)&lt;br /&gt;
	if banner_config.blurb then&lt;br /&gt;
		out.blurb_text:wikitext(banner_config.blurb)&lt;br /&gt;
	else&lt;br /&gt;
		local project_scope = banner_config.project_scope or (&amp;quot;[[&amp;quot; .. banner_config.project .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		local project_link_talk = project_link:gsub(&amp;quot;^Wikipedia:&amp;quot;, &amp;quot;Wikipedia talk:&amp;quot;) -- XXX: avoiding title objects because they are &amp;quot;expensive&amp;quot; to create&lt;br /&gt;
		&lt;br /&gt;
		out.blurb_text:wikitext((&lt;br /&gt;
			&amp;quot;This %s is within the scope of &amp;#039;&amp;#039;&amp;#039;[[%s|%s]]&amp;#039;&amp;#039;&amp;#039;, a collaborative effort &amp;quot; ..&lt;br /&gt;
			&amp;quot;to improve the coverage of %s on Wikipedia. If you would like to participate, &amp;quot; ..&lt;br /&gt;
			&amp;quot;please visit the project page, where you can join the [[%s|discussion]] and &amp;quot; ..&lt;br /&gt;
			&amp;quot;see a list of open tasks.&amp;quot;&lt;br /&gt;
		):format(&lt;br /&gt;
			page_type, project_link, project_name,&lt;br /&gt;
			project_scope, project_link_talk&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	out.header_name:wikitext((&amp;quot;[[%s|%s]]&amp;quot;):format(project_link, project_name))&lt;br /&gt;
&lt;br /&gt;
	function out.row_pair(in_more)&lt;br /&gt;
		local parent = out.content&lt;br /&gt;
		if in_more then&lt;br /&gt;
			out.has_more = true&lt;br /&gt;
			parent = out.content_more&lt;br /&gt;
		end&lt;br /&gt;
		local row = parent:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		local cell_img, cell_text&lt;br /&gt;
		&lt;br /&gt;
		cell_img = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
		cell_text = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
		return cell_img, cell_text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- normalise parameters&lt;br /&gt;
	local quality_grade, quality_grade_status = resolve_grade(&lt;br /&gt;
		banner_config.quality_scale,&lt;br /&gt;
		quality_scales,&lt;br /&gt;
		quality_grades,&lt;br /&gt;
		banner_args, &amp;#039;class&amp;#039;,&lt;br /&gt;
		title&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	if quality_grade_status == &amp;#039;invalid&amp;#039; then&lt;br /&gt;
		-- TODO: add a category&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local imp_grade, imp_grade_status&lt;br /&gt;
	if quality_grade and quality_grade.force_imp then&lt;br /&gt;
		imp_grade, imp_grade_status = quality_grade.force_imp, &amp;#039;forced&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		imp_grade, imp_grade_status = resolve_grade(&lt;br /&gt;
			banner_config.importance_scale,&lt;br /&gt;
			importance_scales,&lt;br /&gt;
			importance_grades,&lt;br /&gt;
			banner_args, banner_config.importance_param or &amp;#039;importance&amp;#039;,&lt;br /&gt;
			title&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if imp_grade_status == &amp;#039;invalid&amp;#039; then&lt;br /&gt;
		-- TODO: add a category&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if quality_grade then&lt;br /&gt;
		out.qual_label, out.qual_text = out.row_pair()&lt;br /&gt;
		out.qual_label&lt;br /&gt;
			:addClass(&amp;#039;assess&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;white-space&amp;#039;, &amp;#039;nowrap&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;background&amp;#039;, quality_grade.color)&lt;br /&gt;
&lt;br /&gt;
		if quality_grade.icon then&lt;br /&gt;
			out.qual_label&lt;br /&gt;
				:wikitext(&amp;#039;[[File:&amp;#039; .. quality_grade.icon .. &amp;#039;|16px]] &amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		out.qual_label:wikitext(quality_grade.short)&lt;br /&gt;
		out.qual_text:wikitext((&amp;quot;This %s %s on the project&amp;#039;s [[%s|quality scale]].&amp;quot;):format(&lt;br /&gt;
			page_type, quality_grade.rated_text or&lt;br /&gt;
			&amp;quot;has been rated as &amp;#039;&amp;#039;&amp;#039;&amp;quot; .. quality_grade.full .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
			banner_config.quality_scale_link or&lt;br /&gt;
			(project_link .. &amp;quot;/Assessment#Quality scale&amp;quot;)&lt;br /&gt;
		))&lt;br /&gt;
	&lt;br /&gt;
		-- TODO: add a category&lt;br /&gt;
		-- TODO: assessment checklists&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if imp_grade then&lt;br /&gt;
		out.imp_label, out.imp_text = out.row_pair()&lt;br /&gt;
		out.imp_label&lt;br /&gt;
			:addClass(&amp;#039;import&amp;#039;)	&lt;br /&gt;
			:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;white-space&amp;#039;, &amp;#039;nowrap&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;background&amp;#039;, imp_grade.color)&lt;br /&gt;
		out.imp_label:wikitext(imp_grade.name)&lt;br /&gt;
		out.imp_text:wikitext((&amp;quot;This %s %s on the project&amp;#039;s [[%s|importance scale]].&amp;quot;):format(&lt;br /&gt;
			page_type, quality_grade.rated_text or&lt;br /&gt;
			&amp;quot;has been rated as &amp;#039;&amp;#039;&amp;#039;&amp;quot; .. imp_grade.name .. &amp;quot;-importance&amp;#039;&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
			banner_config.importance_scale_link or&lt;br /&gt;
			(project_link .. &amp;quot;/Assessment#Importance scale&amp;quot;)&lt;br /&gt;
		))&lt;br /&gt;
&lt;br /&gt;
		-- TODO: add a category&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- rating text for banner headers inside {{WikiProjectBannerShell}}&lt;br /&gt;
	if quality_grade or imp_grade then&lt;br /&gt;
		out.header_rating:wikitext(&amp;quot;(Rated &amp;quot;)&lt;br /&gt;
		if quality_grade then&lt;br /&gt;
			out.header_rating:wikitext(quality_grade.short)&lt;br /&gt;
			if imp_grade then&lt;br /&gt;
				out.header_rating:wikitext(&amp;quot;, &amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if imp_grade then&lt;br /&gt;
			out.header_rating:wikitext(imp_grade.name .. &amp;quot;-importance&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		out.header_rating:wikitext(&amp;quot;)&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- field, like in {{WikiProject Systems}} or {{Maths rating}}&lt;br /&gt;
	if banner_config.field then&lt;br /&gt;
		local field_config = banner_config.field&lt;br /&gt;
		local field&lt;br /&gt;
&lt;br /&gt;
		if banner_args ~= true then&lt;br /&gt;
			field = false&lt;br /&gt;
			local field_id = banner_args[field_config.arg_name or &amp;#039;field&amp;#039;]&lt;br /&gt;
			&lt;br /&gt;
			if field_id then&lt;br /&gt;
				field = field_config.fields[field_id]&lt;br /&gt;
				if type(field) == &amp;#039;string&amp;#039; then&lt;br /&gt;
					field = field_config.fields[field]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		out.field_icon, out.field_text = out.row_pair()&lt;br /&gt;
		if field then&lt;br /&gt;
			out.field_icon:wikitext((&amp;quot;[[File:%s|link=%s]]&amp;quot;):format(&lt;br /&gt;
				field.icon, field.link&lt;br /&gt;
			))&lt;br /&gt;
			out.field_text:wikitext((&amp;quot;This %s is within the field of [[%s|%s]].&amp;quot;):format(&lt;br /&gt;
				page_type, field.link, field.name&lt;br /&gt;
			))&lt;br /&gt;
		else&lt;br /&gt;
			out.field_icon:wikitext((&amp;quot;[[File:Purple question mark.svg|link=%s]]&amp;quot;):format(&lt;br /&gt;
				field_config.unassessed_link&lt;br /&gt;
			))&lt;br /&gt;
			out.field_text:wikitext((&amp;quot;This %s is [[%s|not associated with a particular field]].&amp;quot;):format(&lt;br /&gt;
				page_type, field_config.unassessed_link&lt;br /&gt;
			))&lt;br /&gt;
&lt;br /&gt;
			if field == false then&lt;br /&gt;
				-- TODO: add a category because an invalid field has been specified&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- task forces&lt;br /&gt;
	for _, tf_info in ipairs(banner_config.task_forces or {}) do&lt;br /&gt;
		-- TODO: is this row needed?&lt;br /&gt;
		local needed = (banner_args == true) or banner_args[tf_info.param]&lt;br /&gt;
		if tf_info.force then -- {{WikiProject Software}} forces WikiProject Computing&amp;#039;s banner for example&lt;br /&gt;
			needed = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if needed then&lt;br /&gt;
			local short_name = tf_info.short_name or tf_info.name&lt;br /&gt;
			if tf_info.link then&lt;br /&gt;
				out.header_name:wikitext((&amp;quot; / [[%s|%s]]&amp;quot;):format(tf_info.link, short_name))&lt;br /&gt;
			else&lt;br /&gt;
				out.header_name:wikitext((&amp;quot; / %s&amp;quot;):format(short_name))&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			local node_icon, node_text = out.row_pair()&lt;br /&gt;
			&lt;br /&gt;
			if tf_info.icon then&lt;br /&gt;
				node_icon:wikitext((&amp;#039;[[File:%s|x25px|link=%s]]&amp;#039;):format(tf_info.icon, tf_info.link or &amp;#039;&amp;#039;))&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- TODO: node_text:wikitext(&amp;quot;This %s is supported by %s.&amp;quot;)&lt;br /&gt;
			-- TODO: add categories&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- requests and other notices (photograph, maps, attention, etc.)&lt;br /&gt;
	for _, nt_info in ipairs(banner_config.notices or { stock_notices.auto, stock_notices.attention }) do&lt;br /&gt;
		if type(nt_info) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			nt_info = stock_notices[nt_info] or&lt;br /&gt;
				error(&amp;quot;Invalid stock notice &amp;#039;&amp;quot; .. nt_info .. &amp;quot;&amp;#039; specified in banner configuration&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local needed = (banner_args == true) or banner_args[nt_info.param]&lt;br /&gt;
&lt;br /&gt;
		if needed then&lt;br /&gt;
			local node_icon, node_text = out.row_pair()&lt;br /&gt;
&lt;br /&gt;
			if nt_info.icon then&lt;br /&gt;
				node_icon:wikitext((&amp;#039;[[File:%s|x25px|link=%s]]&amp;#039;):format(nt_info.icon, nt_info.link or &amp;#039;&amp;#039;))&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- TODO: fill node_text&lt;br /&gt;
			-- TODO: add categories&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if out.has_more then&lt;br /&gt;
		out.content:wikitext(tostring(out.content_more))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.render_banner(frame)&lt;br /&gt;
	local banner_name, is_templ = frame:getParent():getTitle():gsub(&amp;quot;^Template:&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	banner_name = banner_name:match(&amp;quot;^(.*)/sandbox$&amp;quot;) or banner_name&lt;br /&gt;
	if is_templ == 0 then&lt;br /&gt;
		error(&amp;quot;This module must be invoked from within a template&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local demo = false&lt;br /&gt;
	if mw.isSubsting() then&lt;br /&gt;
		local result = { }&lt;br /&gt;
		for key, value in pairs(frame:getParent().args) do&lt;br /&gt;
			table.insert(result, &amp;quot;|&amp;quot; .. key .. &amp;quot;=&amp;quot; .. value)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return &amp;quot;{{&amp;quot; .. banner_name .. table.concat(result) .. &amp;quot;}}&amp;quot;&lt;br /&gt;
	elseif mw.title.getCurrentTitle().fullText == frame:getParent():getTitle() then&lt;br /&gt;
		demo = true&lt;br /&gt;
	elseif mw.title.getCurrentTitle().namespace == mw.site.namespaces.Module.id then&lt;br /&gt;
		-- we are viewing it on the banner config page (?)&lt;br /&gt;
		demo = true	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local banner_args, unused_args&lt;br /&gt;
	if not demo then&lt;br /&gt;
		banner_args, unused_args = track_usage(frame:getParent().args)&lt;br /&gt;
	else&lt;br /&gt;
		banner_args, unused_args = frame:getParent().args, {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local success, banner_config, banner_data&lt;br /&gt;
&lt;br /&gt;
	success, banner_config = pcall(mw.loadData, &amp;quot;Module:WikiProjectBanner/config/&amp;quot; .. banner_name)&lt;br /&gt;
	if not success then&lt;br /&gt;
		error(&amp;quot;Banner data page [[Module:WikiProjectBanner/config/&amp;quot; .. banner_name .. &amp;quot;]] does not exist&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	success, banner_hooks = pcall(require, &amp;quot;Module:WikiProjectBanner/config/&amp;quot; .. banner_name .. &amp;quot;/hooks&amp;quot;) or {}&lt;br /&gt;
	if not success then&lt;br /&gt;
		banner_hooks = {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local out, categories = {}, {}&lt;br /&gt;
&lt;br /&gt;
	export.build_banner(&lt;br /&gt;
		banner_config, banner_hooks,                      -- banner config&lt;br /&gt;
		mw.title.getCurrentTitle(), demo or banner_args,  -- current environment&lt;br /&gt;
		out, categories                                   -- output&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	if next(unused_args) then&lt;br /&gt;
		-- TODO: output a category for unused arguments&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- categories&lt;br /&gt;
	local sort_key = banner_args.listas or mw.title.getCurrentTitle().text&lt;br /&gt;
	if (#categories &amp;gt; 0) and yesno(banner_args.category, true) then&lt;br /&gt;
		categories = &amp;quot;[[Category:&amp;quot; .. table.concat(categories, &amp;quot;|&amp;quot; .. sort_key .. &amp;quot;]][[Category:&amp;quot;) .. &amp;quot;|&amp;quot; .. sort_key .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		categories = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(out.root) .. categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>imported&gt;Kephir</name></author>
	</entry>
</feed>