From 563e64e5de4740c45bcdd4437baab9ed85b1c740 Mon Sep 17 00:00:00 2001 From: lix-2026 Date: Mon, 25 May 2026 09:17:48 +0800 Subject: [PATCH] refactor: share editor content layout helpers --- ...29-editor-runtime-followup-checklist-v1.md | 19 +++++++++++- .../mnote-leptos-tiptap-spike-island_bg.wasm | Bin 2113560 -> 2113560 bytes .../src/editor_runtime/block_menu_overlay.rs | 28 +++--------------- .../src/editor_runtime/content_layout.rs | 22 ++++++++++++++ .../src/editor_runtime/mod.rs | 1 + rust/spikes/leptos-tiptap-spike/src/lib.rs | 17 +---------- 6 files changed, 46 insertions(+), 41 deletions(-) create mode 100644 rust/spikes/leptos-tiptap-spike/src/editor_runtime/content_layout.rs diff --git a/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md b/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md index 45da05c4..f201de21 100644 --- a/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md +++ b/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md @@ -6,7 +6,7 @@ ## 1. 目标 -在 `5-28` 已完成附件链接、history-safe delete、command sync、persistence、attachment upload intent 首批拆分后,继续把 editor runtime 的 selection / overlay / block menu / mindmap node view 切成可索引模块。Codex 维护本文件作为事实源,Reasonix 只做短批次审计、窄范围实现或浏览器 smoke;当前 goal 下每批最多 4 个 worker。 +在 `5-28` 已完成附件链接、history-safe delete、command sync、persistence、attachment upload intent 首批拆分后,继续把 editor runtime 的 selection / overlay / block menu / mindmap node view 切成可索引模块。Codex 维护本文件作为事实源,Reasonix 只做短批次审计、窄范围实现或浏览器 smoke;当前 goal 下每批最多 2 个 worker。 ## 2. 本轮边界 @@ -335,3 +335,20 @@ UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据 - 但主控根据其 `5-29` 线索做了本地代码复核,确认当前粒度判断基本成立:`slash_menu_anchor_style()` 已复用 `selection_bounding_rect()` 与 `clamp_overlay_anchor()`;剩余 fallback 只包含 `hovered_block_from_selection()`、`editor_stage_element()`、`content_text_left(stage_rect.width())` 和 3 行 anchor 算术,不值得再抽新的微型 helper。 - 主控本地代码证据:`hovered_block_from_selection()` 已退化为 `block_index_from_selection().and_then(block_state_from_index)` 的薄包装;`block_menu_overlay.rs` 已存在一份独立的 `content_text_left()` / 布局常量体系,若为 `slash_menu_anchor_style()` 再外置同类 helper,反而会引入第三处布局常量复制。 - 当前决定:`5-29` 暂不再围绕 `slash_menu_anchor_style()` 继续拆刀;若后续确实需要推进,应另起设计收口 `content_text_left()` / 内容列布局常量,而不是从当前 fallback 中抽 3-5 行几何包装。 +- 2026-05-25:Batch BC 派发 1 个 browser smoke Reasonix worker 在当前 head 做只读回归,使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-bc-worker-b-smoke-head-readonly`,预期 run id `reasonix-2026-05-25T01-03-07-032Z-a487a063`,显式 `--no-memory-recall`。 + - 结果拒收:该 run 仅产出 `prompt.md` / `memory-recall.json` / `reasonix-transcript.jsonl`,无 `result.json`、`process-handoff.md/json`、`final.md`;worktree 源码零 diff。 + - 处置:不采纳其 smoke 结论;后续如需浏览器验收,仍需由主控亲自复跑,或重新派发受控 smoke worker。 +- 2026-05-25:Batch BE 由 Codex 主控为 `5-29` 侧追加 1 个独立 worktree 只读审计 worker `/mnt/Data1T/mnote-worktrees/0525-be-worker-d-5-29-layout-constant-readonly`。 + - 目标:不再复述 `slash_menu_anchor_style()` fallback,而是只回答 `content_text_left()` / 内容列布局常量 是否值得作为下一刀独立 design 或只读收口主题。 + - 约束:任务书写入该 worktree `tmp/`;禁止修改源码、禁止 `.codex/reasonix-tasks/*`、禁止子 agent。Codex 仅在拿到 Hindsight recall、`process-handoff.md/json`、`result.json` 与源码零 diff 证据后才会裁决是否采纳。 +- 2026-05-25:当前用户已手动覆盖 goal,后续批次统一收紧为“每批最多 2 个 worker”;本文件中早先 3/4-worker 记录仅作为历史执行事实保留,不再作为后续派发口径。 +- 2026-05-25:Batch BF 只派发 1 个只读 Reasonix worker 审计 `selection_payload / send_selection_state_to_target` 的下一刀边界,使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-bf-worker-a-5-29-selection-payload-readonly`,run id `reasonix-2026-05-25T01-11-58-275Z-2b2e8a66`,显式 `--no-memory-recall`。 + - 结果拒收:该 run 仅产出 `prompt.md` / `memory-recall.json` / `reasonix-transcript.jsonl`,没有 `result.json`、`process-handoff.md/json`、`final.md`;worktree 源码零 diff。 + - 过程异常:主控在等待 BF run 期间发现未批准 residual runner 自动启动了 Batch BE 的 4 个 worker(`0525-be-*`),已统一终止并拒收;在当前 2-worker 上限下,后续不再采纳任何未明确派发的 run。 + - 主控本地代码结论:`SelectionPayload`、`block_id_from_element`、`block_id_from_json_node`、`runtime_block_id_from_index`、`selection_payload` 已经落在 `editor_runtime/dom_selection.rs` 的合理边界内,继续迁出收益有限;`dispatch_selection_event_to_target`、`send_selection_state_to_target`、`on_selection_change` 仍绑定 `EventTarget`、Leptos signal、overlay 同步与 editor lifecycle,必须留在 `lib.rs` 壳层。 + - 最小下一刀建议:若继续推进,只做 `current_block_info_from_index()` 的单刀收口,把它与 `runtime_block_id_from_index()` 组合成 `dom_selection` 中的轻量 block info helper,供 runtime state / host status / selection bridge 共用;不要继续触碰 `send_selection_state_to_target` 或把 bridge dispatch 下沉进 runtime 模块。 +- 2026-05-25:Codex 主控继续收口共享内容列布局 helper,去掉 `lib.rs` 与 `block_menu_overlay.rs` 的重复常量与几何函数。 + - 修改:新增 `rust/spikes/leptos-tiptap-spike/src/editor_runtime/content_layout.rs`,迁入 `content_column_width()`、`content_column_left()`、`content_text_left()` 及对应常量;`editor_runtime/block_menu_overlay.rs` 与 `lib.rs` 改为复用该共享模块,`lib.rs` 仅保留 `handle_lane_left()` 这一层 handle 专属偏移计算。 + - 边界:未迁 `handle_lane_left()`、`HANDLE_*` 常量、`slash_menu_anchor_style()`、drop indicator 壳层、block menu overlay 自身布局策略或 DOM 查询;本批只消除内容列布局 helper 的重复定义。 + - 已验证:`cargo fmt --manifest-path rust/Cargo.toml --all --check`、`cargo check --manifest-path rust/spikes/leptos-tiptap-spike/Cargo.toml`、`cargo build --manifest-path rust/spikes/leptos-tiptap-spike/Cargo.toml --target wasm32-unknown-unknown --release`、`wasm-bindgen --target web --out-dir rust/spikes/leptos-tiptap-spike/generated/island --out-name mnote-leptos-tiptap-spike-island rust/spikes/leptos-tiptap-spike/target/wasm32-unknown-unknown/release/mnote_leptos_tiptap_spike.wasm`、临时当前源码服务 `MNOTE_WEB_BIND=127.0.0.1:3023 MNOTE_WEB_PUBLIC_BIND=127.0.0.1:3023 cargo run --manifest-path rust/Cargo.toml -p mnote-web`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3023 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task489-block-menu-delete-undo-smoke.js`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3023 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task488-local-attachment-link-delete-undo-smoke.js`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3023 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js`。 + - 结果:`task489`、`task488`、`task479` 均通过,说明共享布局 helper 外置未破坏块菜单删除/撤销、附件删除/撤销和本地 Markdown 附件生命周期基线。 diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm index 58556ac190fef391c1d9c5e8d5b6aff0808a1872..3457d72fff556f540042e1dc3c17878d84cb1a81 100644 GIT binary patch delta 63507 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

pq2%J1 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 delta 63789 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

WU2p4ynElWP7 zX5Leki(+?vS-Chpt10=puxpdKB^2&-F~YrI;BIq{t2k}MUF@L$Ui0vfD?8YxT|bQ1 z92$6~NJWI<#6Jl)_nH^tmY=i__mvXJ-)F|_n)TV{8N`@`3NecBbeNN4uH@_Vif}Q( zNtq63a?G{dE$_SEyvbD+wNoi}>K+|FlZSAfr4oq8%yA4DFve1EhTakhw~v|2Gejr7 zr2^DDZtnZP7;4=K^EW)J)#y{^=iDm>dDR*7h|+qrfo=XZ&zr}-j0QwEgcted5$Izu z;x}_1S4snCIT?vB9e%}}p%#mKbU8ws-!NZuU0o)a)hVV9Ovjt%P%iB<483XIWJ|x& zT01eLj9PRB>K2(NaF;K`&LVR?pLtrEdU^8G6(-B9Ht2i{CEIk5lu1{h?JaYiH^zJ5 zMr+ho^wm*?xMG#(`CBc_aJ7sHakkBfMod)Yx``#4Sz;zjY;jxvUp{SF!=no zxr^<^<<`t;4m%^#>*-}UaogOMZOUcun2$4AR9tMX{byNJ^PYM4tH;xq`ad-H<59eg zd~AM%uN{UyF;DUFkYu>A8rcq*2=Y_&ho}U9@zmS`gH2D(jc~O*d}?lq2hBz$=BZ>V z94aw~qlea=5)}4HaQB(H8N@#``=O778qZ_#b1eQQmvRG&OUzAS>~qxiw!o6-=3&Ur z|AqMjE~$_uHKChdm~ZI+7t6p;upD&Ee)X*P54Hk-$C*eKC%E%6m;U_%5#YBVQzSG$ zY0|+&lcl&q2D*~`dry_PsdTQ{qUSBU^x-;Xw?162?4heg%W|7<+;%3G@Ix_7EXgR0 zP&-bbABR}VS#a^f#7L-*_U$czH;JZ4OQK+Ln zt79p)2>Efi)fUtH&2cvS$H%jc)rcNi=ro0kYROoO0TYLGK$S2@7zrPhcl zF!Z#{(YAhkC)v|70QdipUY3nUA#OHa?(lHTLWV$_0hS4);#Gw8H4EyPoHA8|YFiXv zgi$m zwo`-3YgId}K@k?E45sDH8Ko8xt}!jr62mNtKPEoYpiqnAhfvB~m9m^hxm<(FT9nON zEJSPTb`1))C=%v5qCr89e$b#m4Z5vCqXI078A+dOpua`&K`0?jEzD2r>QoK#)#|)j zgM2i~of_n=Rq|I2Dq~TM$mOO6*){0C2FV)qRD+~Z8q*)%U804_aL!`Wd29Zk@*D&gaWR9u>o zC~8i>Zy71rw{AsyB6|Kb^s=Lz(J5P?-(X9y2ihCa=zawWgDv$v(CC+=QXeZ#Ejg&4 z4Yssw;^uAAs9j~DjTEbyI%-H57mLnF5uDB-^WIv>k^M0a1oht@!M(S$JlT9q;mF1 zOIHpz(c7O}I&xDbJY!hO)BayrQh8zKChX%!lzd|`5uun}x<8`wx0bh^03Z-R6Th=8 z|1Y<>QoAf&8fQuQpDmq6uM7yrqWiVu^YRRSoocCF_5*+~&}(b7!1|*>yfh zuzbsL`0z!XYAL1#lPwV(pHT`VsWdFb@_^76({M;N=#YdbtlJALMa~PTZy+ws(w!Zy z@D}Pz=rqsLgW2-GU1H$`w4#h!X(=$5YV3b^D11*Qd3DDz|rMme(`dU^)rSgFQlTKO2k`y>ZZB?Mj zX$#G-qa{(EdS!s@RoAU@;lxp z3Eu$Pmreo%8RB@E67H=s8EkDd>&;#i>@ct!+etXIC+5dXxTE>7=^i$BM?TcLZyCzeEj+YThWvDEZJ4~-yc_WJQj6YtV3}62 zw)4@JlEmI=MJgK@LVY}oqEpFzMKWCzWc`$@<$9QiHUzzcC%kJl z+1SJB>BFrfNlnLDAJ4b0qdtm3c7jItJJc-DlI}@D>wjXMVXwN7*>}{}5lqQEIu42Y_iEs%bG%36p|o#=pEYhO-E%D@(>@9voDnnn-gS=*?NP(Bx|wf$UyouSb5RhlSX-md{u@`U4>*XpZyiS4+(lIvD9cwoRG`nT} z77fK=#nxt;0QYF&-|YyyXJ@IWIcQsAtxh(<=UT9^#M(soWi_r*3ydzd2b-c}@xT

Epyz|VeFz@jN&#V>E-S?Mg)=GHpEq-RLjc*Oh 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 diff --git a/rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_menu_overlay.rs b/rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_menu_overlay.rs index 4eabec6a..cb6af135 100644 --- a/rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_menu_overlay.rs +++ b/rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_menu_overlay.rs @@ -8,7 +8,10 @@ //! - `hover_anchor_transform` //! - `block_menu_layout`(参数化版) -use crate::editor_runtime::block_hover_state::{BlockMenuLayout, HoveredBlockState}; +use crate::editor_runtime::{ + block_hover_state::{BlockMenuLayout, HoveredBlockState}, + content_layout::content_text_left, +}; /// 多行块的最小高度阈值,超过此值视作多行。 const HANDLE_MULTILINE_HEIGHT: f64 = 40.0; @@ -16,29 +19,6 @@ const HANDLE_MULTILINE_HEIGHT: f64 = 40.0; /// handle shell 菜单左侧最小限制。 const HANDLE_MENU_LEFT_LIMIT: f64 = -320.0; -/// 内容列水平内边距(与 lib.rs 中同名常量同值)。 -const CONTENT_COLUMN_HORIZONTAL_PADDING: f64 = 48.0; - -/// 内容列最大宽度(与 lib.rs 中同名常量同值)。 -const CONTENT_COLUMN_MAX_WIDTH: f64 = 708.0; - -/// 根据 stage 宽度计算实际内容列宽。 -fn content_column_width(stage_rect_width: f64) -> f64 { - let available = (stage_rect_width - (CONTENT_COLUMN_HORIZONTAL_PADDING * 2.0)).max(0.0); - available.min(CONTENT_COLUMN_MAX_WIDTH) -} - -/// 内容列左侧相对于 stage 的偏移。 -fn content_column_left(stage_rect_width: f64) -> f64 { - let column_width = content_column_width(stage_rect_width); - ((stage_rect_width - column_width) / 2.0).max(0.0) -} - -/// 内容文本区左侧相对于 stage 的偏移(列左内边距后)。 -fn content_text_left(stage_rect_width: f64) -> f64 { - content_column_left(stage_rect_width) + CONTENT_COLUMN_HORIZONTAL_PADDING -} - /// 计算 handle shell 锚点在 stage 内的垂直位置。 pub(crate) fn hover_anchor_top(block: &HoveredBlockState) -> f64 { if block.height > HANDLE_MULTILINE_HEIGHT { diff --git a/rust/spikes/leptos-tiptap-spike/src/editor_runtime/content_layout.rs b/rust/spikes/leptos-tiptap-spike/src/editor_runtime/content_layout.rs new file mode 100644 index 00000000..8827cb2c --- /dev/null +++ b/rust/spikes/leptos-tiptap-spike/src/editor_runtime/content_layout.rs @@ -0,0 +1,22 @@ +/// 内容列最大宽度。 +pub(crate) const CONTENT_COLUMN_MAX_WIDTH: f64 = 708.0; + +/// 内容列水平内边距。 +pub(crate) const CONTENT_COLUMN_HORIZONTAL_PADDING: f64 = 48.0; + +/// 根据 stage 宽度计算实际内容列宽。 +pub(crate) fn content_column_width(stage_rect_width: f64) -> f64 { + let available = (stage_rect_width - (CONTENT_COLUMN_HORIZONTAL_PADDING * 2.0)).max(0.0); + available.min(CONTENT_COLUMN_MAX_WIDTH) +} + +/// 内容列左侧相对于 stage 的偏移。 +pub(crate) fn content_column_left(stage_rect_width: f64) -> f64 { + let column_width = content_column_width(stage_rect_width); + ((stage_rect_width - column_width) / 2.0).max(0.0) +} + +/// 内容文本区左侧相对于 stage 的偏移。 +pub(crate) fn content_text_left(stage_rect_width: f64) -> f64 { + content_column_left(stage_rect_width) + CONTENT_COLUMN_HORIZONTAL_PADDING +} diff --git a/rust/spikes/leptos-tiptap-spike/src/editor_runtime/mod.rs b/rust/spikes/leptos-tiptap-spike/src/editor_runtime/mod.rs index c8212ebb..181ea406 100644 --- a/rust/spikes/leptos-tiptap-spike/src/editor_runtime/mod.rs +++ b/rust/spikes/leptos-tiptap-spike/src/editor_runtime/mod.rs @@ -6,6 +6,7 @@ pub(crate) mod block_menu_document; pub(crate) mod block_menu_overlay; pub(crate) mod block_menu_legacy_html; pub(crate) mod command_sync; +pub(crate) mod content_layout; pub(crate) mod dom_events; pub(crate) mod dom_selection; pub(crate) mod editor_focus; diff --git a/rust/spikes/leptos-tiptap-spike/src/lib.rs b/rust/spikes/leptos-tiptap-spike/src/lib.rs index f384c0df..2afa11ac 100644 --- a/rust/spikes/leptos-tiptap-spike/src/lib.rs +++ b/rust/spikes/leptos-tiptap-spike/src/lib.rs @@ -40,6 +40,7 @@ use editor_runtime::block_hover_state::{ use editor_runtime::command_sync::{ read_editor_snapshot, sync_editor_outputs, sync_persisted_editor_command, }; +use editor_runtime::content_layout::{content_column_left, content_text_left}; use editor_runtime::dom_events::{event_target_matches_selector, target_element}; use editor_runtime::dom_selection::{ block_index_from_selection, runtime_block_id_from_index, selection_payload, @@ -66,8 +67,6 @@ use editor_runtime::persistence::persisted_document_storage_key; const EDITOR_STAGE_SELECTOR: &str = "[data-testid=\"mnote-leptos-tiptap-editor-stage\"]"; const EDITOR_ROOT_SELECTOR: &str = ".editor-surface .ProseMirror"; const HANDLE_SHELL_SELECTOR: &str = ".block-handle-shell"; -const CONTENT_COLUMN_MAX_WIDTH: f64 = 708.0; -const CONTENT_COLUMN_HORIZONTAL_PADDING: f64 = 48.0; const HANDLE_STAGE_PADDING_LEFT: f64 = 18.0; const HANDLE_TRIGGER_WIDTH: f64 = 22.0; const HANDLE_TRIGGER_GAP: f64 = 4.0; @@ -4809,20 +4808,6 @@ pub(crate) fn editor_stage_element() -> Option { }) } -fn content_column_width(stage_rect_width: f64) -> f64 { - let available = (stage_rect_width - (CONTENT_COLUMN_HORIZONTAL_PADDING * 2.0)).max(0.0); - available.min(CONTENT_COLUMN_MAX_WIDTH) -} - -fn content_column_left(stage_rect_width: f64) -> f64 { - let column_width = content_column_width(stage_rect_width); - ((stage_rect_width - column_width) / 2.0).max(0.0) -} - -fn content_text_left(stage_rect_width: f64) -> f64 { - content_column_left(stage_rect_width) + CONTENT_COLUMN_HORIZONTAL_PADDING -} - fn handle_lane_left(stage_rect_width: f64) -> f64 { (content_text_left(stage_rect_width) + HANDLE_TEXT_ALIGN_OFFSET - HANDLE_TRIGGER_WIDTH