mirror of https://github.com/halo-dev/halo
fix: Backspace does not work properly behind list (#5102)
<!-- Thanks for sending a pull request! Here are some tips for you: 1. 如果这是你的第一次,请阅读我们的贡献指南:<https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>。 1. If this is your first time, please read our contributor guidelines: <https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>. 2. 请根据你解决问题的类型为 Pull Request 添加合适的标签。 2. Please label this pull request according to what type of issue you are addressing, especially if this is a release targeted pull request. 3. 请确保你已经添加并运行了适当的测试。 3. Ensure you have added or ran the appropriate tests for your PR. --> #### What type of PR is this? /kind bug <!-- 添加其中一个类别: Add one of the following kinds: /kind bug /kind cleanup /kind documentation /kind feature /kind improvement 适当添加其中一个或多个类别(可选): Optionally add one or more of the following kinds if applicable: /kind api-change /kind deprecation /kind failing-test /kind flake /kind regression --> #### What this PR does / why we need it: 增加 `@tiptap/extension-list-keymap` 扩展,优化列表的键盘操作 #### Which issue(s) this PR fixes: <!-- PR 合并时自动关闭 issue。 Automatically closes linked issue when PR is merged. 用法:`Fixes #<issue 号>`,或者 `Fixes (粘贴 issue 完整链接)` Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`. --> Fixes #5065 #### Special notes for your reviewer: 测试方法: 1. 测试无序列表中和无序列表后对于删除键 `Delete` 和退格键 `backspace` 的支持是否符合预期 2. 测试有序列表中和有序列表后对于删除键 `Delete` 和退格键 `backspace` 的支持是否符合预期  3. 测试选择部分列表项后对于删除键 `Delete` 和退格键 `backspace` 的支持是否符合预期 4. 测试 `Ctrl-A` 全选后对于删除键 `Delete` 和退格键 `backspace` 的支持是否符合预期  #### Does this PR introduce a user-facing change? <!-- 如果当前 Pull Request 的修改不会造成用户侧的任何变更,在 `release-note` 代码块儿中填写 `NONE`。 否则请填写用户侧能够理解的 Release Note。如果当前 Pull Request 包含破坏性更新(Break Change), Release Note 需要以 `action required` 开头。 If no, just write "NONE" in the release-note block below. If yes, a release note is required: Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required". --> ```release-note 修复无法删除有序/无序列表后空行的问题 ```pull/5140/head
parent
9ef13faada
commit
c918f2c803
|
@ -61,6 +61,7 @@
|
|||
"@tiptap/extension-italic": "^2.1.10",
|
||||
"@tiptap/extension-link": "^2.1.10",
|
||||
"@tiptap/extension-list-item": "^2.1.10",
|
||||
"@tiptap/extension-list-keymap": "^2.1.10",
|
||||
"@tiptap/extension-ordered-list": "^2.1.10",
|
||||
"@tiptap/extension-paragraph": "^2.1.10",
|
||||
"@tiptap/extension-placeholder": "^2.1.10",
|
||||
|
|
|
@ -43,6 +43,7 @@ import {
|
|||
ExtensionColumn,
|
||||
ExtensionNodeSelected,
|
||||
ExtensionTrailingNode,
|
||||
ExtensionListKeymap,
|
||||
} from "../index";
|
||||
|
||||
const content = useLocalStorage("content", "");
|
||||
|
@ -107,6 +108,7 @@ const editor = useEditor({
|
|||
ExtensionColumn,
|
||||
ExtensionNodeSelected,
|
||||
ExtensionTrailingNode,
|
||||
ExtensionListKeymap,
|
||||
],
|
||||
onUpdate: () => {
|
||||
content.value = editor.value?.getHTML() + "";
|
||||
|
|
|
@ -13,6 +13,7 @@ import ExtensionSubscript from "./subscript";
|
|||
import ExtensionBulletList from "./bullet-list";
|
||||
import ExtensionOrderedList from "./ordered-list";
|
||||
import ExtensionTaskList from "./task-list";
|
||||
import ExtensionListKeymap from "./list-keymap";
|
||||
import ExtensionTable from "./table";
|
||||
import ExtensionTextAlign from "./text-align";
|
||||
import ExtensionTextStyle from "@tiptap/extension-text-style";
|
||||
|
@ -142,4 +143,5 @@ export {
|
|||
ExtensionColumn,
|
||||
ExtensionNodeSelected,
|
||||
ExtensionTrailingNode,
|
||||
ExtensionListKeymap,
|
||||
};
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
import {
|
||||
listHelpers,
|
||||
ListKeymap,
|
||||
type ListKeymapOptions,
|
||||
} from "@tiptap/extension-list-keymap";
|
||||
import { Editor } from "@tiptap/core";
|
||||
|
||||
/**
|
||||
* Optimize the listKeymap extension until the issue with @tiptap/extension-list-keymap is resolved.
|
||||
* https://github.com/ueberdosis/tiptap/issues/4395
|
||||
*/
|
||||
const ExtensionListKeymap = ListKeymap.extend<ListKeymapOptions>({
|
||||
addKeyboardShortcuts() {
|
||||
const backspaceHandle = (editor: Editor) => {
|
||||
let handled = false;
|
||||
|
||||
if (!editor.state.selection.empty) {
|
||||
editor.commands.deleteSelection();
|
||||
return true;
|
||||
}
|
||||
|
||||
this.options.listTypes.forEach(
|
||||
({
|
||||
itemName,
|
||||
wrapperNames,
|
||||
}: {
|
||||
itemName: string;
|
||||
wrapperNames: string[];
|
||||
}) => {
|
||||
if (listHelpers.handleBackspace(editor, itemName, wrapperNames)) {
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return handled;
|
||||
};
|
||||
|
||||
return {
|
||||
Backspace: ({ editor }: { editor: Editor }) => backspaceHandle(editor),
|
||||
|
||||
"Mod-Backspace": ({ editor }: { editor: Editor }) =>
|
||||
backspaceHandle(editor),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export default ExtensionListKeymap;
|
|
@ -496,6 +496,9 @@ importers:
|
|||
'@tiptap/extension-list-item':
|
||||
specifier: ^2.1.10
|
||||
version: 2.1.11(@tiptap/core@2.1.11)
|
||||
'@tiptap/extension-list-keymap':
|
||||
specifier: ^2.1.10
|
||||
version: 2.1.13(@tiptap/core@2.1.11)
|
||||
'@tiptap/extension-ordered-list':
|
||||
specifier: ^2.1.10
|
||||
version: 2.1.11(@tiptap/core@2.1.11)
|
||||
|
@ -5964,6 +5967,14 @@ packages:
|
|||
'@tiptap/core': 2.1.11(@tiptap/pm@2.1.11)
|
||||
dev: false
|
||||
|
||||
/@tiptap/extension-list-keymap@2.1.13(@tiptap/core@2.1.11):
|
||||
resolution: {integrity: sha512-D/j1aPz3tehILfUWXy9lfgoZUzxO2Jmls4hnvyGDugEBiZtQGRpqPjqhJBkkcWlxa7UnQQD2AbZ2D5P0oStx5Q==}
|
||||
peerDependencies:
|
||||
'@tiptap/core': ^2.0.0
|
||||
dependencies:
|
||||
'@tiptap/core': 2.1.11(@tiptap/pm@2.1.11)
|
||||
dev: false
|
||||
|
||||
/@tiptap/extension-ordered-list@2.1.11(@tiptap/core@2.1.11):
|
||||
resolution: {integrity: sha512-/tghfEJ5U7WFbF8xyOqRJks8KxP/lRjnroMXMglaushSMx8PYPo1dZDB/dJZw7ksy47MAaKJfKlx3gyN2CPXBQ==}
|
||||
peerDependencies:
|
||||
|
|
|
@ -48,6 +48,7 @@ import {
|
|||
Plugin,
|
||||
PluginKey,
|
||||
DecorationSet,
|
||||
ExtensionListKeymap,
|
||||
} from "@halo-dev/richtext-editor";
|
||||
import {
|
||||
IconCalendar,
|
||||
|
@ -318,6 +319,7 @@ onMounted(() => {
|
|||
];
|
||||
},
|
||||
}),
|
||||
ExtensionListKeymap,
|
||||
],
|
||||
autofocus: "start",
|
||||
onUpdate: () => {
|
||||
|
|
Loading…
Reference in New Issue