From ab14157defdb6bfa5aa9a5290e8e8e43ebf74767 Mon Sep 17 00:00:00 2001
From: Takagi <1103069291@qq.com>
Date: Thu, 27 Jun 2024 17:42:54 +0800
Subject: [PATCH] pref: add folding function to code blocks (#6177)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
#### What type of PR is this?
/kind improvement
/area editor
/milestone 2.17.x
#### What this PR does / why we need it:
为默认编辑器代码块增加折叠功能。
#### How to test it?
测试折叠功能是否可用。
测试重新打开文章之后代码块是否仍旧处于折叠状态。
#### Which issue(s) this PR fixes:
Fixes #6166
#### Does this PR introduce a user-facing change?
```release-note
为默认编辑器代码块增加折叠功能
```
---
.../code-block/CodeBlockViewRenderer.vue | 36 ++++++++++++++++---
.../src/extensions/code-block/code-block.ts | 19 ++++++++++
2 files changed, 50 insertions(+), 5 deletions(-)
diff --git a/ui/packages/editor/src/extensions/code-block/CodeBlockViewRenderer.vue b/ui/packages/editor/src/extensions/code-block/CodeBlockViewRenderer.vue
index f18ea49ae..e71adcf62 100644
--- a/ui/packages/editor/src/extensions/code-block/CodeBlockViewRenderer.vue
+++ b/ui/packages/editor/src/extensions/code-block/CodeBlockViewRenderer.vue
@@ -6,6 +6,8 @@ import { NodeViewContent, NodeViewWrapper } from "@/tiptap/vue-3";
import { useTimeout } from "@vueuse/core";
import { computed } from "vue";
import BxBxsCopy from "~icons/bx/bxs-copy";
+import RiArrowDownSFill from "~icons/ri/arrow-down-s-fill";
+import RiArrowRightSFill from "~icons/ri/arrow-right-s-fill";
import IconCheckboxCircle from "~icons/ri/checkbox-circle-line";
import lowlight from "./lowlight";
@@ -33,6 +35,15 @@ const selectedLanguage = computed({
},
});
+const collapsed = computed({
+ get: () => {
+ return props.node.attrs.collapsed || false;
+ },
+ set: (collapsed: boolean) => {
+ props.updateAttributes({ collapsed: collapsed });
+ },
+});
+
const { ready, start } = useTimeout(2000, { controls: true, immediate: false });
const handleCopyCode = () => {
@@ -44,14 +55,29 @@ const handleCopyCode = () => {
};
-
+
-
+
+
-
+
diff --git a/ui/packages/editor/src/extensions/code-block/code-block.ts b/ui/packages/editor/src/extensions/code-block/code-block.ts
index 0ae4d5557..cb55deab1 100644
--- a/ui/packages/editor/src/extensions/code-block/code-block.ts
+++ b/ui/packages/editor/src/extensions/code-block/code-block.ts
@@ -105,6 +105,25 @@ export default CodeBlockLowlight.extend<
// otherwise the Mod-a shortcut key will be overridden.
priority: 110,
fakeSelection: true,
+
+ addAttributes() {
+ return {
+ ...this.parent?.(),
+ collapsed: {
+ default: false,
+ parseHTML: (element) => !!element.getAttribute("collapsed"),
+ renderHTML: (attributes) => {
+ if (attributes.collapsed) {
+ return {
+ collapsed: attributes.collapsed,
+ };
+ }
+ return {};
+ },
+ },
+ };
+ },
+
addCommands() {
return {
...this.parent?.(),