<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://safernicotine.wiki/mediawiki/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://safernicotine.wiki/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AClass_mask"/>
	<link rel="alternate" type="text/html" href="https://safernicotine.wiki/mediawiki/index.php?title=Module:Class_mask&amp;action=history"/>
	<updated>2026-04-25T09:36:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://safernicotine.wiki/mediawiki/index.php?title=Module:Class_mask&amp;diff=36955&amp;oldid=prev</id>
		<title>imported&gt;MSGJ: fix redirect detection</title>
		<link rel="alternate" type="text/html" href="https://safernicotine.wiki/mediawiki/index.php?title=Module:Class_mask&amp;diff=36955&amp;oldid=prev"/>
		<updated>2023-03-31T23:16:42Z</updated>

		<summary type="html">&lt;p&gt;fix redirect detection&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function getDocWarning(title)&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 == &amp;#039;yes&amp;#039; or s == &amp;#039;y&amp;#039; or s == &amp;#039;1&amp;#039; or s == &amp;#039;pass&amp;#039; or s == &amp;#039;na&amp;#039; or s == &amp;#039;n/a&amp;#039; or s == &amp;#039;¬&amp;#039; or s == &amp;#039;unused&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function resolveFQSgrade(grade, args)&lt;br /&gt;
	if (args[grade] or args.FQS) == &amp;#039;yes&amp;#039; then&lt;br /&gt;
		return ucfirst(grade)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;NA&amp;#039;&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] == &amp;#039;yes&amp;#039; then&lt;br /&gt;
		return ucfirst(grade)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;NA&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function resolveDefaultGrade(args, title, talkDefault)&lt;br /&gt;
	if args.ignorenamespace then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if title.subjectPageTitle.isRedirect then&lt;br /&gt;
		return resolveExtraGrade(&amp;#039;redirect&amp;#039;,args)&lt;br /&gt;
	end&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 or ns==711 then -- File talk&lt;br /&gt;
		return resolveFQSgrade(&amp;#039;file&amp;#039;, args)&lt;br /&gt;
	elseif ns==15 then -- Category talk&lt;br /&gt;
		return resolveFQSgrade(&amp;#039;category&amp;#039;, args)&lt;br /&gt;
	elseif ns==101 then -- Portal talk&lt;br /&gt;
		return resolveFQSgrade(&amp;#039;portal&amp;#039;, args)&lt;br /&gt;
	elseif ns==11 or ns==829 then -- Template talk&lt;br /&gt;
		return resolveFQSgrade(&amp;#039;template&amp;#039;, args)&lt;br /&gt;
	elseif ns==5 then -- Wikipedia talk&lt;br /&gt;
		return resolveFQSgrade(&amp;#039;project&amp;#039;, args)&lt;br /&gt;
	elseif ns==119 then -- Draft talk&lt;br /&gt;
		return resolveFQSgrade(&amp;#039;draft&amp;#039;, args)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;NA&amp;#039;&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;
	grade = grade and grade:match(&amp;#039;^%s*(.-)%s*$&amp;#039;):lower()&lt;br /&gt;
	local ret&lt;br /&gt;
&lt;br /&gt;
	if not grade or grade == &amp;#039;¬&amp;#039; then -- undefined&lt;br /&gt;
		ret = &amp;#039;¬&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- Ucfirst&lt;br /&gt;
	elseif grade == &amp;#039;start&amp;#039; or grade == &amp;#039;stub&amp;#039; or grade == &amp;#039;list&amp;#039; then&lt;br /&gt;
		if args[grade] ~= &amp;#039;no&amp;#039; then&lt;br /&gt;
			ret = ucfirst(grade)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	-- B&lt;br /&gt;
	elseif grade == &amp;#039;b&amp;#039; then&lt;br /&gt;
		local bParams = {&amp;#039;b1&amp;#039;, &amp;#039;b2&amp;#039;, &amp;#039;b3&amp;#039;, &amp;#039;b4&amp;#039;, &amp;#039;b5&amp;#039;, &amp;#039;b6&amp;#039;}&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 &amp;#039;B&amp;#039; or &amp;#039;C&amp;#039;&lt;br /&gt;
		elseif args.b ~= &amp;#039;no&amp;#039; then&lt;br /&gt;
			ret = &amp;#039;B&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	-- Upper-case&lt;br /&gt;
	elseif grade == &amp;#039;fa&amp;#039; or grade == &amp;#039;fl&amp;#039; or grade == &amp;#039;a&amp;#039; or grade == &amp;#039;ga&amp;#039; or grade == &amp;#039;c&amp;#039; then&lt;br /&gt;
		if args[grade] ~= &amp;#039;no&amp;#039; then&lt;br /&gt;
			ret = grade:upper()&lt;br /&gt;
		end&lt;br /&gt;
	elseif grade == &amp;#039;na&amp;#039; then&lt;br /&gt;
		if args.forceNA == &amp;#039;yes&amp;#039; then&lt;br /&gt;
			ret = resolveDefaultGrade(args, title, &amp;#039;NA&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			ret = &amp;#039;NA&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	elseif grade == &amp;#039;file&amp;#039; or grade == &amp;#039;image&amp;#039; or grade == &amp;#039;img&amp;#039; then&lt;br /&gt;
		ret = resolveFQSgrade(&amp;#039;file&amp;#039;, args)&lt;br /&gt;
	elseif grade == &amp;#039;category&amp;#039; or grade == &amp;#039;cat&amp;#039; or grade == &amp;#039;categ&amp;#039; then&lt;br /&gt;
		ret = resolveFQSgrade(&amp;#039;category&amp;#039;, args)&lt;br /&gt;
	elseif grade == &amp;#039;dab&amp;#039; or grade == &amp;#039;disambig&amp;#039; or grade == &amp;#039;disambiguation&amp;#039; or grade == &amp;#039;disamb&amp;#039; then&lt;br /&gt;
		ret = resolveFQSgrade(&amp;#039;disambig&amp;#039;, args)&lt;br /&gt;
	elseif grade == &amp;#039;redirect&amp;#039; or grade == &amp;#039;red&amp;#039; or grade == &amp;#039;redir&amp;#039; then&lt;br /&gt;
		ret = resolveExtraGrade(&amp;#039;redirect&amp;#039;, args)&lt;br /&gt;
	elseif grade == &amp;#039;portal&amp;#039; or grade == &amp;#039;project&amp;#039; or grade == &amp;#039;draft&amp;#039; then&lt;br /&gt;
		ret = resolveFQSgrade(grade, args)&lt;br /&gt;
	elseif grade == &amp;#039;template&amp;#039; or grade == &amp;#039;temp&amp;#039; or grade == &amp;#039;tpl&amp;#039; or grade == &amp;#039;templ&amp;#039; then&lt;br /&gt;
		ret = resolveFQSgrade(&amp;#039;template&amp;#039;, args)&lt;br /&gt;
	elseif grade == &amp;#039;fm&amp;#039; then&lt;br /&gt;
		if args.fm == &amp;#039;yes&amp;#039; then&lt;br /&gt;
			ret = &amp;#039;FM&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			ret = resolveFQSgrade(&amp;#039;file&amp;#039;, args)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	else&lt;br /&gt;
		-- Upper-case syntax&lt;br /&gt;
		ret = args[grade:upper()]&lt;br /&gt;
&lt;br /&gt;
		-- Lower-case syntax&lt;br /&gt;
		if not ret then&lt;br /&gt;
			if args[grade:lower()] == &amp;#039;yes&amp;#039; then&lt;br /&gt;
				ret = mw.language.getContentLanguage():ucfirst(grade:lower())&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 out = &amp;#039;&amp;#039;&lt;br /&gt;
	if title.namespace == 10 and title.subpageText == &amp;#039;class&amp;#039; then&lt;br /&gt;
		out = mw.getCurrentFrame():expandTemplate{title = &amp;#039;Class mask/doc warning&amp;#039;}&lt;br /&gt;
	end&lt;br /&gt;
	out = out .. (getGrade(args, title) or &amp;#039;&amp;#039;)&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame.args or frame:getParent().args&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;MSGJ</name></author>
	</entry>
</feed>