mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-02-15 19:48:06 +01:00
This commit is contained in:
parent
25dd919cf5
commit
931f818ca6
2 changed files with 27 additions and 2 deletions
|
|
@ -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 }) => {
|
||||
|
|
|
|||
|
|
@ -466,6 +466,10 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
|
|||
(event.shiftKey && !event.altKey && isCtrl(event) && (event.key === "Home" || event.key === "End") && !isMac())) {
|
||||
const topElement = hasTopClosestByAttribute(nodeElement, "data-node-id", null);
|
||||
if (topElement) {
|
||||
// 超级块内已选中某个块
|
||||
topElement.querySelectorAll(".protyle-wysiwyg--select").forEach(item => {
|
||||
item.classList.remove("protyle-wysiwyg--select");
|
||||
});
|
||||
topElement.classList.add("protyle-wysiwyg--select");
|
||||
let nextElement = event.key === "Home" ? topElement.previousElementSibling : topElement.nextElementSibling;
|
||||
while (nextElement) {
|
||||
|
|
@ -485,6 +489,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
|
|||
// ctrl+home 光标移动到顶
|
||||
if (!event.altKey && !event.shiftKey && isCtrl(event) && event.key === "Home") {
|
||||
goHome(protyle);
|
||||
hideElements(["select"], protyle);
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
return;
|
||||
|
|
@ -492,6 +497,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
|
|||
// ctrl+end 光标移动到尾
|
||||
if (!event.altKey && !event.shiftKey && isCtrl(event) && event.key === "End") {
|
||||
goEnd(protyle);
|
||||
hideElements(["select"], protyle);
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue