<?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%3AWikiProject</id>
	<title>Module:WikiProject - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikiProject"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:WikiProject&amp;action=history"/>
	<updated>2026-05-27T18:04:53Z</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:WikiProject&amp;diff=147652&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:WikiProject&amp;diff=147652&amp;oldid=prev"/>
		<updated>2022-10-22T09:17:03Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
This implements {{WPBannerMeta}}&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local cfg = {&lt;br /&gt;
	[&amp;quot;subst_warning&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;image&amp;quot;] = &amp;#039;[[File:Stop hand nuvola.svg|40px]]&amp;#039;,&lt;br /&gt;
		[&amp;quot;type&amp;quot;] = &amp;#039;content&amp;#039;,&lt;br /&gt;
		-- Lua 5.2 gives us access to \z. Pipe dream upgrade.&lt;br /&gt;
		[&amp;quot;text&amp;quot;] = &amp;#039;&amp;lt;p&amp;gt;It seems that the &amp;lt;i&amp;gt;WikiProject %s&amp;lt;/i&amp;gt; banner has &amp;#039; ..&lt;br /&gt;
			&amp;#039;been [[Wikipedia:Substitution|substituted]] on this page &amp;#039; ..&lt;br /&gt;
			&amp;#039;instead of being [[Wikipedia:Transclusion|transcluded]]. &amp;#039; ..&lt;br /&gt;
			&amp;#039;Please undo the edit and type &amp;lt;code&amp;gt;&amp;amp;#123;&amp;amp;#123;%s&amp;amp;#125;&amp;amp;#125;&amp;#039; ..&lt;br /&gt;
			&amp;#039;&amp;lt;/code&amp;gt; instead.&amp;lt;/p&amp;gt;&amp;#039;,&lt;br /&gt;
		[&amp;quot;categories&amp;quot;] = &amp;#039;&amp;lt;includeonly&amp;gt;[[Category:WikiProject banners with formatting errors|SUBST]]&amp;#039; ..&lt;br /&gt;
			&amp;#039;[[Category:Pages with incorrectly substituted templates]]&amp;lt;/includeonly&amp;gt;&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;namespace_warning&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;image&amp;quot;] = &amp;#039;[[File:Ambox important.svg|40px]]&amp;#039;,&lt;br /&gt;
		[&amp;quot;type&amp;quot;] = &amp;#039;content&amp;#039;,&lt;br /&gt;
		-- Lua 5.2 gives us access to \z. Pipe dream upgrade.&lt;br /&gt;
		[&amp;quot;text&amp;quot;] = &amp;#039;&amp;lt;p&amp;gt;The WikiProject banner below should be moved to this &amp;#039; ..&lt;br /&gt;
			&amp;#039;%s\&amp;#039;s &amp;lt;b&amp;gt;[[%s|talk page]]&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;p style=&amp;quot;font-size:95%%&amp;quot;&amp;gt;If &amp;#039; ..&lt;br /&gt;
			&amp;#039;this is a demonstration of the template, please set the &amp;#039; ..&lt;br /&gt;
			&amp;#039;parameter %s to prevent this page being miscategorised. %s&amp;lt;/p&amp;gt;&amp;#039; ..&lt;br /&gt;
			&amp;#039;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; When merging or renaming banners, categories, &amp;#039; ..&lt;br /&gt;
			&amp;#039;projects or taskforces, you may need to update &amp;#039; ..&lt;br /&gt;
			&amp;#039;[[WP:AALERTS/LIST]] for [[WP:AALERTS|Article Alerts]] to work &amp;#039; ..&lt;br /&gt;
			&amp;#039;correctly (ask for help at [[WT:AALERTS]]).&amp;#039;,&lt;br /&gt;
		[&amp;quot;on_template_page&amp;quot;] = &amp;#039;If this message appears on the template &amp;#039; ..&lt;br /&gt;
			&amp;#039;page itself, please check that the value of the %s parameter &amp;#039; ..&lt;br /&gt;
			&amp;#039;is correctly set to &amp;lt;kbd&amp;gt;%s&amp;lt;/kbd&amp;gt;.&amp;#039;,&lt;br /&gt;
		[&amp;quot;categories&amp;quot;] = &amp;#039;&amp;lt;includeonly&amp;gt;[[Category:WikiProject banners with &amp;#039; ..&lt;br /&gt;
			&amp;#039;formatting errors|%s]]&amp;lt;/includeonly&amp;gt;&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Make it cleaner to initialize &amp;#039;trivial&amp;#039; variables.&lt;br /&gt;
local function arg_or_default(args, from_arg, default)&lt;br /&gt;
	if args[from_arg] and args[from_arg] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		return args[from_arg]&lt;br /&gt;
	else&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wikilink(link, display)&lt;br /&gt;
	if display then&lt;br /&gt;
		return &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;#039; .. display .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;[[&amp;#039; .. link .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function warn_on_subst(subst, project, banner_name, suppress_categories)&lt;br /&gt;
	if subst ~= &amp;#039;SUBST&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local target_name&lt;br /&gt;
	if banner_name then&lt;br /&gt;
		target_name = mw.title.new( banner_name ).text&lt;br /&gt;
	else&lt;br /&gt;
		target_name = &amp;#039;WikiProject &amp;#039; .. project&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local warning = require(&amp;#039;Module:Message box&amp;#039;).main( &amp;#039;ombox&amp;#039;, {&lt;br /&gt;
		image = cfg.subst_warning.image,&lt;br /&gt;
		type = cfg.subst_warning.type,&lt;br /&gt;
		text = string.format(cfg.subst_warning.text, project, target_name)&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	local categories&lt;br /&gt;
	if suppress_categories then&lt;br /&gt;
		categories = &amp;#039;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		-- Is the intent of &amp;lt;includeonly&amp;gt; only to add it to the banner invocation&lt;br /&gt;
		-- and not elsewhere? TODO: Check docs.&lt;br /&gt;
		categories = cfg.subst_warning.categories&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return warning .. categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- move the if category check out of this function&lt;br /&gt;
local function is_banner_page(banner_name, project)&lt;br /&gt;
	&lt;br /&gt;
	local target_name&lt;br /&gt;
	if banner_name then&lt;br /&gt;
		target_name = banner_name&lt;br /&gt;
	else&lt;br /&gt;
		target_name = &amp;#039;Template:WikiProject &amp;#039; .. project&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local current_title = mw.title.getCurrentTitle()&lt;br /&gt;
	local prefixed_title = current_title.prefixedText&lt;br /&gt;
	local root_title = current_title.nsText .. &amp;#039;:&amp;#039; .. current_title.rootText&lt;br /&gt;
	&lt;br /&gt;
	return target_name == prefixed_title or target_name == root_title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function warn_on_namespace(category, project, banner_name, suppress_categories)&lt;br /&gt;
	local current_title = mw.title.getCurrentTitle()&lt;br /&gt;
	local current_namespace = current_title.nsText&lt;br /&gt;
	local current_subjectspace = current_title.subjectNsText&lt;br /&gt;
	&lt;br /&gt;
	if current_namespace ~= current_subjectspace or -- if talk page or&lt;br /&gt;
		current_namespace == &amp;#039;User&amp;#039; then -- if user page&lt;br /&gt;
			-- then don&amp;#039;t warn&lt;br /&gt;
			-- why user pages?&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if category == &amp;#039;no&amp;#039; then return &amp;#039;&amp;#039; end -- if no cat then don&amp;#039;t warn?&lt;br /&gt;
	if is_banner_page(banner_name, project) then return &amp;#039;&amp;#039; end -- if a banner (sub)page don&amp;#039;t warn&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local para_category = frame:expandTemplate{&lt;br /&gt;
		title = &amp;#039;para&amp;#039;,&lt;br /&gt;
		args = {&amp;#039;category&amp;#039;, &amp;#039;no&amp;#039;}&lt;br /&gt;
	}&lt;br /&gt;
	local para_banner_name = frame:expandTemplate{&lt;br /&gt;
		title = &amp;#039;para&amp;#039;,&lt;br /&gt;
		args = {&amp;#039;BANNER_NAME&amp;#039;}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local on_template_page&lt;br /&gt;
	if current_namespace == &amp;#039;Template&amp;#039; then&lt;br /&gt;
		on_template_page = string.format(&lt;br /&gt;
			cfg.namespace_warning.on_template_page,&lt;br /&gt;
			para_banner_name,&lt;br /&gt;
			current_title.nsText .. &amp;#039;:&amp;#039; .. current_title.rootText&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		on_template_page = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local warning = require(&amp;#039;Module:Message box&amp;#039;).main( &amp;#039;ombox&amp;#039;, {&lt;br /&gt;
		image = cfg.namespace_warning.image,&lt;br /&gt;
		type = cfg.namespace_warning.type,&lt;br /&gt;
		text = string.format(&lt;br /&gt;
			cfg.namespace_warning.text,&lt;br /&gt;
			require(&amp;#039;Module:Pagetype&amp;#039;)._main({}), -- empty args table for pagetype&lt;br /&gt;
			current_title.talkPageTitle.fullText,&lt;br /&gt;
			para_category,&lt;br /&gt;
			on_template_page&lt;br /&gt;
		)&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	local category&lt;br /&gt;
	if suppress_categories then&lt;br /&gt;
		category = &amp;#039;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		local sortkey&lt;br /&gt;
		if current_namespace == &amp;#039;Template&amp;#039; then&lt;br /&gt;
			sortkey = &amp;quot;PARAMETER&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			sortkey = &amp;quot;LOCATION&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		category = string.format(&lt;br /&gt;
			cfg.namespace_warning.categories,&lt;br /&gt;
			sortkey&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return warning .. category&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function status_class(project_status)&lt;br /&gt;
	local status_classes = {&lt;br /&gt;
		[&amp;#039;inactive-wikiproject&amp;#039;] = { &amp;#039;inactive&amp;#039; },&lt;br /&gt;
		[&amp;#039;semi-active-wikiproject&amp;#039;] = { &amp;#039;semi-active&amp;#039;, &amp;#039;semiactive&amp;#039; },&lt;br /&gt;
		[&amp;#039;defunct-wikiproject&amp;#039;] = { &amp;#039;defunct&amp;#039; },&lt;br /&gt;
		[&amp;#039;active-wikiproject&amp;#039;] = { &amp;#039;active&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	for v, k_table in ipairs(status_classes) do&lt;br /&gt;
		for _, k in ipairs(k_table) do&lt;br /&gt;
			if v == k then &lt;br /&gt;
				return v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Provides the list of task forces (for now)&lt;br /&gt;
local function task_forces(args)&lt;br /&gt;
	local task_forces = {}&lt;br /&gt;
	for k, v in ipairs(args) do&lt;br /&gt;
		if mw.ustring.find(k, &amp;#039;tf (%d+)&amp;#039;) then&lt;br /&gt;
			table.insert(task_forces, mw.ustring.find(k, &amp;#039;tf[ _](%d+)&amp;#039;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return task_forces&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function render_task_force(task_force, all_task_forces)&lt;br /&gt;
	local text = task_force.text&lt;br /&gt;
	local image = task_force.image&lt;br /&gt;
	local portal = task_force.portal&lt;br /&gt;
	local link = task_force.link&lt;br /&gt;
	local name = task_force.name&lt;br /&gt;
	 -- pretty sure we don&amp;#039;t want to deal with nested here&lt;br /&gt;
--	local nested = task_force.nested&lt;br /&gt;
	-- pretty sure we don&amp;#039;t want to deal with exists here&lt;br /&gt;
--	local exists = task_force.exists&lt;br /&gt;
	local quality = task_force.quality&lt;br /&gt;
	local importance = task_force.importance&lt;br /&gt;
	local assessment_category = task_force.assessment_category&lt;br /&gt;
	local main_category = task_force.main_category&lt;br /&gt;
	&lt;br /&gt;
	local image_size = all_task_forces.image_size&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function nested_names(args)&lt;br /&gt;
&lt;br /&gt;
	local nested_names = {}&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, 5 do&lt;br /&gt;
		if args[&amp;#039;tf_&amp;#039; .. i] and args[&amp;#039;tf_&amp;#039; .. i] == &amp;#039;yes&amp;#039; and args[&amp;#039;TF_&amp;#039; .. i .. &amp;#039;_NESTED&amp;#039;]&lt;br /&gt;
		and args[&amp;#039;TF_&amp;#039; .. i .. &amp;#039;_NESTED&amp;#039;] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			table.insert(&lt;br /&gt;
				nested_names,&lt;br /&gt;
				mw.ustring.format(&lt;br /&gt;
					&amp;#039;/ %s&amp;amp;nbsp;&amp;#039;,&lt;br /&gt;
					wikilink(args[&amp;#039;TF_&amp;#039; .. i .. &amp;#039;_LINK&amp;#039;], args[&amp;#039;TF_&amp;#039; .. i .. &amp;#039;_LINK&amp;#039;])&lt;br /&gt;
				)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(&lt;br /&gt;
		nested_names,&lt;br /&gt;
		hook_nested&lt;br /&gt;
	)&lt;br /&gt;
	return table.concat(nested_names)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function banner(project_status, project_link, project_name)&lt;br /&gt;
	local banner = mw.html.create()&lt;br /&gt;
	banner:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;tmbox tmbox-notice mw-collapsible innercollapse wpb&amp;#039;)&lt;br /&gt;
		:addClass(status_class(project_status))&lt;br /&gt;
		:css(&amp;#039;height&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
	local title_row = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	title_row:addClass(&amp;#039;wpb-header&amp;#039;)&lt;br /&gt;
		:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:cssText(&amp;#039;text-align:right; padding:0.3em 1em 0.3em 0.3em; width:50%; font-weight:bold;&amp;#039;)&lt;br /&gt;
			:wikitext(wikilink(project_link, project_name) .. &amp;#039;&amp;#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:cssText(&amp;#039;text-align:left; width:50%; padding:0.3em;&amp;#039;)&lt;br /&gt;
			&lt;br /&gt;
			:done()&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	&lt;br /&gt;
	-- Initialize sufficient stuff to do warnings.&lt;br /&gt;
	local subst = arg_or_default(args, &amp;#039;substcheck&amp;#039;, &amp;#039;¬&amp;#039;)&lt;br /&gt;
	local project = arg_or_default(args, &amp;#039;PROJECT&amp;#039;, nil)&lt;br /&gt;
	if not project then error(&amp;#039;PROJECT must be defined&amp;#039;) end&lt;br /&gt;
	&lt;br /&gt;
	-- banner_name should maybe default to &amp;#039;WikiProject&amp;#039; .. project instead&lt;br /&gt;
	-- or possibly &amp;#039;Template:WikiProject&amp;#039; .. project...?&lt;br /&gt;
	local banner_name = arg_or_default(args, &amp;#039;BANNER_NAME&amp;#039;, nil)&lt;br /&gt;
	-- TODO: When done, remove suppress_categories (or convert).&lt;br /&gt;
	local suppress_categories = arg_or_default(args, &amp;#039;suppress&amp;#039;, nil)&lt;br /&gt;
	&lt;br /&gt;
	local subst_warning = warn_on_subst(subst, project, banner_name, suppress_categories)&lt;br /&gt;
	&lt;br /&gt;
	local category = arg_or_default(args, &amp;#039;category&amp;#039;, &amp;#039;¬&amp;#039;)&lt;br /&gt;
	local namespace_warning = warn_on_namespace(category, project, banner_name, suppress_categories)&lt;br /&gt;
	&lt;br /&gt;
--	if category ~= &amp;#039;no&amp;#039; and not is_banner_page(banner_name, project) then&lt;br /&gt;
--		local banner = banner(args) or &amp;#039;&amp;#039; -- TODO&lt;br /&gt;
--	else&lt;br /&gt;
--		local template_page_banner = template_page_banner(args) or &amp;#039;&amp;#039; -- TODO&lt;br /&gt;
--	end&lt;br /&gt;
&lt;br /&gt;
	local project_status = arg_or_default(args, &amp;#039;PROJECT_STATUS&amp;#039;, &amp;#039;active&amp;#039;)&lt;br /&gt;
	local project_link = arg_or_default(args, &amp;#039;PROJECT_LINK&amp;#039;, &amp;#039;Wikipedia:WikiProject &amp;#039; .. project)&lt;br /&gt;
	&lt;br /&gt;
	local banner = banner(project_status, project_link)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	return subst_warning ..&lt;br /&gt;
		namespace_warning&lt;br /&gt;
--		banner ..&lt;br /&gt;
--		template_page_banner&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame)&lt;br /&gt;
	return p._main(args, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>