Difference between revisions of "Module:Current events monthly archive"

From blackwiki
Jump to navigation Jump to search
blackwiki>RossO
(Legacy Subroutines removed)
blackwiki>RossO
(Beta 1 version. Ready for review.)
Line 1: Line 1:
 +
 
-- This module renders the introductory content on Monthly archive pages for the [[Portal:Current events]].
 
-- This module renders the introductory content on Monthly archive pages for the [[Portal:Current events]].
-- Test this against Portal:Current events/September 2011/Sandbox
+
 
-- Test this against User:RossO/sandbox/Current events monthly intro
 
 
--[[
 
--[[
Incoming expected variables:
+
 
frame.args.year = Integer value for year
+
Incoming expected variables:
frame.args.month = Integer value for month, 1 based.
+
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
 +
 
 
--]]
 
--]]
  
Line 11: Line 17:
  
 
function p.main(frame)
 
function p.main(frame)
-- If no date passed in, assume that the display page is the current Current Events page
+
local isArchive = false
local argsDate = os.date( "%Y" ) .. "-" .. os.date( "%m" ) .. "-" .. os.date( "%d" )
 
local argsYear = os.date( "%Y" )
 
local argsMonth = os.date( "%m" )
 
local beVerb = "is"
 
 
 
-- If a date is passed in, assume that the display page is an Archive page.
 
 
if (frame and frame.args and frame.args.year and frame.args.month) then
 
if (frame and frame.args and frame.args.year and frame.args.month) then
argsYear = frame.args.year
+
isArchive = true
argsMonth = frame.args.month
 
argsDate = argsYear .. "-" .. argsMonth .. "-01" -- Construct a date, YYY-M-DD format.
 
beVerb = "was"
 
 
end
 
end
local dateStuff = p.getDateStuff(argsDate, argsMonth, argsYear, beVerb)
+
local argsYear = frame.args.year or os.date( "%Y" )
 +
local argsMonth = frame.args.month or os.date( "%m" )
 +
 
 +
local dateStuff = p.getDateStuff(argsMonth, argsYear, isArchive)
 
return p.export(dateStuff)
 
return p.export(dateStuff)
 
end
 
end
  
function p.getDateStuff(argsDate, monthNumber, yearNumber, beVerb)
 
  
 
--[[
 
--[[
Note: This function takes advantage of the formatDate's second argument to
+
Purpose: Construct the dateStuff object.
create data for the archival calendars. If the second arg (argsDate) is nil,
 
then formatDate assumes the current date/time.
 
 
Reference: https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time
 
Reference: https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time
 
--]]
 
--]]
 +
 +
function p.getDateStuff(monthNumber, yearNumber, isArchive)
  
 
-- Gets date data.
 
-- Gets date data.
 
local dateStuff = {}
 
local dateStuff = {}
 +
local constructedDate = yearNumber .. "-" .. monthNumber .. "-01" -- Construct a date, YYY-M-DD format.
 
local lang = mw.language.getContentLanguage()
 
local lang = mw.language.getContentLanguage()
dateStuff.argsDate = argsDate
+
 
 +
local beVerb = "is"
 +
if (isArchive) then
 +
beVerb = "was"
 +
end
 
dateStuff.beVerb = beVerb
 
dateStuff.beVerb = beVerb
  
--Year
+
--Year and Leap Year
local year = lang:formatDate('Y', argsDate)
+
dateStuff.year = tonumber(yearNumber)
year = tonumber(year)
+
local leapBool = tonumber(lang:formatDate('L', constructedDate))
dateStuff.year = year
 
--Leap Year
 
local leapBool = tonumber(lang:formatDate('L', argsDate))
 
 
dateStuff.leapBool = leapBool
 
dateStuff.leapBool = leapBool
 
local leapDesc = "common"
 
local leapDesc = "common"
Line 57: Line 58:
  
 
-- Month and Name
 
-- Month and Name
local monthName = lang:formatDate('F', argsDate)
+
local monthName = lang:formatDate('F', constructedDate)
 
dateStuff.monthName = monthName
 
dateStuff.monthName = monthName
 
dateStuff.monthNumber = tonumber(monthNumber)
 
dateStuff.monthNumber = tonumber(monthNumber)
  
-- Month and year
+
-- First Day of the Month
local monthAndYear = lang:formatDate('F Y', argsDate)
+
local firstOfMonth = lang:formatDate('01-m-Y', constructedDate)
local firstOfMonth = lang:formatDate('01-m-Y', argsDate)
 
dateStuff.monthAndYear = monthAndYear
 
 
 
-- Previous month and year
 
dateStuff.previousMonthAndYear = lang:formatDate('F Y', firstOfMonth .. ' -1 month')
 
-- Next month and year
 
dateStuff.nextMonthAndYear = lang:formatDate('F Y', firstOfMonth .. ' +1 month')
 
 
 
-- Day
 
local dayNumber = lang:formatDate('j', argsDate)
 
dayNumber = tonumber(dayNumber)
 
dateStuff.dayNumber = dayNumber
 
  
 
-- Weekday of the first day of the month
 
-- Weekday of the first day of the month
Line 82: Line 71:
 
-- Days in month
 
-- Days in month
 
local daysInMonth = lang:formatDate('j', firstOfMonth .. ' +1 month -1 day')
 
local daysInMonth = lang:formatDate('j', firstOfMonth .. ' +1 month -1 day')
daysInMonth = tonumber(daysInMonth)
+
dateStuff.daysInMonth = tonumber(daysInMonth)
dateStuff.daysInMonth = daysInMonth
 
  
 
-- Weekday of the last day of the month
 
-- Weekday of the last day of the month
Line 93: Line 81:
  
 
function p.export(dateStuff)
 
function p.export(dateStuff)
-- Intro paragraph
+
 
 +
--[[
 +
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 monthOrdinal = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth and final"}
 
local root = mw.html.create('div')
 
local root = mw.html.create('div')
root
 
:tag('hr')
 
:done()
 
 
:tag('p')
 
:tag('p')
 
:wikitext("'''''[[" .. dateStuff.monthName .. "]] [[" .. dateStuff.year .. "]]''' " .. dateStuff.beVerb .. " the " .. monthOrdinal[dateStuff.monthNumber] .. " month of the " .. dateStuff.leapDesc .. " year. ")
 
:wikitext("'''''[[" .. dateStuff.monthName .. "]] [[" .. dateStuff.year .. "]]''' " .. dateStuff.beVerb .. " the " .. monthOrdinal[dateStuff.monthNumber] .. " month of the " .. dateStuff.leapDesc .. " year. ")
 
:wikitext("The calendar for the month begins on a [[" .. dateStuff.firstDayOfMonthName .. "]] and ends on a [[" .. dateStuff.lastDayOfMonthName .. "]] after " .. dateStuff.daysInMonth .. " days.''")
 
:wikitext("The calendar for the month begins on a [[" .. dateStuff.firstDayOfMonthName .. "]] and ends on a [[" .. dateStuff.lastDayOfMonthName .. "]] after " .. dateStuff.daysInMonth .. " days.''")
 
:done()
 
:done()
:tag('h2')
 
:wikitext("[[Portal:Current events]]")
 
:done()
 
:tag('p')
 
:wikitext("''This is an [[Portal:Current events/How to archive the portal|archived version]] of Wikipedia's [[Portal:Current events|Current events Portal]] from [[" .. dateStuff.monthName .. " " .. dateStuff.year .. "]].''")
 
:done()
 
-- :tag('div')
 
-- :css{border='solid 1px black',display='flex'}
 
-- :tag('div')
 
-- :css{border='solid 1px black',flex='100%'}
 
-- :tag('p')
 
-- :wikitext("{{Portal:Current events/Month Inclusion|2011 September}}")
 
-- :done()
 
-- :done()
 
-- :tag('div')
 
-- :css{border='solid 1px black',flex='300px'}
 
-- :tag('div')
 
-- :wikitext("{{Portal:Current events/September 2011/Calendar}}")
 
-- :done()
 
-- :tag('div')
 
-- :wikitext("{{Portal:Current events/September 2011/Sidebar}}")
 
-- :done()
 
-- :done()
 
-- :done()
 
-- :tag('h2')
 
-- :wikitext("References")
 
-- :done()
 
-- :tag('div')
 
-- :wikitext("{{reflist}}")
 
-- :done()
 
-- :tag('div')
 
-- :wikitext("{{commons category|September 2011}}")
 
-- :done()
 
-- :tag('div')
 
-- :wikitext("{{Portal:Current events/Events by month}}")
 
-- :done()
 
-- :tag('div')
 
-- :wikitext("[[Category:September|2011]] [[Category:2011|*2011-09]] [[Category:Current events archives]]")
 
-- :done()
 
 
 
 
return tostring(root)
 
return tostring(root)

Revision as of 19:07, 29 September 2017

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 = frame.args.year or os.date( "%Y" )
	local argsMonth = 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"
	end
	dateStuff.leapDesc = leapDesc

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

	-- 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("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