refactor: extract drop indicator target helpers

This commit is contained in:
lix-2026
2026-05-25 08:29:19 +08:00
parent c90499b16e
commit f33807eacc
3 changed files with 38 additions and 14 deletions
@@ -139,6 +139,32 @@ pub(crate) fn hovered_block_from_target(
block_state_from_index(index)
}
pub(crate) fn drop_indicator_from_target(
target: EventTarget,
client_y: i32,
handle_selector: &str,
) -> Option<DropIndicatorState> {
let root = editor_root_element()?;
let hovered = hovered_block_from_target(target, &root, handle_selector)?;
let block = root.children().item(hovered.index as u32)?;
let stage = editor_stage_element()?;
Some(drop_indicator_from_block_rects(
hovered.index,
&block,
&stage,
client_y,
))
}
pub(crate) fn drop_indicator_from_point(
client_x: i32,
client_y: i32,
handle_selector: &str,
) -> Option<DropIndicatorState> {
let target = event_target_from_point(client_x, client_y)?;
drop_indicator_from_target(target, client_y, handle_selector)
}
pub(crate) fn block_state_from_index(index: usize) -> Option<HoveredBlockState> {
let root = editor_root_element()?;
let stage = editor_stage_element()?;
+6 -14
View File
@@ -23,8 +23,10 @@ use web_sys::{
use editor_runtime::attachment_upload::dispatch_editor_upload_request;
use editor_runtime::block_dnd::{
block_state_from_index as block_state_from_index_runtime, direct_block_from_element,
drop_indicator_from_block_rects, element_within_handle_shell, event_target_from_point,
hovered_block_from_target as hovered_block_from_target_runtime, top_level_block_index,
drop_indicator_from_point as drop_indicator_from_point_runtime,
drop_indicator_from_target as drop_indicator_from_target_runtime,
element_within_handle_shell, hovered_block_from_target as hovered_block_from_target_runtime,
top_level_block_index,
};
use editor_runtime::block_menu_overlay;
use editor_runtime::block_menu_document::{
@@ -5031,21 +5033,11 @@ fn drop_indicator_from_target(
target: web_sys::EventTarget,
client_y: i32,
) -> Option<DropIndicatorState> {
let hovered = hovered_block_from_target(target)?;
let root = editor_root_element()?;
let block = root.children().item(hovered.index as u32)?;
let stage = editor_stage_element()?;
Some(drop_indicator_from_block_rects(
hovered.index,
&block,
&stage,
client_y,
))
drop_indicator_from_target_runtime(target, client_y, HANDLE_SHELL_SELECTOR)
}
fn drop_indicator_from_point(client_x: i32, client_y: i32) -> Option<DropIndicatorState> {
let target = event_target_from_point(client_x, client_y)?;
drop_indicator_from_target(target, client_y)
drop_indicator_from_point_runtime(client_x, client_y, HANDLE_SHELL_SELECTOR)
}
fn document_content_mut(document: &mut Value) -> Result<&mut Vec<Value>, String> {