wanglin2 6d758a988c 打包
2023-01-11 14:23:27 +08:00
2021-07-22 19:06:51 +08:00
2023-01-11 14:23:27 +08:00
2023-01-11 14:12:42 +08:00
2023-01-11 09:16:45 +08:00
2021-07-14 08:13:23 +08:00
2023-01-11 14:23:27 +08:00
2023-01-11 10:25:24 +08:00
2023-01-11 10:25:24 +08:00

A simple and powerful web mind map

Read this in other languages: English (You're Here), 简体中文

Features:

  • Supports four types of structures: logical structure diagrams, mind maps, organizational structure diagrams, and directory organization diagrams
  • Built-in multiple themes and allows for highly customized styles
  • Supports shortcuts
  • Node content supports images, icons, hyperlinks, notes, tags, and summaries
  • Supports forward and backward navigation
  • Supports dragging and scaling
  • Supports right-click to select multiple items
  • Supports free dragging and dragging to adjust nodes
  • Supports various node shapes
  • Supports export to json, png, svg, pdf, and import from json, xmind
  • Supports mini map

Table of Contents

1.simple-mind-map

This is a mind map tool library that is framework-agnostic and can be used with frameworks such as Vue and React, or without a framework.

2.web

This is an online mind map built using the simple-mind-map library and based on Vue2.x and ElementUI. Features include:

  • Toolbar, which supports inserting and deleting nodes, and editing node images, icons, hyperlinks, notes, tags, and summaries

  • Sidebar, with panels for basic style settings, node style settings, outline, theme selection, and structure selection

  • Import and export functionality; data is saved in the browser's local storage by default, but it also supports creating, opening, and editing local files on the computer directly

  • Right-click menu, which supports operations such as expanding, collapsing, and organizing layout

  • Bottom bar, which supports node and word count statistics, switching between edit and read-only modes, zooming in and out, and switching to full screen

3.dist

The folder containing the packaged resources for the web folder.

4.docs

Documentation, etc.

Development

Local Development

git clone https://github.com/wanglin2/mind-map.git
cd simple-mind-map
npm i
npm link
cd ..
cd web
npm i
npm link simple-mind-map
npm run serve

Packaging the Library

Since version 0.2.0, we have added support for packaging the core library simple-mind-map. This uses the same packaging tool as the sample project web.

cd web
npm run buildLibrary

The package.json file in the simple-mind-map library provides two export fields:

{
  "module": "index.js",
  "main": "./dist/simpleMindMap.umd.min.js"
}

Environments that support the module field will use index.js as the entry point, otherwise the packed simpleMindMap.umd.min.js will be used as the entry point.

Packaging the Demo

cd web
npm run build

The index.html file will be automatically moved to the root directory.

Technical Analysis of Web Mind Map Implementation (chi)

Installation

Things to note before version 0.2.0:

npm i simple-mind-map

0.2.0 Notes for previous versions:

Note: This project is directly published in source code form and has not been packaged. If compilation fails, a Vue CLI-created project can add the following configuration to the vue.config.js file to allow babel-loader to compile this dependency:

module.exports = {
  transpileDependencies: ["simple-mind-map"],
};

Other projects should modify the packaging configuration as needed.

Problems

Error when using in Vite, indicating xml-js dependency error

Solution: use the following import method:

import MindMap from "simple-mind-map/dist/simpleMindMap.umd.min";

The simple-mind-map package provides the unpacked entry field module, and the xml-js package dependency needs to import the package in the node environment. Therefore, it cannot be obtained in Vite and an error will be reported. Therefore, specify the import of the packed entry, and all relevant packages are packed into the product, so there will be no error.

If you need to do further development, that is, you must use the unpacked code, and if you do not need to parse the xmind file, you can remove the xmind module. If you need it, you can try using other libraries to parse xml to json.

Error Getting bbox of element "text" is not possible: TypeError: Cannot read properties of undefined (reading 'apply')

The reason is that the installed version of @svgdotjs/svg.js is too high. You can manually reduce it to the version of 3.0.16.

API

Instantiating

<div id="mindMapContainer"></div>
import MindMap from "simple-mind-map";

const mindMap = new MindMap({
  el: document.getElementById("mindMapContainer"),
  data: {
    "root": {
      "data": {
        "text": "root node",
      },
      "children": [],
    },
  },
});

Xmind Parsing Method

v0.2.7+

You can get the Xmind parsing method as follows:

import MindMap from "simple-mind-map";

console.log(MindMap.xmind);

The MindMap.xmind object has two methods attached:

parseXmindFile(file)

Parsing the .xmind file and returning the parsed data. Note that this is complete data, including the node tree, theme, and structure. You can use mindMap.setFullData(data) to render the returned data to the canvas.

file: File object

transformXmind(content)

Convert xmind data. The .xmind file is essentially a zip file that can be decompressed by changing the suffix to zip. Inside, there is a content.json file. If you have parsed this file yourself, you can pass the contents of this file to this method for conversion. The converted data is the complete data, including the node tree, theme, structure, etc. You can use mindMap.setFullData(data) to render the returned data to the canvas.

content: the contents of the content.json file within the .xmind zip package

transformOldXmind(content)

v0.2.8+

For data parsing of the xmind8 version, because the .xmind file in this version does not have a content.json, it corresponds to content.xml.

content: the contents of the content.xml file within the .xmind zip package

Instantiation options:

Field Name Type Default Value Description Required
el Element Container element, must be a DOM element Yes
data Object {} Mind map data, refer to: https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/example/exampleData.js
layout String logicalStructure Layout type, options: logicalStructure (logical structure diagram), mindMap (mind map), catalogOrganization (catalog organization diagram), organizationStructure (organization structure diagram)
theme String default Theme, options: default, classic, minions, pinkGrape, mint, gold, vitalityOrange, greenLeaf, dark2, skyGreen, classic2, classic3, classic4 (v0.2.0+), classicGreen, classicBlue, blueSky, brainImpairedPink, dark, earthYellow, freshGreen, freshRed, romanticPurple
themeConfig Object {} Theme configuration, will be merged with the selected theme, available fields refer to: https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/themes/default.js
scaleRatio Number 0.1 The incremental scaling ratio
maxTag Number 5 The maximum number of tags displayed in the node, any additional tags will be discarded
exportPadding Number 20 The padding for exporting images
imgTextMargin Number 5 The spacing between the image and text in the node
textContentMargin Number 2 The spacing between various text information in the node, such as the spacing between the icon and text
selectTranslateStep Number 3 The canvas offset when mouse moves to the edge during multi-select node
selectTranslateLimit Number 20 The distance from the edge when the canvas begins to offset during multi-select node
customNoteContentShowv0.1.6+ Object null Custom node note content display, object type, structure: {show: (noteContent, left, top) => {// your display node note logic }, hide: () => {// your hide node note logic }}
readonlyv0.1.7+ Boolean false Whether it is read-only mode

Instance methods:

render()

Triggers a full rendering, which will reuse nodes for better performance. If only the node positions have changed, this method can be called to reRender.

reRender()

Performs a full re-render, clearing the canvas and creating new nodes. This has poor performance and should be used sparingly.

resize()

After the container size has changed, this method should be called to adjust.

setMode(mode)

v0.1.7+. Switches between readonly and edit mode.

modereadonly、edit

on(event, fn)

Listen to an event. Event list:

Event Name Description Callback Parameters
data_change Tree rendering data change, listen to this method to get the latest data data (current tree rendering data)
view_data_changev0.1.1+ View change data, such as when dragging or zooming data (current view state data)
back_forward Forward or backward activeHistoryIndex (current index in the history data array), length (current length of the history data array)
draw_click Canvas click event e (event object)
svg_mousedown svg canvas mouse down event e (event object)
mousedown el element mouse down event e (event object), this (Event event class instance)
mousemove el element mouse move event e (event object), this (Event event class instance)
drag If it is a drag event while holding down the left button e (event object), this (Event event class instance)
mouseup el element mouse up event e (event object), this (Event event class instance)
mousewheel Mouse scroll event e (event object), dir (up or down scroll), this (Event event class instance)
contextmenu svg canvas right mouse button menu event e (event object)
node_click Node click event this (node instance), e (event object)
node_mousedown Node mouse down event this (node instance), e (event object)
node_mouseup node mouseup event this (node instance), e (event object)
node_mouseup Node mouseup event this (node instance), e (event object)
node_dblclick Node double-click event this (node instance), e (event object)
node_contextmenu Node right-click menu event e (event object), this (node instance)
before_node_active Event before node activation this (node instance), activeNodeList (current list of active nodes)
node_active Node activation event this (node instance), activeNodeList (current list of active nodes)
expand_btn_click Node expand or collapse event this (node instance)
before_show_text_edit Event before node text edit box opens
hide_text_edit Node text edit box close event textEditNode (text edit box DOM node), activeNodeList (current list of active nodes)
scale Zoom event scale (zoom ratio)
node_img_dblclickv0.2.15+ Node image double-click event this (node instance), e (event object)
node_tree_render_endv0.2.16+ Node tree render end event

emit(event, ...args)

Trigger an event, which can be one of the events listed above or a custom event.

off(event, fn)

Unbind an event.

setTheme(theme)

Switches the theme. Available themes can be found in the options table above.

getTheme()

Gets the current theme.

setThemeConfig(config)

Sets the theme configuration. config is the same as the themeConfig option in the options table above.

getCustomThemeConfig()

Gets the custom theme configuration.

getThemeConfig(prop)

Gets the value of a specific theme configuration property.

getLayout()

Gets the current layout structure.

setLayout(layout)

Sets the layout structure. Available values can be found in the layout field in the options table above.

execCommand(name, ...args)

Executes a command, which will add a record to the history stack for undo or redo. All commands are as follows:

Command name Description Parameters
SELECT_ALL Select all
BACK Go back a specified number of steps step (the number of steps to go back, default is 1)
FORWARD Go forward a specified number of steps step (the number of steps to go forward, default is 1)
INSERT_NODE Insert a sibling node, the active node will be the operation node. If there are multiple active nodes, only the first one will be effective
INSERT_CHILD_NODE Insert a child node, the active node will be the operation node
UP_NODE Move node up, the active node will be the operation node. If there are multiple active nodes, only the first one will be effective. Using this command on the root node or the first node in the list will be invalid
DOWN_NODE Move node down, the active node will be the operation node. If there are multiple active nodes, only the first one will be effective. Using this command on the root node or the last node in the list will be invalid
REMOVE_NODE Remove node, the active node will be the operation node
PASTE_NODE Paste node to a node, the active node will be the operation node data (the node data to paste, usually obtained through the renderer.copyNode() and renderer.cutNode() methods)
SET_NODE_STYLE Modify node style node (the node to set the style of), prop (style property), value (style property value), isActive (boolean, whether the style being set is for the active state)
SET_NODE_ACTIVE Set whether the node is active node (the node to set), active (boolean, whether to activate)
CLEAR_ACTIVE_NODE Clear the active state of the currently active node(s), the active node will be the operation node
SET_NODE_EXPAND Set whether the node is expanded node (the node to set), expand (boolean, whether to expand)
EXPAND_ALL Expand all nodes
UNEXPAND_ALL Collapse all nodes
UNEXPAND_TO_LEVEL (v0.2.8+) Expand to a specified level level (the level to expand to, 1, 2, 3...)
SET_NODE_DATA Update node data, that is, update the data in the data object of the node data object node (the node to set), data (object, the data to update, e.g. {expand: true})
SET_NODE_TEXT Set node text node (the node to set), text (the new text for the node)
SET_NODE_IMAGE Set Node Image node (node to set), imgData (object, image information, structured as: {url, title, width, height}, the width and height of the image must be passed)
SET_NODE_ICON Set Node Icon node (node to set), icons (array, predefined image names array, available icons can be obtained in the nodeIconList list in the https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/svg/icons.js file, icon name is type_name, such as ['priority_1'])
SET_NODE_HYPERLINK Set Node Hyperlink node (node to set), link (hyperlink address), title (hyperlink name, optional)
SET_NODE_NOTE Set Node Note node (node to set), note (note text)
SET_NODE_TAG Set Node Tag node (node to set), tag (string array, built-in color information can be obtained in https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/utils/constant.js)
INSERT_AFTER (v0.1.5+) Move Node to After Another Node node (node to move), exist (target node)
INSERT_BEFORE (v0.1.5+) Move Node to Before Another Node node (node to move), exist (target node)
MOVE_NODE_TO (v0.1.5+) Move a node as a child of another node node (the node to move), toNode (the target node)
ADD_GENERALIZATION (v0.2.0+) Add a node summary data (the data for the summary, in object format, all numerical fields of the node are supported, default is {text: 'summary'})
REMOVE_GENERALIZATION (v0.2.0+) Remove a node summary
SET_NODE_CUSTOM_POSITION (v0.2.0+) Set a custom position for a node node (the node to set), left (custom x coordinate, default is undefined), top (custom y coordinate, default is undefined)
RESET_LAYOUT (v0.2.0+) Arrange layout with one click
SET_NODE_SHAPE (v0.2.4+) Set the shape of a node node (the node to set), shape (the shape, all shapes: https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/Shape.js)

setData(data)

Dynamic setting of mind map data, pure node data

data: mind map structure data

setFullData(data)

v0.2.7+

Dynamic setting of mind map data, including node data, layout, theme, view

data: complete data, structure can refer to exportFullData

getData(withConfig)

v0.2.9+

Gets mind map data

withConfig: Boolean, default is false, that is, the obtained data only includes the node tree, if true is passed, it will also include theme, layout, view, etc. data

export(type, isDownload, fileName)

Export

type: the type to be exported, optional values: png, svg, json, pdf (v0.2.1+), smm (essentially also json)

isDownload: whether to directly trigger download, Boolean value, default is false

fileName: (v0.1.6+) the name of the exported file, default is 思维导图 (mind map).

toPos(x, y)

v0.1.5+

Convert the coordinates of the browser's visible window to coordinates relative to the canvas.

render instance

The render instance is responsible for the entire rendering process and can be accessed through mindMap.renderer.

Properties

activeNodeList

Gets the current list of active nodes

root

Gets the root node of the node tree

Methods

clearActive()

Clears the currently active node

clearAllActive()

Clears all currently active nodes and triggers the node_active event

startTextEdit()

(v0.1.6+) If there is a text editing requirement, this method can be called to disable the enter key and delete key related shortcuts to prevent conflicts

endTextEdit()

(v0.1.6+) End text editing, restore enter key and delete key related shortcuts

addActiveNode(node)

Add a node to the active list

removeActiveNode(node)

Remove a node from the active list

findActiveNodeIndex(node)

Search for the index of a node in the active list

getNodeIndex(node)

Get the position index of a node among its siblings

removeOneNode(node)

Delete a specific node

copyNode()

Copy a node, the active node is the node to be operated on, if there are multiple active nodes, only the first node will be operated on

setNodeDataRender(node, data)

Set node data, i.e. the data in the data field, and will determine whether the node needs to be re-rendered based on whether the node size has changed, data is an object, e.g. {text: 'I am new text'}

moveNodeTo(node, toNode)

v0.1.5+

Move a node as a child of another node

insertBefore(node, exist)

v0.1.5+

Move a node in front of another node

insertAfter(node, exist)

v0.1.5+

Move a node behind another node

moveNodeToCenter(node)

v0.2.17+

Move a node to the center of the canvas.

Currently, if there is zoom, returning to the center will reset the zoom.

keyCommand instance

The keyCommand instance is responsible for adding and triggering shortcuts. It includes some built-in shortcuts and can also be added manually. The mindMap.keyCommand instance can be obtained through this.

Methods

addShortcut(key, fn)

Add a shortcut

key: Shortcut key, key values can be viewed at https://github.com/wanglin2/mind-map/blob/main/simple-mind-map/src/utils/keyMap.js Example:

// Single key
mindMap.keyCommand.addShortcut("Enter", () => {});
// Or
mindMap.keyCommand.addShortcut("Del|Backspace", () => {});
// Combination key
mindMap.keyCommand.addShortcut("Control+Enter", () => {});

fn: Method to be executed

removeShortcut(key, fn)

Remove a shortcut command, if fn is not specified, all callback methods for the shortcut will be removed

getShortcutFn(key)

v0.2.2+. Get the processing function for the specified shortcut

pause()

v0.2.2+. Pause all shortcut responses

recovery()

v0.2.2+. Restore shortcut responses

save()

v0.2.3+. Save the current registered shortcut data, then clear the shortcut data

restore()

v0.2.3+. Restore saved shortcut data, then clear the cache data

command instance

The command instance is responsible for adding and executing commands. It includes many built-in commands and can also be added manually. A command refers to an operation that needs to add a copy to the history stack data. The mindMap.command instance can be obtained through this."

Methods

add(name, fn)

Add a command.

name: Command name

fn: Method to be executed by the command

remove(name, fn)

Remove a command.

name: Name of the command to be removed

fn: Method to be removed, if not provided all methods for the command will be removed

getCopyData()

Get a copy of the rendering tree data

clearHistory()

Clear the history stack data

view实例

The view instance is responsible for view operations, and can be obtained through mindMap.view

Methods

translateX(step)

Translate in the x direction, step: number of pixels to translate

translateY(step)

Translate in the y direction, step: number of pixels to translate

translateXTo(x)

v0.2.11+

Translate the x direction to a specific position

translateYTo(y)

v0.2.11+

Translate the y direction to a specific position

reset()

Revert to the default transformation

narrow()

Zoom out

enlarge()

Zoom in

getTransformData()

v0.1.1+

Get the current transform data, can be used for display

setTransformData(data)

v0.1.1+

Dynamically set transform data, transform data can be obtained through the getTransformData method"

setScale(scale)

v0.2.17+

Setting Zoom

MiniMap instance

v0.2.11+

Used to help quickly develop a small map feature, the small map consists of two parts, one is the current canvas content, and the other is the viewport frame. When zoomed, moved, or there are too many elements, the canvas may only display part of the mind map content. The viewport frame can be used to view the current viewport location, and can be quickly positioned by dragging on the small map.

The mindMap.miniMap instance can be obtained through this.

Methods

getMiniMap()

Obtain small map related data, this function is generally not used directly, the function returns:

{
      svg, // Element, the overall svg element of the mind map graphics, including: svg (canvas container), g (actual mind map group)
      svgHTML, // String, svg string, i.e. html string, can be directly rendered to the small map container you prepared
      rect: // Object, position, size, etc. of mind map graphics before zoom
      origWidth, // Number, canvas width
      origHeight, // Number, canvas height
      scaleX, // Number, horizontal zoom value of mind map graphics
      scaleY, // Number, vertical zoom value of mind map graphics
}

calculationMiniMap(boxWidth, boxHeight)

"Calculate the rendering data for the small map, this function will call the getMiniMap() method, so using this function is sufficient.

boxWidth: the width of the small map container

boxHeight: the height of the small map container

Function return content:

{
      svgHTML, // small map html
      viewBoxStyle, // view box position information
      miniMapBoxScale, // view box zoom value
      miniMapBoxLeft, // view box left value
      miniMapBoxTop, // view box top value
}

Small map idea:

1.Prepare a container element container, position is not static

2.In container, create a small map container element miniMapContainer, absolute positioning

3.In container, create a view box element viewBoxContainer, absolute positioning, set border style, transition property (optional)

4.Listen for data_change and view_data_change events, and in this event call the calculationMiniMap method to get calculation data, then render svgHTML to the miniMapContainer element and set its style:

:style="{
    transform: `scale(${svgBoxScale})`,
    left: svgBoxLeft + 'px',
    top: svgBoxTop + 'px',
}"

5.Set the viewBoxStyle object as the style of the viewBoxContainer element

At this point, when the mind map on the canvas changes, the small map will also be updated in real time, and the view box element will reflect the position of the viewport on the mind map graph in real time

6.Listen for the mousedown, mousemove, and mouseup events of the container element, and call the three methods that will be introduced below to achieve the effect of the mind map on the canvas being dragged with the mouse

onMousedown(e)

Small map mouse down event executes this function

e: event object

onMousemove(e, sensitivityNum = 5)

This function is executed on the small map mouse move event.

e: event object

sensitivityNum: drag sensitivity, the higher the sensitivity, the greater the actual canvas dragging distance on the small map when dragging the same distance on the small map

onMouseup()

This function is executed on the small map mouse release event.

doExport instance

The doExport instance is responsible for exporting and can be obtained through mindMap.doExport.

Methods

png()

Exports as png, an async method that returns image data, data:url data which can be downloaded or displayed.

svg()

Exports as svg, an async method that returns svg data, data:url data which can be downloaded or displayed.

getSvgData()

Gets svg data, an async method that returns an object:

{
  node; // svg object
  str; // svg string
}

select instance

The select instance is responsible for the mouse right-click multi-selection of nodes, and can be obtained through mindMap.select

Method

toPos(x, y)

Convert mouse position to position relative to the container el

batchExecution instance

The batchExecution is used to batch asynchronously perform some operations, and if a certain operation is called multiple times at the same time, it will only be executed once in the next event loop. Can be obtained through mindMap.batchExecution

Method

push(name, fn)

Add task.

name: task name

fn: task

node instance

Each node will instantiate a node instance

Property

nodeData

The real data corresponding to this node

uid

The unique identifier of this node

isRoot

Whether it is the root node

layerIndex

Node level

width

Width of the node

height

Height of the node

left

left position of the node

top

top position of the node

parent

Parent node of the node

children

List of child nodes of the node

group

Node is the content container, svg object

isDrag

v0.1.5+

Whether the node is currently being dragged

Methods

addChildren(node)

Add a child node

getSize()

Calculate the width and height of the node, return a boolean indicating whether the width and height have changed

renderNode()

Render the node to the canvas, will remove the old content node and create a new one

render()

Recursively render this node and all its child nodes. The first call will create the node content, subsequent calls will only update the node position. To re-render the content, set the initRender attribute to true first.

remove()

Recursively delete this node and all its child nodes

renderLine()

Re-render the line from this node to its child nodes

removeLine()

Remove the line from this node to its child nodes

renderExpandBtn()

Render the content of the expand/collapse button

removeExpandBtn()

Remove the expand/collapse button

getStyle(prop, root, isActive)

Get the final style value applied to this node

prop: the style property to get

root: whether it is the root node, default false

isActive: whether the value being fetched is the active state style value, default false

setStyle(prop, value, isActive)

Modify a style of the node, a shortcut method for the SET_NODE_STYLE command

getData(key)

Get the specified value in the data object of the node's real data nodeData, if key is not passed, return the data object

setData(data)

Set the value of the specified key in the data object of the node's real data nodeData, SET_NODE_DATA command's shortcut method

setText(text)

Setting the node text, a shortcut for the SET_NODE_TEXT command

setImage(imgData)

Setting the node image, a shortcut for the SET_NODE_IMAGE command

setIcon(icons)

Setting the node icon, a shortcut for the SET_NODE_ICON command

Setting the node hyperlink, a shortcut for the SET_NODE_HYPERLINK command

setNote(note)

Setting the node note, a shortcut for the SET_NODE_NOTE command

setTag(tag)

Setting the node tag, a shortcut for the SET_NODE_TAG command"

hide()

v0.1.5+

Hide node and its sub-nodes

show()

v0.1.5+

Show node and its sub-nodes

isParent(node)

v0.1.5+

Check if the current node is an ancestor of a certain node

isBrother(node)

v0.1.5+

Check if the current node is a sibling of a certain node

checkHasGeneralization()

v0.2.0+

Check if there is a summary

hideGeneralization()

v0.2.0+

Hide summary node

showGeneralization()

v0.2.0+

Show summary node

updateGeneralization()

v0.2.0+

Update summary node

hasCustomPosition()

v0.2.0+

Check if the node has custom data

ancestorHasCustomPosition()

v0.2.0+

Check if there is an ancestor node with custom position

getShape()

v0.2.4+

Get node shape

setShape(shape)

v0.2.4+

Set node shape, a shortcut method for the SET_NODE_SHAPE command

getSelfStyle(prop)

v0.2.5+

Get the node's own custom style

getParentSelfStyle(prop)

v0.2.5+

Get the custom style of the nearest ancestor node with its own custom style

getSelfInhertStyle(prop)

v0.2.5+

Get the node's own inheritable custom style

Built-in Utility Methods

Reference:

import {walk, ...} from 'simple-mind-map/src/utils'

Methods

walk(root, parent, beforeCallback, afterCallback, isRoot, layerIndex = 0, index = 0)

Depth-first traversal of a tree

root: the root node of the tree to be traversed

parent: parent node

beforeCallback: preorder traversal callback function, callback parameters are: root, parent, isRoot, layerIndex, index

afterCallback: postorder traversal callback function, callback parameters are: root, parent, isRoot, layerIndex, index

isRoot: whether it is the root node

layerIndex: node level

index: index of the node among its siblings

Example:

walk(tree, null, () => {}, () => {}, false, 0, 0);

bfsWalk(root, callback)

Breadth-first traversal of a tree

resizeImgSize(width, height, maxWidth, maxHeight)

Resize image size

width: original width of the image

height: original height of the image

maxWidth: the width to resize to

maxHeight: the height to resize to

maxWidth and maxHeight can both be passed, or only one of them can be passed

resizeImg(imgUrl, maxWidth, maxHeight)

Resize image, internally loads the image first, then calls the resizeImgSize method, and returns a promise

simpleDeepClone(data)

Extremely simple deep copy method, can only be used for objects that are all basic data, otherwise it will throw an error

copyRenderTree(tree, root)

Copy render tree data, example:

copyRenderTree({}, this.mindMap.renderer.renderTree);

copyNodeTree(tree, root)

Copy node tree data, mainly eliminating the reference node instance _node and copying the data of the data object, example:

copyNodeTree({}, node);

imgToDataUrl(src)

Convert image to dataURL

downloadFile(file, fileName)

Download file

throttle(fn, time = 300, ctx)

Throttle function

asyncRun(taskList, callback = () => {})

Run tasks in task list asynchronously, tasks are run synchronously without order

Special Note

This project is rough and has not been thoroughly tested, its features are not yet fully developed, and there are some performance issues. It is only for learning and reference purposes and should not be used in actual projects.

The built-in themes and icons in the project come from:

Baidu Mind Map

Zhixi Mind Map

License

MIT

Changelog

0.2.21

New: Support node horizontal line style.

0.2.20

fixWhen the distance from the canvas to the upper left corner of the window is not 0, the node dragging will have an offset problem.

0.2.19

fixWhen the node is not activated, pressing any key will trigger the problem of automatic focus.

0.2.18

optimizationKeyboard navigation algorithm for finding focus, supporting simple algorithm, region algorithm and shadow algorithm.

0.2.17

NewKeyboard navigation, that is, switch the active nodes through the direction keys; The node text content can be edited directly in the outline.

0.2.16

optimizationMini map; drag performance.

0.2.15

optimizationLocal file editing.

NewDouble-click the image in the node to preview the large image.

0.2.14

optimizationAutomatically expand when inserting child nodes.

fixThe error occurred when the mini map was closed.

0.2.13

fixThe child node is missing when collapsing state replication.

0.2.11

fixFix the problem that is lost when the child node collapses state replication.

NewSupport mini map.

0.2.10

optimizationFocus immediately when you manually create a node.

fixConnection style depth update problem.

NewLogical structure diagram and mind map add linear connection style and direct connection style.

0.2.9

NewSupport the creation, opening and saving of local files on the computer.

0.2.8

fixXmind8 version file import failed.

NewExpanding to the specified level is supported.

0.2.7

fixThe root node adds multiple nodes to burst the stack.

NewSupport import .xmind file.

0.2.6

NewThe title tag is added when exporting svg.

0.2.5

fixBugs caused by node expansion and collapse.

NewNode supports custom line styles.

0.2.4

NewNodes support multiple shapes.

0.2.3

fixShortcut key conflicts when editing node text; Right-click menu shortcut prompt error; Right-click menu shortcut prompt.

0.2.2

fixThe input string '/' conflicts with the shortcut key '/'.

0.2.1

NewSupport export as pdf.

0.2.0

NewClassic4 themeSupport adding summary; Support free drag; Move Node Up, Move Node Down, Copy Node, Cut Node, Paste Node, One-click Organize Cloth Shortcut; Library packaging; Ctrl+left click to select multiple.

0.1.18

fixThe problem that the node icon cannot be deleted; The tool button is grayed out and can still be clicked.

0.1.17

NewAdd read-only mode.

0.1.16

NewNode notes support markdown and rich text.

fixCan't select text; Node annotations cannot hide problems after node activation; When editing text such as hyperlinks, notes, labels, etc., the return key and return key conflict with the shortcut key of mind map.

0.1.15

NewThe status data supports saving the active status and view status (drag position, zoom value)Support node drag.

0.1.14

fixThere are problems with setting topics when activating nodes.

0.1.13

NewShortcut key function; Support export as json。

optimizationSome details.

0.1.12

NewLocal storageRight-click menu function, etc.

0.1.0

Complete basic functions.

Description
SimpleMindMap(思绪思维导图):一个强大的Web思维导图。A powerful web mind map.
Readme MIT 109 MiB
Languages
JavaScript 71.9%
Vue 27%
HTML 0.5%
CSS 0.4%
Less 0.2%