mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-03-08 05:32:33 +01:00
This commit is contained in:
parent
650493dcdb
commit
15ec12e4db
4 changed files with 67 additions and 34 deletions
|
|
@ -151,8 +151,17 @@ export const getEditorRange = (element: Element) => {
|
|||
return range;
|
||||
}
|
||||
}
|
||||
|
||||
if (element.classList.contains("li") || element.classList.contains("list")) {
|
||||
return getEditorRange(element.querySelector("[data-node-id]"));
|
||||
}
|
||||
|
||||
// 代码块过长,在代码块的下一个块前删除,代码块会滚动到顶部,因粗需要 preventScroll
|
||||
(element as HTMLElement).focus({preventScroll: true});
|
||||
if (!range) {
|
||||
range = document.createRange();
|
||||
}
|
||||
|
||||
let targetElement;
|
||||
if (element.classList.contains("table")) {
|
||||
// 当光标不在表格区域中时表格无法被复制 https://ld246.com/article/1650510736504
|
||||
|
|
@ -160,13 +169,23 @@ export const getEditorRange = (element: Element) => {
|
|||
} else {
|
||||
targetElement = getContenteditableElement(element);
|
||||
if (!targetElement) {
|
||||
targetElement = element;
|
||||
const type = element.getAttribute("data-type");
|
||||
if (type === "NodeThematicBreak") {
|
||||
targetElement= element.firstElementChild;
|
||||
} else if (type === "NodeBlockQueryEmbed") {
|
||||
targetElement = element.lastElementChild.previousElementSibling?.firstChild;
|
||||
} else if (["NodeMathBlock", "NodeHTMLBlock"].includes(type)) {
|
||||
targetElement = element.lastElementChild.previousElementSibling?.lastElementChild?.firstChild;
|
||||
} else if (type === "NodeVideo") {
|
||||
targetElement = element.firstElementChild.firstChild;
|
||||
} else if (type === "NodeAudio") {
|
||||
targetElement = element.firstElementChild.lastChild;
|
||||
}
|
||||
} else if (targetElement.tagName === "TABLE") {
|
||||
// 文档中开头为表格,获取错误 https://ld246.com/article/1663408335459?r=88250
|
||||
targetElement = targetElement.querySelector("th") || element.querySelector("td");
|
||||
}
|
||||
}
|
||||
range = targetElement.ownerDocument.createRange();
|
||||
range.setStart(targetElement || element, 0);
|
||||
range.collapse(true);
|
||||
return range;
|
||||
|
|
@ -552,21 +571,19 @@ export const focusBlock = (element: Element, parentElement?: HTMLElement, toStar
|
|||
range.setStart(element.lastElementChild.previousElementSibling.firstChild, 0);
|
||||
range.collapse(true);
|
||||
setRange = true;
|
||||
} else if (["NodeMathBlock", "NodeHTMLBlock"].includes(type)) {
|
||||
if (element.lastElementChild.previousElementSibling?.lastElementChild?.firstChild) {
|
||||
// https://ld246.com/article/1655714737572
|
||||
range.selectNodeContents(element.lastElementChild.previousElementSibling.lastElementChild.firstChild);
|
||||
range.collapse(true);
|
||||
} else if (element.lastElementChild.previousElementSibling) {
|
||||
range.selectNodeContents(element.lastElementChild.previousElementSibling);
|
||||
range.collapse(true);
|
||||
}
|
||||
} else if (type === "NodeMathBlock") {
|
||||
genRenderFrame(element);
|
||||
range.setStart(element.firstElementChild.lastElementChild.firstChild, 0);
|
||||
setRange = true;
|
||||
} else if (type === "NodeHTMLBlock") {
|
||||
range.selectNodeContents(element.lastElementChild.previousElementSibling.lastElementChild.firstChild, 0);
|
||||
range.collapse(true);
|
||||
setRange = true;
|
||||
} else if (type === "NodeIFrame" || type === "NodeWidget") {
|
||||
range.setStart(element, 0);
|
||||
setRange = true;
|
||||
} else if (type === "NodeVideo") {
|
||||
range.setStart(element.firstElementChild, 0);
|
||||
range.setStart(element.firstElementChild.firstChild, 0);
|
||||
setRange = true;
|
||||
} else if (type === "NodeAudio") {
|
||||
range.setStart(element.firstElementChild.lastChild, 0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue