如果你看到本段文字,说明该页面未正常加载全局JS,部分功能无法使用,请点击 刷新 重新加载页面。
如果打开页面显示缩略图创建出错,请点击刷新或页面右上WIKI功能中的刷新按钮清除页面缓存并刷新,如果还有问题,请多尝试几次。
全站通知:

模块:更新索引

来自碧蓝航线WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

模块:更新索引/doc

用途

本模块用于维护 **更新日志页面 ↔ 专题页面** 的双向索引。

- 在 更新日志页面 调用:可显示该次更新涉及哪些专题。 - 在 专题页面 调用:可显示该专题涉及的所有更新日志,并标注完成状态。 - 在 其它页面 调用时,可以通过参数传入专题名称进行查询。

数据存放在 Module:更新索引/数据,由维护人员手动更新。

用法

在更新日志页面

显示该更新涉及的专题(不带完成状态):

{{#invoke:更新索引|log}}

在专题页面

显示所有涉及该专题的更新日志,并标注完成状态:

{{#invoke:更新索引|topic}}

在其它页面查询指定专题

{{#invoke:更新索引|topic|topic=JUUs动态}}

数据维护

所有数据维护在 Module:更新索引/数据,格式示例:

return {
  ["2025年9月5日10:00港区改建"] = {
    { name = "宿舍计划", status = "已完成" },
    { name = "JUUs动态", status = "未完成" },
  },

  ["2025年9月25日10:00港区改建"] = {
    { name = "宿舍计划", status = "未完成" },
    { name = "JUUs动态", status = "未完成" },
  },
}

说明:

  • name:专题页面名称(必须与页面标题完全一致)
  • status:完成状态,可填“已完成”或“未完成”

示例

假设数据中有以下条目:

["2025年9月5日10:00港区改建"] = {
  { name = "宿舍计划", status = "已完成" },
  { name = "JUUs动态", status = "未完成" },
},

在“2025年9月5日10:00港区改建”页面

{{#invoke:更新索引|log}}

输出:

== 本次更新涉及 ==
* [[宿舍计划]]
* [[JUUs动态]]

在“宿舍计划”页面

{{#invoke:更新索引|topic}}

输出:

== 涉及本专题的更新 ==
* [[2025年9月5日10:00港区改建]] (已完成)

参见


-- Module:更新索引
local p = {}
local data = require("Module:更新索引/数据")

-- ===============================
-- 在更新日志页面调用
-- 用法:{{#invoke:更新索引|log}}
-- ===============================
function p.log(frame)
  local page = mw.title.getCurrentTitle().text
  local entries = data[page]
  if not entries then return "(暂无记录)" end

  local res = {"=== 本次更新涉及 === \n [[Module:更新索引/数据|修改备注]]"}
  for _, item in ipairs(entries) do
    table.insert(res, "* [[" .. item.name .. "]]:" .. frame:preprocess(item.status))
  end
  return table.concat(res, "\n")
end

-- ===============================
-- 辅助函数:把“2025年9月19日10:00港区改建”转为可比较的数字
-- ===============================
local function parseDate(logname)
  -- 匹配:2025年9月19日10:00港区改建
  local y, m, d, H, M = logname:match("(%d+)年(%d+)月(%d+)日(%d+):(%d+)")
  if not y then return 0 end
  return os.time{year=tonumber(y), month=tonumber(m), day=tonumber(d), hour=tonumber(H), min=tonumber(M)}
end

-- ===============================
-- 在专题页面调用
-- 用法:
--   {{#invoke:更新索引|topic}}
--   {{#invoke:更新索引|topic|topic=JUUs动态}}
-- ===============================
function p.topic(frame)
  local topic = frame.args.topic or mw.title.getCurrentTitle().text
  local res = {"=== 涉及本专题的更新 === \n [[Module:更新索引/数据|修改备注]]"}
  local found = false
  local matches = {}

  -- 收集所有涉及该专题的更新日志
  for log, entries in pairs(data) do
    for _, item in ipairs(entries) do
      if item.name == topic then
        table.insert(matches, {
          log = log,
          status = frame:preprocess(item.status),
          ts = parseDate(log)
        })
        found = true
      end
    end
  end

  -- 按时间戳倒序排序
  table.sort(matches, function(a, b) return a.ts > b.ts end)

  -- 输出
  for _, m in ipairs(matches) do
    table.insert(res, "* [[" .. m.log .. "]]   "  .. m.status)
  end

  if not found then
    table.insert(res, "* (暂无相关更新)")
  end

  return table.concat(res, "\n")
end

return p