Module:Current events monthly archive

From blackwiki
Revision as of 17:53, 30 September 2017 by blackwiki>RossO (Full moon Notes)
Jump to navigation Jump to search

Usage

{{#invoke:Current events monthly archive|main}}

{{#invoke:Current events monthly archive|main|year=1996|month=12}}

This will eventually be extended to support the layout components for the Portal:Current events archive pages.



-- This module renders the introductory content on Monthly archive pages for the [[Portal:Current events]].

--[[

Incoming expected variables:
	frame.args.year = Integer value for year
	frame.args.month = Integer value for month, 1 based.

Test this against:
	Portal:Current events/September 2011/Sandbox
	User:RossO/sandbox/Current events monthly intro

--]]

local p = {}

function p.main(frame)
	local isArchive = false
	if (frame and frame.args and frame.args.year and frame.args.month) then
		isArchive = true
	end
	local argsYear = tonumber(frame.args.year or os.date( "%Y" ))
	local argsMonth = tonumber(frame.args.month or os.date( "%m" ))

	local dateStuff = p.getDateStuff(argsMonth, argsYear, isArchive)
	return p.export(dateStuff)
end


--[[
	Purpose: Construct the dateStuff object.
	Reference: https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time
--]]

function p.getDateStuff(monthNumber, yearNumber, isArchive)

	-- Gets date data.
	local dateStuff = {}
	local constructedDate = yearNumber .. "-" .. monthNumber .. "-01" -- Construct a date, YYY-M-DD format.
	local lang = mw.language.getContentLanguage()

	local beVerb = "is"
	if (isArchive) then
		beVerb = "was"
	end
	dateStuff.beVerb = beVerb

	--Year and Leap Year
	dateStuff.year = tonumber(yearNumber)
	local leapBool = tonumber(lang:formatDate('L', constructedDate))
	dateStuff.leapBool = leapBool
	local leapDesc = "common"
	if (leapBool == 1) then
		leapDesc = "leap"
		if (math.fmod(yearNumber, 400) == 0) then
			leapDesc = "century leap"
		end
	end
	dateStuff.leapDesc = leapDesc

	-- Month and Name
	local monthName = lang:formatDate('F', constructedDate)
	dateStuff.monthName = monthName
	dateStuff.monthNumber = tonumber(monthNumber)

	--Moons
	local moonNote = ""
	if (monthNumber == 2) then
		-- https://www.quora.com/When-was-the-last-time-the-entire-month-of-February-passed-without-a-Full-Moon/answer/Alan-Marble
		if (yearNumber == 1961 or yearNumber == 1999 or yearNumber == 2018 or yearNumber == 2037 or yearNumber == 2067 or yearNumber == 2094) then
			moonNote = "This month had no full moon. "
		end
	end
	dateStuff.moonNote = moonNote

	-- First Day of the Month
	local firstOfMonth = lang:formatDate('01-m-Y', constructedDate)

	-- Weekday of the first day of the month
	local firstDayOfMonthName = lang:formatDate('l', firstOfMonth)
	dateStuff.firstDayOfMonthName = firstDayOfMonthName

	-- Days in month
	local daysInMonth = lang:formatDate('j', firstOfMonth .. ' +1 month -1 day')
	dateStuff.daysInMonth = tonumber(daysInMonth)

	-- Weekday of the last day of the month
	local lastDayOfMonthName = lang:formatDate('l', firstOfMonth .. ' +1 month -1 day')
	dateStuff.lastDayOfMonthName = lastDayOfMonthName

	return dateStuff
end

function p.export(dateStuff)

--[[
	Purpose: Construct WikiMarkup for the Intro paragraph.
	Reference: https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time
--]]

	local monthOrdinal = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth and final"}
	local root = mw.html.create('div')
		:tag('p')
			:wikitext("'''''[[" .. dateStuff.monthName .. "]] [[" .. dateStuff.year .. "]]''' " .. dateStuff.beVerb .. " the " .. monthOrdinal[dateStuff.monthNumber] .. " month of the " .. dateStuff.leapDesc .. " year. ")
			:wikitext("" .. dateStuff.moonNote .. "")
			:wikitext("The calendar for the month begins on a [[" .. dateStuff.firstDayOfMonthName .. "]] and ends on a [[" .. dateStuff.lastDayOfMonthName .. "]] after " .. dateStuff.daysInMonth .. " days.''")
			:done()
	
	return tostring(root)
end

return p