fix local folder resource lifecycle and workspace switch
This commit is contained in:
@@ -1187,6 +1187,13 @@ function __wbg_get_imports() {
|
||||
const ret = arg0.target;
|
||||
return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);
|
||||
},
|
||||
__wbg_textContent_1f28330a124ec047: function(arg0, arg1) {
|
||||
const ret = arg1.textContent;
|
||||
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len1 = WASM_VECTOR_LEN;
|
||||
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
||||
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
||||
},
|
||||
__wbg_then_792e0c862b060889: function(arg0, arg1, arg2) {
|
||||
const ret = arg0.then(arg1, arg2);
|
||||
return ret;
|
||||
@@ -1195,6 +1202,10 @@ function __wbg_get_imports() {
|
||||
const ret = arg0.then(arg1);
|
||||
return ret;
|
||||
},
|
||||
__wbg_toString_306ed0b9f320c1ca: function(arg0) {
|
||||
const ret = arg0.toString();
|
||||
return ret;
|
||||
},
|
||||
__wbg_top_158f7c4dd1427771: function(arg0) {
|
||||
const ret = arg0.top;
|
||||
return ret;
|
||||
|
||||
BIN
Binary file not shown.
@@ -5261,6 +5261,34 @@ fn hovered_block_from_selection() -> Option<HoveredBlockState> {
|
||||
block_state_from_index(index)
|
||||
}
|
||||
|
||||
fn selected_local_attachment_block_index() -> Option<usize> {
|
||||
let selection = window().and_then(|win| win.get_selection().ok().flatten())?;
|
||||
let selected_text = String::from(selection.to_string()).trim().to_string();
|
||||
if selected_text.is_empty() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let root = editor_root_element()?;
|
||||
let links = root.get_elements_by_tag_name("a");
|
||||
for index in 0..links.length() {
|
||||
let Some(link) = links.item(index) else {
|
||||
continue;
|
||||
};
|
||||
let href = link.get_attribute("href").unwrap_or_default();
|
||||
if !href.contains("/api/local-folder/files/open") {
|
||||
continue;
|
||||
}
|
||||
let text = link.text_content().unwrap_or_default();
|
||||
if text.trim() != selected_text {
|
||||
continue;
|
||||
}
|
||||
let block = direct_block_from_element(link, &root)?;
|
||||
return top_level_block_index(&root, &block);
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
fn block_state_from_index(index: usize) -> Option<HoveredBlockState> {
|
||||
let root = editor_root_element()?;
|
||||
let stage = editor_stage_element()?;
|
||||
@@ -8708,7 +8736,9 @@ fn App(mount_options: MountOptions) -> impl IntoView {
|
||||
let editor = editor;
|
||||
let document_id = document_id;
|
||||
let workspace_id = workspace_id;
|
||||
let dirty_count = dirty_count;
|
||||
let title = title;
|
||||
let editor_focused = editor_focused;
|
||||
let set_dirty_count = set_dirty_count;
|
||||
let set_html_output = set_html_output;
|
||||
let set_document_json = set_document_json;
|
||||
@@ -8729,6 +8759,9 @@ fn App(mount_options: MountOptions) -> impl IntoView {
|
||||
let set_color_menu_open = set_color_menu_open;
|
||||
let more_menu_open = more_menu_open;
|
||||
let set_more_menu_open = set_more_menu_open;
|
||||
let revision = revision;
|
||||
let conflict_detection_key = conflict_detection_key;
|
||||
let read_only = read_only;
|
||||
let set_locked_toolbar_anchor = set_locked_toolbar_anchor;
|
||||
let set_text_selection_active = set_text_selection_active;
|
||||
let set_floating_toolbar_anchor = set_floating_toolbar_anchor;
|
||||
@@ -8752,6 +8785,59 @@ fn App(mount_options: MountOptions) -> impl IntoView {
|
||||
return;
|
||||
}
|
||||
|
||||
if !event.ctrl_key()
|
||||
&& !event.meta_key()
|
||||
&& !event.alt_key()
|
||||
&& matches!(event.key().as_str(), "Backspace" | "Delete")
|
||||
{
|
||||
if let Some(block_index) = selected_local_attachment_block_index() {
|
||||
event.prevent_default();
|
||||
match editor.get_html() {
|
||||
Ok(current_html) => {
|
||||
match delete_top_level_block_html(¤t_html, block_index) {
|
||||
Ok(next_html) => {
|
||||
apply_html_update(
|
||||
editor,
|
||||
&runtime_persisted_identity(document_id, workspace_id),
|
||||
next_html,
|
||||
document_id,
|
||||
workspace_id,
|
||||
dirty_count,
|
||||
set_dirty_count,
|
||||
set_html_output,
|
||||
set_document_json,
|
||||
set_json_output,
|
||||
title,
|
||||
hovered_block,
|
||||
editor_focused,
|
||||
slash_open,
|
||||
turn_into_open,
|
||||
color_menu_open,
|
||||
more_menu_open,
|
||||
revision,
|
||||
conflict_detection_key,
|
||||
read_only,
|
||||
set_command_feedback,
|
||||
"已删除附件引用",
|
||||
);
|
||||
let _ = set_hovered_block.try_set(None);
|
||||
let _ = set_block_menu_open.try_set(false);
|
||||
let _ = set_block_menu_anchor.try_set(None);
|
||||
}
|
||||
Err(err) => {
|
||||
let _ = set_command_feedback.try_set(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
let _ =
|
||||
set_command_feedback.try_set(format!("读取当前 HTML 失败:{err}"));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (event.ctrl_key() || event.meta_key())
|
||||
&& event.shift_key()
|
||||
&& event.key().eq_ignore_ascii_case("u")
|
||||
|
||||
Reference in New Issue
Block a user