<?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</id>
	<title>Module:Class - 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"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Class&amp;action=history"/>
	<updated>2026-06-15T10:17:38Z</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&amp;diff=471298&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&amp;diff=471298&amp;oldid=prev"/>
		<updated>2021-07-15T21:02:54Z</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]], [[Template:Class/icon]] and&lt;br /&gt;
-- [[Template:Class/colour]].&lt;br /&gt;
&lt;br /&gt;
local mArguments, mIcon -- modules to lazily load&lt;br /&gt;
local definitions = mw.loadData('Module:Class/importDefinitions')&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Initialize helper function variables&lt;br /&gt;
local getDefinition, getRawArgs, makeInvokeFunction, normalizeValue&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Argument helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getRawArgs(frame, wrapper)&lt;br /&gt;
	mArguments = mArguments or require('Module:Arguments')&lt;br /&gt;
	return mArguments.getArgs(frame, {&lt;br /&gt;
		wrappers = wrapper,&lt;br /&gt;
		trim = false,&lt;br /&gt;
		removeBlanks = false&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function makeInvokeFunction(func, wrapper)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getRawArgs(frame, wrapper)&lt;br /&gt;
		return func(args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- String helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function trim(str)&lt;br /&gt;
	if type(str) == 'string' then str = str:match('^%s*(.-)%s*$') end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function normalizeValue(val)&lt;br /&gt;
	if type(val) == 'string' then val = trim(val):lower() end&lt;br /&gt;
	if val == '' then val = nil end&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function ucfirst(str)&lt;br /&gt;
	return mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str, 2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Definition helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function getDefinition(code)&lt;br /&gt;
	local canonicalCode = normalizeValue(code)&lt;br /&gt;
	if code == 'DEFAULT' then canonicalCode = code end --DEFAULT special-case&lt;br /&gt;
	local class = definitions[canonicalCode]&lt;br /&gt;
	while class and class.alias do&lt;br /&gt;
		canonicalCode = class.alias&lt;br /&gt;
		class = definitions[class.alias]&lt;br /&gt;
	end&lt;br /&gt;
	if not class then&lt;br /&gt;
		return nil, nil&lt;br /&gt;
	end&lt;br /&gt;
	return class, canonicalCode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getDefault() return getDefinition('DEFAULT') end&lt;br /&gt;
&lt;br /&gt;
function getProperty(class, default, map)&lt;br /&gt;
	local pop = table.remove(map, 1)&lt;br /&gt;
	local prop, dProp = class and class[pop], default and default[pop]&lt;br /&gt;
	while #map &amp;gt; 0 do&lt;br /&gt;
		pop = table.remove(map, 1)&lt;br /&gt;
		prop = ((type(prop) == 'table') or nil) and prop[pop]&lt;br /&gt;
		dProp = ((type(dProp) == 'table') or nil) and dProp[pop]&lt;br /&gt;
	end&lt;br /&gt;
	if prop == nil then prop = dProp end&lt;br /&gt;
	return prop&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Color functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p._colour(code)&lt;br /&gt;
	return getProperty(getDefinition(code), getDefault(), {'colour', 'base'})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.colour(frame)&lt;br /&gt;
	local args = getRawArgs(frame, 'Template:Class/colour')&lt;br /&gt;
	local colour = p._colour(args[1])&lt;br /&gt;
	-- We need nowiki tags as template output beginning with &amp;quot;#&amp;quot; triggers&lt;br /&gt;
	-- bug 14974.&lt;br /&gt;
	return frame:extensionTag('nowiki', colour)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Icon functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p._icon(args)&lt;br /&gt;
	local class = getDefinition(args.class or args[1])&lt;br /&gt;
	local default = getDefault()&lt;br /&gt;
	local file = getProperty(class, default, {&amp;quot;icon&amp;quot;, &amp;quot;file&amp;quot;})&lt;br /&gt;
	local label = getProperty(class, default, {&amp;quot;labels&amp;quot;, &amp;quot;full&amp;quot;})&lt;br /&gt;
	label = ucfirst(label)&lt;br /&gt;
	local attrib = getProperty(class, default, {&amp;quot;icon&amp;quot;, &amp;quot;requiresAttribution&amp;quot;})&lt;br /&gt;
	local span = mw.html.create('span')&lt;br /&gt;
&lt;br /&gt;
	span&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
		:attr('title', label)&lt;br /&gt;
		:wikitext(&lt;br /&gt;
			string.format(&lt;br /&gt;
				'[[File:%s|%s|16px%s]]',&lt;br /&gt;
				file,&lt;br /&gt;
				label,&lt;br /&gt;
				attrib and '' or '|link=|alt='&lt;br /&gt;
			)&lt;br /&gt;
		)&lt;br /&gt;
	return tostring(span)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.icon = makeInvokeFunction(p._icon, 'Template:Class/icon')&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Class functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p._class(args)&lt;br /&gt;
	local classDef, classCode = getDefinition(args.class or args[1])&lt;br /&gt;
	local default = getDefault()&lt;br /&gt;
	local iconDefault = getProperty(classDef, default, {&amp;quot;icon&amp;quot;, &amp;quot;default&amp;quot;})&lt;br /&gt;
	local shortLabel = getProperty(classDef, default, {&amp;quot;labels&amp;quot;, &amp;quot;short&amp;quot;})&lt;br /&gt;
	local categoryRoot = getProperty(classDef, default, {&amp;quot;categoryRoot&amp;quot;})&lt;br /&gt;
	--o is short for &amp;quot;options&amp;quot;, go for &amp;quot;get options&amp;quot;. Bool true → case-sensitive&lt;br /&gt;
	local o, go = {}, {&lt;br /&gt;
		bold = false,&lt;br /&gt;
		heading = false,&lt;br /&gt;
		image = false,&lt;br /&gt;
		rowspan = false,&lt;br /&gt;
		fullcategory = true,&lt;br /&gt;
		category = true,&lt;br /&gt;
		topic = true&lt;br /&gt;
	}&lt;br /&gt;
	for k, v in pairs(go) do&lt;br /&gt;
		if v then o[k] = trim(args[k]) else o[k] = normalizeValue(args[k]) end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local cell = mw.html.create(o.heading and 'th' or 'td')&lt;br /&gt;
	--image=yes forces icon, image=no disables it, otherwise checks default&lt;br /&gt;
	local icon = iconDefault and (o.image ~= 'no') or (o.image == 'yes')&lt;br /&gt;
	icon = icon and p.icon(args) .. '&amp;amp;nbsp;' or ''&lt;br /&gt;
&lt;br /&gt;
	local category&lt;br /&gt;
	if o.fullcategory then&lt;br /&gt;
		category = o.fullcategory&lt;br /&gt;
	elseif o.category then&lt;br /&gt;
		category = string.format('%s %s', categoryRoot, o.category)&lt;br /&gt;
	elseif o.topic then&lt;br /&gt;
		category = string.format('%s %s articles', categoryRoot, o.topic)&lt;br /&gt;
	else&lt;br /&gt;
		category = string.format('%s articles', categoryRoot)&lt;br /&gt;
	end&lt;br /&gt;
	local text = string.format ('[[:Category:%s|%s]]', category, shortLabel)&lt;br /&gt;
	cell&lt;br /&gt;
		:addClass('assess')&lt;br /&gt;
		:addClass('assess-' .. (classCode or ''))&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:css('white-space', 'nowrap')&lt;br /&gt;
		:css('font-weight', o.bold ~= 'no' and 'bold' or nil)&lt;br /&gt;
		:css('background', p._colour(classCode))&lt;br /&gt;
		:attr('rowspan', tonumber(o.rowspan))&lt;br /&gt;
		:wikitext(icon, text)&lt;br /&gt;
&lt;br /&gt;
		return tostring(cell)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.class = makeInvokeFunction(p._class, 'Template:Class')&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>