<?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%3ASandbox%2Ftrappist_the_monk%2Fcat_chart_properties</id>
	<title>Module:Sandbox/trappist the monk/cat chart properties - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2Ftrappist_the_monk%2Fcat_chart_properties"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/trappist_the_monk/cat_chart_properties&amp;action=history"/>
	<updated>2026-04-22T00:29:12Z</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:Sandbox/trappist_the_monk/cat_chart_properties&amp;diff=146606&amp;oldid=prev</id>
		<title>imported&gt;Legoktm: Replace Module:No globals with require( &quot;strict&quot; )</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/trappist_the_monk/cat_chart_properties&amp;diff=146606&amp;oldid=prev"/>
		<updated>2022-10-23T21:09:24Z</updated>

		<summary type="html">&lt;p&gt;Replace &lt;a href=&quot;/research/Module:No_globals&quot; title=&quot;Module:No globals&quot;&gt;Module:No globals&lt;/a&gt; with require( &amp;quot;strict&amp;quot; )&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;);&lt;br /&gt;
local getArgs = require (&amp;#039;Module:Arguments&amp;#039;).getArgs;&lt;br /&gt;
&lt;br /&gt;
local function cat_info_get (frame)&lt;br /&gt;
	local args = getArgs (frame);&lt;br /&gt;
	local raw = {};																-- count, legend, and category extracted from category&lt;br /&gt;
	local out = {};																-- formatted output suitable for [[Module:Chart]]&lt;br /&gt;
	local link = &amp;#039;yes&amp;#039; == frame.args.link:lower();								-- make a boolean&lt;br /&gt;
	local delimiter = args.delimiter or &amp;#039;:&amp;#039;;&lt;br /&gt;
	local selector = args.selector and args.selector:lower() or &amp;#039;pages&amp;#039;;&lt;br /&gt;
	selector = ({all=&amp;#039;all&amp;#039;, pages=&amp;#039;pages&amp;#039;, subcats=&amp;#039;subcats&amp;#039;, files=&amp;#039;files&amp;#039;})[selector] or &amp;#039;pages&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	for _, cat in ipairs (args) do												-- spin through args and extract info for chart&lt;br /&gt;
		local t = {}&lt;br /&gt;
		table.insert (t, frame:callParserFunction ({name=&amp;#039;PAGESINCATEGORY&amp;#039;, args={cat, selector, &amp;#039;R&amp;#039;}}));	-- get count of pages in this category in raw number form&lt;br /&gt;
		table.insert (t, cat and cat:match (args.pattern or &amp;#039;.*&amp;#039;) or cat);						-- extract legend; use cat name if pattern not provided&lt;br /&gt;
		if link then&lt;br /&gt;
			table.insert (t, cat);												-- add cat name for linking&lt;br /&gt;
		end&lt;br /&gt;
		table.insert (raw, t);													-- save this&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if 0==#raw then&lt;br /&gt;
		return string.format (&amp;#039;(%s%s%s%s%s)&amp;#039;, -1, delimiter, &amp;#039;error no slices&amp;#039;, delimiter, &amp;#039;#d33&amp;#039;);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i, v in ipairs (raw) do													-- look for duplicate names&lt;br /&gt;
		for j=i+1, #raw do&lt;br /&gt;
			if raw[i][2] == raw[j][2] then&lt;br /&gt;
				return string.format (&amp;#039;(%s%s%s %s%s%s)&amp;#039;, -1, delimiter, &amp;#039;error duplicate names&amp;#039;, raw[i][2], delimiter, &amp;#039;#d33&amp;#039;);&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function comp (a, b)													-- used in following table.sort()&lt;br /&gt;
		if a[1] == b[1] then													-- when same do&lt;br /&gt;
			return a[2] &amp;lt; b[2];													-- ascending alpha sort on name&lt;br /&gt;
		end&lt;br /&gt;
		return tonumber (a[1]) &amp;gt; tonumber(b[1]);								-- descending sort&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.sort (raw, comp);														-- descending sort&lt;br /&gt;
	&lt;br /&gt;
	local non_empty_count = 0;													-- count of categories with at least one page&lt;br /&gt;
	local empty_count = 0;&lt;br /&gt;
	local other_pages_tally = 0;												-- tally of pages not included in the first 25 slices&lt;br /&gt;
	&lt;br /&gt;
	for i, t in ipairs (raw) do&lt;br /&gt;
		if 26 &amp;gt; i and &amp;#039;0&amp;#039; ~= t[1] then											-- slices 1 - 25 separately in the chart (as long as they have something in them)&lt;br /&gt;
			if link and t[3] then												-- build a linked slice; t[3] may be nil if cat doesn&amp;#039;t match |pattern=&lt;br /&gt;
				table.insert (out, string.format (&amp;#039;(%s%s%s%s%s[[:Category:%s]])&amp;#039;, t[1], delimiter, t[2], delimiter, delimiter, t[3]));&lt;br /&gt;
			else																-- build an unlinked slice&lt;br /&gt;
				table.insert (out, string.format (&amp;#039;(%s%s%s)&amp;#039;, t[1], delimiter, t[2]));&lt;br /&gt;
			end&lt;br /&gt;
		elseif &amp;#039;0&amp;#039; ~= t[1] then													-- would-be slices 26+&lt;br /&gt;
			non_empty_count = non_empty_count + 1;								-- count the number of non-empty cats&lt;br /&gt;
			if t[1] then														-- in case t[1] is nil for whatever reason; shouldn&amp;#039;t be; TODO: do we need this?&lt;br /&gt;
				other_pages_tally = other_pages_tally + t[1];					-- sum the number of pages in these non-empty cats&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			empty_count = empty_count + 1;										-- count the number of empty cats&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if 0 == #out then															-- nothing in out{}&lt;br /&gt;
		return string.format (&amp;#039;(%s%s%s%s%s)&amp;#039;, -1, delimiter, &amp;#039;error slice values all zero&amp;#039;, delimiter, &amp;#039;#d33&amp;#039;);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if 0 ~= non_empty_count or 0 ~= empty_count then							-- 26th slice&lt;br /&gt;
		table.insert (out, string.format (&amp;#039;(%s%s%s+%s others)&amp;#039;, other_pages_tally, delimiter, non_empty_count, empty_count));&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--error (table.concat (out, &amp;#039;\n&amp;#039;))&lt;br /&gt;
	return table.concat (out, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E X P O R T E D   F U N C T I O N S &amp;gt;------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	cat_info_get = cat_info_get,&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>imported&gt;Legoktm</name></author>
	</entry>
</feed>