From 726ebc5e888aca27ad208045c83c384c636c2f3e Mon Sep 17 00:00:00 2001 From: wanglin2 <1013335014@qq.com> Date: Sun, 13 Aug 2023 08:47:35 +0800 Subject: [PATCH] =?UTF-8?q?Feat:=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=A4=84=E7=90=86=E5=89=AA=E8=B4=B4=E6=9D=BF=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E6=96=87=E6=9C=AC=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/constants/defaultOptions.js | 20 ++++++++++++++++++- simple-mind-map/src/core/render/Render.js | 19 +++++++++++++----- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/simple-mind-map/src/constants/defaultOptions.js b/simple-mind-map/src/constants/defaultOptions.js index f4e9004c..1ede82d0 100644 --- a/simple-mind-map/src/constants/defaultOptions.js +++ b/simple-mind-map/src/constants/defaultOptions.js @@ -132,5 +132,23 @@ export const defaultOpt = { enableAutoEnterTextEditWhenKeydown: false, // 设置富文本节点编辑框和节点大小一致,形成伪原地编辑的效果 // 需要注意的是,只有当节点内只有文本、且形状是矩形才会有比较好的效果 - richTextEditFakeInPlace: false + richTextEditFakeInPlace: false, + // 自定义对剪贴板文本的处理。当按ctrl+v粘贴时会读取用户剪贴板中的文本和图片,默认只会判断文本是否是普通文本和simple-mind-map格式的节点数据,如果你想处理其他思维导图的数据,比如processon、zhixi等,那么可以传递一个函数,接受当前剪贴板中的文本为参数,返回处理后的数据,可以返回两种类型: + /* + 1.返回一个纯文本,那么会直接以该文本创建一个子节点 + + 2.返回一个节点对象,格式如下: + { + // 代表是simple-mind-map格式的数据 + simpleMindMap: true, + // 节点数据,同simple-mind-map节点数据格式 + data: { + data: { + text: '' + }, + children: [] + } + } + */ + customHandleClipboardText: null } diff --git a/simple-mind-map/src/core/render/Render.js b/simple-mind-map/src/core/render/Render.js index fac2c564..2d4bc83f 100644 --- a/simple-mind-map/src/core/render/Render.js +++ b/simple-mind-map/src/core/render/Render.js @@ -668,12 +668,21 @@ class Render { if (text) { // 判断粘贴的是否是simple-mind-map的数据 let smmData = null - try { - const parsedData = JSON.parse(text) - if (parsedData && parsedData.simpleMindMap) { - smmData = parsedData.data + if (this.mindMap.opt.customHandleClipboardText) { + const res = this.mindMap.opt.customHandleClipboardText(text) + if (typeof res === 'object' && res.simpleMindMap) { + smmData = res.data + } else { + text = String(res) } - } catch (error) {} + } else { + try { + const parsedData = JSON.parse(text) + if (parsedData && parsedData.simpleMindMap) { + smmData = parsedData.data + } + } catch (error) {} + } if (smmData) { this.mindMap.execCommand( 'INSERT_CHILD_NODE',