<?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%3AWikiProjectBanner</id>
	<title>Module:WikiProjectBanner - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AWikiProjectBanner"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:WikiProjectBanner&amp;action=history"/>
	<updated>2026-06-19T03:34:40Z</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:WikiProjectBanner&amp;diff=480023&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:WikiProjectBanner&amp;diff=480023&amp;oldid=prev"/>
		<updated>2021-07-16T07:58:11Z</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;
--                               WikiProjectBanner                           --&lt;br /&gt;
--                                                                           --&lt;br /&gt;
-- This module produces templates used by WikiProjects to track pages that   --&lt;br /&gt;
-- are within their scope.                                                   --&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Load necessary modules.&lt;br /&gt;
require('Module:No globals')&lt;br /&gt;
local Banner = require('Module:WikiProjectBanner/Banner')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._main(bannerName, args, cfg)&lt;br /&gt;
	-- Entry point from Lua.&lt;br /&gt;
	cfg = cfg or mw.loadData('Module:WikiProjectBanner/config')&lt;br /&gt;
&lt;br /&gt;
	-- Set a metatable allowing us to track unused arguments.&lt;br /&gt;
	local unusedArgs, argsProxy = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		unusedArgs[k] = true&lt;br /&gt;
	end&lt;br /&gt;
	setmetatable(argsProxy, {&lt;br /&gt;
		__index = function (t, key)&lt;br /&gt;
			unusedArgs[key] = nil&lt;br /&gt;
			local val = args[key]&lt;br /&gt;
			t[key] = val&lt;br /&gt;
			return val&lt;br /&gt;
		end,&lt;br /&gt;
		__pairs = function (t)&lt;br /&gt;
			for key, val in pairs(args) do&lt;br /&gt;
				unusedArgs[key] = nil&lt;br /&gt;
				t[key] = val&lt;br /&gt;
			end&lt;br /&gt;
			return next, t&lt;br /&gt;
		end,&lt;br /&gt;
		__ipairs = function (t)&lt;br /&gt;
			for i, val in ipairs(args) do&lt;br /&gt;
				unusedArgs[i] = nil&lt;br /&gt;
				t[i] = val&lt;br /&gt;
			end&lt;br /&gt;
			return function (t, i)&lt;br /&gt;
				i = i + 1&lt;br /&gt;
				local val = t[i]&lt;br /&gt;
				if val then&lt;br /&gt;
					return i, val&lt;br /&gt;
				end&lt;br /&gt;
			end, t, 0&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	local success, bannerObj = pcall(Banner.new, bannerName, argsProxy, cfg)&lt;br /&gt;
	if not success then&lt;br /&gt;
		return string.format(&lt;br /&gt;
			'&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Error: %s&amp;lt;/strong&amp;gt;',&lt;br /&gt;
			bannerObj -- This is the error message.&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret = tostring(bannerObj)&lt;br /&gt;
&lt;br /&gt;
	if next(unusedArgs) then&lt;br /&gt;
		ret = ret .. '[[Category:WikiProject banners with unused arguments]]'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	-- Entry point from wikitext.&lt;br /&gt;
&lt;br /&gt;
	-- Get the banner name.&lt;br /&gt;
	local parent = frame:getParent()&lt;br /&gt;
	local bannerName, isTemplate = parent:getTitle():gsub('^Template:', '')&lt;br /&gt;
	bannerName = bannerName:gsub('/sandbox$', '')&lt;br /&gt;
	isTemplate = isTemplate &amp;gt; 0&lt;br /&gt;
&lt;br /&gt;
	-- Get the arguments.&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(parent.args) do&lt;br /&gt;
		v = v:match('^%s*(.-)%s*$') -- Trim whitespace.&lt;br /&gt;
		if v ~= '' then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Subst check.&lt;br /&gt;
	-- This must be done before any errors can be produced, otherwise the red&lt;br /&gt;
	-- &amp;quot;script error&amp;quot; text will be substituted instead of the template code.&lt;br /&gt;
	if mw.isSubsting() then&lt;br /&gt;
		local ret = {}&lt;br /&gt;
		ret[#ret + 1] = bannerName&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			ret[#ret + 1] = k .. '=' .. v&lt;br /&gt;
		end&lt;br /&gt;
		return '{{' .. table.concat(ret, '|') .. '}}'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check we are being invoked from a template.&lt;br /&gt;
	if not isTemplate then&lt;br /&gt;
		error('this module must be invoked from within a template')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return p._main(bannerName, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>