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 3e9b3853..775acc2d 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 @@ -250,4 +250,7 @@ UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据 - 未迁:`hovered_block_from_target` 的壳层函数、`drop_indicator_from_target`、拖拽 listener、block reorder 行为仍留在 `lib.rs`。 - 2026-05-25:Batch AD 出现未由主控明确派发的 3 个 Reasonix runner(Worker B/C/D),超过当前 2-worker 上限;主控已终止相关 runner / ACP 进程。 - 涉及 worktree:`/mnt/Data1T/mnote-worktrees/0525-ad-worker-b-5-29-drop-indicator-block-rect`、`/mnt/Data1T/mnote-worktrees/0525-ad-worker-c-3-20-upload-target-readonly`、`/mnt/Data1T/mnote-worktrees/0525-ad-worker-d-regression-smoke`。 - - 本文件不采纳 Batch AD 的任何 5-29 输出;后续如需继续 `drop_indicator_from_target` / block rect 小切片,必须重新按最多 2 worker 的受控批次派发。 + - Codex 未按 Reasonix 结果直接采纳;随后独立复核 Worker B 遗留 diff,确认范围只涉及 `drop_indicator_from_target` 内部 block/stage rect 读取封装,并选择性合入。 + - 修改:`editor_runtime/block_dnd.rs` 新增 `drop_indicator_from_block_rects(block_index, block, stage, client_y)`;`lib.rs::drop_indicator_from_target` 仍负责 hovered block、root/stage DOM 查询和 shell 状态,只委托新 helper 计算 `DropIndicatorState`。 + - 边界:未迁 `drop_indicator_from_target` 壳层函数、`drop_indicator_from_point`、拖拽 listener、block reorder 行为或 Leptos signal 编排;Worker C/D 输出不采纳。 + - 已验证:`cargo fmt --manifest-path rust/Cargo.toml --all --check`、`git diff --check`、`cargo check --manifest-path rust/spikes/leptos-tiptap-spike/Cargo.toml`、wasm release build、`wasm-bindgen`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3001 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:3001 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:3001 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js`。 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 d9319b15..cc7c63b6 100644 Binary files a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm and b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm differ diff --git a/rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_dnd.rs b/rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_dnd.rs index 7cbe8336..ebe1c687 100644 --- a/rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_dnd.rs +++ b/rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_dnd.rs @@ -107,6 +107,23 @@ pub(crate) fn direct_block_index_from_element( top_level_block_index(root, &block) } +pub(crate) fn drop_indicator_from_block_rects( + block_index: usize, + block: &Element, + stage: &Element, + client_y: i32, +) -> DropIndicatorState { + let block_rect = block.get_bounding_client_rect(); + let stage_rect = stage.get_bounding_client_rect(); + drop_indicator_from_geometry( + block_index, + block_rect.top(), + block_rect.height(), + stage_rect.top(), + client_y, + ) +} + pub(crate) fn top_level_block_index(root: &Element, block: &Element) -> Option { let children = root.children(); (0..children.length()).find_map(|index| { diff --git a/rust/spikes/leptos-tiptap-spike/src/lib.rs b/rust/spikes/leptos-tiptap-spike/src/lib.rs index 3f2d9c92..b3ba4033 100644 --- a/rust/spikes/leptos-tiptap-spike/src/lib.rs +++ b/rust/spikes/leptos-tiptap-spike/src/lib.rs @@ -22,8 +22,8 @@ use web_sys::{ use editor_runtime::attachment_upload::dispatch_editor_upload_request; use editor_runtime::block_dnd::{ - direct_block_from_element, direct_block_index_from_element, drop_indicator_from_geometry, - element_within_handle_shell, event_target_from_point, + direct_block_from_element, direct_block_index_from_element, + drop_indicator_from_block_rects, element_within_handle_shell, event_target_from_point, pointer_in_handle_corridor_geometry, top_level_block_index, HandleCorridorGeometry, }; use editor_runtime::block_menu_overlay; @@ -5218,13 +5218,10 @@ fn drop_indicator_from_target( let root = editor_root_element()?; let block = root.children().item(hovered.index as u32)?; let stage = editor_stage_element()?; - let block_rect = block.get_bounding_client_rect(); - let stage_rect = stage.get_bounding_client_rect(); - Some(drop_indicator_from_geometry( + Some(drop_indicator_from_block_rects( hovered.index, - block_rect.top(), - block_rect.height(), - stage_rect.top(), + &block, + &stage, client_y, )) }