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: 为默认编辑器代码块增加折叠功能。 image #### 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?.(),