Module:Current events monthly archive
Revision as of 18:09, 29 September 2017 by blackwiki>RossO (Legacy Subroutines removed)
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]].
-- 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
frame.args.month = Integer value for month, 1 based.
--]]
local p = {}
function p.main(frame)
-- If no date passed in, assume that the display page is the current Current Events page
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
argsYear = frame.args.year
argsMonth = frame.args.month
argsDate = argsYear .. "-" .. argsMonth .. "-01" -- Construct a date, YYY-M-DD format.
beVerb = "was"
end
local dateStuff = p.getDateStuff(argsDate, argsMonth, argsYear, beVerb)
return p.export(dateStuff)
end
function p.getDateStuff(argsDate, monthNumber, yearNumber, beVerb)
--[[
Note: This function takes advantage of the formatDate's second argument to
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
--]]
-- Gets date data.
local dateStuff = {}
local lang = mw.language.getContentLanguage()
dateStuff.argsDate = argsDate
dateStuff.beVerb = beVerb
--Year
local year = lang:formatDate('Y', argsDate)
year = tonumber(year)
dateStuff.year = year
--Leap Year
local leapBool = tonumber(lang:formatDate('L', argsDate))
dateStuff.leapBool = leapBool
local leapDesc = "common"
if (leapBool == 1) then
leapDesc = "leap"
end
dateStuff.leapDesc = leapDesc
-- Month and Name
local monthName = lang:formatDate('F', argsDate)
dateStuff.monthName = monthName
dateStuff.monthNumber = tonumber(monthNumber)
-- Month and year
local monthAndYear = lang:formatDate('F Y', argsDate)
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
local firstDayOfMonthName = lang:formatDate('l', firstOfMonth)
dateStuff.firstDayOfMonthName = firstDayOfMonthName
-- Days in month
local daysInMonth = lang:formatDate('j', firstOfMonth .. ' +1 month -1 day')
daysInMonth = tonumber(daysInMonth)
dateStuff.daysInMonth = 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)
-- Intro paragraph
local monthOrdinal = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth and final"}
local root = mw.html.create('div')
root
:tag('hr')
:done()
: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()
: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)
end
return p