<?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%3ACalendar_TOC%2Fsandbox</id>
	<title>Module:Calendar TOC/sandbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ACalendar_TOC%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Calendar_TOC/sandbox&amp;action=history"/>
	<updated>2026-04-15T17:58:43Z</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:Calendar_TOC/sandbox&amp;diff=135429&amp;oldid=prev</id>
		<title>imported&gt;Izno: clean</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Calendar_TOC/sandbox&amp;diff=135429&amp;oldid=prev"/>
		<updated>2021-10-04T18:21:42Z</updated>

		<summary type="html">&lt;p&gt;clean&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 lang -- Lazy initialize&lt;br /&gt;
local function formatDate(fmt, d)&lt;br /&gt;
	lang = lang or mw.language.getContentLanguage()&lt;br /&gt;
	local success, newDate = pcall(lang.formatDate, lang, fmt, d)&lt;br /&gt;
	if success then&lt;br /&gt;
		return newDate&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;invalid date &amp;#039;%s&amp;#039; passed to getDate&amp;quot;,&lt;br /&gt;
			tostring(date)&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
local function caltoc(days, unk, footer, month, year)&lt;br /&gt;
	local weekdays = {&amp;#039;Mon&amp;#039;, &amp;#039;Tue&amp;#039;, &amp;#039;Wed&amp;#039;, &amp;#039;Thu&amp;#039;, &amp;#039;Fri&amp;#039;, &amp;#039;Sat&amp;#039;, &amp;#039;Sun&amp;#039;}&lt;br /&gt;
	local j = tonumber(formatDate(&amp;#039;N&amp;#039;,&amp;#039;1 &amp;#039; .. month .. &amp;#039; &amp;#039; .. year))&lt;br /&gt;
	local N = tonumber(formatDate(&amp;#039;t&amp;#039;,&amp;#039;1 &amp;#039; .. month .. &amp;#039; &amp;#039; .. year))&lt;br /&gt;
	local res = {}&lt;br /&gt;
&lt;br /&gt;
	table.insert(res, &amp;#039;__NOTOC__&amp;lt;table role=&amp;quot;navigation&amp;quot; id=&amp;quot;toc&amp;quot; class=&amp;quot;calendar-toc wikitable toc&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(res, &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th colspan=7 id=&amp;quot;toctitle&amp;quot; style=&amp;quot;background:inherit&amp;quot;&amp;gt;&amp;lt;span id=&amp;quot;tocheading&amp;quot; style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;&amp;#039; .. month .. &amp;#039; &amp;#039; .. year .. &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(res, &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th scope=&amp;quot;col&amp;quot;&amp;gt;&amp;#039; .. table.concat(weekdays, &amp;#039;&amp;lt;/th&amp;gt;&amp;lt;th scope=&amp;quot;col&amp;quot;&amp;gt;&amp;#039;) .. &amp;#039;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local d = 1-j&lt;br /&gt;
    local skip = false&lt;br /&gt;
    while d &amp;lt;= N do&lt;br /&gt;
    	table.insert(res, &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;)&lt;br /&gt;
    	for i=1,7 do&lt;br /&gt;
    		d = d + 1&lt;br /&gt;
    		if d &amp;gt; 0 and d &amp;lt;= N then&lt;br /&gt;
    			local f = days[tostring(d)]&lt;br /&gt;
    			if f and f == &amp;#039;df&amp;#039; then&lt;br /&gt;
    				table.insert(res, &amp;#039;&amp;lt;td&amp;gt;[[#&amp;#039; .. d .. &amp;#039; &amp;#039; .. month .. &amp;#039;|&amp;#039; .. d .. &amp;#039;]]&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    			elseif f and f == &amp;#039;mf&amp;#039; then&lt;br /&gt;
    				table.insert(res, &amp;#039;&amp;lt;td&amp;gt;[[#&amp;#039; .. month .. &amp;#039; &amp;#039; .. d .. &amp;#039;|&amp;#039; .. d .. &amp;#039;]]&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    			else&lt;br /&gt;
    				table.insert(res, &amp;#039;&amp;lt;td&amp;gt;&amp;#039; .. d .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    			end&lt;br /&gt;
    			skip = false&lt;br /&gt;
    		elseif (skip == false) then&lt;br /&gt;
    			local cs = (d &amp;lt;= 0) and (1 - d) or (8 - i)&lt;br /&gt;
    			local v = &amp;#039;&amp;#039;&lt;br /&gt;
    			if d &amp;gt; N and cs &amp;gt; 2 and unk then&lt;br /&gt;
    				v = &amp;#039;[[#&amp;#039; .. unk .. &amp;#039;|&amp;#039; .. unk .. &amp;#039;]]&amp;#039;&lt;br /&gt;
    				unk = nil&lt;br /&gt;
    			end&lt;br /&gt;
    			if cs &amp;lt; 7 or v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
	    			table.insert(res, &amp;#039;&amp;lt;td&amp;#039; .. (cs &amp;gt; 1 and &amp;#039; colspan=&amp;#039; .. cs or &amp;#039;&amp;#039;) .. &amp;#039;&amp;gt;&amp;#039; .. v .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
	    		end&lt;br /&gt;
    			skip = true&lt;br /&gt;
    		end&lt;br /&gt;
    	end&lt;br /&gt;
    	table.insert(res, &amp;#039;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if unk ~= nil then&lt;br /&gt;
		table.insert(res, &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td colspan=7&amp;gt;[[#&amp;#039; .. unk .. &amp;#039;|&amp;#039; .. unk .. &amp;#039;]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
    if #footer &amp;gt; 0 then&lt;br /&gt;
    	table.insert(res, &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;)&lt;br /&gt;
    	if #footer &amp;gt; 1 then&lt;br /&gt;
    		table.insert(res, &amp;#039;&amp;lt;td colspan=7 style=&amp;quot;padding: 0.2em;&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	    	for k,v in ipairs(footer) do&lt;br /&gt;
				table.insert(res, &amp;#039;* [[#&amp;#039; .. v .. &amp;#039;|&amp;#039; .. v .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(res, &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(res, &amp;#039;&amp;lt;td colspan=7&amp;gt;[[#&amp;#039; .. table.concat(footer,&amp;#039;&amp;#039;) .. &amp;#039;|&amp;#039; .. table.concat(footer,&amp;#039;&amp;#039;) .. &amp;#039;]]&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(res, &amp;#039;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(res, &amp;#039;&amp;lt;/table&amp;gt;&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(res, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function listtoc(founddays, days, unk, footer, month)&lt;br /&gt;
	local starttxt = [[&lt;br /&gt;
__NOTOC__&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;div role=&amp;quot;navigation&amp;quot; id=&amp;quot;toc&amp;quot; class=&amp;quot;calendar-toc toc plainlinks hlist&amp;quot; aria-labelledby=&amp;quot;tocheading&amp;quot; style=&amp;quot;text-align:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot; class=&amp;quot;toctitle&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&amp;lt;span id=&amp;quot;tocheading&amp;quot; style=&amp;quot;font-weight:bold;&amp;quot;&amp;gt;Contents&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:auto;&amp;quot;&amp;gt;&lt;br /&gt;
]]&lt;br /&gt;
	local closetxt = [[&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;]]&lt;br /&gt;
	local entries = (#founddays &amp;gt; 0) and { &amp;#039;;&amp;#039; .. month} or {}&lt;br /&gt;
	for k,d in ipairs(founddays) do&lt;br /&gt;
		local fmt = days[d] &lt;br /&gt;
		if fmt == &amp;#039;df&amp;#039; then&lt;br /&gt;
			table.insert(entries, &amp;#039;: [[#&amp;#039; .. d .. &amp;#039; &amp;#039; .. month .. &amp;#039;|&amp;#039; .. d .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		elseif fmt == &amp;#039;mf&amp;#039; then&lt;br /&gt;
			table.insert(entries, &amp;#039;: [[#&amp;#039; .. month .. &amp;#039; &amp;#039; .. d .. &amp;#039;|&amp;#039; .. d .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if unk ~= nil then&lt;br /&gt;
		table.insert(entries, &amp;#039;: [[#&amp;#039; .. unk .. &amp;#039;|&amp;#039; .. unk .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	for k,v in ipairs(footer) do&lt;br /&gt;
		table.insert(entries, &amp;#039;: [[#&amp;#039; .. v .. &amp;#039;|&amp;#039; .. v .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return starttxt .. table.concat(entries,&amp;quot;\n&amp;quot;) .. closetxt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getYear(s,y)&lt;br /&gt;
	if y and mw.ustring.match(y, &amp;#039;^%d+$&amp;#039;) then&lt;br /&gt;
		return y&lt;br /&gt;
	end&lt;br /&gt;
	y = mw.ustring.gsub(s, &amp;#039;^.-(%d+).-$&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
	return y&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getMonth(s,m)&lt;br /&gt;
	local mnames = {&lt;br /&gt;
		[&amp;#039;January&amp;#039;]=1,&lt;br /&gt;
		[&amp;#039;February&amp;#039;]=2, &lt;br /&gt;
		[&amp;#039;March&amp;#039;]=3,&lt;br /&gt;
		[&amp;#039;April&amp;#039;]=4,&lt;br /&gt;
		[&amp;#039;May&amp;#039;]=5,&lt;br /&gt;
		[&amp;#039;June&amp;#039;]=6,&lt;br /&gt;
		[&amp;#039;July&amp;#039;]=7,&lt;br /&gt;
		[&amp;#039;August&amp;#039;]=8,&lt;br /&gt;
		[&amp;#039;September&amp;#039;]=9,&lt;br /&gt;
		[&amp;#039;October&amp;#039;]=10,&lt;br /&gt;
		[&amp;#039;November&amp;#039;]=11,&lt;br /&gt;
		[&amp;#039;December&amp;#039;]=12&lt;br /&gt;
	}&lt;br /&gt;
	if m and mnames[m] then&lt;br /&gt;
		return m&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for k,n in pairs(mnames) do&lt;br /&gt;
		if mw.ustring.match(s or &amp;#039;&amp;#039;, k) then&lt;br /&gt;
			return k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args&lt;br /&gt;
	local current_title = mw.title.getCurrentTitle()&lt;br /&gt;
	local pagename = current_title.text&lt;br /&gt;
	local content = current_title:getContent()&lt;br /&gt;
	local outfmt = args[&amp;#039;format&amp;#039;] or pargs[&amp;#039;format&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local unknown = nil&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;_demo&amp;#039;] or pargs[&amp;#039;_demo&amp;#039;] then&lt;br /&gt;
		content = args[&amp;#039;_demo&amp;#039;] or pargs[&amp;#039;_demo&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not content then&lt;br /&gt;
		error &amp;quot;The current page has no content&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Remove comments&lt;br /&gt;
	content = mw.ustring.gsub(content, &amp;#039;&amp;lt;!--.-?--&amp;gt;&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Get the month and year	&lt;br /&gt;
	local month = getMonth(pagename, args[&amp;#039;month&amp;#039;] or pargs[&amp;#039;month&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
	local year = getYear(pagename, args[&amp;#039;year&amp;#039;] or pargs[&amp;#039;year&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Get list of valid footer links	&lt;br /&gt;
	local extra = args[&amp;#039;extra&amp;#039;] or pargs[&amp;#039;extra&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	local footerlinks = {}&lt;br /&gt;
	if extra ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footerlinks = mw.text.split(extra, &amp;#039;%s*=%s*&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		footerlinks = {&amp;quot;See also&amp;quot;, &amp;quot;References&amp;quot;, &amp;quot;Notes&amp;quot;, &amp;quot;Further reading&amp;quot;, &amp;quot;External links&amp;quot;}&lt;br /&gt;
	end&lt;br /&gt;
	local validfooter = {}&lt;br /&gt;
	for k,v in ipairs(footerlinks) do&lt;br /&gt;
		validfooter[v] = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Get all the level two headings for days of the month&lt;br /&gt;
	local days = {}&lt;br /&gt;
	local founddays = {}&lt;br /&gt;
	local footer = {}&lt;br /&gt;
	for v in mw.ustring.gmatch(content, &amp;quot;%f[^\n]==%s*([^\r\n]-)%s*==%f[^=]&amp;quot;) do&lt;br /&gt;
		v = mw.ustring.gsub(v,&amp;#039;^[=%s]*(.-)[%s=]*&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
		local df = mw.ustring.gsub(v,&amp;#039;^(%d+[%-–%d]*)%s*&amp;#039; .. month .. &amp;#039;$&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
		local mf = mw.ustring.gsub(v,&amp;#039;^&amp;#039; .. month .. &amp;#039;%s*(%d+[%-–%d]*)$&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
		if tonumber(df) then&lt;br /&gt;
			days[df] = &amp;#039;df&amp;#039;&lt;br /&gt;
			table.insert(founddays, df)&lt;br /&gt;
		elseif tonumber(mf) then&lt;br /&gt;
			days[df] = &amp;#039;mf&amp;#039;&lt;br /&gt;
			table.insert(founddays, mf)&lt;br /&gt;
		elseif v == &amp;quot;Unknown date&amp;quot; then&lt;br /&gt;
			unknown = &amp;quot;Unknown date&amp;quot;&lt;br /&gt;
		elseif validfooter[v] then&lt;br /&gt;
			table.insert(footer, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Now generate the TOC&lt;br /&gt;
	if outfmt ~= &amp;#039;list&amp;#039; then&lt;br /&gt;
		return caltoc(days, unknown, footer, month, year)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return listtoc(founddays, days, unknown, footer, month)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Izno</name></author>
	</entry>
</feed>