打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

此模块的文档可以在模块: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