<?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%3ACurrent_events_calendar</id>
	<title>Module:Current events calendar - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ACurrent_events_calendar"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Current_events_calendar&amp;action=history"/>
	<updated>2026-06-14T09:59:13Z</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:Current_events_calendar&amp;diff=471444&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:Current_events_calendar&amp;diff=471444&amp;oldid=prev"/>
		<updated>2021-07-15T21:14:36Z</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 renders the calendar seen on [[Portal:Current events]].&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Incoming expected variables:&lt;br /&gt;
		frame.args.year = Integer value for year&lt;br /&gt;
		frame.args.month = Integer value for month, 1 based.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function makeWikilink(link, display)&lt;br /&gt;
	if display then&lt;br /&gt;
		return string.format('[[%s|%s]]', link, display)&lt;br /&gt;
	else&lt;br /&gt;
		return string.format('[[%s]]', link)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local argsDate = nil&lt;br /&gt;
	if (frame and frame.args and frame.args.year and frame.args.month) then&lt;br /&gt;
		-- If a date is passed in, assume that the display page is an Archive page.&lt;br /&gt;
		-- If no date passed in, assume that the display page is the current Current Events page&lt;br /&gt;
		argsDate = frame.args.year .. &amp;quot;-&amp;quot; .. frame.args.month .. &amp;quot;-01&amp;quot; -- Construct a date, YYY-M-DD format.&lt;br /&gt;
	end&lt;br /&gt;
	local dateStuff = p.getDateStuff(argsDate)&lt;br /&gt;
	local dayStrings = p.makeDayStrings(dateStuff)&lt;br /&gt;
	return p.export(dayStrings, dateStuff)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getDateStuff(argsDate)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Note: This function takes advantage of the formatDate's second argument to&lt;br /&gt;
	create data for the archival calendars. If the second arg (argsDate) is nil,&lt;br /&gt;
	then formatDate assumes the current date/time.&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
	-- Gets date data.&lt;br /&gt;
	local dateStuff = {}&lt;br /&gt;
	local lang = mw.language.getContentLanguage()&lt;br /&gt;
	dateStuff.argsDate = argsDate&lt;br /&gt;
	--Year&lt;br /&gt;
	local year = lang:formatDate('Y', argsDate)&lt;br /&gt;
	year = tonumber(year)&lt;br /&gt;
	dateStuff.year = year&lt;br /&gt;
	-- Month&lt;br /&gt;
	local month = lang:formatDate('F', argsDate)&lt;br /&gt;
	dateStuff.month = month&lt;br /&gt;
	-- Month and year&lt;br /&gt;
	local monthAndYear = lang:formatDate('F Y', argsDate)&lt;br /&gt;
	local firstOfMonth = lang:formatDate('01-m-Y', argsDate)&lt;br /&gt;
	dateStuff.monthAndYear = monthAndYear&lt;br /&gt;
	-- Previous month and year&lt;br /&gt;
	dateStuff.previousMonthAndYear = lang:formatDate('F Y', firstOfMonth .. ' -1 month')&lt;br /&gt;
	-- Next month and year&lt;br /&gt;
	dateStuff.nextMonthAndYear = lang:formatDate('F Y', firstOfMonth .. ' +1 month')&lt;br /&gt;
	-- Day&lt;br /&gt;
	local day = lang:formatDate('j', argsDate)&lt;br /&gt;
	day = tonumber(day)&lt;br /&gt;
	dateStuff.day = day&lt;br /&gt;
	-- Days in month&lt;br /&gt;
	local daysInMonth = lang:formatDate('j', firstOfMonth .. ' +1 month -1 day')&lt;br /&gt;
	daysInMonth = tonumber(daysInMonth)&lt;br /&gt;
	dateStuff.daysInMonth = daysInMonth&lt;br /&gt;
	-- Weekday of the first day of the month&lt;br /&gt;
	local firstWeekday = lang:formatDate('w', firstOfMonth) -- Sunday = 0, Saturday = 6&lt;br /&gt;
	firstWeekday = tonumber(firstWeekday)&lt;br /&gt;
	firstWeekday = firstWeekday + 1 -- Make compatible with Lua tables. Sunday = 1, Saturday = 7.&lt;br /&gt;
	dateStuff.firstWeekday = firstWeekday&lt;br /&gt;
	return dateStuff&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeDayStrings(dateStuff)&lt;br /&gt;
	local calStrings = {}&lt;br /&gt;
	local currentDay = dateStuff.day&lt;br /&gt;
	local isLinkworthy = p.isLinkworthy&lt;br /&gt;
	local currentMonth = dateStuff.month&lt;br /&gt;
	local currentYear = dateStuff.year&lt;br /&gt;
	local makeDayLink = p.makeDayLink&lt;br /&gt;
	for day = 1, dateStuff.daysInMonth do&lt;br /&gt;
		if dateStuff.argsDate or isLinkworthy(day, currentDay) then&lt;br /&gt;
			calStrings[#calStrings + 1] = makeDayLink(day, currentMonth, currentYear)&lt;br /&gt;
		else&lt;br /&gt;
			calStrings[#calStrings + 1] = tostring(day)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return calStrings&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isLinkworthy(day, currentDay)&lt;br /&gt;
	-- Returns true if the calendar day should be linked, and false if not.&lt;br /&gt;
	-- Days should be linked if they are the current day or if they are within the six&lt;br /&gt;
	-- preceding days, as that is the number of items on the current events page.&lt;br /&gt;
	if currentDay - 6 &amp;lt;= day and day &amp;lt;= currentDay then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeDayLink(day, month, year)&lt;br /&gt;
	return string.format(&amp;quot;'''[[#%d %s %d|&amp;amp;nbsp;&amp;amp;nbsp;%d&amp;amp;nbsp;&amp;amp;nbsp;]]'''&amp;quot;, year, month, day, day)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.export(dayStrings, dateStuff)&lt;br /&gt;
	-- Generates the calendar HTML.&lt;br /&gt;
	local monthAndYear = dateStuff.monthAndYear&lt;br /&gt;
	local root = mw.html.create('table')&lt;br /&gt;
	-- The next two lines help to make the table-layout-based Archive pages look good. When the &lt;br /&gt;
	-- Archives have been converted to a grid-based layout, this logic can be removed, and the&lt;br /&gt;
	-- corressponding CSS margin attribute can be simplified.&lt;br /&gt;
	local temporaryMarginAdjustment = &amp;quot;auto !important&amp;quot;&lt;br /&gt;
	if dateStuff.argsDate then temporaryMarginAdjustment = &amp;quot;8px 0 0 8px&amp;quot; end&lt;br /&gt;
	root&lt;br /&gt;
		:addClass('infobox')&lt;br /&gt;
		:css{&lt;br /&gt;
			display = 'table',&lt;br /&gt;
			width = '100%',&lt;br /&gt;
			float = 'initial', &lt;br /&gt;
			['max-width'] = '350px',&lt;br /&gt;
			margin = temporaryMarginAdjustment,&lt;br /&gt;
			['text-align'] = 'center',&lt;br /&gt;
			['background-color'] = '#f5faff',&lt;br /&gt;
			border = '1px solid #cedff2'&lt;br /&gt;
		}&lt;br /&gt;
		-- Headings&lt;br /&gt;
		:tag('tr')&lt;br /&gt;
			:css('background-color', '#cedff2')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:css{['text-align'] = 'center'}&lt;br /&gt;
				:tag('span')&lt;br /&gt;
					:addClass('noprint')&lt;br /&gt;
					:wikitext(makeWikilink('Portal:Current events/' .. dateStuff.previousMonthAndYear, '◀'))&lt;br /&gt;
					:done()&lt;br /&gt;
				:done()&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('colspan', '5')&lt;br /&gt;
				:css{['text-align'] = 'center'}&lt;br /&gt;
				:wikitext(makeWikilink('Portal:Current events/' .. monthAndYear, monthAndYear))&lt;br /&gt;
				:done()&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:css{['text-align'] = 'center'}&lt;br /&gt;
				:tag('span')&lt;br /&gt;
					:addClass('noprint')&lt;br /&gt;
					:wikitext(makeWikilink('Portal:Current events/' .. dateStuff.nextMonthAndYear, '▶'))&lt;br /&gt;
&lt;br /&gt;
	-- Day of week headings&lt;br /&gt;
	local dayHeadingRow = root:tag('tr')&lt;br /&gt;
	local weekdays = {'S', 'M', 'T', 'W', 'T', 'F', 'S'}&lt;br /&gt;
	for i, weekday in ipairs(weekdays) do&lt;br /&gt;
		dayHeadingRow:tag('th')&lt;br /&gt;
			:css{['width'] = '14%', ['text-align'] = 'center'}&lt;br /&gt;
			:wikitext(weekday)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Days&lt;br /&gt;
	local cellCount = 1 - dateStuff.firstWeekday -- Tracks the number of day cells. Negative values used for initial blank cells.&lt;br /&gt;
	while cellCount &amp;lt; #dayStrings do -- Weekly rows&lt;br /&gt;
		local weeklyRow = root:tag('tr')&lt;br /&gt;
		for i = 1, 7 do -- Always make 7 cells.&lt;br /&gt;
			cellCount = cellCount + 1&lt;br /&gt;
			local dayString = dayStrings[cellCount] or &amp;quot;&amp;amp;nbsp;&amp;quot; -- Use a blank cell if there is no corresponding dateString&lt;br /&gt;
			weeklyRow:tag('td')&lt;br /&gt;
				:css{['text-align'] = 'center'}&lt;br /&gt;
				:wikitext(dayString)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Footer&lt;br /&gt;
	if not dateStuff.argsDate then -- No footer necessary on Archive pages.&lt;br /&gt;
		root:tag('tr')&lt;br /&gt;
		    :addClass('noprint')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', '7')&lt;br /&gt;
				:css{['padding-top'] = '3px', ['padding-bottom'] = '5px', ['font-size'] = '78%', ['text-align'] = 'right'}&lt;br /&gt;
				:wikitext(makeWikilink('Portal:Current events/' .. monthAndYear, 'More ' .. monthAndYear .. ' events...&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;'))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>