Module:On This Day

local p = {} local h = {}

local utilsCargo = require("Module:UtilsCargo") local utilsLayout = require("Module:UtilsLayout") local utilsString = require("Module:UtilsString") local utilsTable = require("Module:UtilsTable") local utilsVar = require("Module:UtilsVar")

function p._Main(frame) local entry = h.GetEntryForToday return h.DisplaySection(entry) end

function p.AddToPreview(frame) local args = frame:getParent.args utilsVar.add("entries", args) end

function p.Preview(frame) local entries = utilsVar.get("entries") local eventsByDate = utilsTable.keyBy(entries, function(entry)		return string.sub(entry.date, 6)	end)

local calendar = { {"January", 31}, {"February", 29}, {"March", 31}, {"April", 30}, {"May", 31}, {"June", 30}, {"July", 31}, {"August", 31}, {"September", 30}, {"October", 31}, {"November", 30}, {"December", 31}, }	local rows = {} for i, month in ipairs(calendar) do		for day = 1, month[2] do			local d = h.toString(day) local m = h.toString(i) local date = m.."-"..d			local event = eventsByDate[date] table.insert(rows, {				id = date,				cells = {					{						sortValue = date,						content = month[1].." "..day,					},					event and event.date or "", 					event and h.DisplaySection(event) or ""				},			}) end end local wikitable = utilsLayout.table({		headers = {"Day", "Date", "On This Day"},		rows = rows,		sortable = true,	}) local styles = frame:extensionTag({		name = "templatestyles",		args = { src = "Template:Main Page Infoblocks/Styles.css" }	}) return styles..wikitable end function h.toString(num) if num < 10 then return "0"..num else return tostring(num) end end

function h.GetEntryForToday local formattedDate = os.date("%m-%d") local entries = utilsCargo.query("OnThisDay", "date, title, filename, text, link", {}) local todayEntries = {} for key, entry in ipairs(entries) do		if string.sub(entry["date"], 6) == formattedDate then table.insert(todayEntries, entry) end end return todayEntries[1] end

function h.DisplaySection(entry) local result = "" local header = "On this day" if entry then header = header .. ", " .. (os.date("%Y") - tonumber(string.sub(entry["date"], 1, 4))) .. " years ago..." else header = header .. "..."		entry = {} entry["filename"] = "LA Mr. Write Artwork.png" entry["title"] = "Nothing happened" entry["text"] = "But you can change that! All it takes is one edit to make history. Zelda Wiki history, that is.\n* Join our Discord\n* Learn how to edit\n* Check out pages needing attention" entry["link"] = "Guidelines:Getting Started" end local purgeButton = mw.html.create("span") :addClass("plainlinks otd-refresh-button") :wikitext(mw.getCurrentFrame:preprocess(" [ [ refresh] ] ")) local html = mw.html.create("div") :addClass("infoblock") :attr("id", "on-this-day") :tag("div") :addClass("infoblock-header") :wikitext(header) :done :tag("div") :addClass("infoblock-body") :tag("div") :addClass("infoblock-text") :tag("div") :addClass("infoblock-title") :tag("div") :addClass("infoblock-title-text") :wikitext(entry["title"]) :done :tag("span") :addClass("plainlinks otd-refresh-button") :wikitext(mw.getCurrentFrame:preprocess(" [ [ refresh] ] ")) :done :done :tag("div") :addClass("infoblock-content") :wikitext(entry["text"]) :done :done :tag("div") :addClass("infoblock-image") :wikitext("") :done :done

return tostring(html) end

p.Templates = { ["On This Day"] = {}, ["On This Day/Store"] = {}, }

return p