<?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%3APage_assessment</id>
	<title>Module:Page assessment - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3APage_assessment"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Page_assessment&amp;action=history"/>
	<updated>2026-06-07T05:55:01Z</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:Page_assessment&amp;diff=144236&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:Page_assessment&amp;diff=144236&amp;oldid=prev"/>
		<updated>2022-10-22T09:11:56Z</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;-- Dependencies&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local mDisambiguation = require(&amp;#039;Module:Disambiguation&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- Packapge to export&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Namespace for utlity functions&lt;br /&gt;
local util = {}&lt;br /&gt;
&lt;br /&gt;
-- Table to look up class rating from namespace number&lt;br /&gt;
local classByNamespace = {&lt;br /&gt;
	[710] = &amp;quot;File&amp;quot;, -- TimedText namespace&lt;br /&gt;
    [6]   = &amp;quot;File&amp;quot;,&lt;br /&gt;
    [14]  = &amp;quot;Category&amp;quot;,&lt;br /&gt;
    [100] = &amp;quot;Portal&amp;quot;,&lt;br /&gt;
    [828] = &amp;quot;Template&amp;quot;, -- Module namespace&lt;br /&gt;
    [10]  = &amp;quot;Template&amp;quot;,&lt;br /&gt;
    [4]   = &amp;quot;Project&amp;quot;, -- Wikipedia namespace&lt;br /&gt;
    [118] = &amp;quot;Draft&amp;quot;,&lt;br /&gt;
    [108] = &amp;quot;Book&amp;quot;,&lt;br /&gt;
    [0]   = &amp;quot;&amp;quot; -- Mainspace (leave unassessed)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Table to look up standard class names from aliases,&lt;br /&gt;
-- based on the source code of Template:Class_mask (as of 30 Dec 2020)&lt;br /&gt;
local classByAlias = { &lt;br /&gt;
	image = &amp;quot;File&amp;quot;,&lt;br /&gt;
	img   = &amp;quot;File&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	cat   = &amp;quot;Category&amp;quot;,&lt;br /&gt;
	categ = &amp;quot;Category&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	disambiguation = &amp;quot;Disambig&amp;quot;,&lt;br /&gt;
	disamb         = &amp;quot;Disambig&amp;quot;,&lt;br /&gt;
	dab            = &amp;quot;Disambig&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	red   = &amp;quot;Redirect&amp;quot;,&lt;br /&gt;
	redir = &amp;quot;Redirect&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	temp  = &amp;quot;Template&amp;quot;,&lt;br /&gt;
	tpl   = &amp;quot;Template&amp;quot;,&lt;br /&gt;
	templ = &amp;quot;Template&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Gets the wikitext of a page and its related talk or subject page (nil if it does&lt;br /&gt;
not exist)&lt;br /&gt;
&lt;br /&gt;
@param {string} pageName&lt;br /&gt;
@returns {string|nil, string|nil} subject page wikitext, talk page wikitex&lt;br /&gt;
]]--&lt;br /&gt;
function util.getWikitext(pageName)&lt;br /&gt;
	local title = mw.title.new(pageName)&lt;br /&gt;
	if not title then&lt;br /&gt;
		return nil, nil&lt;br /&gt;
	end&lt;br /&gt;
	local subjectTitle = title.subjectPageTitle&lt;br /&gt;
	local talkpageTitle = title.talkPageTitle&lt;br /&gt;
	return subjectTitle:getContent(), talkpageTitle:getContent()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Checks if a page is a redirect without using the expensive mw.title.isRedirect&lt;br /&gt;
&lt;br /&gt;
@param {string} wikitext - page wikitext, from mw.title:getContent()&lt;br /&gt;
@returns {boolean}&lt;br /&gt;
--]]&lt;br /&gt;
function util.isRedirect(wikitext)&lt;br /&gt;
	return string.match(&lt;br /&gt;
		wikitext,&lt;br /&gt;
		&amp;quot;^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]&amp;quot;&lt;br /&gt;
	) and true or false&lt;br /&gt;
end&lt;br /&gt;
--[[&lt;br /&gt;
Creates a pattern for finding the value given to a parameter within any template&lt;br /&gt;
call.&lt;br /&gt;
&lt;br /&gt;
@param {string} param&lt;br /&gt;
@returns {string} pattern&lt;br /&gt;
]]--&lt;br /&gt;
function util.paramValuePattern(param)&lt;br /&gt;
	return &amp;quot;{{[^}]*|%s*&amp;quot; .. param .. &amp;quot;%s*=([^|{}]+)&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Assigns a class rating based on namespace, for non-article pages&lt;br /&gt;
&lt;br /&gt;
@param {string} pageName - name of page, or its talk page&lt;br /&gt;
@returns {string} class or empty string&lt;br /&gt;
]]--&lt;br /&gt;
function util.classByNamespace(pageName)&lt;br /&gt;
	local title = mw.title.new(pageName)&lt;br /&gt;
	if not title then return &amp;quot;&amp;quot; end&lt;br /&gt;
	local nsNumber = title.subjectPageTitle.namespace&lt;br /&gt;
	return classByNamespace[nsNumber] or &amp;quot;NA&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Normalises the capitalisation of class rating, e.g. &amp;quot;fa&amp;quot; to &amp;quot;FA&amp;quot;, or &amp;quot;redirect&amp;quot;&lt;br /&gt;
to &amp;quot;Redirect&amp;quot;. Also converts aliases to standard class names, e.g. from &amp;quot;Image&amp;quot;&lt;br /&gt;
to &amp;quot;File&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
@param {string} class&lt;br /&gt;
@returns {string} normalisedClass&lt;br /&gt;
]]--&lt;br /&gt;
function util.normaliseRating(class)&lt;br /&gt;
	if not class or class == &amp;quot;&amp;quot; then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		class = mw.text.trim(class)&lt;br /&gt;
	end&lt;br /&gt;
	class = classByAlias[mw.ustring.lower(class)] or class&lt;br /&gt;
	if mw.ustring.len(class) &amp;lt;= 3 then&lt;br /&gt;
		-- Uppercase, e.g. &amp;quot;FA&amp;quot;&lt;br /&gt;
		return mw.ustring.upper(class)&lt;br /&gt;
	else&lt;br /&gt;
		-- Sentence case, e.g. &amp;quot;Redirect&amp;quot;&lt;br /&gt;
		return mw.ustring.upper(mw.ustring.sub(class, 1, 1 )) .. mw.ustring.lower(mw.ustring.sub(class, 2)) &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Gets the class rating for a page&lt;br /&gt;
&lt;br /&gt;
@param {string} pageName - either subject or talk page name&lt;br /&gt;
@returns {string} class rating, or empty string if none found&lt;br /&gt;
]]--&lt;br /&gt;
function util.class(pageName)&lt;br /&gt;
	local subjectWikitext, talkpageWikitext = util.getWikitext(pageName)&lt;br /&gt;
	if not subjectWikitext then -- page does not exist&lt;br /&gt;
		return &amp;quot;Needed&amp;quot;&lt;br /&gt;
	elseif not subjectWikitext then -- talk page does not exist&lt;br /&gt;
		return &amp;quot;Unassessed&amp;quot;&lt;br /&gt;
	elseif util.isRedirect(subjectWikitext) then&lt;br /&gt;
		return &amp;quot;Redirect&amp;quot;&lt;br /&gt;
	elseif mDisambiguation.isDisambiguation(subjectWikitext) then&lt;br /&gt;
		return &amp;quot;Disambig&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		local classParam = mw.text.trim(&lt;br /&gt;
			mw.ustring.match(talkpageWikitext, util.paramValuePattern(&amp;quot;class&amp;quot;), 0) or &amp;quot;&amp;quot;&lt;br /&gt;
		)&lt;br /&gt;
		if classParam == &amp;quot;&amp;quot; then&lt;br /&gt;
			return util.classByNamespace(pageName)&lt;br /&gt;
		else&lt;br /&gt;
			return util.normaliseRating(classParam)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Entry point for invoking the module.&lt;br /&gt;
Gets the class rating as text.&lt;br /&gt;
]]--&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		parentFirst = true&lt;br /&gt;
	})&lt;br /&gt;
	return util.class(args[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Entry point for invoking the module.&lt;br /&gt;
Gets the class rating as an icon.&lt;br /&gt;
]]--&lt;br /&gt;
function p.icon(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		parentFirst = true&lt;br /&gt;
	})&lt;br /&gt;
	local class = util.class(args[1])&lt;br /&gt;
	local wikitext = mw.ustring.format(&amp;quot;{{class/icon|%s}}&amp;quot;, class)&lt;br /&gt;
	return frame:preprocess(wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Entry point for invoking the module.&lt;br /&gt;
Gets the class rating as an icon, followed by a link to the page.&lt;br /&gt;
]]--&lt;br /&gt;
function p.iconLink(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		parentFirst = true&lt;br /&gt;
	})&lt;br /&gt;
	local class = util.class(args[1])&lt;br /&gt;
	local wikitext = mw.ustring.format(&amp;quot;{{class/icon|%s}} [[%s]]&amp;quot;, class, args[1])&lt;br /&gt;
	return frame:preprocess(wikitext)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Export util, for testing purposes&lt;br /&gt;
p.test = util&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>