From 660ec00ca78fbbd7b584e247d0c1507b1bd040fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A1=97=E8=A7=92=E5=B0=8F=E6=9E=97?= <1013335014@qq.com> Date: Thu, 7 Mar 2024 11:27:52 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=E6=96=B0=E5=A2=9E=E6=94=AF?= =?UTF-8?q?=E6=8C=81txt=E6=96=87=E4=BB=B6=E7=9A=84=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- simple-mind-map/src/parse/toTxt.js | 35 +++++++++++++++++++++++++++ simple-mind-map/src/plugins/Export.js | 10 ++++++++ simple-mind-map/src/utils/index.js | 1 + 3 files changed, 46 insertions(+) create mode 100644 simple-mind-map/src/parse/toTxt.js diff --git a/simple-mind-map/src/parse/toTxt.js b/simple-mind-map/src/parse/toTxt.js new file mode 100644 index 00000000..1b6ad35d --- /dev/null +++ b/simple-mind-map/src/parse/toTxt.js @@ -0,0 +1,35 @@ +import { walk, nodeRichTextToTextWithWrap } from '../utils' + +const getNodeText = data => { + return data.richText ? nodeRichTextToTextWithWrap(data.text) : data.text +} + +const getIndent = level => { + return new Array(level).fill(' ').join('') +} + +// 转换成txt格式 +export const transformToTxt = root => { + let content = '' + walk( + root, + null, + (node, parent, isRoot, layerIndex) => { + content += getIndent(layerIndex) + content += ' ' + getNodeText(node.data) + // 概要 + const generalization = node.data.generalization + if (Array.isArray(generalization)) { + content += generalization.map(item => { + return ` [${getNodeText(item)}]` + }) + } else if (generalization && generalization.text) { + content += ` [${getNodeText(generalization)}]` + } + content += '\n\n' + }, + () => {}, + true + ) + return content +} diff --git a/simple-mind-map/src/plugins/Export.js b/simple-mind-map/src/plugins/Export.js index 225d90f4..a556e5fd 100644 --- a/simple-mind-map/src/plugins/Export.js +++ b/simple-mind-map/src/plugins/Export.js @@ -10,6 +10,7 @@ import { SVG } from '@svgdotjs/svg.js' import drawBackgroundImageToCanvas from '../utils/simulateCSSBackgroundInCanvas' import { transformToMarkdown } from '../parse/toMarkdown' import { ERROR_TYPES } from '../constants/constant' +import { transformToTxt } from '../parse/toTxt' // 导出插件 class Export { @@ -294,6 +295,15 @@ class Export { const res = await readBlob(blob) return res } + + // txt文件 + async txt() { + const data = this.mindMap.getData() + const content = transformToTxt(data) + const blob = new Blob([content]) + const res = await readBlob(blob) + return res + } } Export.instanceName = 'doExport' diff --git a/simple-mind-map/src/utils/index.js b/simple-mind-map/src/utils/index.js index 3afa5812..87292a59 100644 --- a/simple-mind-map/src/utils/index.js +++ b/simple-mind-map/src/utils/index.js @@ -4,6 +4,7 @@ import { selfCloseTagList } from '../constants/constant' import MersenneTwister from './mersenneTwister' + // 深度优先遍历树 export const walk = ( root,