mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-04 15:58:49 +01:00
This commit is contained in:
parent
cd16c7c548
commit
ffdcb4d57e
3 changed files with 20 additions and 20 deletions
|
|
@ -380,7 +380,7 @@ export const setFirstNodeRange = (editElement: Element, range: Range) => {
|
|||
return range;
|
||||
};
|
||||
|
||||
export const focusByOffset = (container: Element, start: number, end: number) => {
|
||||
export const focusByOffset = (container: Element, start: number, end: number, isFocus = true) => {
|
||||
if (!container) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -448,10 +448,22 @@ export const focusByOffset = (container: Element, start: number, end: number) =>
|
|||
setLastNodeRange(getContenteditableElement(container as Element), range, false);
|
||||
}
|
||||
}
|
||||
focusByRange(range);
|
||||
if (isFocus) {
|
||||
focusByRange(range);
|
||||
}
|
||||
return range;
|
||||
};
|
||||
|
||||
export const setInsertWbrHTML = (nodeElement: HTMLElement, range: Range, protyle: IProtyle) => {
|
||||
const offset = getSelectionOffset(nodeElement, nodeElement, range)
|
||||
const cloneNode = nodeElement.cloneNode(true) as HTMLElement;
|
||||
const cloneRange = focusByOffset(cloneNode, offset.end, offset.end, false);
|
||||
if (cloneRange) {
|
||||
cloneRange.insertNode(document.createElement("wbr"));
|
||||
}
|
||||
protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] = cloneNode.outerHTML;
|
||||
}
|
||||
|
||||
export const focusByWbr = (element: Element, range: Range) => {
|
||||
const wbrElements = element.querySelectorAll("wbr");
|
||||
if (wbrElements.length === 0) {
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import {
|
|||
focusSideBlock,
|
||||
getEditorRange,
|
||||
getSelectionOffset,
|
||||
setFirstNodeRange,
|
||||
setFirstNodeRange, setInsertWbrHTML,
|
||||
setLastNodeRange,
|
||||
} from "../util/selection";
|
||||
import {Constants} from "../../constants";
|
||||
|
|
@ -673,7 +673,7 @@ export class WYSIWYG {
|
|||
|
||||
const imgElement = dragElement.parentElement.parentElement;
|
||||
if (dragElement.tagName === "IMG") {
|
||||
img3115(imgElement);
|
||||
img3115(imgElement);
|
||||
}
|
||||
documentSelf.onmousemove = (moveEvent: MouseEvent) => {
|
||||
if (dragElement.tagName === "IMG") {
|
||||
|
|
@ -2011,9 +2011,7 @@ export class WYSIWYG {
|
|||
const range = getEditorRange(protyle.wysiwyg.element);
|
||||
const nodeElement = hasClosestBlock(range.startContainer);
|
||||
if (!isMac() && nodeElement) {
|
||||
range.insertNode(document.createElement("wbr"));
|
||||
protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] = nodeElement.outerHTML;
|
||||
nodeElement.querySelector("wbr").remove();
|
||||
setInsertWbrHTML(nodeElement, range, protyle);
|
||||
}
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
|
@ -2097,9 +2095,7 @@ export class WYSIWYG {
|
|||
// 微软双拼 keyup 会记录拼音字符,因此在 compositionstart 记录
|
||||
!isComposition &&
|
||||
(typeof protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] === "undefined" || range.toString() !== "" || !this.preventKeyup)) {
|
||||
range.insertNode(document.createElement("wbr"));
|
||||
protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] = nodeElement.outerHTML;
|
||||
nodeElement.querySelector("wbr").remove();
|
||||
setInsertWbrHTML(nodeElement, range, protyle);
|
||||
}
|
||||
this.preventKeyup = false;
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import {
|
|||
getSelectionOffset,
|
||||
getSelectionPosition,
|
||||
selectAll,
|
||||
setFirstNodeRange,
|
||||
setFirstNodeRange, setInsertWbrHTML,
|
||||
setLastNodeRange,
|
||||
} from "../util/selection";
|
||||
import {
|
||||
|
|
@ -169,15 +169,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
|
|||
!isNotEditBlock(nodeElement) && !/^F\d{1,2}$/.test(event.key) &&
|
||||
// 微软双拼使用 compositionstart,否则 focusByRange 导致无法输入文字
|
||||
event.key !== "Process") {
|
||||
const cloneRange = range.cloneRange();
|
||||
range.collapse(false);
|
||||
range.insertNode(document.createElement("wbr"));
|
||||
protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] = nodeElement.outerHTML;
|
||||
nodeElement.querySelector("wbr").remove();
|
||||
// 光标位于引用结尾后 ctrl+b 偶尔会失效
|
||||
range = cloneRange;
|
||||
focusByRange(cloneRange);
|
||||
protyle.toolbar.range = cloneRange;
|
||||
setInsertWbrHTML(nodeElement, range, protyle);
|
||||
protyle.wysiwyg.preventKeyup = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue