收紧世界模拟器能力与壳提示,对齐新的落盘合同和呈现分工。

让选题填写与游玩投影读到一致的规格口径。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-07 23:49:34 +08:00
co-authored by Cursor
parent ff5c77bfb1
commit cf6cb68429
22 changed files with 623 additions and 462 deletions
@@ -14,7 +14,7 @@ id: dual-text
可加: 短文、结构、数据、抬头、文字选项
摆放:
抬头: 最上的一行短内容
正文: 占满阅读宽度,按数百字来写
正文: 占满宿主阅读面;行长可限在正文柱,按数百字来写
短文、结构: 标签或折叠,点开才看。标签用短显示名
数据: 若有,默认可收起
文字选项: 始终直接可见,不放进标签或折叠
@@ -24,8 +24,8 @@ id: dual-text
## note
```note
不替换:正文占满阅读宽度。其余块收在标签或折叠里,默认不展开。选项在这些控件之外,直接可见。
可替换:标签和折叠的短名、收起块里的文字、配色和字体。本局没有的块删掉。数据要一直展开时改用数据常驻。
不替换:外壳铺满宿主宽度;正文是主阅读面。其余块收在标签或折叠里,默认不展开。选项在这些控件之外,直接可见。
可替换:标签和折叠的短名、收起块里的文字、配色和字体、正文柱行长上限。本局没有的块删掉。数据要一直展开时改用数据常驻。
```
## sample
@@ -33,47 +33,26 @@ id: dual-text
```sample
html:
<div id="app">
<p id="heading"></p>
<article id="body"></article>
<p id="heading" data-block="heading"></p>
<article id="body" data-block="body"></article>
<details>
<summary id="vignette-title"></summary>
<div id="vignette"></div>
<summary id="vignette-title" data-block="vignette_title"></summary>
<div id="vignette" data-block="vignette"></div>
</details>
<ol id="options"></ol>
<ol id="options" data-block="options"></ol>
</div>
css:
:root { color: #1c1915; background: #f7f3ea; }
#app { max-width: 40rem; margin: 0 auto; padding: 1.25rem; font: 17px/1.75 "Palatino Linotype", "Songti SC", serif; }
#app { width: 100%; box-sizing: border-box; margin: 0; padding: 1.25rem; font: 17px/1.75 "Palatino Linotype", "Songti SC", serif; }
#heading, #body, details, #options { max-width: 40rem; margin-inline: auto; }
#heading { margin: 0 0 0.8rem; font-size: 0.95rem; }
#vignette { font-size: 0.92rem; margin-top: 0.6rem; }
#options { margin: 0.8rem 0 0; padding-left: 1.2rem; }
#options { margin: 0.8rem auto 0; padding-left: 1.2rem; }
summary { cursor: pointer; }
js:
present.onData(function (data) {
var blocks = (data && data.blocks) || {};
putText("heading", blocks.heading);
putText("body", blocks.body);
putText("vignette-title", blocks.vignette_title);
putText("vignette", blocks.vignette);
putList("options", blocks.options);
present.onData(function () {
/* 文本区由程序按 data-block 灌数;折叠开合是浏览器原生行为 */
});
function putText(id, value) {
var el = document.getElementById(id);
if (!el) return;
if (value == null || value === "") { el.remove(); return; }
el.textContent = String(value);
}
function putList(id, value) {
var el = document.getElementById(id);
if (!el) return;
el.replaceChildren();
if (!Array.isArray(value) || !value.length) { el.remove(); return; }
value.forEach(function (line) {
var li = document.createElement("li");
li.textContent = String(line);
el.appendChild(li);
});
}
```