Module:Calendar2
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Calendar2/doc
local mArguments = require('Module:Arguments')
local p = {}
function p.yearStartsOn(year) -- implements wikifunctions Z20291
-- returns what weekday a year starts on. Sunday is 0
local day = tonumber(year) - 1
local result = (year + math.floor(day / 4) - math.floor(day / 100) + math.floor(day / 400)) % 7
return result
end
local function Fuckup(frame) -- Takes an input frame from an invoke or a template.
args = mArguments.getArgs(frame)
args["year"] = args["year"] or os.date("*t")["year"]
local y = args["year"] --make sure there's a year
args["leap"] = 0 --offset one to the later months if it's a leap year
if (y % 4 == 0) and not ((y % 100 == 0) and (y % 400 ~= 0)) then args["leap"] = 1 end -- Z20182
return args
end
local function Month(length, offset, frame) -- Takes an input frame passed through Fuckup
local f, j = {}, 1 -- frame haunted
for k, v in pairs(frame) do f[k] = v end
local i = ((p.yearStartsOn(f["year"]) + offset) % 7) --Sunday aligned at 0
local w = math.ceil((i + length) / 7) --week count
n = [[{| border=1 style="width: 100%; text-align: center; border: 3px outset #514747;"
!style="background-color:salmon;"|SUNDAY
!style="background-color:khaki;"|MONDAY
!style="background-color:lightpink;"|TUESDAY
!style="background-color:yellowgreen;"|WEDNESDAY
!style="background-color:coral;"|THURSDAY
!style="background-color:turquoise;"|FRIDAY
!style="background-color:plum;"|SATURDAY
|+ ''']] .. f["month"] .."'''\n|-\n" .. string.rep("|style=\"width: 14%\"|\n<br/>\n", i)
for i = i + 1, i + length do
n = n .. "\n|"
if i <= 7 then n = n .. "style=\"width: 14%\"|" end
n = n .. j .. "\n" .. (f[j] or "<br />")
if i % 7 == 0 then
n = n .. "\n|-\n"
end
j = j + 1
end
for i = j + i, w*7 do
n = n .. "\n|" .. (f[j] or "")
j = j + 1
end
n = n .. "\n|}" --ww
return n
--return m
end
--[[function for each month. user-facing element.
Use: {{Calendar page|month=<month>|year=<year>|<day 1>|<day 2>|...|<day n>|<day n+1>}}
Month (function, capitalised) is required. Year defaults to current.
Days are optional and can go above the maximum.
]]--
function p.January(frame)
frame = Fuckup(frame)
local length = 31
local offset = 0
m = Month(length, offset, frame)
return m
end
function p.February(frame)
frame = Fuckup(frame)
local length = 28 + frame["leap"]
local offset = 31
m = Month(length, offset, frame)
return m
end
function p.March(frame)
frame = Fuckup(frame)
local length = 31
local offset = 31 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.April(frame)
frame = Fuckup(frame)
local length = 30
local offset = 62 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.May(frame)
frame = Fuckup(frame)
local length = 31
local offset = 92 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.June(frame)
frame = Fuckup(frame)
local length = 30
local offset = 123 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.July(frame)
frame = Fuckup(frame)
local length = 31
local offset = 153 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.August(frame)
frame = Fuckup(frame)
local length = 31
local offset = 184 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.September(frame)
frame = Fuckup(frame)
local length = 30
local offset = 215 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.October(frame)
frame = Fuckup(frame)
local length = 31
local offset = 245 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.November(frame)
frame = Fuckup(frame)
local length = 30
local offset = 276 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.December(frame)
frame = Fuckup(frame)
local length = 31
local offset = 306 + (28 + frame["leap"])
m = Month(length, offset, frame)
return m
end
function p.NewMonth(frame) -- arbitrary month length and time in the year
frame = Fuckup(frame)
frame["month"] = frame["name"] or frame["month"]
local length = frame["length"] or 10
local offset = frame["offset"] or 164
m = Month(length, offset, frame)
return m
end
return p