Module:DateTitleList

来自NeuroWiki
Selfice留言 | 贡献2025年1月23日 (四) 00:46的版本
跳转到导航 跳转到搜索

此模块的文档可以在Module:DateTitleList/doc创建

local p = {}

local function format_date(frame, date_str, title, year)
    -- 提取年份、月份和日期
    local year_in_date = string.sub(date_str, 1, 4)
    local month = tonumber(string.sub(date_str, 5, 6)) -- 去掉前导零
    local day = tonumber(string.sub(date_str, 7, 8)) -- 去掉前导零

    -- 格式化日期为 "X月X日"
    local month_day = string.format("%d月%d日", month, day)

    -- 构造分类链接和 ruby 模板
    local category_link
    if year_in_date ~= year then
        -- 使用 ruby 模板
        category_link = frame:expandTemplate{
            title = "ruby",
            args = { month_day, year_in_date .. "年" }
        }
    else
        category_link = month_day
    end

    -- 构造最终输出
    local category = string.format("[[:Category:%s|%s]]", month_day, category_link)
    local page_link = string.format("[[直播记录/vedal987频道/%s年%s|%s]]", year_in_date, month_day, title)

    return string.format("* '''%s''' %s", category, page_link)
end

local function compare_dates(a, b)
    return a.date < b.date
end

function p.main(frame)
    local args = frame:getParent().args
    local year = args.year or os.date("%Y")
    local entries = {}

    -- 收集日期和标题
    for i = 1, 7 do
        local date = args["date" .. i]
        local title = args["title" .. i]
        if date and title then
            table.insert(entries, {date = date, title = title})
        end
    end

    -- 按日期排序
    table.sort(entries, compare_dates)

    -- 生成输出列表
    local result = {}
    for _, entry in ipairs(entries) do
        table.insert(result, format_date(frame, entry.date, entry.title, year))
    end

    -- 合并为字符串输出
    return table.concat(result, "\n")
end

return p