<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://pigeongames.gaoice.run/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3A%E5%AF%86%E7%A0%81%E7%9B%98.js</id>
	<title>MediaWiki:密码盘.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://pigeongames.gaoice.run/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3A%E5%AF%86%E7%A0%81%E7%9B%98.js"/>
	<link rel="alternate" type="text/html" href="https://pigeongames.gaoice.run/index.php?title=MediaWiki:%E5%AF%86%E7%A0%81%E7%9B%98.js&amp;action=history"/>
	<updated>2026-08-26T20:16:09Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://pigeongames.gaoice.run/index.php?title=MediaWiki:%E5%AF%86%E7%A0%81%E7%9B%98.js&amp;diff=55691&amp;oldid=prev</id>
		<title>晨茗biu～：​新功能添加</title>
		<link rel="alternate" type="text/html" href="https://pigeongames.gaoice.run/index.php?title=MediaWiki:%E5%AF%86%E7%A0%81%E7%9B%98.js&amp;diff=55691&amp;oldid=prev"/>
		<updated>2026-08-19T13:13:41Z</updated>

		<summary type="html">&lt;p&gt;新功能添加&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-Hans-CN&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年8月19日 (三) 21:13的版本&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-l53&quot;&gt;第53行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第53行：&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;   function normalizeKey(k) {&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;   function normalizeKey(k) {&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;     return String(k || &amp;#039;&amp;#039;).replace(/[^A-Za-z0-9_-]/g, &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;     return String(k || &amp;#039;&amp;#039;).replace(/[^A-Za-z0-9_-]/g, &amp;#039;&amp;#039;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  /* 开关参数判定：1 / true / yes / on 视为启用，其余视为关闭 */&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  function isEnabled(val) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if (!val) { return false; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    var v = $.trim(String(val)).toLowerCase();&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    return v === &#039;1&#039; || v === &#039;true&#039; || v === &#039;yes&#039; || v === &#039;on&#039;;&lt;/ins&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;   }&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;br&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;br&gt;&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-l63&quot;&gt;第63行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第70行：&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;     var targetGroups = parseTargets($pad.attr(&amp;#039;data-target&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;     var targetGroups = parseTargets($pad.attr(&amp;#039;data-target&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;     var $msg = $pad.find(&amp;#039;.pd-msg&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;     var $msg = $pad.find(&amp;#039;.pd-msg&amp;#039;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    /* 自动隐藏开关 */&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    var autoHide = isEnabled($pad.attr(&#039;data-autohide&#039;));&lt;/ins&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;br&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;br&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;     /* 提示文案：取模板内已按 wikitext 解析好的 span 内容，缺省回退默认 */&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;     /* 提示文案：取模板内已按 wikitext 解析好的 span 内容，缺省回退默认 */&lt;/div&gt;&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-l97&quot;&gt;第97行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第107行：&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;br&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;br&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;     /* 布局：显式填写 layout &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;优先；&lt;/del&gt;&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;     /* 布局：显式填写 layout &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;优先；未填时——默认键盘用 &lt;/ins&gt;QWERTY 三行 [10,9,7]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;，自定义符号用单行 &lt;/ins&gt;*/&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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;       未填时——默认键盘用 &lt;/del&gt;QWERTY 三行 [10,9,7]&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;，自定义符号用单行（自动折行） &lt;/del&gt;*/&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&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;     var layout = parseLayout($pad.attr(&amp;#039;data-layout&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;     var layout = parseLayout($pad.attr(&amp;#039;data-layout&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;     if (!layout &amp;amp;&amp;amp; !symbolsProvided) {&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;     if (!layout &amp;amp;&amp;amp; !symbolsProvided) {&lt;/div&gt;&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-l184&quot;&gt;第184行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第193行：&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;           .addClass(&amp;#039;pd-secret-open&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;           .addClass(&amp;#039;pd-secret-open&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;           .css(&amp;#039;display&amp;#039;, &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;           .css(&amp;#039;display&amp;#039;, &amp;#039;&amp;#039;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    /* 自动隐藏：隐藏本密码盘 target 范围内、不属于本次解锁组的其他已解锁内容 */&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    function hideOtherTargets(currentIdx) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      var $scope = $pad.closest(&#039;.mw-parser-output&#039;).first();&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      if (!$scope.length) { $scope = $(document); }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      /* 本次解锁组内的键保持显示（含组间共享的键） */&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      var keep = {};&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      var cur = targetGroups[currentIdx] || [];&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      for (var kk = 0; kk &amp;lt; cur.length; kk++) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        var ck = normalizeKey(cur[kk]);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if (ck) { keep[ck] = true; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      for (var gi = 0; gi &amp;lt; targetGroups.length; gi++) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if (gi === currentIdx) { continue; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        var keys = targetGroups[gi];&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        for (var k = 0; k &amp;lt; keys.length; k++) {&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;          var key = normalizeKey(keys[k]);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;          if (!key || keep[key]) { continue; }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;          $scope.find(&#039;.pd-secret-&#039; + key)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            .removeClass(&#039;pd-secret-open&#039;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            .addClass(&#039;pd-secret-locked&#039;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            .css(&#039;display&#039;, &#039;none&#039;);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        }&lt;/ins&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;       }&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;     }&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 colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l216&quot;&gt;第216行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第250行：&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;         $pad.addClass(&amp;#039;pd-open&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;         $pad.addClass(&amp;#039;pd-open&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;         revealTargets(hit);&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;         revealTargets(hit);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if (autoHide) { hideOtherTargets(hit); }&lt;/ins&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;         setMsg(okMsg, &amp;#039;ok&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;         setMsg(okMsg, &amp;#039;ok&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;         timer = setTimeout(function () {&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;         timer = setTimeout(function () {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>晨茗biu～</name></author>
	</entry>
	<entry>
		<id>https://pigeongames.gaoice.run/index.php?title=MediaWiki:%E5%AF%86%E7%A0%81%E7%9B%98.js&amp;diff=55689&amp;oldid=prev</id>
		<title>晨茗biu～：​创建页面，内容为“(function ($) {   &#039;use strict&#039;;    /* 逗号分隔串 -&gt; 数组 */   function splitList(str) {     if (!str) { return []; }     var out = [];     $.each(String(str).split(&#039;,&#039;), function (_, s) {       var v = $.trim(s);       if (v) { out.push(v); }     });     return out;   }    /* 解析 correct */   function parseAnswers(str) {     if (!str) { return []; }     var groups = [];     $.each(String(str).split(&#039;;&#039;), function (_, part) {       var p = $.trim(part)…”</title>
		<link rel="alternate" type="text/html" href="https://pigeongames.gaoice.run/index.php?title=MediaWiki:%E5%AF%86%E7%A0%81%E7%9B%98.js&amp;diff=55689&amp;oldid=prev"/>
		<updated>2026-08-18T15:35:02Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“(function ($) {   &amp;#039;use strict&amp;#039;;    &lt;span class=&quot;autocomment&quot;&gt;逗号分隔串 -&amp;gt; 数组：​&lt;/span&gt;   function splitList(str) {     if (!str) { return []; }     var out = [];     $.each(String(str).split(&amp;#039;,&amp;#039;), function (_, s) {       var v = $.trim(s);       if (v) { out.push(v); }     });     return out;   }    &lt;span class=&quot;autocomment&quot;&gt;解析 correct：​&lt;/span&gt;   function parseAnswers(str) {     if (!str) { return []; }     var groups = [];     $.each(String(str).split(&amp;#039;;&amp;#039;), function (_, part) {       var p = $.trim(part)…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;(function ($) {&lt;br /&gt;
  &amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  /* 逗号分隔串 -&amp;gt; 数组 */&lt;br /&gt;
  function splitList(str) {&lt;br /&gt;
    if (!str) { return []; }&lt;br /&gt;
    var out = [];&lt;br /&gt;
    $.each(String(str).split(&amp;#039;,&amp;#039;), function (_, s) {&lt;br /&gt;
      var v = $.trim(s);&lt;br /&gt;
      if (v) { out.push(v); }&lt;br /&gt;
    });&lt;br /&gt;
    return out;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* 解析 correct */&lt;br /&gt;
  function parseAnswers(str) {&lt;br /&gt;
    if (!str) { return []; }&lt;br /&gt;
    var groups = [];&lt;br /&gt;
    $.each(String(str).split(&amp;#039;;&amp;#039;), function (_, part) {&lt;br /&gt;
      var p = $.trim(part);&lt;br /&gt;
      if (!p) { return; }&lt;br /&gt;
      var list = splitList(p);&lt;br /&gt;
      if (list.length) { groups.push(list); }&lt;br /&gt;
    });&lt;br /&gt;
    return groups;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* 解析 target：与 correct 的组一一对应 */&lt;br /&gt;
  function parseTargets(str) {&lt;br /&gt;
    if (!str) { return []; }&lt;br /&gt;
    var groups = [];&lt;br /&gt;
    $.each(String(str).split(&amp;#039;;&amp;#039;), function (_, part) {&lt;br /&gt;
      var p = $.trim(part);&lt;br /&gt;
      if (!p) { return; }&lt;br /&gt;
      var list = splitList(p);&lt;br /&gt;
      if (list.length) { groups.push(list); }&lt;br /&gt;
    });&lt;br /&gt;
    return groups;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* 解析 layout；无效返回 null */&lt;br /&gt;
  function parseLayout(str) {&lt;br /&gt;
    if (!str) { return null; }&lt;br /&gt;
    var out = [];&lt;br /&gt;
    $.each(String(str).split(&amp;#039;,&amp;#039;), function (_, s) {&lt;br /&gt;
      var n = parseInt($.trim(s), 10);&lt;br /&gt;
      if (!isNaN(n) &amp;amp;&amp;amp; n &amp;gt; 0) { out.push(n); }&lt;br /&gt;
    });&lt;br /&gt;
    return out.length ? out : null;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* 键名消毒，防注入选择器 */&lt;br /&gt;
  function normalizeKey(k) {&lt;br /&gt;
    return String(k || &amp;#039;&amp;#039;).replace(/[^A-Za-z0-9_-]/g, &amp;#039;&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function setup(pad) {&lt;br /&gt;
    var $pad = $(pad);&lt;br /&gt;
    if ($pad.data(&amp;#039;pdInit&amp;#039;)) { return; }&lt;br /&gt;
    $pad.data(&amp;#039;pdInit&amp;#039;, true);&lt;br /&gt;
&lt;br /&gt;
    var answerGroups = parseAnswers($pad.attr(&amp;#039;data-answer&amp;#039;));&lt;br /&gt;
    var targetGroups = parseTargets($pad.attr(&amp;#039;data-target&amp;#039;));&lt;br /&gt;
    var $msg = $pad.find(&amp;#039;.pd-msg&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    /* 提示文案：取模板内已按 wikitext 解析好的 span 内容，缺省回退默认 */&lt;br /&gt;
    var $okEl = $pad.find(&amp;#039;.pd-okmsg&amp;#039;);&lt;br /&gt;
    var $errEl = $pad.find(&amp;#039;.pd-errmsg&amp;#039;);&lt;br /&gt;
    var okMsg = $okEl.length ? $okEl.html() : &amp;#039;✓ 密码正确&amp;#039;;&lt;br /&gt;
    var errMsg = $errEl.length ? $errEl.html() : &amp;#039;✗ 密码错误，请重试&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    if (!answerGroups.length) {&lt;br /&gt;
      $msg.text(&amp;#039;未配置密码：请设置 correct 参数&amp;#039;).attr(&amp;#039;class&amp;#039;, &amp;#039;pd-msg pd-msg-err&amp;#039;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 位数：缺省取第一个密码长度；要求所有密码位数一致 */&lt;br /&gt;
    var length = parseInt($pad.attr(&amp;#039;data-length&amp;#039;), 10);&lt;br /&gt;
    if (isNaN(length) || length &amp;lt; 1) { length = answerGroups[0].length; }&lt;br /&gt;
    for (var g = 0; g &amp;lt; answerGroups.length; g++) {&lt;br /&gt;
      if (answerGroups[g].length !== length) {&lt;br /&gt;
        $msg.text(&amp;#039;配置错误：各密码位数不一致&amp;#039;).attr(&amp;#039;class&amp;#039;, &amp;#039;pd-msg pd-msg-err&amp;#039;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 符号：用户未填 symbols 时，默认 QWERTY 键盘 26 个大写字母 */&lt;br /&gt;
    var symbolsRaw = $.trim($pad.attr(&amp;#039;data-symbols&amp;#039;) || &amp;#039;&amp;#039;);&lt;br /&gt;
    var symbolsProvided = symbolsRaw !== &amp;#039;&amp;#039;;&lt;br /&gt;
    var symbols = splitList(symbolsRaw);&lt;br /&gt;
    if (!symbols.length) {&lt;br /&gt;
      symbols = [&lt;br /&gt;
        &amp;#039;Q&amp;#039;,&amp;#039;W&amp;#039;,&amp;#039;E&amp;#039;,&amp;#039;R&amp;#039;,&amp;#039;T&amp;#039;,&amp;#039;Y&amp;#039;,&amp;#039;U&amp;#039;,&amp;#039;I&amp;#039;,&amp;#039;O&amp;#039;,&amp;#039;P&amp;#039;,&lt;br /&gt;
        &amp;#039;A&amp;#039;,&amp;#039;S&amp;#039;,&amp;#039;D&amp;#039;,&amp;#039;F&amp;#039;,&amp;#039;G&amp;#039;,&amp;#039;H&amp;#039;,&amp;#039;J&amp;#039;,&amp;#039;K&amp;#039;,&amp;#039;L&amp;#039;,&lt;br /&gt;
        &amp;#039;Z&amp;#039;,&amp;#039;X&amp;#039;,&amp;#039;C&amp;#039;,&amp;#039;V&amp;#039;,&amp;#039;B&amp;#039;,&amp;#039;N&amp;#039;,&amp;#039;M&amp;#039;&lt;br /&gt;
      ];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 布局：显式填写 layout 优先；&lt;br /&gt;
       未填时——默认键盘用 QWERTY 三行 [10,9,7]，自定义符号用单行（自动折行） */&lt;br /&gt;
    var layout = parseLayout($pad.attr(&amp;#039;data-layout&amp;#039;));&lt;br /&gt;
    if (!layout &amp;amp;&amp;amp; !symbolsProvided) {&lt;br /&gt;
      layout = [10, 9, 7];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var input = [];&lt;br /&gt;
    var timer = null;&lt;br /&gt;
&lt;br /&gt;
    var $display = $pad.find(&amp;#039;.pd-display&amp;#039;);&lt;br /&gt;
    var $keys = $pad.find(&amp;#039;.pd-keys&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    /* 槽位 */&lt;br /&gt;
    $display.empty();&lt;br /&gt;
    var slots = [];&lt;br /&gt;
    for (var i = 0; i &amp;lt; length; i++) {&lt;br /&gt;
      slots.push($(&amp;#039;&amp;lt;span class=&amp;quot;pd-slot&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;).appendTo($display));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 按键按 layout 分行 */&lt;br /&gt;
    var rows = [];&lt;br /&gt;
    if (layout) {&lt;br /&gt;
      var idx = 0;&lt;br /&gt;
      for (var r = 0; r &amp;lt; layout.length; r++) {&lt;br /&gt;
        var row = [];&lt;br /&gt;
        for (var c = 0; c &amp;lt; layout[r]; c++) {&lt;br /&gt;
          if (idx &amp;lt; symbols.length) { row.push(symbols[idx]); idx++; }&lt;br /&gt;
        }&lt;br /&gt;
        rows.push(row);&lt;br /&gt;
      }&lt;br /&gt;
      while (idx &amp;lt; symbols.length) { rows[rows.length - 1].push(symbols[idx]); idx++; }&lt;br /&gt;
    } else {&lt;br /&gt;
      rows.push(symbols.slice());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 创建单个按键 */&lt;br /&gt;
    function addKey($row, sym) {&lt;br /&gt;
      $(&amp;#039;&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;pd-key&amp;quot;&amp;gt;&amp;lt;/button&amp;gt;&amp;#039;)&lt;br /&gt;
        .text(sym)&lt;br /&gt;
        .on(&amp;#039;click&amp;#039;, function () { press(sym); })&lt;br /&gt;
        .appendTo($row);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 生成按键 */&lt;br /&gt;
    $keys.empty();&lt;br /&gt;
    for (r = 0; r &amp;lt; rows.length; r++) {&lt;br /&gt;
      var $row = $(&amp;#039;&amp;lt;div class=&amp;quot;pd-row&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;).appendTo($keys);&lt;br /&gt;
      for (c = 0; c &amp;lt; rows[r].length; c++) {&lt;br /&gt;
        addKey($row, rows[r][c]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 控制行：退格 + 清空 */&lt;br /&gt;
    var $ctrl = $(&amp;#039;&amp;lt;div class=&amp;quot;pd-row pd-ctrl-row&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;).appendTo($keys);&lt;br /&gt;
    $(&amp;#039;&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;pd-key pd-ctl&amp;quot; title=&amp;quot;退格（删除上一个符号）&amp;quot;&amp;gt;⌫&amp;lt;/button&amp;gt;&amp;#039;)&lt;br /&gt;
      .on(&amp;#039;click&amp;#039;, backspace).appendTo($ctrl);&lt;br /&gt;
    $(&amp;#039;&amp;lt;button type=&amp;quot;button&amp;quot; class=&amp;quot;pd-key pd-ctl&amp;quot; title=&amp;quot;清空全部输入&amp;quot;&amp;gt;清空&amp;lt;/button&amp;gt;&amp;#039;)&lt;br /&gt;
      .on(&amp;#039;click&amp;#039;, clearAll).appendTo($ctrl);&lt;br /&gt;
&lt;br /&gt;
    function render() {&lt;br /&gt;
      for (var j = 0; j &amp;lt; slots.length; j++) {&lt;br /&gt;
        if (j &amp;lt; input.length) {&lt;br /&gt;
          slots[j].text(input[j]).addClass(&amp;#039;pd-slot-filled&amp;#039;);&lt;br /&gt;
        } else {&lt;br /&gt;
          slots[j].text(&amp;#039;&amp;#039;).removeClass(&amp;#039;pd-slot-filled&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    function setMsg(text, kind) {&lt;br /&gt;
      $msg.html(text || &amp;#039;&amp;#039;).attr(&amp;#039;class&amp;#039;, &amp;#039;pd-msg&amp;#039; + (kind ? &amp;#039; pd-msg-&amp;#039; + kind : &amp;#039;&amp;#039;));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 解锁第 groupIdx 组目标：限定在页面内容区内查找 .pd-secret-&amp;lt;键&amp;gt; */&lt;br /&gt;
    function revealTargets(groupIdx) {&lt;br /&gt;
      if (groupIdx &amp;lt; 0 || groupIdx &amp;gt;= targetGroups.length) { return; }&lt;br /&gt;
      var keys = targetGroups[groupIdx];&lt;br /&gt;
      if (!keys.length) { return; }&lt;br /&gt;
      var $scope = $pad.closest(&amp;#039;.mw-parser-output&amp;#039;).first();&lt;br /&gt;
      if (!$scope.length) { $scope = $(document); }&lt;br /&gt;
      for (var k = 0; k &amp;lt; keys.length; k++) {&lt;br /&gt;
        var key = normalizeKey(keys[k]);&lt;br /&gt;
        if (!key) { continue; }&lt;br /&gt;
        $scope.find(&amp;#039;.pd-secret-&amp;#039; + key)&lt;br /&gt;
          .removeClass(&amp;#039;pd-secret-locked&amp;#039;)&lt;br /&gt;
          .addClass(&amp;#039;pd-secret-open&amp;#039;)&lt;br /&gt;
          .css(&amp;#039;display&amp;#039;, &amp;#039;&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function press(sym) {&lt;br /&gt;
      /* 取消待执行的自动清空，避免误清新输入 */&lt;br /&gt;
      if (timer) { clearTimeout(timer); timer = null; $pad.removeClass(&amp;#039;pd-shake&amp;#039;); }&lt;br /&gt;
      if (input.length &amp;gt;= length) { return; }&lt;br /&gt;
      input.push(sym);&lt;br /&gt;
      render();&lt;br /&gt;
      /* 不在此清空消息，提示保留到下一次判定 */&lt;br /&gt;
      if (input.length === length) { check(); }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* 查找与当前输入完全一致的密码组，返回组下标；无则 -1 */&lt;br /&gt;
    function findMatch() {&lt;br /&gt;
      for (var gi = 0; gi &amp;lt; answerGroups.length; gi++) {&lt;br /&gt;
        if (answerGroups[gi].length !== input.length) { continue; }&lt;br /&gt;
        var ok = true;&lt;br /&gt;
        for (var k = 0; k &amp;lt; answerGroups[gi].length; k++) {&lt;br /&gt;
          if (input[k] !== answerGroups[gi][k]) { ok = false; break; }&lt;br /&gt;
        }&lt;br /&gt;
        if (ok) { return gi; }&lt;br /&gt;
      }&lt;br /&gt;
      return -1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function check() {&lt;br /&gt;
      var hit = findMatch();&lt;br /&gt;
      if (hit &amp;gt;= 0) {&lt;br /&gt;
        /* 命中：解锁对应内容，不锁定；自动清空输入以便继续，但消息保留 */&lt;br /&gt;
        $pad.addClass(&amp;#039;pd-open&amp;#039;);&lt;br /&gt;
        revealTargets(hit);&lt;br /&gt;
        setMsg(okMsg, &amp;#039;ok&amp;#039;);&lt;br /&gt;
        timer = setTimeout(function () {&lt;br /&gt;
          input = [];&lt;br /&gt;
          render();&lt;br /&gt;
        }, 800);&lt;br /&gt;
      } else {&lt;br /&gt;
        setMsg(errMsg, &amp;#039;err&amp;#039;);&lt;br /&gt;
        $pad.addClass(&amp;#039;pd-shake&amp;#039;);&lt;br /&gt;
        timer = setTimeout(function () {&lt;br /&gt;
          $pad.removeClass(&amp;#039;pd-shake&amp;#039;);&lt;br /&gt;
          input = [];&lt;br /&gt;
          render();&lt;br /&gt;
        }, 1000);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function backspace() {&lt;br /&gt;
      if (timer) { clearTimeout(timer); timer = null; $pad.removeClass(&amp;#039;pd-shake&amp;#039;); }&lt;br /&gt;
      if (input.length &amp;gt; 0) { input.pop(); render(); }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function clearAll() {&lt;br /&gt;
      if (timer) { clearTimeout(timer); timer = null; $pad.removeClass(&amp;#039;pd-shake&amp;#039;); }&lt;br /&gt;
      input = [];&lt;br /&gt;
      render();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    render();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init($root) {&lt;br /&gt;
    ($root || $(document)).find(&amp;#039;.pd-pad&amp;#039;).each(function () { setup(this); });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* 初始化：DOM 就绪 + wikipage.content 钩子（兼容动态加载内容） */&lt;br /&gt;
  $(function () { init($(document)); });&lt;br /&gt;
  if (window.mw &amp;amp;&amp;amp; mw.hook) { mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function ($c) { init($c); }); }&lt;br /&gt;
})(jQuery);&lt;/div&gt;</summary>
		<author><name>晨茗biu～</name></author>
	</entry>
</feed>