Jump to content

Module:Aligned dates list

Permanently protected module
From Wikipedia, the free encyclopedia

local p = {}

function p.main(frame)
    local output = {}
    local monthNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
    local daysInMonth = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

    local function generateSuffixes()
        local suffixes = {""}
        for char = string.byte("b"), string.byte("z") do
            table.insert(suffixes, string.char(char))
        end
        return suffixes
    end

    local suffixes = generateSuffixes()

    for month = 1, 12 do
        local monthName = monthNames[month]
        local days = daysInMonth[month]

        for day = 1, days do
            for _, suffix in ipairs(suffixes) do
                local key1 = string.format("%02d-%02d%s", month, day, suffix)
                local key2 = string.format("%s %02d%s", string.sub(monthName, 1, 3), day, suffix)
                local key3 = string.format("%s %02d%s", string.lower(string.sub(monthName, 1, 3)), day, suffix)
                local value = frame:getParent().args[key1] or frame:getParent().args[key2] or frame:getParent().args[key3]

                if value then
                    table.insert(output, string.format('<div><div style="width:4em;display:inline-block;">%s %d</div> <div style="display:inline-block;">%s</div></div>', monthName, day, value))
                end
            end
        end
    end

    return table.concat(output)
end

return p