模块:SoftwareInfo
来自陋室
更多操作
此模块的文档可以在模块:SoftwareInfo/doc创建
local p = {}
local function trim(s)
if not s then
return ''
end
return mw.text.trim(s)
end
local function v(args, key, fallback)
local value = trim(args[key])
if value == '' then
return fallback
end
return value
end
local function linkOrText(url, label, empty)
url = trim(url)
if url == '' then
return empty
end
return string.format('[%s %s]', url, label)
end
local function addRow(out, label, value)
table.insert(out, '|-')
table.insert(out, '| ' .. label .. ' || ' .. value)
end
local function languageDisplay(code)
code = trim(code)
if code == '' then
return '未知'
end
local ok, name = pcall(function()
return mw.language.fetchLanguageName(code, 'zh')
end)
if ok and name and trim(name) ~= '' then
return name
end
return code
end
local function renderCore(frame, toolTemplate, toolTarget)
local args = frame.args or {}
local out = {}
table.insert(out, '{| class="wikitable"')
table.insert(out, '|+ 软件名称:' .. mw.title.getCurrentTitle().text)
table.insert(out, '! colspan="2" | 基本信息')
addRow(out, "'''开发者:'''", v(args, '开发者', '未知'))
addRow(out, "'''官网:'''", linkOrText(args['官网'], '官网', '无'))
addRow(out, "'''下载:'''", linkOrText(args['下载'], '下载链接', '无'))
addRow(out, "'''类别:'''", v(args, '类别', '未知'))
addRow(out, "'''状态:'''", v(args, '状态', '未知'))
table.insert(out, '|-')
table.insert(out, '! colspan="2" | 架构与版本')
addRow(out, "'''当前版本:'''", v(args, '版本号', '未知'))
addRow(out, "'''文件大小:'''", v(args, '大小', '未知'))
addRow(out, "'''更新日期:'''", v(args, '更新日期', '未知'))
addRow(out, "'''语言:'''", languageDisplay(args['语言']))
addRow(out, "'''支持系统:'''", v(args, '系统', '未知'))
addRow(out, "'''支持架构:'''", v(args, '架构', '未知'))
addRow(out, "'''开发语言:'''", v(args, '开发语言', '未知'))
addRow(out, "'''界面类型:'''", v(args, '界面', '未知'))
table.insert(out, '|-')
table.insert(out, '! colspan="2" | 功能与发行')
addRow(out, "'''主要功能:'''", v(args, '功能', '未知'))
addRow(out, "'''相关软件:'''", v(args, '相关软件', '未知'))
addRow(out, "'''发行方式:'''", v(args, '发行方式', '未知'))
table.insert(out, '|-')
table.insert(out, '! colspan="2" | 贡献与许可证')
addRow(out, "'''许可证:'''", v(args, '许可证', '未知'))
addRow(out, "'''GitHub:'''", linkOrText(args['GitHub'], 'GitHub 页面', '无'))
addRow(out, "'''贡献方式:'''", v(args, '贡献方式', '未知'))
table.insert(out, '|}')
table.insert(out, frame:expandTemplate {
title = toolTemplate,
args = {
target = toolTarget,
parent = toolTarget,
}
})
return table.concat(out, '\n')
end
function p.render(frame)
return renderCore(frame, 'PageToolsLink', 'Template:SoftwareInfo')
end
function p.renderSandbox(frame)
return renderCore(frame, 'PageToolsLink/sandbox', 'Template:SoftwareInfo/sandbox')
end
return p