模块:Db:修订间差异
MJ Hamster(留言 | 贡献) 小无编辑摘要 |
MJ Hamster(留言 | 贡献) 小无编辑摘要 |
||
| 第1行: | 第1行: | ||
local p = {} | local p = {} | ||
-- 1. 国际化和常量 | |||
local i18n = { | local i18n = { | ||
['true'] = '是', | ['true'] = '是', -- 布尔值:真 | ||
['false'] = '否', | ['false'] = '否', -- 布尔值:假 | ||
['none'] = | ['none'] = '无', | ||
['category_missing_value'] = '缺失%s', | ['category_missing_value'] = '缺失%s', | ||
[' | ['error_no_type'] = '<span class="error">Db:调用时必须提供type参数。</span>', | ||
} | } | ||
-- 2. 辅助函数 | |||
local function | -- 导入歌曲数据,从 Module:db_song 中获取数据表 | ||
return | local function GetValuesTable() | ||
-- 从 Module:db_song 中获取数据。 | |||
return mw.loadData('Module:db_song') | |||
end | end | ||
-- 从值列表按照键值获得值,找不到则返回nil。 | |||
local function ValueFromValuesByKey(values, key) | local function ValueFromValuesByKey(values, key) | ||
if values and key then | |||
return values[key] | |||
end | end | ||
return | return nil | ||
end | end | ||
-- | -- 3. 值格式化方法 (valueMappingMethod) | ||
local valueMappingMethod = { | local valueMappingMethod = { | ||
-- 格式化函数:将时长(秒)格式化为 'M:SS' 格式 | |||
-- | ['duration'] = (function (value) | ||
if type(value) == 'number' then | |||
local minutes = math.floor(value / 60) | |||
local seconds = value % 60 | |||
return string.format('%d:%02d', minutes, seconds) | |||
end | |||
return value | |||
end), | |||
-- 格式化函数:将艺术家名称自动链接 | |||
['artist'] = (function (value) | |||
if type(value) == 'string' and value ~= '' then | |||
-- | return '[[' .. value .. ']]' | ||
end | |||
return value | |||
end), | |||
} | } | ||
-- | -- 4. 外部调用函数 (p.value) | ||
function p.value(f) | |||
local args = f | |||
local frame = mw.getCurrentFrame() | |||
if f == frame then | |||
args = require('Module:ProcessArgs').merge(true) | |||
end | end | ||
local argTargetName = mw.text.trim(args[1] or '') -- 歌曲ID (键名) | |||
local argType = args.type -- 字段名 (type) | |||
local argNocat = args.nocat -- 是否禁止分类追踪 | |||
if not argType then | |||
return i18n['error_no_type'] | |||
end | |||
-- 1. 加载歌曲数据 | |||
local values = GetValuesTable() | |||
-- 2. 获取目标歌曲条目 | |||
local songEntry = ValueFromValuesByKey(values, argTargetName) | |||
-- | if not songEntry then | ||
local | -- [处理歌曲ID缺失...] | ||
-- ... (代码省略,与之前版本相同) | |||
return i18n['none'] | |||
end | |||
-- 3. 从歌曲条目中获取特定字段的值 | |||
local value = ValueFromValuesByKey(songEntry, argType) | |||
if type(valueMappingMethod[ | if value == nil then | ||
return valueMappingMethod[ | -- [处理特定字段的值缺失...] | ||
-- ... (代码省略,与之前版本相同) | |||
return i18n['none'] | |||
end | |||
-- 4. 应用格式化 | |||
-- **新增:优先级最高的布尔值转换** | |||
if type(value) == 'boolean' then | |||
if value then | |||
return i18n['true'] | |||
else | |||
return i18n['false'] | |||
end | |||
end | |||
-- 接下来应用字段特定的格式化 | |||
if type(valueMappingMethod[argType]) == 'function' then | |||
return valueMappingMethod[argType](value) | |||
else | else | ||
return value | -- 转换为字符串输出 | ||
return tostring(value) | |||
end | end | ||
end | end | ||
return p | |||
2025年11月29日 (六) 08:09的版本
本模块为自动表核心功能程序,根据输入的信息自动筛选数据。
数据库储存在Module:db_song,通过Template:db可以调用数据库中的信息,也可以通过Template:songlist生成自动表格。
local p = {}
-- 1. 国际化和常量
local i18n = {
['true'] = '是', -- 布尔值:真
['false'] = '否', -- 布尔值:假
['none'] = '无',
['category_missing_value'] = '缺失%s',
['error_no_type'] = '<span class="error">Db:调用时必须提供type参数。</span>',
}
-- 2. 辅助函数
-- 导入歌曲数据,从 Module:db_song 中获取数据表
local function GetValuesTable()
-- 从 Module:db_song 中获取数据。
return mw.loadData('Module:db_song')
end
-- 从值列表按照键值获得值,找不到则返回nil。
local function ValueFromValuesByKey(values, key)
if values and key then
return values[key]
end
return nil
end
-- 3. 值格式化方法 (valueMappingMethod)
local valueMappingMethod = {
-- 格式化函数:将时长(秒)格式化为 'M:SS' 格式
['duration'] = (function (value)
if type(value) == 'number' then
local minutes = math.floor(value / 60)
local seconds = value % 60
return string.format('%d:%02d', minutes, seconds)
end
return value
end),
-- 格式化函数:将艺术家名称自动链接
['artist'] = (function (value)
if type(value) == 'string' and value ~= '' then
return '[[' .. value .. ']]'
end
return value
end),
}
-- 4. 外部调用函数 (p.value)
function p.value(f)
local args = f
local frame = mw.getCurrentFrame()
if f == frame then
args = require('Module:ProcessArgs').merge(true)
end
local argTargetName = mw.text.trim(args[1] or '') -- 歌曲ID (键名)
local argType = args.type -- 字段名 (type)
local argNocat = args.nocat -- 是否禁止分类追踪
if not argType then
return i18n['error_no_type']
end
-- 1. 加载歌曲数据
local values = GetValuesTable()
-- 2. 获取目标歌曲条目
local songEntry = ValueFromValuesByKey(values, argTargetName)
if not songEntry then
-- [处理歌曲ID缺失...]
-- ... (代码省略,与之前版本相同)
return i18n['none']
end
-- 3. 从歌曲条目中获取特定字段的值
local value = ValueFromValuesByKey(songEntry, argType)
if value == nil then
-- [处理特定字段的值缺失...]
-- ... (代码省略,与之前版本相同)
return i18n['none']
end
-- 4. 应用格式化
-- **新增:优先级最高的布尔值转换**
if type(value) == 'boolean' then
if value then
return i18n['true']
else
return i18n['false']
end
end
-- 接下来应用字段特定的格式化
if type(valueMappingMethod[argType]) == 'function' then
return valueMappingMethod[argType](value)
else
-- 转换为字符串输出
return tostring(value)
end
end
return p