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,