$k, 'content' => $c]; } $tagsStr = implode(' ', array_map(static fn($t): string => '#' . $t, (array)$editing['tags'])); } if (!$blocks) { // 新建时给一个空段落块打底(否则页面上一片空白,用户不知道从哪写) $blocks = [['kind' => 'text', 'content' => '']]; } /** 图片块内容 → [key, 宽度百分比]。内容形如 `abc123` 或 `abc123|50`。 */ $imgParts = static function (string $c): array { $p = explode('|', $c); $w = isset($p[1]) ? (int)$p[1] : 0; if ($w < 20 || $w > 100) { $w = 0; } return [trim((string)$p[0]), $w]; }; ?>
,见 View::render 的 title 参数)—— 由路由传进来,见 index.php 的 notes/form 分支。 */ $noteTitle = trim((string)($editing['title'] ?? '')); $headText = (!$editMode && $isEditing && $noteTitle !== '') ? $noteTitle : ($editMode ? ($isEditing ? '改笔记' : '写笔记') : '看笔记'); ?>

· 作者 · 你的权限:
编辑 返回列表

只读账号不能写笔记。

` 包:宽度可调(第 8 条),且要与正文有间距。 ⚠️ 附件(`$editing['files']`)**排在正文之后、页面最下方** —— 用户原话「附件在最下方」。 */ ?>

#

(这条笔记没有正文)

附件

共享 默认只有自己看得到;共享出去给别人看或改

你自己本来就有全部权限,不用(也不能)共享给自己。

已共享给

还没有共享给谁。

` 提供,脚本读它就行。 */ ?>

正文

行首打 / 也能选命令
用过的:

附件 放最后,与正文分开

还没有附件。

**。 HTML 不允许 form 套 form:浏览器解析时会把**内层** `` 标签丢掉, 但**保留**它后面的 ``。于是那个 `` 提前把外层的 `#noteForm`(整页的保存表单)关掉了 —— 结果「保存」按钮落入**没有任何表单**的区域: · `button.form === null`; · 点它既不提交、也不报错(**所以"没有任何反应"**)。 ⚠️ 页面里其它字段看着都正常,只有"提交"这条链断了 —— 这类 bug 不打开真浏览器量 `btn.form` 是看不出来的。 改法:内层不再用 `
`,改成 `
`,把"上传所选文件"这个按钮 用 HTML5 的 `formaction` / `formenctype` **指向自己的端点**。 —— 这样仍然只有**一个**表单(保存表单),上传按钮却能提交到 `notes/attach_add` 且是 multipart。既修了 bug,又不牺牲上传。 ⚠️ 隐藏域 `id` 与 `_csrf` 与保存表单同名同值(都是这条笔记的 id / 同一个令牌),合进一个表单不会冲突 —— 已在探针里断言过。 */ ?>
把文件拖到这里,或

附件

先「记下来」,保存之后回到这一页就能传附件了。

而不是 data-* —— 属性里的引号/换行会被 HTML 实体化,读出来还得反转义一次;JSON 块原样读。 */ ?>