Skip to content

Commit

Permalink
fix: Backspace does not work properly behind list (#5102)
Browse files Browse the repository at this point in the history
<!--  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` 的支持是否符合预期
![2023-12-22](https://github.com/halo-dev/halo/assets/50261327/ebdc1364-bfd6-4e2f-acf0-444a03f40299)
3. 测试选择部分列表项后对于删除键 `Delete` 和退格键 `backspace` 的支持是否符合预期
4. 测试 `Ctrl-A` 全选后对于删除键 `Delete` 和退格键 `backspace` 的支持是否符合预期
![selectAll](https://github.com/halo-dev/halo/assets/50261327/c9a69c7a-b8d7-4532-8931-16fa2bc0b41a)

#### 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
修复无法删除有序/无序列表后空行的问题
```
  • Loading branch information
AirboZH authored Jan 2, 2024
1 parent 9ef13fa commit c918f2c
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 0 deletions.
1 change: 1 addition & 0 deletions console/packages/editor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 2 additions & 0 deletions console/packages/editor/src/dev/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ import {
ExtensionColumn,
ExtensionNodeSelected,
ExtensionTrailingNode,
ExtensionListKeymap,
} from "../index";
const content = useLocalStorage("content", "");
Expand Down Expand Up @@ -107,6 +108,7 @@ const editor = useEditor({
ExtensionColumn,
ExtensionNodeSelected,
ExtensionTrailingNode,
ExtensionListKeymap,
],
onUpdate: () => {
content.value = editor.value?.getHTML() + "";
Expand Down
2 changes: 2 additions & 0 deletions console/packages/editor/src/extensions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -142,4 +143,5 @@ export {
ExtensionColumn,
ExtensionNodeSelected,
ExtensionTrailingNode,
ExtensionListKeymap,
};
48 changes: 48 additions & 0 deletions console/packages/editor/src/extensions/list-keymap/index.ts
Original file line number Diff line number Diff line change
@@ -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;
11 changes: 11 additions & 0 deletions console/pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions console/src/components/editor/DefaultEditor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ import {
Plugin,
PluginKey,
DecorationSet,
ExtensionListKeymap,
} from "@halo-dev/richtext-editor";
import {
IconCalendar,
Expand Down Expand Up @@ -318,6 +319,7 @@ onMounted(() => {
];
},
}),
ExtensionListKeymap,
],
autofocus: "start",
onUpdate: () => {
Expand Down

0 comments on commit c918f2c

Please sign in to comment.