<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/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://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikiProject"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:WikiProject&amp;action=history"/>
	<updated>2026-06-16T04:59:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:WikiProject&amp;diff=480021&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:WikiProject&amp;diff=480021&amp;oldid=prev"/>
		<updated>2021-07-16T07:58:06Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&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('Module:No globals')&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;] = '[[File:Stop hand nuvola.svg|40px]]',&lt;br /&gt;
		[&amp;quot;type&amp;quot;] = 'content',&lt;br /&gt;
		-- Lua 5.2 gives us access to \z. Pipe dream upgrade.&lt;br /&gt;
		[&amp;quot;text&amp;quot;] = '&amp;lt;p&amp;gt;It seems that the &amp;lt;i&amp;gt;WikiProject %s&amp;lt;/i&amp;gt; banner has ' ..&lt;br /&gt;
			'been [[Wikipedia:Substitution|substituted]] on this page ' ..&lt;br /&gt;
			'instead of being [[Wikipedia:Transclusion|transcluded]]. ' ..&lt;br /&gt;
			'Please undo the edit and type &amp;lt;code&amp;gt;&amp;amp;#123;&amp;amp;#123;%s&amp;amp;#125;&amp;amp;#125;' ..&lt;br /&gt;
			'&amp;lt;/code&amp;gt; instead.&amp;lt;/p&amp;gt;',&lt;br /&gt;
		[&amp;quot;categories&amp;quot;] = '&amp;lt;includeonly&amp;gt;[[Category:WikiProject banners with formatting errors|SUBST]]' ..&lt;br /&gt;
			'[[Category:Pages with incorrectly substituted templates]]&amp;lt;/includeonly&amp;gt;'&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;namespace_warning&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;image&amp;quot;] = '[[File:Ambox important.svg|40px]]',&lt;br /&gt;
		[&amp;quot;type&amp;quot;] = 'content',&lt;br /&gt;
		-- Lua 5.2 gives us access to \z. Pipe dream upgrade.&lt;br /&gt;
		[&amp;quot;text&amp;quot;] = '&amp;lt;p&amp;gt;The WikiProject banner below should be moved to this ' ..&lt;br /&gt;
			'%s\'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 ' ..&lt;br /&gt;
			'this is a demonstration of the template, please set the ' ..&lt;br /&gt;
			'parameter %s to prevent this page being miscategorised. %s&amp;lt;/p&amp;gt;' ..&lt;br /&gt;
			'&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; When merging or renaming banners, categories, ' ..&lt;br /&gt;
			'projects or taskforces, you may need to update ' ..&lt;br /&gt;
			'[[WP:AALERTS/LIST]] for [[WP:AALERTS|Article Alerts]] to work ' ..&lt;br /&gt;
			'correctly (ask for help at [[WT:AALERTS]]).',&lt;br /&gt;
		[&amp;quot;on_template_page&amp;quot;] = 'If this message appears on the template ' ..&lt;br /&gt;
			'page itself, please check that the value of the %s parameter ' ..&lt;br /&gt;
			'is correctly set to &amp;lt;kbd&amp;gt;%s&amp;lt;/kbd&amp;gt;.',&lt;br /&gt;
		[&amp;quot;categories&amp;quot;] = '&amp;lt;includeonly&amp;gt;[[Category:WikiProject banners with ' ..&lt;br /&gt;
			'formatting errors|%s]]&amp;lt;/includeonly&amp;gt;'&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Make it cleaner to initialize 'trivial' variables.&lt;br /&gt;
local function arg_or_default(args, from_arg, default)&lt;br /&gt;
	if args[from_arg] and args[from_arg] ~= '' 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 '[[' .. link .. '|' .. display .. ']]'&lt;br /&gt;
	else&lt;br /&gt;
		return '[[' .. link .. ']]'&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 ~= 'SUBST' then&lt;br /&gt;
		return ''&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 = 'WikiProject ' .. project&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local warning = require('Module:Message box').main( 'ombox', {&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 = ''&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 = 'Template:WikiProject ' .. 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 .. ':' .. 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 == 'User' then -- if user page&lt;br /&gt;
			-- then don't warn&lt;br /&gt;
			-- why user pages?&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	if category == 'no' then return '' end -- if no cat then don't warn?&lt;br /&gt;
	if is_banner_page(banner_name, project) then return '' end -- if a banner (sub)page don't warn&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local para_category = frame:expandTemplate{&lt;br /&gt;
		title = 'para',&lt;br /&gt;
		args = {'category', 'no'}&lt;br /&gt;
	}&lt;br /&gt;
	local para_banner_name = frame:expandTemplate{&lt;br /&gt;
		title = 'para',&lt;br /&gt;
		args = {'BANNER_NAME'}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local on_template_page&lt;br /&gt;
	if current_namespace == 'Template' 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 .. ':' .. current_title.rootText&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		on_template_page = ''&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local warning = require('Module:Message box').main( 'ombox', {&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('Module:Pagetype')._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 = ''&lt;br /&gt;
	else&lt;br /&gt;
		local sortkey&lt;br /&gt;
		if current_namespace == 'Template' 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;
		['inactive-wikiproject'] = { 'inactive' },&lt;br /&gt;
		['semi-active-wikiproject'] = { 'semi-active', 'semiactive' },&lt;br /&gt;
		['defunct-wikiproject'] = { 'defunct' },&lt;br /&gt;
		['active-wikiproject'] = { 'active' }&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, 'tf (%d+)') then&lt;br /&gt;
			table.insert(task_forces, mw.ustring.find(k, 'tf[ _](%d+)'))&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't want to deal with nested here&lt;br /&gt;
--	local nested = task_force.nested&lt;br /&gt;
	-- pretty sure we don'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['tf_' .. i] and args['tf_' .. i] == 'yes' and args['TF_' .. i .. '_NESTED']&lt;br /&gt;
		and args['TF_' .. i .. '_NESTED'] ~= '' then&lt;br /&gt;
			table.insert(&lt;br /&gt;
				nested_names,&lt;br /&gt;
				mw.ustring.format(&lt;br /&gt;
					'/ %s&amp;amp;nbsp;',&lt;br /&gt;
					wikilink(args['TF_' .. i .. '_LINK'], args['TF_' .. i .. '_LINK'])&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('table')&lt;br /&gt;
		:addClass('tmbox tmbox-notice mw-collapsible innercollapse wpb')&lt;br /&gt;
		:addClass(status_class(project_status))&lt;br /&gt;
		:css('height', '0')&lt;br /&gt;
		&lt;br /&gt;
	local title_row = mw.html.create('tr')&lt;br /&gt;
	title_row:addClass('wpb-header')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:cssText('text-align:right; padding:0.3em 1em 0.3em 0.3em; width:50%; font-weight:bold;')&lt;br /&gt;
			:wikitext(wikilink(project_link, project_name) .. '')&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag('th')&lt;br /&gt;
			:cssText('text-align:left; width:50%; padding:0.3em;')&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, 'substcheck', '¬')&lt;br /&gt;
	local project = arg_or_default(args, 'PROJECT', nil)&lt;br /&gt;
	if not project then error('PROJECT must be defined') end&lt;br /&gt;
	&lt;br /&gt;
	-- banner_name should maybe default to 'WikiProject' .. project instead&lt;br /&gt;
	-- or possibly 'Template:WikiProject' .. project...?&lt;br /&gt;
	local banner_name = arg_or_default(args, 'BANNER_NAME', nil)&lt;br /&gt;
	-- TODO: When done, remove suppress_categories (or convert).&lt;br /&gt;
	local suppress_categories = arg_or_default(args, 'suppress', 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, 'category', '¬')&lt;br /&gt;
	local namespace_warning = warn_on_namespace(category, project, banner_name, suppress_categories)&lt;br /&gt;
	&lt;br /&gt;
--	if category ~= 'no' and not is_banner_page(banner_name, project) then&lt;br /&gt;
--		local banner = banner(args) or '' -- TODO&lt;br /&gt;
--	else&lt;br /&gt;
--		local template_page_banner = template_page_banner(args) or '' -- TODO&lt;br /&gt;
--	end&lt;br /&gt;
&lt;br /&gt;
	local project_status = arg_or_default(args, 'PROJECT_STATUS', 'active')&lt;br /&gt;
	local project_link = arg_or_default(args, 'PROJECT_LINK', 'Wikipedia:WikiProject ' .. 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('Module:Arguments').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>Zoran</name></author>
	</entry>
</feed>