模块:单元列表
来自Ander. System Wiki
更多操作
此模块的文档可以在模块:单元列表/doc创建
-- Module:角色列表
local p = {}
local data = mw.loadData("Module:单元列表/data")
-- 渲染单张卡片
local function renderCard(char)
local tags = ""
for _, tag in ipairs(char.tags or {}) do
tags = tags .. '<span class="as-tag">' .. tag .. "</span>"
end
return '<div class="as-char-card">'
.. '<div class="as-char-card-body">'
.. '<div class="as-char-card-name">[[' .. char.page .. "|" .. char.name .. "]]</div>"
.. '<div class="as-char-card-role">' .. char.role .. "</div>"
.. '<div class="as-char-card-tags">' .. tags .. "</div>"
.. '<div class="as-char-card-desc">' .. char.desc .. "</div>"
.. "</div></div>"
end
-- 渲染单个列表行
local function renderListItem(char)
return '<div class="as-char-list-item">'
.. '<div class="as-char-list-body">'
.. '<div class="as-char-list-name">[[' .. char.page .. "|" .. char.name .. "]]</div>"
.. '<div class="as-char-list-meta">' .. char.role .. " · " .. table.concat(char.tags or {}, " · ") .. "</div>"
.. '<div class="as-char-list-desc">' .. char.desc .. "</div>"
.. "</div></div>"
end
-- 收集所有分类(保持顺序,去重)
local function getCategories()
local seen = {}
local cats = {}
for _, char in ipairs(data) do
if char.category and not seen[char.category] then
seen[char.category] = true
table.insert(cats, char.category)
end
end
return cats
end
-- 主入口:渲染完整角色列表页
function p.render(frame)
local categories = getCategories()
-- 页面头部
local html = '<div class="as-page-header">'
.. '<div class="as-page-label">★ CHARACTER DATABASE</div>'
.. '<div class="as-page-title">角色档案</div>'
.. '<div class="as-page-desc">Ander.System 世界中的所有角色资料与设定档案</div>'
.. "</div>"
-- 筛选栏
local tabs = '<span class="as-filter-tab as-active">全部</span>'
for _, cat in ipairs(categories) do
tabs = tabs .. '<span class="as-filter-tab">[[#' .. cat .. "|" .. cat .. "]]</span>"
end
html = html .. '<div class="as-filter-bar">'
.. '<div class="as-filter-label">分类筛选</div>'
.. '<div class="as-filter-tabs">' .. tabs .. "</div>"
.. "</div>"
-- 全部角色卡片网格
html = html .. '<div class="as-section-label" id="全部角色">全部角色</div>'
html = html .. '<div class="as-char-grid">'for _, char in ipairs(data) do
html = html .. renderCard(char)
end
html = html .. "</div>"
-- 按分类输出列表
for _, cat in ipairs(categories) do
html = html .. '<div class="as-section-label" id="' .. cat .. '">' .. cat .. "</div>"
html = html .. '<div class="as-char-list">'
for _, char in ipairs(data) do
if char.category == cat then
html = html .. renderListItem(char)
end
end
html = html .. "</div>"
end
return html
end
return p