Difference between revisions of "Module:Current events monthly archive"
Jump to navigation
Jump to search
blackwiki>RossO (Ordinal Month) |
blackwiki>RossO (Working on second sentence.) |
||
| Line 41: | Line 41: | ||
local lang = mw.language.getContentLanguage() | local lang = mw.language.getContentLanguage() | ||
dateStuff.argsDate = argsDate | dateStuff.argsDate = argsDate | ||
| + | |||
--Year | --Year | ||
local year = lang:formatDate('Y', argsDate) | local year = lang:formatDate('Y', argsDate) | ||
year = tonumber(year) | year = tonumber(year) | ||
dateStuff.year = year | dateStuff.year = year | ||
| − | -- Month | + | |
| − | local | + | -- Month and Name |
| − | dateStuff. | + | local monthName = lang:formatDate('F', argsDate) |
| + | dateStuff.monthName = monthName | ||
dateStuff.monthNumber = tonumber(monthNumber) | dateStuff.monthNumber = tonumber(monthNumber) | ||
| + | |||
-- Month and year | -- Month and year | ||
local monthAndYear = lang:formatDate('F Y', argsDate) | local monthAndYear = lang:formatDate('F Y', argsDate) | ||
local firstOfMonth = lang:formatDate('01-m-Y', argsDate) | local firstOfMonth = lang:formatDate('01-m-Y', argsDate) | ||
| + | local lastOfMonth = lang:formatDate('01-m-Y', argsDate .. ' +1 month -1 day') | ||
dateStuff.monthAndYear = monthAndYear | dateStuff.monthAndYear = monthAndYear | ||
| + | |||
-- Previous month and year | -- Previous month and year | ||
dateStuff.previousMonthAndYear = lang:formatDate('F Y', firstOfMonth .. ' -1 month') | dateStuff.previousMonthAndYear = lang:formatDate('F Y', firstOfMonth .. ' -1 month') | ||
-- Next month and year | -- Next month and year | ||
dateStuff.nextMonthAndYear = lang:formatDate('F Y', firstOfMonth .. ' +1 month') | dateStuff.nextMonthAndYear = lang:formatDate('F Y', firstOfMonth .. ' +1 month') | ||
| + | |||
-- Day | -- Day | ||
| − | local | + | local dayNumber = lang:formatDate('j', argsDate) |
| − | + | dayNumber = tonumber(dayNumber) | |
| − | dateStuff. | + | dateStuff.dayNumber = dayNumber |
| − | + | ||
| − | |||
| − | |||
| − | |||
-- Weekday of the first day of the month | -- Weekday of the first day of the month | ||
local firstWeekday = lang:formatDate('w', firstOfMonth) -- Sunday = 0, Saturday = 6 | local firstWeekday = lang:formatDate('w', firstOfMonth) -- Sunday = 0, Saturday = 6 | ||
| Line 70: | Line 73: | ||
firstWeekday = firstWeekday + 1 -- Make compatible with Lua tables. Sunday = 1, Saturday = 7. | firstWeekday = firstWeekday + 1 -- Make compatible with Lua tables. Sunday = 1, Saturday = 7. | ||
dateStuff.firstWeekday = firstWeekday | dateStuff.firstWeekday = firstWeekday | ||
| + | |||
| + | -- 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 lastWeekday = lang:formatDate('w', lastOfMonth) -- Sunday = 0, Saturday = 6 | ||
| + | lastWeekday = tonumber(lastWeekday) | ||
| + | lastWeekday = lastWeekday + 1 -- Make compatible with Lua tables. Sunday = 1, Saturday = 7. | ||
| + | dateStuff.lastWeekday = lastWeekday | ||
| + | |||
return dateStuff | return dateStuff | ||
end | end | ||
| Line 75: | Line 90: | ||
function p.makeDayStrings(dateStuff) | function p.makeDayStrings(dateStuff) | ||
local calStrings = {} | local calStrings = {} | ||
| − | local currentDay = dateStuff. | + | local currentDay = dateStuff.dayNumber |
| − | + | local currentMonth = dateStuff.monthName | |
| − | local currentMonth = dateStuff. | ||
local currentYear = dateStuff.year | local currentYear = dateStuff.year | ||
local makeDayLink = p.makeDayLink | local makeDayLink = p.makeDayLink | ||
| − | for | + | for dayCount = 1, dateStuff.daysInMonth do |
| − | if dateStuff.argsDate | + | if dateStuff.argsDate then |
| − | calStrings[#calStrings + 1] = makeDayLink( | + | calStrings[#calStrings + 1] = makeDayLink(dayCount, currentMonth, currentYear) |
else | else | ||
| − | calStrings[#calStrings + 1] = tostring( | + | calStrings[#calStrings + 1] = tostring(dayCount) |
end | end | ||
end | end | ||
return calStrings | return calStrings | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| Line 109: | Line 112: | ||
local monthAndYear = dateStuff.monthAndYear | local monthAndYear = dateStuff.monthAndYear | ||
local ordinal = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"} | local ordinal = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"} | ||
| + | local daysOfWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturaday"} | ||
local root = mw.html.create('div') | local root = mw.html.create('div') | ||
root | root | ||
:tag('p') | :tag('p') | ||
| − | :wikitext("'''[[" .. dateStuff. | + | :wikitext("'''[[" .. dateStuff.monthName .. "]] [[" .. dateStuff.year .. "]]''' was the " .. ordinal[dateStuff.monthNumber] .. " month of that common year. ") |
| + | :wikitext("The month, which began on a [[" .. daysOfWeek[dateStuff.firstWeekday] .. "]], ended on a [[" .. daysOfWeek[dateStuff.lastWeekday] .. "]] after " .. dateStuff.daysInMonth .. " days.") | ||
:done() | :done() | ||
:tag('h2') | :tag('h2') | ||
Revision as of 00:28, 27 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]].
-- Test this against Portal:Current events/September 2011/Sandbox
--[[
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)
local argsDate = nil
if (frame and frame.args and frame.args.year and frame.args.month) then
-- If a date is passed in, assume that the display page is an Archive page.
-- If no date passed in, assume that the display page is the current Current Events page
argsDate = frame.args.year .. "-" .. frame.args.month .. "-01" -- Construct a date, YYY-M-DD format.
end
local dateStuff = p.getDateStuff(argsDate, frame.args.month, frame.args.year)
local dayStrings = p.makeDayStrings(dateStuff)
return p.export(dayStrings, dateStuff)
end
local function makeWikilink(link, display)
if display then
return string.format('[[%s|%s]]', link, display)
else
return string.format('[[%s]]', link)
end
end
function p.getDateStuff(argsDate, monthNumber, yearNumber)
--[[
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.
--]]
-- Gets date data.
local dateStuff = {}
local lang = mw.language.getContentLanguage()
dateStuff.argsDate = argsDate
--Year
local year = lang:formatDate('Y', argsDate)
year = tonumber(year)
dateStuff.year = year
-- 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)
local lastOfMonth = lang:formatDate('01-m-Y', argsDate .. ' +1 month -1 day')
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 firstWeekday = lang:formatDate('w', firstOfMonth) -- Sunday = 0, Saturday = 6
firstWeekday = tonumber(firstWeekday)
firstWeekday = firstWeekday + 1 -- Make compatible with Lua tables. Sunday = 1, Saturday = 7.
dateStuff.firstWeekday = firstWeekday
-- 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 lastWeekday = lang:formatDate('w', lastOfMonth) -- Sunday = 0, Saturday = 6
lastWeekday = tonumber(lastWeekday)
lastWeekday = lastWeekday + 1 -- Make compatible with Lua tables. Sunday = 1, Saturday = 7.
dateStuff.lastWeekday = lastWeekday
return dateStuff
end
function p.makeDayStrings(dateStuff)
local calStrings = {}
local currentDay = dateStuff.dayNumber
local currentMonth = dateStuff.monthName
local currentYear = dateStuff.year
local makeDayLink = p.makeDayLink
for dayCount = 1, dateStuff.daysInMonth do
if dateStuff.argsDate then
calStrings[#calStrings + 1] = makeDayLink(dayCount, currentMonth, currentYear)
else
calStrings[#calStrings + 1] = tostring(dayCount)
end
end
return calStrings
end
function p.makeDayLink(day, month, year)
return string.format("'''[[#%d %s %d| %d ]]'''", year, month, day, day)
end
function p.export(dayStrings, dateStuff)
-- Intro paragraph
local monthAndYear = dateStuff.monthAndYear
local ordinal = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"}
local daysOfWeek = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturaday"}
local root = mw.html.create('div')
root
:tag('p')
:wikitext("'''[[" .. dateStuff.monthName .. "]] [[" .. dateStuff.year .. "]]''' was the " .. ordinal[dateStuff.monthNumber] .. " month of that common year. ")
:wikitext("The month, which began on a [[" .. daysOfWeek[dateStuff.firstWeekday] .. "]], ended on a [[" .. daysOfWeek[dateStuff.lastWeekday] .. "]] 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 September 2011.''")
: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