Module:曲师列表:修订间差异
JSON 流水线更新渲染模块 |
JSON 流水线更新渲染模块 |
||
| 第7行: | 第7行: | ||
local DATA_TITLE = '模板:曲目列表.json' | local DATA_TITLE = '模板:曲目列表.json' | ||
local MAP_TITLE = '模板:曲师映射.json' | local MAP_TITLE = '模板:曲师映射.json' | ||
local INTRO_TITLE = '模板:曲师简介' -- 手工简介数据页(可编辑 wikitext) | |||
local DIFFS = { 'CASUAL', 'TOUGH', 'INSANE', 'PRO' } | local DIFFS = { 'CASUAL', 'TOUGH', 'INSANE', 'PRO' } | ||
| 第73行: | 第74行: | ||
if not ok then return nil end | if not ok then return nil end | ||
return data | return data | ||
end | |||
-- 解析简介数据页: 每个 == 名字 == 小节为该名字的介绍(wikitext 原样输出) | |||
local function loadIntros() | |||
local t = mw.title.new(INTRO_TITLE) | |||
if not t or not t.exists then return {} end | |||
local content = (t:getContent() or ''):gsub('<noinclude>.-</noinclude>', '') | |||
local map, cur = {}, nil | |||
for line in mw.text.gsplit(content, '\n') do | |||
local h = line:match('^==%s*(.-)%s*==%s*$') | |||
if h then | |||
cur = norm(h) | |||
map[cur] = '' | |||
elseif cur then | |||
map[cur] = map[cur] .. line .. '\n' | |||
end | |||
end | |||
for k, v in pairs(map) do | |||
v = mw.text.trim(v) | |||
v = v:gsub('<!%-%-.-%-%->', '') -- 去掉占位注释 | |||
map[k] = mw.text.trim(v) | |||
end | |||
return map | |||
end | end | ||
| 第89行: | 第113行: | ||
end | end | ||
local map = loadJson(MAP_TITLE) or {} | local map = loadJson(MAP_TITLE) or {} | ||
local intros = loadIntros() | |||
-- 归集: key -> { display, intro, sort, songs = { {song=..., ann=...} } } | -- 归集: key -> { display, intro, sort, songs = { {song=..., ann=...} } } | ||
| 第105行: | 第130行: | ||
artists[key] = { | artists[key] = { | ||
display = m['显示名'] or pt.base, | display = m['显示名'] or pt.base, | ||
intro = m['简介'] or '', | intro = (m['简介'] and m['简介'] ~= '') and m['简介'] | ||
or intros[key] or intros[norm(m['显示名'] or pt.base)] or '', | |||
sort = m['排序键'] or '', | sort = m['排序键'] or '', | ||
songs = {}, | songs = {}, | ||