|
@@ -1514,12 +1514,12 @@ export class WYSIWYG {
|
|
|
|
|
|
this.element.addEventListener("keyup", (event) => {
|
|
|
const range = getEditorRange(this.element).cloneRange();
|
|
|
+ const nodeElement = hasClosestBlock(range.startContainer);
|
|
|
if (event.key !== "PageUp" && event.key !== "PageDown" && event.key !== "Home" && event.key !== "End" && event.key.indexOf("Arrow") === -1 &&
|
|
|
event.key !== "Alt" && event.key !== "Shift" && event.key !== "CapsLock" && event.key !== "Escape" && event.key !== "Meta" && !/^F\d{1,2}$/.test(event.key) &&
|
|
|
(!event.isComposing || (event.isComposing && range.toString() !== "")) // https://github.com/siyuan-note/siyuan/issues/4341
|
|
|
) {
|
|
|
// 搜狗输入法不走 keydown,需重新记录历史状态
|
|
|
- const nodeElement = hasClosestBlock(range.startContainer);
|
|
|
if (nodeElement && typeof protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] === "undefined") {
|
|
|
range.insertNode(document.createElement("wbr"));
|
|
|
protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] = nodeElement.outerHTML;
|
|
@@ -1540,7 +1540,6 @@ export class WYSIWYG {
|
|
|
}
|
|
|
|
|
|
if (event.eventPhase !== 3 && !event.shiftKey && (event.key.indexOf("Arrow") > -1 || event.key === "Home" || event.key === "End" || event.key === "PageUp" || event.key === "PageDown") && !event.isComposing) {
|
|
|
- const nodeElement = hasClosestBlock(range.startContainer);
|
|
|
if (nodeElement) {
|
|
|
this.setEmptyOutline(protyle, nodeElement);
|
|
|
if (range.toString() === "") {
|
|
@@ -1549,6 +1548,26 @@ export class WYSIWYG {
|
|
|
}
|
|
|
event.stopPropagation();
|
|
|
}
|
|
|
+
|
|
|
+ // https://github.com/siyuan-note/siyuan/issues/8918
|
|
|
+ if ((event.key === "ArrowLeft" || event.key === "ArrowRight" ||
|
|
|
+ event.key === "Alt" || event.key === "Shift") && // 选中后 alt+shift+arrowRight 会导致光标和选中块不一致
|
|
|
+ nodeElement && !nodeElement.classList.contains("protyle-wysiwyg--select")) {
|
|
|
+ const selectElements = Array.from(protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select"))
|
|
|
+ let containRange = false
|
|
|
+ selectElements.find(item => {
|
|
|
+ if (item.contains(range.startContainer)) {
|
|
|
+ containRange = true
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (!containRange && selectElements.length > 0) {
|
|
|
+ selectElements.forEach(item => {
|
|
|
+ item.classList.remove("protyle-wysiwyg--select")
|
|
|
+ })
|
|
|
+ nodeElement.classList.add("protyle-wysiwyg--select")
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
this.element.addEventListener("dblclick", (event: MouseEvent & { target: HTMLElement }) => {
|