From a431cd03008052f70f885758e27605d6ca931a61 Mon Sep 17 00:00:00 2001 From: Van Date: Wed, 19 Feb 2020 16:51:59 +0800 Subject: [PATCH] :sparkles: fix #143 --- CHANGELOG.md | 1 + src/ts/wysiwyg/processKeydown.ts | 46 ++++++++++++++++++++------------ 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 658dfcb65..c3dc88cba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ * [154](https://github.com/Vanessa219/vditor/issues/154) the cursor is disapeared after tab pressed at editor mode `修复缺陷` * [153](https://github.com/Vanessa219/vditor/issues/153) Heading toolbar is not working `修复缺陷` * [148](https://github.com/Vanessa219/vditor/issues/148) 任务列表退格删除问题 `修复缺陷` +* [143](https://github.com/Vanessa219/vditor/issues/143) [suggestion] ctrl+m `改进功能` * [142](https://github.com/Vanessa219/vditor/issues/142) lists when indented at wysiwyg mode `修复缺陷` * [141](https://github.com/Vanessa219/vditor/issues/141) toolbar 添加箭头,默认表情修改 `改进功能` * [140](https://github.com/Vanessa219/vditor/issues/140) *** after shift+enter `修复缺陷` diff --git a/src/ts/wysiwyg/processKeydown.ts b/src/ts/wysiwyg/processKeydown.ts index 7d8c7115b..b32251464 100644 --- a/src/ts/wysiwyg/processKeydown.ts +++ b/src/ts/wysiwyg/processKeydown.ts @@ -19,6 +19,27 @@ import {isHeadingMD, isHrMD} from "./processMD"; import {setHeading} from "./setHeading"; import {setRangeByWbr} from "./setRangeByWbr"; +const goPreviousCell = (cellElement: HTMLElement, range: Range, isSelected = true) => { + let previousElement = cellElement.previousElementSibling; + if (!previousElement) { + if (cellElement.parentElement.previousElementSibling) { + previousElement = cellElement.parentElement.previousElementSibling.lastElementChild; + } else if (cellElement.parentElement.parentElement.tagName === "TBODY" && + cellElement.parentElement.parentElement.previousElementSibling) { + previousElement = cellElement.parentElement + .parentElement.previousElementSibling.lastElementChild.lastElementChild; + } else { + previousElement = null; + } + } + if (previousElement) { + range.selectNodeContents(previousElement); + if (!isSelected) { + range.collapse(false); + } + } +} + export const processKeydown = (vditor: IVditor, event: KeyboardEvent) => { // 添加第一次记录 undo 的光标 if (!isCtrl(event) && event.key.indexOf("Arrow") === -1) { @@ -107,28 +128,20 @@ export const processKeydown = (vditor: IVditor, event: KeyboardEvent) => { // Backspace:光标移动到前一个 cell if (!isCtrl(event) && !event.shiftKey && !event.altKey && event.key === "Backspace" && range.startOffset === 0 && range.toString() === "") { - let previousElement = cellElement.previousElementSibling; - if (!previousElement) { - if (cellElement.parentElement.previousElementSibling) { - previousElement = cellElement.parentElement.previousElementSibling.lastElementChild; - } else if (cellElement.parentElement.parentElement.tagName === "TBODY" && - cellElement.parentElement.parentElement.previousElementSibling) { - previousElement = cellElement.parentElement - .parentElement.previousElementSibling.lastElementChild.lastElementChild; - } else { - previousElement = null; - } - } - if (previousElement) { - range.selectNodeContents(previousElement); - range.collapse(false); - } + goPreviousCell(cellElement, range, false) event.preventDefault(); return true; } // tab:光标移向下一个 cell if (event.key === "Tab") { + if (event.shiftKey) { + // shift + tab 光标移动到前一个 cell + goPreviousCell(cellElement, range) + event.preventDefault(); + return true; + } + let nextElement = cellElement.nextElementSibling; if (!nextElement) { if (cellElement.parentElement.nextElementSibling) { @@ -143,7 +156,6 @@ export const processKeydown = (vditor: IVditor, event: KeyboardEvent) => { } if (nextElement) { range.selectNodeContents(nextElement); - range.collapse(true); } event.preventDefault(); return true;