<?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%3AClass_mask</id>
	<title>Module:Class mask - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AClass_mask"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Class_mask&amp;action=history"/>
	<updated>2026-06-30T20:34:33Z</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:Class_mask&amp;diff=471302&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:Class_mask&amp;diff=471302&amp;oldid=prev"/>
		<updated>2021-07-15T21:03:05Z</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;-- This module implements [[Template:Class mask]].&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function getDocWarning(title)&lt;br /&gt;
	if title.namespace == 10 and title.subpageText == 'class' then&lt;br /&gt;
		return mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
			title = 'Class mask/doc warning'&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function trim(s)&lt;br /&gt;
	return s:match('^%s*(.-)%s*$')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ucfirst(s)&lt;br /&gt;
	-- Returns the given string with the first character in upper case.&lt;br /&gt;
	-- Should not be used with non-ascii strings.&lt;br /&gt;
	return s:sub(1, 1):upper() .. s:sub(2, -1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isTruthyBParam(s)&lt;br /&gt;
	s = s and s:lower()&lt;br /&gt;
	return not s or s == 'yes' or s == 'y' or s == '1' or s == 'pass' or s == 'na' or s == 'n/a' or s == '¬' or s == 'unused'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function resolveFQSgrade(grade, args)&lt;br /&gt;
	if (args[grade] or args.FQS) == 'yes' then&lt;br /&gt;
		return ucfirst(grade)&lt;br /&gt;
	else&lt;br /&gt;
		return 'NA'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function resolveExtraGrade(grade, args)&lt;br /&gt;
	if args[grade] == 'yes' then&lt;br /&gt;
		return ucfirst(grade)&lt;br /&gt;
	else&lt;br /&gt;
		return 'NA'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function resolveDefaultGrade(args, title, talkDefault)&lt;br /&gt;
	local ns = title.namespace&lt;br /&gt;
	if ns == 1 then -- Talk&lt;br /&gt;
		return talkDefault&lt;br /&gt;
	elseif ns == 7 then -- File talk&lt;br /&gt;
		return resolveFQSgrade('file', args)&lt;br /&gt;
	elseif ns == 15 then -- Category talk&lt;br /&gt;
		return resolveFQSgrade('category', args)&lt;br /&gt;
	elseif ns == 101 then -- Portal talk&lt;br /&gt;
		return resolveFQSgrade('portal', args)&lt;br /&gt;
	elseif ns == 11 then -- Template talk&lt;br /&gt;
		return resolveFQSgrade('template', args)&lt;br /&gt;
	elseif ns == 5 then -- Wikipedia talk&lt;br /&gt;
		return resolveFQSgrade('project', args)&lt;br /&gt;
	elseif ns == 119 then -- Draft talk&lt;br /&gt;
		return resolveFQSgrade('draft', args)&lt;br /&gt;
	elseif ns == 109 then -- Book talk&lt;br /&gt;
		return resolveExtraGrade('book', args)&lt;br /&gt;
	else&lt;br /&gt;
		return 'NA'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getGrade(args, title)&lt;br /&gt;
	local grade = args[1]&lt;br /&gt;
	-- We use string.lower here as it's faster than mw.ustring.lower and none&lt;br /&gt;
	-- of the standard grades have non-Ascii characters.&lt;br /&gt;
	grade = grade and trim(grade):lower()&lt;br /&gt;
&lt;br /&gt;
	local ret&lt;br /&gt;
&lt;br /&gt;
	-- Undefined&lt;br /&gt;
	if not grade or grade == '¬' then&lt;br /&gt;
		ret = '¬'&lt;br /&gt;
&lt;br /&gt;
	-- Blank or empty&lt;br /&gt;
	elseif grade == '' then&lt;br /&gt;
		ret = args['']&lt;br /&gt;
&lt;br /&gt;
	-- Ucfirst&lt;br /&gt;
	-- We put these near the start as they are probably the most common grades&lt;br /&gt;
	-- on the site. The other grades are also roughly in order of prevalence.&lt;br /&gt;
	elseif grade == 'start' or grade == 'stub' or grade == 'list' then&lt;br /&gt;
		if args[grade] ~= 'no' then&lt;br /&gt;
			ret = ucfirst(grade)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	-- B&lt;br /&gt;
	elseif grade == 'b' then&lt;br /&gt;
		local bParams = {'b1', 'b2', 'b3', 'b4', 'b5', 'b6'}&lt;br /&gt;
		local isExtended = false&lt;br /&gt;
		for _, param in ipairs(bParams) do&lt;br /&gt;
			if args[param] then&lt;br /&gt;
				isExtended = true&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if isExtended then&lt;br /&gt;
			local isB = true&lt;br /&gt;
			for _, param in ipairs(bParams) do&lt;br /&gt;
				if not isTruthyBParam(args[param]) then&lt;br /&gt;
					isB = false&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			ret = isB and 'B' or 'C'&lt;br /&gt;
		elseif args.b ~= 'no' then&lt;br /&gt;
			ret = 'B'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	-- Upper-case&lt;br /&gt;
	elseif grade == 'fa' or grade == 'fl' or grade == 'a' or grade == 'ga' or grade == 'c' then&lt;br /&gt;
		if args[grade] ~= 'no' then&lt;br /&gt;
			ret = grade:upper()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	-- NA&lt;br /&gt;
	elseif grade == 'na' then&lt;br /&gt;
		if args.forceNA == 'yes' then&lt;br /&gt;
			ret = resolveDefaultGrade(args, title, 'NA')&lt;br /&gt;
		else&lt;br /&gt;
			ret = 'NA'&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	-- File&lt;br /&gt;
	elseif grade == 'file' or grade == 'image' or grade == 'img' then&lt;br /&gt;
		ret = resolveFQSgrade('file', args)&lt;br /&gt;
&lt;br /&gt;
	-- Category&lt;br /&gt;
	elseif grade == 'category' or grade == 'cat' or grade == 'categ' then&lt;br /&gt;
		ret = resolveFQSgrade('category', args)&lt;br /&gt;
&lt;br /&gt;
	-- Disambguation&lt;br /&gt;
	elseif grade == 'dab' or grade == 'disambig' or grade == 'disambiguation' or grade == 'disamb' then&lt;br /&gt;
		ret = resolveFQSgrade('disambig', args)&lt;br /&gt;
&lt;br /&gt;
	-- Redirect&lt;br /&gt;
	elseif grade == 'redirect' or grade == 'red' or grade == 'redir' then&lt;br /&gt;
		ret = resolveExtraGrade('redirect', args)&lt;br /&gt;
&lt;br /&gt;
	-- Portal, Project and Draft&lt;br /&gt;
	elseif grade == 'portal' or grade == 'project' or grade == 'draft' then&lt;br /&gt;
		ret = resolveFQSgrade(grade, args)&lt;br /&gt;
&lt;br /&gt;
	-- Template&lt;br /&gt;
	elseif grade == 'template' or grade == 'temp' or grade == 'tpl' or grade == 'templ' then&lt;br /&gt;
		ret = resolveFQSgrade('template', args)&lt;br /&gt;
&lt;br /&gt;
	-- Book&lt;br /&gt;
	elseif grade == 'book' then&lt;br /&gt;
		ret = resolveExtraGrade('book', args)&lt;br /&gt;
&lt;br /&gt;
	-- FM&lt;br /&gt;
	elseif grade == 'fm' then&lt;br /&gt;
		if args.fm == 'yes' then&lt;br /&gt;
			ret = 'FM'&lt;br /&gt;
		else&lt;br /&gt;
			ret = resolveFQSgrade('file', args)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		-- We can't guarantee that we will only have Ascii grades any more, so&lt;br /&gt;
		-- normalize the grade again using mw.ustring where necessary. &lt;br /&gt;
		local trimmedGrade = trim(args[1])&lt;br /&gt;
&lt;br /&gt;
		-- Upper-case syntax&lt;br /&gt;
		ret = args[mw.ustring.upper(trimmedGrade)]&lt;br /&gt;
&lt;br /&gt;
		-- Lower-case syntax&lt;br /&gt;
		if not ret then&lt;br /&gt;
			local normalizedGrade = mw.ustring.lower(grade)&lt;br /&gt;
			if args[normalizedGrade] == 'yes' then&lt;br /&gt;
				ret = mw.language.getContentLanguage():ucfirst(normalizedGrade)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Defaults&lt;br /&gt;
		if not ret then&lt;br /&gt;
			ret = resolveDefaultGrade(args, title)&lt;br /&gt;
		end&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(args, title)&lt;br /&gt;
	title = title or mw.title.getCurrentTitle()&lt;br /&gt;
	local docWarning = getDocWarning(title) or ''&lt;br /&gt;
	local grade = getGrade(args, title) or ''&lt;br /&gt;
	return docWarning .. grade&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return p._main(frame:getParent().args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>