<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://wiki.2b2t.xin/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfotable</id>
	<title>Module:Infotable - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.2b2t.xin/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfotable"/>
	<link rel="alternate" type="text/html" href="https://wiki.2b2t.xin/w/index.php?title=Module:Infotable&amp;action=history"/>
	<updated>2026-11-06T19:32:54Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.2b2t.xin/w/index.php?title=Module:Infotable&amp;diff=567&amp;oldid=prev</id>
		<title>Admin：​group 信息框：结局/现状 合并为单一 状态 字段</title>
		<link rel="alternate" type="text/html" href="https://wiki.2b2t.xin/w/index.php?title=Module:Infotable&amp;diff=567&amp;oldid=prev"/>
		<updated>2026-10-02T12:00:49Z</updated>

		<summary type="html">&lt;p&gt;group 信息框：结局/现状 合并为单一 状态 字段&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年10月2日 (五) 20:00的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l24&quot;&gt;第24行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第24行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		titleKey = &amp;#039;中文名称&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		titleKey = &amp;#039;中文名称&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		imageKey = &amp;#039;图标&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		imageKey = &amp;#039;图标&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		fields = { &amp;#039;缩写&amp;#039;, &amp;#039;成立时间&amp;#039;, &amp;#039;创始人&amp;#039;, &amp;#039;现任首领&amp;#039;, &amp;#039;成员规模&amp;#039;, &amp;#039;主要活动&amp;#039;, &amp;#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;结局&amp;#039;, &amp;#039;现 &lt;/del&gt;状&amp;#039; },&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		fields = { &amp;#039;缩写&amp;#039;, &amp;#039;成立时间&amp;#039;, &amp;#039;创始人&amp;#039;, &amp;#039;现任首领&amp;#039;, &amp;#039;成员规模&amp;#039;, &amp;#039;主要活动&amp;#039;, &amp;#039;状 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;态&lt;/ins&gt;&amp;#039; },&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	},&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	},&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	base = {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	base = {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki:diff::1.12:old-555:rev-567 --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.2b2t.xin/w/index.php?title=Module:Infotable&amp;diff=555&amp;oldid=prev</id>
		<title>Admin：​新增 Lua 信息框引擎：已知字段按序渲染，未知参数自动成为自定义行</title>
		<link rel="alternate" type="text/html" href="https://wiki.2b2t.xin/w/index.php?title=Module:Infotable&amp;diff=555&amp;oldid=prev"/>
		<updated>2026-10-02T11:01:39Z</updated>

		<summary type="html">&lt;p&gt;新增 Lua 信息框引擎：已知字段按序渲染，未知参数自动成为自定义行&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- 单行渲染：值非空才输出，否则整行隐藏（与旧 {{infotable-row}} 行为一致）&lt;br /&gt;
local function row( label, value )&lt;br /&gt;
	if value == nil or value == &amp;#039;&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;div class=&amp;quot;infotable-row&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;infotable-key&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		.. tostring( label )&lt;br /&gt;
		.. &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;infotable-val&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		.. tostring( value )&lt;br /&gt;
		.. &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 各信息框的已知字段清单（顺序即显示顺序）&lt;br /&gt;
local schemas = {&lt;br /&gt;
	player = {&lt;br /&gt;
		titleKey = &amp;#039;ID&amp;#039;,&lt;br /&gt;
		imageKey = &amp;#039;头像&amp;#039;,&lt;br /&gt;
		fields = { &amp;#039;别名&amp;#039;, &amp;#039;身份&amp;#039;, &amp;#039;所属组织&amp;#039;, &amp;#039;活跃时期&amp;#039;, &amp;#039;主要成就&amp;#039;, &amp;#039;现状&amp;#039; },&lt;br /&gt;
		forum = true,  -- 启用 论坛(bbs/bbsid) 特殊处理&lt;br /&gt;
	},&lt;br /&gt;
	group = {&lt;br /&gt;
		titleKey = &amp;#039;中文名称&amp;#039;,&lt;br /&gt;
		imageKey = &amp;#039;图标&amp;#039;,&lt;br /&gt;
		fields = { &amp;#039;缩写&amp;#039;, &amp;#039;成立时间&amp;#039;, &amp;#039;创始人&amp;#039;, &amp;#039;现任首领&amp;#039;, &amp;#039;成员规模&amp;#039;, &amp;#039;主要活动&amp;#039;, &amp;#039;结局&amp;#039;, &amp;#039;现状&amp;#039; },&lt;br /&gt;
	},&lt;br /&gt;
	base = {&lt;br /&gt;
		titleKey = &amp;#039;名称&amp;#039;,&lt;br /&gt;
		imageKey = &amp;#039;图片&amp;#039;,&lt;br /&gt;
		fields = { &amp;#039;类型&amp;#039;, &amp;#039;维度&amp;#039;, &amp;#039;坐标量级&amp;#039;, &amp;#039;建造时间&amp;#039;, &amp;#039;建造者&amp;#039;, &amp;#039;结局&amp;#039;, &amp;#039;现状&amp;#039; },&lt;br /&gt;
	},&lt;br /&gt;
	event = {&lt;br /&gt;
		titleKey = &amp;#039;名称&amp;#039;,&lt;br /&gt;
		imageKey = &amp;#039;图片&amp;#039;,&lt;br /&gt;
		fields = { &amp;#039;时间&amp;#039;, &amp;#039;地点&amp;#039;, &amp;#039;参与方&amp;#039;, &amp;#039;起因&amp;#039;, &amp;#039;结果&amp;#039;, &amp;#039;影响&amp;#039; },&lt;br /&gt;
	},&lt;br /&gt;
	exploit = {&lt;br /&gt;
		titleKey = &amp;#039;名称&amp;#039;,&lt;br /&gt;
		imageKey = &amp;#039;图片&amp;#039;,&lt;br /&gt;
		fields = { &amp;#039;类型&amp;#039;, &amp;#039;发现时间&amp;#039;, &amp;#039;发现者&amp;#039;, &amp;#039;原理&amp;#039;, &amp;#039;影响范围&amp;#039;, &amp;#039;修复情况&amp;#039; },&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function render( frame, kind )&lt;br /&gt;
	local schema = schemas[kind]&lt;br /&gt;
	if not schema then&lt;br /&gt;
		return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;未知的信息框类型：&amp;#039; .. tostring( kind ) .. &amp;#039;&amp;lt;/span&amp;gt;[[分类:参数错误的页面]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local parent = frame:getParent()&lt;br /&gt;
	local args = ( parent and parent.args ) or frame.args&lt;br /&gt;
&lt;br /&gt;
	local title = args[schema.titleKey] or &amp;#039;&amp;#039;&lt;br /&gt;
	local image = args[schema.imageKey] or &amp;#039;&amp;#039;&lt;br /&gt;
	local used = {}&lt;br /&gt;
	used[schema.titleKey] = true&lt;br /&gt;
	used[schema.imageKey] = true&lt;br /&gt;
&lt;br /&gt;
	local rows = {}&lt;br /&gt;
&lt;br /&gt;
	-- 已知字段（按清单顺序）&lt;br /&gt;
	for _, label in ipairs( schema.fields ) do&lt;br /&gt;
		used[label] = true&lt;br /&gt;
		rows[#rows + 1] = row( label, args[label] )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 论坛特殊处理（player）：用 bbs + bbsid 拼论坛链接&lt;br /&gt;
	if schema.forum and ( args.bbs or args.bbsid ) then&lt;br /&gt;
		used.bbs = true&lt;br /&gt;
		used.bbsid = true&lt;br /&gt;
		local forumVal = frame:expandTemplate{&lt;br /&gt;
			title = &amp;#039;bbsId&amp;#039;,&lt;br /&gt;
			args = { id = args.bbsid or &amp;#039;&amp;#039;, name = args.bbs or &amp;#039;&amp;#039; },&lt;br /&gt;
		}&lt;br /&gt;
		rows[#rows + 1] = row( &amp;#039;论坛&amp;#039;, forumVal )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- 未知参数字典序排列，作为自定义行（param 名即标签，值即内容）&lt;br /&gt;
	local custom = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		if type( k ) == &amp;#039;string&amp;#039; and not used[k] and v ~= &amp;#039;&amp;#039; and v ~= nil then&lt;br /&gt;
			custom[#custom + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( custom )&lt;br /&gt;
	for _, k in ipairs( custom ) do&lt;br /&gt;
		rows[#rows + 1] = row( k, args[k] )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowsHtml = table.concat( rows, &amp;#039;&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	return &amp;#039;&amp;lt;div class=&amp;quot;infotable&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		.. &amp;#039;&amp;lt;div class=&amp;quot;infotable-head&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infotable-title&amp;quot;&amp;gt;&amp;#039; .. title .. &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		.. &amp;#039;&amp;lt;div class=&amp;quot;infotable-body&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		.. &amp;#039;&amp;lt;div class=&amp;quot;infotable-figure&amp;quot;&amp;gt;&amp;#039; .. image .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		.. &amp;#039;&amp;lt;div class=&amp;quot;infotable-rows&amp;quot;&amp;gt;&amp;#039; .. rowsHtml .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		.. &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.player  = function( frame ) return render( frame, &amp;#039;player&amp;#039; ) end&lt;br /&gt;
p.group   = function( frame ) return render( frame, &amp;#039;group&amp;#039; ) end&lt;br /&gt;
p.base    = function( frame ) return render( frame, &amp;#039;base&amp;#039; ) end&lt;br /&gt;
p.event   = function( frame ) return render( frame, &amp;#039;event&amp;#039; ) end&lt;br /&gt;
p.exploit = function( frame ) return render( frame, &amp;#039;exploit&amp;#039; ) end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>