<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://adaris.wiki/history/Module:Calendar?feed=atom</id>
	<title>Module:Calendar - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://adaris.wiki/history/Module:Calendar?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://adaris.wiki/history/Module:Calendar"/>
	<updated>2026-10-21T17:22:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://adaris.wiki/index.php?title=Module:Calendar&amp;diff=18355&amp;oldid=prev</id>
		<title>Oros: Created page with &quot; local p = {}  local defaultSeasons = {     &quot;Spring&quot;, &quot;Summer&quot;, &quot;Autumn&quot;, &quot;Winter&quot; }  local defaultMonths = {} local defaultDays = {}  for i = 1, 12 do     defaultMonths[i] = &quot;Month &quot; .. i end  for i = 1, 6 do     defaultDays[i] = &quot;Day &quot; .. i end  -- Read comma-separated custom names local function getNames(value, defaults)     local names = {}     local parts = {}      if value and value ~= &quot;&quot; then         for part in mw.text.gsplit(value, &quot;,&quot;, true) do             tabl...&quot;</title>
		<link rel="alternate" type="text/html" href="https://adaris.wiki/index.php?title=Module:Calendar&amp;diff=18355&amp;oldid=prev"/>
		<updated>2026-10-16T19:46:25Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; local p = {}  local defaultSeasons = {     &amp;quot;Spring&amp;quot;, &amp;quot;Summer&amp;quot;, &amp;quot;Autumn&amp;quot;, &amp;quot;Winter&amp;quot; }  local defaultMonths = {} local defaultDays = {}  for i = 1, 12 do     defaultMonths[i] = &amp;quot;Month &amp;quot; .. i end  for i = 1, 6 do     defaultDays[i] = &amp;quot;Day &amp;quot; .. i end  -- Read comma-separated custom names local function getNames(value, defaults)     local names = {}     local parts = {}      if value and value ~= &amp;quot;&amp;quot; then         for part in mw.text.gsplit(value, &amp;quot;,&amp;quot;, true) do             tabl...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local defaultSeasons = {&lt;br /&gt;
    &amp;quot;Spring&amp;quot;, &amp;quot;Summer&amp;quot;, &amp;quot;Autumn&amp;quot;, &amp;quot;Winter&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local defaultMonths = {}&lt;br /&gt;
local defaultDays = {}&lt;br /&gt;
&lt;br /&gt;
for i = 1, 12 do&lt;br /&gt;
    defaultMonths[i] = &amp;quot;Month &amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1, 6 do&lt;br /&gt;
    defaultDays[i] = &amp;quot;Day &amp;quot; .. i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Read comma-separated custom names&lt;br /&gt;
local function getNames(value, defaults)&lt;br /&gt;
    local names = {}&lt;br /&gt;
    local parts = {}&lt;br /&gt;
&lt;br /&gt;
    if value and value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        for part in mw.text.gsplit(value, &amp;quot;,&amp;quot;, true) do&lt;br /&gt;
            table.insert(parts, mw.text.trim(part))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for i = 1, #defaults do&lt;br /&gt;
        names[i] = (parts[i] and parts[i] ~= &amp;quot;&amp;quot;)&lt;br /&gt;
            and parts[i] or defaults[i]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return names&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Build a six-day, five-week month&lt;br /&gt;
local function drawMonth(parent, number, months, days, markM, markD)&lt;br /&gt;
    local box = parent:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;fc-month&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    box:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;fc-month-name&amp;quot;)&lt;br /&gt;
        :wikitext(mw.text.encode(months[number]))&lt;br /&gt;
&lt;br /&gt;
    local calendar = box:tag(&amp;quot;table&amp;quot;):addClass(&amp;quot;fc-grid&amp;quot;)&lt;br /&gt;
    local header = calendar:tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for d = 1, 6 do&lt;br /&gt;
        header:tag(&amp;quot;th&amp;quot;)&lt;br /&gt;
            :attr(&amp;quot;scope&amp;quot;, &amp;quot;col&amp;quot;)&lt;br /&gt;
            :wikitext(mw.text.encode(days[d]))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local body = calendar&lt;br /&gt;
&lt;br /&gt;
    for week = 0, 4 do&lt;br /&gt;
        local row = body:tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        for d = 1, 6 do&lt;br /&gt;
            local date = week * 6 + d&lt;br /&gt;
            local cell = row:tag(&amp;quot;td&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            if number == markM and date == markD then&lt;br /&gt;
                cell:addClass(&amp;quot;fc-marked&amp;quot;)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            cell:wikitext(tostring(date))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Draw a season containing three months&lt;br /&gt;
local function drawSeason(parent, season, seasons, months, days,&lt;br /&gt;
                          selectedMonth, markM, markD)&lt;br /&gt;
&lt;br /&gt;
    local section = parent:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;fc-season&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    section:tag(&amp;quot;h3&amp;quot;)&lt;br /&gt;
        :addClass(&amp;quot;fc-season-name&amp;quot;)&lt;br /&gt;
        :wikitext(mw.text.encode(seasons[season]))&lt;br /&gt;
&lt;br /&gt;
    local monthGrid = section:tag(&amp;quot;div&amp;quot;):addClass(&amp;quot;fc-months&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local first = (season - 1) * 3 + 1&lt;br /&gt;
    local last = first + 2&lt;br /&gt;
&lt;br /&gt;
    for m = first, last do&lt;br /&gt;
        if not selectedMonth or selectedMonth == m then&lt;br /&gt;
            drawMonth(monthGrid, m, months, days, markM, markD)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
&lt;br /&gt;
    local seasons = getNames(args.seasons, defaultSeasons)&lt;br /&gt;
    local months = getNames(args.months, defaultMonths)&lt;br /&gt;
    local days = getNames(args.days, defaultDays)&lt;br /&gt;
&lt;br /&gt;
    local view = mw.text.trim(args.view or &amp;quot;year&amp;quot;):lower()&lt;br /&gt;
    local year = mw.text.trim(args.year or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local month = tonumber(args.month) or 1&lt;br /&gt;
    local season = tonumber(args.season) or 1&lt;br /&gt;
&lt;br /&gt;
    if view ~= &amp;quot;year&amp;quot; and view ~= &amp;quot;season&amp;quot; and view ~= &amp;quot;month&amp;quot; then&lt;br /&gt;
        return &amp;quot;Calendar error: view must be year, season, or month.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if view == &amp;quot;month&amp;quot; and&lt;br /&gt;
       (month &amp;lt; 1 or month &amp;gt; 12 or month % 1 ~= 0) then&lt;br /&gt;
        return &amp;quot;Calendar error: month must be 1–12.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if view == &amp;quot;season&amp;quot; and&lt;br /&gt;
       (season &amp;lt; 1 or season &amp;gt; 4 or season % 1 ~= 0) then&lt;br /&gt;
        return &amp;quot;Calendar error: season must be 1–4.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Optional highlighted date: mark=5-14&lt;br /&gt;
    local markM, markD = (args.mark or &amp;quot;&amp;quot;):match(&amp;quot;^(%d+)%-(%d+)$&amp;quot;)&lt;br /&gt;
    markM = tonumber(markM)&lt;br /&gt;
    markD = tonumber(markD)&lt;br /&gt;
&lt;br /&gt;
    local root = mw.html.create(&amp;quot;div&amp;quot;):addClass(&amp;quot;fc-calendar&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if year ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        root:tag(&amp;quot;h2&amp;quot;)&lt;br /&gt;
            :addClass(&amp;quot;fc-year-name&amp;quot;)&lt;br /&gt;
            :wikitext(&amp;quot;Year &amp;quot; .. mw.text.encode(year))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if view == &amp;quot;month&amp;quot; then&lt;br /&gt;
        local seasonIndex = math.ceil(month / 3)&lt;br /&gt;
        drawSeason(root, seasonIndex, seasons, months, days,&lt;br /&gt;
                   month, markM, markD)&lt;br /&gt;
&lt;br /&gt;
    elseif view == &amp;quot;season&amp;quot; then&lt;br /&gt;
        drawSeason(root, season, seasons, months, days,&lt;br /&gt;
                   nil, markM, markD)&lt;br /&gt;
&lt;br /&gt;
    else&lt;br /&gt;
        for s = 1, 4 do&lt;br /&gt;
            drawSeason(root, s, seasons, months, days,&lt;br /&gt;
                       nil, markM, markD)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Oros</name></author>
	</entry>
</feed>