{"version":3,"file":"jsmind.js","sources":["../src/jsmind.common.js","../src/jsmind.dom.js","../src/jsmind.util.js","../src/jsmind.option.js","../src/jsmind.node.js","../src/jsmind.mind.js","../src/jsmind.format.js","../src/jsmind.data_provider.js","../src/jsmind.layout_provider.js","../src/jsmind.graph.js","../src/jsmind.view_provider.js","../src/jsmind.shortcut_provider.js","../src/jsmind.plugin.js","../src/jsmind.js"],"sourcesContent":["/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nexport const __version__ = '0.8.6';\nexport const __author__ = 'hizzgdev@163.com';\n\nif (typeof String.prototype.startsWith != 'function') {\n String.prototype.startsWith = function (p) {\n return this.slice(0, p.length) === p;\n };\n}\n\nexport const Direction = {\n left: -1,\n center: 0,\n right: 1,\n of: function (dir) {\n if (!dir || dir === -1 || dir === 0 || dir === 1) {\n return dir;\n }\n if (dir === '-1' || dir === '0' || dir === '1') {\n return parseInt(dir);\n }\n if (dir.toLowerCase() === 'left') {\n return this.left;\n }\n if (dir.toLowerCase() === 'right') {\n return this.right;\n }\n if (dir.toLowerCase() === 'center') {\n return this.center;\n }\n },\n};\nexport const EventType = { show: 1, resize: 2, edit: 3, select: 4 };\nexport const Key = { meta: 1 << 13, ctrl: 1 << 12, alt: 1 << 11, shift: 1 << 10 };\nexport const LogLevel = { debug: 1, info: 2, warn: 3, error: 4, disable: 9 };\n\n// an noop function define\nvar _noop = function () {};\nexport let logger =\n typeof console === 'undefined'\n ? {\n level: _noop,\n log: _noop,\n debug: _noop,\n info: _noop,\n warn: _noop,\n error: _noop,\n }\n : {\n level: setup_logger_level,\n log: console.log,\n debug: console.debug,\n info: console.info,\n warn: console.warn,\n error: console.error,\n };\n\nfunction setup_logger_level(log_level) {\n if (log_level > LogLevel.debug) {\n logger.debug = _noop;\n } else {\n logger.debug = console.debug;\n }\n if (log_level > LogLevel.info) {\n logger.info = _noop;\n } else {\n logger.info = console.info;\n }\n if (log_level > LogLevel.warn) {\n logger.warn = _noop;\n } else {\n logger.warn = console.warn;\n }\n if (log_level > LogLevel.error) {\n logger.error = _noop;\n } else {\n logger.error = console.error;\n }\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nclass Dom {\n constructor(w) {\n this.w = w;\n this.d = w.document;\n this.g = function (id) {\n return this.d.getElementById(id);\n };\n this.c = function (tag) {\n return this.d.createElement(tag);\n };\n this.t = function (n, t) {\n if (n.hasChildNodes()) {\n n.firstChild.nodeValue = t;\n } else {\n n.appendChild(this.d.createTextNode(t));\n }\n };\n\n this.h = function (n, t) {\n if (t instanceof HTMLElement) {\n n.innerHTML = '';\n n.appendChild(t);\n } else {\n n.innerHTML = t;\n }\n };\n // detect isElement\n this.i = function (el) {\n return (\n !!el &&\n typeof el === 'object' &&\n el.nodeType === 1 &&\n typeof el.style === 'object' &&\n typeof el.ownerDocument === 'object'\n );\n };\n\n //target,eventType,handler\n this.on = function (t, e, h) {\n if (!!t.addEventListener) {\n t.addEventListener(e, h, false);\n } else {\n t.attachEvent('on' + e, h);\n }\n };\n }\n}\n\nexport const $ = new Dom(window);\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { $ } from './jsmind.dom.js';\n\nexport const util = {\n file: {\n read: function (file_data, fn_callback) {\n var reader = new FileReader();\n reader.onload = function () {\n if (typeof fn_callback === 'function') {\n fn_callback(this.result, file_data.name);\n }\n };\n reader.readAsText(file_data);\n },\n\n save: function (file_data, type, name) {\n var blob;\n if (typeof $.w.Blob === 'function') {\n blob = new Blob([file_data], { type: type });\n } else {\n var BlobBuilder =\n $.w.BlobBuilder ||\n $.w.MozBlobBuilder ||\n $.w.WebKitBlobBuilder ||\n $.w.MSBlobBuilder;\n var bb = new BlobBuilder();\n bb.append(file_data);\n blob = bb.getBlob(type);\n }\n if (navigator.msSaveBlob) {\n navigator.msSaveBlob(blob, name);\n } else {\n var URL = $.w.URL || $.w.webkitURL;\n var blob_url = URL.createObjectURL(blob);\n var anchor = $.c('a');\n if ('download' in anchor) {\n anchor.style.visibility = 'hidden';\n anchor.href = blob_url;\n anchor.download = name;\n $.d.body.appendChild(anchor);\n var evt = $.d.createEvent('MouseEvents');\n evt.initEvent('click', true, true);\n anchor.dispatchEvent(evt);\n $.d.body.removeChild(anchor);\n } else {\n location.href = blob_url;\n }\n }\n },\n },\n\n json: {\n json2string: function (json) {\n return JSON.stringify(json);\n },\n string2json: function (json_str) {\n return JSON.parse(json_str);\n },\n merge: function (b, a) {\n for (var o in a) {\n if (o in b) {\n if (\n typeof b[o] === 'object' &&\n Object.prototype.toString.call(b[o]).toLowerCase() == '[object object]' &&\n !b[o].length\n ) {\n util.json.merge(b[o], a[o]);\n } else {\n b[o] = a[o];\n }\n } else {\n b[o] = a[o];\n }\n }\n return b;\n },\n },\n\n uuid: {\n newid: function () {\n return (\n new Date().getTime().toString(16) + Math.random().toString(16).substring(2)\n ).substring(2, 18);\n },\n },\n\n text: {\n is_empty: function (s) {\n if (!s) {\n return true;\n }\n return s.replace(/\\s*/, '').length == 0;\n },\n },\n};\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { util } from './jsmind.util.js';\n\nconst default_options = {\n container: '', // id of the container\n editable: false, // you can change it in your options\n theme: null,\n mode: 'full', // full or side\n support_html: true,\n log_level: 'info',\n\n view: {\n engine: 'canvas',\n enable_device_pixel_ratio: false,\n hmargin: 100,\n vmargin: 50,\n line_width: 2,\n line_color: '#555',\n line_style: 'curved', // [straight | curved]\n draggable: false, // drag the mind map with your mouse, when it's larger that the container\n hide_scrollbars_when_draggable: false, // hide container scrollbars, when mind map is larger than container and draggable option is true.\n node_overflow: 'hidden', // [hidden | wrap]\n zoom: {\n min: 0.5,\n max: 2.1,\n step: 0.1,\n },\n custom_node_render: null,\n expander_style: 'char', // [char | number]\n },\n layout: {\n hspace: 30,\n vspace: 20,\n pspace: 13,\n cousin_space: 0,\n },\n default_event_handle: {\n enable_mousedown_handle: true,\n enable_click_handle: true,\n enable_dblclick_handle: true,\n enable_mousewheel_handle: true,\n },\n shortcut: {\n enable: true,\n handles: {},\n mapping: {\n addchild: [45, 4096 + 13], // Insert, Ctrl+Enter\n addbrother: 13, // Enter\n editnode: 113, // F2\n delnode: 46, // Delete\n toggle: 32, // Space\n left: 37, // Left\n up: 38, // Up\n right: 39, // Right\n down: 40, // Down\n },\n },\n plugin: {},\n};\n\nexport function merge_option(options) {\n var opts = {};\n util.json.merge(opts, default_options);\n util.json.merge(opts, options);\n\n if (!opts.container) {\n throw new Error('the options.container should not be null or empty.');\n }\n return opts;\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { logger } from './jsmind.common.js';\nexport class Node {\n constructor(sId, iIndex, sTopic, oData, bIsRoot, oParent, eDirection, bExpanded) {\n if (!sId) {\n logger.error('invalid node id');\n return;\n }\n if (typeof iIndex != 'number') {\n logger.error('invalid node index');\n return;\n }\n if (typeof bExpanded === 'undefined') {\n bExpanded = true;\n }\n this.id = sId;\n this.index = iIndex;\n this.topic = sTopic;\n this.data = oData || {};\n this.isroot = bIsRoot;\n this.parent = oParent;\n this.direction = eDirection;\n this.expanded = !!bExpanded;\n this.children = [];\n this._data = {};\n }\n\n get_location() {\n var vd = this._data.view;\n return {\n x: vd.abs_x,\n y: vd.abs_y,\n };\n }\n get_size() {\n var vd = this._data.view;\n return {\n w: vd.width,\n h: vd.height,\n };\n }\n\n static compare(node1, node2) {\n // '-1' is always the latest\n var r = 0;\n var i1 = node1.index;\n var i2 = node2.index;\n if (i1 >= 0 && i2 >= 0) {\n r = i1 - i2;\n } else if (i1 == -1 && i2 == -1) {\n r = 0;\n } else if (i1 == -1) {\n r = 1;\n } else if (i2 == -1) {\n r = -1;\n } else {\n r = 0;\n }\n return r;\n }\n static inherited(parent_node, node) {\n if (!!parent_node && !!node) {\n if (parent_node.id === node.id) {\n return true;\n }\n if (parent_node.isroot) {\n return true;\n }\n var pid = parent_node.id;\n var p = node;\n while (!p.isroot) {\n p = p.parent;\n if (p.id === pid) {\n return true;\n }\n }\n }\n return false;\n }\n static is_node(n) {\n return !!n && n instanceof Node;\n }\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { Node } from './jsmind.node.js';\nimport { logger, Direction } from './jsmind.common.js';\n\nexport class Mind {\n constructor() {\n this.name = null;\n this.author = null;\n this.version = null;\n this.root = null;\n this.selected = null;\n this.nodes = {};\n }\n get_node(node_id) {\n if (node_id in this.nodes) {\n return this.nodes[node_id];\n } else {\n logger.warn('the node[id=' + node_id + '] can not be found');\n return null;\n }\n }\n set_root(node_id, topic, data) {\n if (this.root == null) {\n this.root = new Node(node_id, 0, topic, data, true);\n this._put_node(this.root);\n return this.root;\n } else {\n logger.error('root node is already exist');\n return null;\n }\n }\n add_node(parent_node, node_id, topic, data, direction, expanded, idx) {\n if (!Node.is_node(parent_node)) {\n logger.error('the parent_node ' + parent_node + ' is not a node.');\n return null;\n }\n var node_index = idx || -1;\n var node = new Node(\n node_id,\n node_index,\n topic,\n data,\n false,\n parent_node,\n parent_node.direction,\n expanded\n );\n if (parent_node.isroot) {\n node.direction = direction || Direction.right;\n }\n if (this._put_node(node)) {\n parent_node.children.push(node);\n this._update_index(parent_node);\n } else {\n logger.error(\"fail, the node id '\" + node.id + \"' has been already exist.\");\n node = null;\n }\n return node;\n }\n insert_node_before(node_before, node_id, topic, data, direction) {\n if (!Node.is_node(node_before)) {\n logger.error('the node_before ' + node_before + ' is not a node.');\n return null;\n }\n var node_index = node_before.index - 0.5;\n return this.add_node(node_before.parent, node_id, topic, data, direction, true, node_index);\n }\n get_node_before(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return null;\n } else {\n return this.get_node_before(the_node);\n }\n }\n if (node.isroot) {\n return null;\n }\n var idx = node.index - 2;\n if (idx >= 0) {\n return node.parent.children[idx];\n } else {\n return null;\n }\n }\n insert_node_after(node_after, node_id, topic, data, direction) {\n if (!Node.is_node(node_after)) {\n logger.error('the node_after ' + node_after + ' is not a node.');\n return null;\n }\n var node_index = node_after.index + 0.5;\n return this.add_node(node_after.parent, node_id, topic, data, direction, true, node_index);\n }\n get_node_after(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return null;\n } else {\n return this.get_node_after(the_node);\n }\n }\n if (node.isroot) {\n return null;\n }\n var idx = node.index;\n var brothers = node.parent.children;\n if (brothers.length > idx) {\n return node.parent.children[idx];\n } else {\n return null;\n }\n }\n move_node(node, before_id, parent_id, direction) {\n if (!Node.is_node(node)) {\n logger.error('the parameter node ' + node + ' is not a node.');\n return null;\n }\n if (!parent_id) {\n parent_id = node.parent.id;\n }\n return this._move_node(node, before_id, parent_id, direction);\n }\n _flow_node_direction(node, direction) {\n if (typeof direction === 'undefined') {\n direction = node.direction;\n } else {\n node.direction = direction;\n }\n var len = node.children.length;\n while (len--) {\n this._flow_node_direction(node.children[len], direction);\n }\n }\n _move_node_internal(node, before_id) {\n if (!!node && !!before_id) {\n if (before_id == '_last_') {\n node.index = -1;\n this._update_index(node.parent);\n } else if (before_id == '_first_') {\n node.index = 0;\n this._update_index(node.parent);\n } else {\n var node_before = !!before_id ? this.get_node(before_id) : null;\n if (\n node_before != null &&\n node_before.parent != null &&\n node_before.parent.id == node.parent.id\n ) {\n node.index = node_before.index - 0.5;\n this._update_index(node.parent);\n }\n }\n }\n return node;\n }\n _move_node(node, before_id, parent_id, direction) {\n if (!!node && !!parent_id) {\n var parent_node = this.get_node(parent_id);\n if (Node.inherited(node, parent_node)) {\n logger.error('can not move a node to its children');\n return null;\n }\n if (node.parent.id != parent_id) {\n // remove from parent's children\n var sibling = node.parent.children;\n var si = sibling.length;\n while (si--) {\n if (sibling[si].id == node.id) {\n sibling.splice(si, 1);\n break;\n }\n }\n let origin_parent = node.parent;\n node.parent = parent_node;\n parent_node.children.push(node);\n this._update_index(origin_parent);\n }\n\n if (node.parent.isroot) {\n if (direction == Direction.left) {\n node.direction = direction;\n } else {\n node.direction = Direction.right;\n }\n } else {\n node.direction = node.parent.direction;\n }\n this._move_node_internal(node, before_id);\n this._flow_node_direction(node);\n }\n return node;\n }\n remove_node(node) {\n if (!Node.is_node(node)) {\n logger.error('the parameter node ' + node + ' is not a node.');\n return false;\n }\n if (node.isroot) {\n logger.error('fail, can not remove root node');\n return false;\n }\n if (this.selected != null && this.selected.id == node.id) {\n this.selected = null;\n }\n // clean all subordinate nodes\n var children = node.children;\n var ci = children.length;\n while (ci--) {\n this.remove_node(children[ci]);\n }\n // clean all children\n children.length = 0;\n var node_parent = node.parent;\n // remove from parent's children\n var sibling = node_parent.children;\n var si = sibling.length;\n while (si--) {\n if (sibling[si].id == node.id) {\n sibling.splice(si, 1);\n break;\n }\n }\n // remove from global nodes\n delete this.nodes[node.id];\n // clean all properties\n for (var k in node) {\n delete node[k];\n }\n // remove it's self\n node = null;\n this._update_index(node_parent);\n return true;\n }\n _put_node(node) {\n if (node.id in this.nodes) {\n logger.warn(\"the node_id '\" + node.id + \"' has been already exist.\");\n return false;\n } else {\n this.nodes[node.id] = node;\n return true;\n }\n }\n _update_index(node) {\n if (node instanceof Node) {\n node.children.sort(Node.compare);\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].index = i + 1;\n }\n }\n }\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { __author__, __version__, logger, Direction } from './jsmind.common.js';\nimport { Mind } from './jsmind.mind.js';\nimport { Node } from './jsmind.node.js';\nimport { util } from './jsmind.util.js';\n\nconst DEFAULT_META = { name: 'jsMind', author: __author__, version: __version__ };\n\nexport const format = {\n node_tree: {\n example: {\n meta: DEFAULT_META,\n format: 'node_tree',\n data: { id: 'root', topic: 'jsMind node_tree example' },\n },\n get_mind: function (source) {\n var df = format.node_tree;\n var mind = new Mind();\n mind.name = source.meta.name;\n mind.author = source.meta.author;\n mind.version = source.meta.version;\n df._parse(mind, source.data);\n return mind;\n },\n get_data: function (mind) {\n var df = format.node_tree;\n var json = {};\n json.meta = {\n name: mind.name,\n author: mind.author,\n version: mind.version,\n };\n json.format = 'node_tree';\n json.data = df._build_node(mind.root);\n return json;\n },\n\n _parse: function (mind, node_root) {\n var df = format.node_tree;\n var data = df._extract_data(node_root);\n mind.set_root(node_root.id, node_root.topic, data);\n if ('children' in node_root) {\n var children = node_root.children;\n for (var i = 0; i < children.length; i++) {\n df._extract_subnode(mind, mind.root, children[i]);\n }\n }\n },\n\n _extract_data: function (node_json) {\n var data = {};\n for (var k in node_json) {\n if (\n k == 'id' ||\n k == 'topic' ||\n k == 'children' ||\n k == 'direction' ||\n k == 'expanded'\n ) {\n continue;\n }\n data[k] = node_json[k];\n }\n return data;\n },\n\n _extract_subnode: function (mind, node_parent, node_json) {\n var df = format.node_tree;\n var data = df._extract_data(node_json);\n var d = null;\n if (node_parent.isroot) {\n d = node_json.direction == 'left' ? Direction.left : Direction.right;\n }\n var node = mind.add_node(\n node_parent,\n node_json.id,\n node_json.topic,\n data,\n d,\n node_json.expanded\n );\n if (!!node_json['children']) {\n var children = node_json.children;\n for (var i = 0; i < children.length; i++) {\n df._extract_subnode(mind, node, children[i]);\n }\n }\n },\n\n _build_node: function (node) {\n var df = format.node_tree;\n if (!(node instanceof Node)) {\n return;\n }\n var o = {\n id: node.id,\n topic: node.topic,\n expanded: node.expanded,\n };\n if (!!node.parent && node.parent.isroot) {\n o.direction = node.direction == Direction.left ? 'left' : 'right';\n }\n if (node.data != null) {\n var node_data = node.data;\n for (var k in node_data) {\n o[k] = node_data[k];\n }\n }\n var children = node.children;\n if (children.length > 0) {\n o.children = [];\n for (var i = 0; i < children.length; i++) {\n o.children.push(df._build_node(children[i]));\n }\n }\n return o;\n },\n },\n\n node_array: {\n example: {\n meta: DEFAULT_META,\n format: 'node_array',\n data: [{ id: 'root', topic: 'jsMind node_array example', isroot: true }],\n },\n\n get_mind: function (source) {\n var df = format.node_array;\n var mind = new Mind();\n mind.name = source.meta.name;\n mind.author = source.meta.author;\n mind.version = source.meta.version;\n df._parse(mind, source.data);\n return mind;\n },\n\n get_data: function (mind) {\n var df = format.node_array;\n var json = {};\n json.meta = {\n name: mind.name,\n author: mind.author,\n version: mind.version,\n };\n json.format = 'node_array';\n json.data = [];\n df._array(mind, json.data);\n return json;\n },\n\n _parse: function (mind, node_array) {\n var df = format.node_array;\n var nodes = node_array.slice(0);\n // reverse array for improving looping performance\n nodes.reverse();\n var root_node = df._extract_root(mind, nodes);\n if (!!root_node) {\n df._extract_subnode(mind, root_node, nodes);\n } else {\n logger.error('root node can not be found');\n }\n },\n\n _extract_root: function (mind, node_array) {\n var df = format.node_array;\n var i = node_array.length;\n while (i--) {\n if ('isroot' in node_array[i] && node_array[i].isroot) {\n var root_json = node_array[i];\n var data = df._extract_data(root_json);\n var node = mind.set_root(root_json.id, root_json.topic, data);\n node_array.splice(i, 1);\n return node;\n }\n }\n return null;\n },\n\n _extract_subnode: function (mind, parent_node, node_array) {\n var df = format.node_array;\n var i = node_array.length;\n var node_json = null;\n var data = null;\n var extract_count = 0;\n while (i--) {\n node_json = node_array[i];\n if (node_json.parentid == parent_node.id) {\n data = df._extract_data(node_json);\n var d = null;\n var node_direction = node_json.direction;\n if (!!node_direction) {\n d = node_direction == 'left' ? Direction.left : Direction.right;\n }\n var node = mind.add_node(\n parent_node,\n node_json.id,\n node_json.topic,\n data,\n d,\n node_json.expanded\n );\n node_array.splice(i, 1);\n extract_count++;\n var sub_extract_count = df._extract_subnode(mind, node, node_array);\n if (sub_extract_count > 0) {\n // reset loop index after extract subordinate node\n i = node_array.length;\n extract_count += sub_extract_count;\n }\n }\n }\n return extract_count;\n },\n\n _extract_data: function (node_json) {\n var data = {};\n for (var k in node_json) {\n if (\n k == 'id' ||\n k == 'topic' ||\n k == 'parentid' ||\n k == 'isroot' ||\n k == 'direction' ||\n k == 'expanded'\n ) {\n continue;\n }\n data[k] = node_json[k];\n }\n return data;\n },\n\n _array: function (mind, node_array) {\n var df = format.node_array;\n df._array_node(mind.root, node_array);\n },\n\n _array_node: function (node, node_array) {\n var df = format.node_array;\n if (!(node instanceof Node)) {\n return;\n }\n var o = {\n id: node.id,\n topic: node.topic,\n expanded: node.expanded,\n };\n if (!!node.parent) {\n o.parentid = node.parent.id;\n }\n if (node.isroot) {\n o.isroot = true;\n }\n if (!!node.parent && node.parent.isroot) {\n o.direction = node.direction == Direction.left ? 'left' : 'right';\n }\n if (node.data != null) {\n var node_data = node.data;\n for (var k in node_data) {\n o[k] = node_data[k];\n }\n }\n node_array.push(o);\n var ci = node.children.length;\n for (var i = 0; i < ci; i++) {\n df._array_node(node.children[i], node_array);\n }\n },\n },\n\n freemind: {\n example: {\n meta: DEFAULT_META,\n format: 'freemind',\n data: '',\n },\n get_mind: function (source) {\n var df = format.freemind;\n var mind = new Mind();\n mind.name = source.meta.name;\n mind.author = source.meta.author;\n mind.version = source.meta.version;\n var xml = source.data;\n var xml_doc = df._parse_xml(xml);\n var xml_root = df._find_root(xml_doc);\n df._load_node(mind, null, xml_root);\n return mind;\n },\n\n get_data: function (mind) {\n var df = format.freemind;\n var json = {};\n json.meta = {\n name: mind.name,\n author: mind.author,\n version: mind.version,\n };\n json.format = 'freemind';\n var xml_lines = [];\n xml_lines.push('');\n json.data = xml_lines.join('');\n return json;\n },\n\n _parse_xml: function (xml) {\n var xml_doc = null;\n if (window.DOMParser) {\n var parser = new DOMParser();\n xml_doc = parser.parseFromString(xml, 'text/xml');\n } else {\n // Internet Explorer\n xml_doc = new ActiveXObject('Microsoft.XMLDOM');\n xml_doc.async = false;\n xml_doc.loadXML(xml);\n }\n return xml_doc;\n },\n\n _find_root: function (xml_doc) {\n var nodes = xml_doc.childNodes;\n var node = null;\n var root = null;\n var n = null;\n for (var i = 0; i < nodes.length; i++) {\n n = nodes[i];\n if (n.nodeType == 1 && n.tagName == 'map') {\n node = n;\n break;\n }\n }\n if (!!node) {\n var ns = node.childNodes;\n node = null;\n for (var i = 0; i < ns.length; i++) {\n n = ns[i];\n if (n.nodeType == 1 && n.tagName == 'node') {\n node = n;\n break;\n }\n }\n }\n return node;\n },\n\n _load_node: function (mind, parent_node, xml_node) {\n var df = format.freemind;\n var node_id = xml_node.getAttribute('ID');\n var node_topic = xml_node.getAttribute('TEXT');\n var node_folded = xml_node.getAttribute('FOLDED');\n // look for richcontent\n if (node_topic == null) {\n var topic_children = xml_node.childNodes;\n var topic_child = null;\n for (var i = 0; i < topic_children.length; i++) {\n topic_child = topic_children[i];\n if (topic_child.nodeType == 1 && topic_child.tagName === 'richcontent') {\n node_topic = topic_child.textContent;\n break;\n }\n }\n }\n var node_data = df._load_attributes(xml_node);\n var node_expanded =\n 'expanded' in node_data ? node_data.expanded == 'true' : node_folded != 'true';\n delete node_data.expanded;\n\n var node_position = xml_node.getAttribute('POSITION');\n var node_direction = null;\n if (!!node_position) {\n node_direction = node_position == 'left' ? Direction.left : Direction.right;\n }\n var node = null;\n if (!!parent_node) {\n node = mind.add_node(\n parent_node,\n node_id,\n node_topic,\n node_data,\n node_direction,\n node_expanded\n );\n } else {\n node = mind.set_root(node_id, node_topic, node_data);\n }\n var children = xml_node.childNodes;\n var child = null;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.nodeType == 1 && child.tagName == 'node') {\n df._load_node(mind, node, child);\n }\n }\n },\n\n _load_attributes: function (xml_node) {\n var children = xml_node.childNodes;\n var attr = null;\n var attr_data = {};\n for (var i = 0; i < children.length; i++) {\n attr = children[i];\n if (attr.nodeType == 1 && attr.tagName === 'attribute') {\n attr_data[attr.getAttribute('NAME')] = attr.getAttribute('VALUE');\n }\n }\n return attr_data;\n },\n\n _build_map: function (node, xml_lines) {\n var df = format.freemind;\n var pos = null;\n if (!!node.parent && node.parent.isroot) {\n pos = node.direction === Direction.left ? 'left' : 'right';\n }\n xml_lines.push('');\n\n // for attributes\n var node_data = node.data;\n if (node_data != null) {\n for (var k in node_data) {\n xml_lines.push('');\n }\n }\n\n // for children\n var children = node.children;\n for (var i = 0; i < children.length; i++) {\n df._build_map(children[i], xml_lines);\n }\n\n xml_lines.push('');\n },\n\n _escape: function (text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/'/g, ''')\n .replace(/\"/g, '"');\n },\n },\n text: {\n example: {\n meta: DEFAULT_META,\n format: 'text',\n data: 'jsMind text example\\n node1\\n node1-sub\\n node1-sub\\n node2',\n },\n _line_regex: /\\s*/,\n get_mind: function (source) {\n var df = format.text;\n var mind = new Mind();\n mind.name = source.meta.name;\n mind.author = source.meta.author;\n mind.version = source.meta.version;\n var lines = source.data.split(/\\n|\\r/);\n df._fill_nodes(mind, lines, 0, 0);\n return mind;\n },\n\n _fill_nodes: function (mind, lines) {\n let node_path = [];\n let i = 0;\n while (i < lines.length) {\n let line = lines[i];\n let level = line.match(/\\s*/)[0].length;\n let topic = line.substr(level);\n\n if (level == 0 && node_path.length > 0) {\n log.error('more than 1 root node was found: ' + topic);\n return;\n }\n if (level > node_path.length) {\n log.error('a suspended node was found: ' + topic);\n return;\n }\n let diff = node_path.length - level;\n while (diff--) {\n node_path.pop();\n }\n\n if (level == 0 && node_path.length == 0) {\n let node = mind.set_root(util.uuid.newid(), topic);\n node_path.push(node);\n } else {\n let node = mind.add_node(\n node_path[level - 1],\n util.uuid.newid(),\n topic,\n {},\n null\n );\n node_path.push(node);\n }\n i++;\n }\n node_path.length = 0;\n },\n\n get_data: function (mind) {\n var df = format.text;\n var json = {};\n json.meta = {\n name: mind.name,\n author: mind.author,\n version: mind.version,\n };\n json.format = 'text';\n let lines = [];\n df._build_lines(lines, [mind.root], 0);\n json.data = lines.join('\\n');\n return json;\n },\n\n _build_lines: function (lines, nodes, level) {\n let prefix = new Array(level + 1).join(' ');\n for (let node of nodes) {\n lines.push(prefix + node.topic);\n if (!!node.children) {\n format.text._build_lines(lines, node.children, level + 1);\n }\n }\n },\n },\n};\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { logger } from './jsmind.common.js';\nimport { format } from './jsmind.format.js';\n\nexport class DataProvider {\n constructor(jm) {\n this.jm = jm;\n }\n\n init() {\n logger.debug('data.init');\n }\n reset() {\n logger.debug('data.reset');\n }\n load(mind_data) {\n var df = null;\n var mind = null;\n if (typeof mind_data === 'object') {\n if (!!mind_data.format) {\n df = mind_data.format;\n } else {\n df = 'node_tree';\n }\n } else {\n df = 'freemind';\n }\n\n if (df == 'node_array') {\n mind = format.node_array.get_mind(mind_data);\n } else if (df == 'node_tree') {\n mind = format.node_tree.get_mind(mind_data);\n } else if (df == 'freemind') {\n mind = format.freemind.get_mind(mind_data);\n } else if (df == 'text') {\n mind = format.text.get_mind(mind_data);\n } else {\n logger.warn('unsupported format');\n }\n return mind;\n }\n get_data(data_format) {\n var data = null;\n if (data_format == 'node_array') {\n data = format.node_array.get_data(this.jm.mind);\n } else if (data_format == 'node_tree') {\n data = format.node_tree.get_data(this.jm.mind);\n } else if (data_format == 'freemind') {\n data = format.freemind.get_data(this.jm.mind);\n } else if (data_format == 'text') {\n data = format.text.get_data(this.jm.mind);\n } else {\n logger.error('unsupported ' + data_format + ' format');\n }\n return data;\n }\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\nimport { logger, Direction, EventType } from './jsmind.common.js';\n\nexport class LayoutProvider {\n constructor(jm, options) {\n this.opts = options;\n this.jm = jm;\n this.isside = this.opts.mode == 'side';\n this.bounds = null;\n\n this.cache_valid = false;\n }\n init() {\n logger.debug('layout.init');\n }\n reset() {\n logger.debug('layout.reset');\n this.bounds = { n: 0, s: 0, w: 0, e: 0 };\n }\n calculate_next_child_direction(node) {\n if (this.isside) {\n return Direction.right;\n }\n var children = node.children || [];\n var children_len = children.length;\n var r = 0;\n for (var i = 0; i < children_len; i++) {\n if (children[i].direction === Direction.left) {\n r--;\n } else {\n r++;\n }\n }\n return children_len > 1 && r > 0 ? Direction.left : Direction.right;\n }\n layout() {\n logger.debug('layout.layout');\n this.layout_direction();\n this.layout_offset();\n }\n layout_direction() {\n this._layout_direction_root();\n }\n _layout_direction_root() {\n var node = this.jm.mind.root;\n var layout_data = null;\n if ('layout' in node._data) {\n layout_data = node._data.layout;\n } else {\n layout_data = {};\n node._data.layout = layout_data;\n }\n var children = node.children;\n var children_count = children.length;\n layout_data.direction = Direction.center;\n layout_data.side_index = 0;\n if (this.isside) {\n var i = children_count;\n while (i--) {\n this._layout_direction_side(children[i], Direction.right, i);\n }\n } else {\n var i = children_count;\n var subnode = null;\n while (i--) {\n subnode = children[i];\n if (subnode.direction == Direction.left) {\n this._layout_direction_side(subnode, Direction.left, i);\n } else {\n this._layout_direction_side(subnode, Direction.right, i);\n }\n }\n }\n }\n _layout_direction_side(node, direction, side_index) {\n var layout_data = null;\n if ('layout' in node._data) {\n layout_data = node._data.layout;\n } else {\n layout_data = {};\n node._data.layout = layout_data;\n }\n var children = node.children;\n var children_count = children.length;\n\n layout_data.direction = direction;\n layout_data.side_index = side_index;\n var i = children_count;\n while (i--) {\n this._layout_direction_side(children[i], direction, i);\n }\n }\n layout_offset() {\n var node = this.jm.mind.root;\n var layout_data = node._data.layout;\n layout_data.offset_x = 0;\n layout_data.offset_y = 0;\n layout_data.outer_height = 0;\n var children = node.children;\n var i = children.length;\n var left_nodes = [];\n var right_nodes = [];\n var subnode = null;\n while (i--) {\n subnode = children[i];\n if (subnode._data.layout.direction == Direction.right) {\n right_nodes.unshift(subnode);\n } else {\n left_nodes.unshift(subnode);\n }\n }\n layout_data.left_nodes = left_nodes;\n layout_data.right_nodes = right_nodes;\n layout_data.outer_height_left = this._layout_offset_subnodes(left_nodes);\n layout_data.outer_height_right = this._layout_offset_subnodes(right_nodes);\n this.bounds.e = node._data.view.width / 2;\n this.bounds.w = 0 - this.bounds.e;\n this.bounds.n = 0;\n this.bounds.s = Math.max(layout_data.outer_height_left, layout_data.outer_height_right);\n }\n // layout both the x and y axis\n _layout_offset_subnodes(nodes) {\n var total_height = 0;\n var nodes_count = nodes.length;\n var i = nodes_count;\n var node = null;\n var node_outer_height = 0;\n var layout_data = null;\n var base_y = 0;\n var pd = null; // parent._data\n while (i--) {\n node = nodes[i];\n layout_data = node._data.layout;\n if (pd == null) {\n pd = node.parent._data;\n }\n\n node_outer_height = this._layout_offset_subnodes(node.children);\n if (!node.expanded) {\n node_outer_height = 0;\n this.set_visible(node.children, false);\n }\n node_outer_height = Math.max(node._data.view.height, node_outer_height);\n\n if (this._should_reserve_cousin_space(node)) {\n node_outer_height += this.opts.cousin_space;\n }\n\n layout_data.outer_height = node_outer_height;\n layout_data.offset_y = base_y - node_outer_height / 2;\n layout_data.offset_x =\n this.opts.hspace * layout_data.direction +\n (pd.view.width * (pd.layout.direction + layout_data.direction)) / 2;\n if (!node.parent.isroot) {\n layout_data.offset_x += this.opts.pspace * layout_data.direction;\n }\n\n base_y = base_y - node_outer_height - this.opts.vspace;\n total_height += node_outer_height;\n }\n if (nodes_count > 1) {\n total_height += this.opts.vspace * (nodes_count - 1);\n }\n i = nodes_count;\n var middle_height = total_height / 2;\n while (i--) {\n node = nodes[i];\n node._data.layout.offset_y += middle_height;\n }\n return total_height;\n }\n // layout the y axis only, for collapse/expand a node\n _layout_offset_subnodes_height(nodes) {\n var total_height = 0;\n var nodes_count = nodes.length;\n var i = nodes_count;\n var node = null;\n var node_outer_height = 0;\n var layout_data = null;\n var base_y = 0;\n var pd = null; // parent._data\n while (i--) {\n node = nodes[i];\n layout_data = node._data.layout;\n if (pd == null) {\n pd = node.parent._data;\n }\n\n node_outer_height = this._layout_offset_subnodes_height(node.children);\n if (!node.expanded) {\n node_outer_height = 0;\n }\n node_outer_height = Math.max(node._data.view.height, node_outer_height);\n if (this._should_reserve_cousin_space(node)) {\n node_outer_height += this.opts.cousin_space;\n }\n\n layout_data.outer_height = node_outer_height;\n layout_data.offset_y = base_y - node_outer_height / 2;\n base_y = base_y - node_outer_height - this.opts.vspace;\n total_height += node_outer_height;\n }\n if (nodes_count > 1) {\n total_height += this.opts.vspace * (nodes_count - 1);\n }\n i = nodes_count;\n var middle_height = total_height / 2;\n while (i--) {\n node = nodes[i];\n node._data.layout.offset_y += middle_height;\n }\n return total_height;\n }\n _should_reserve_cousin_space(node) {\n return node.children.length > 0 && node.parent.children.length > 1;\n }\n get_node_offset(node) {\n var layout_data = node._data.layout;\n var offset_cache = null;\n if ('_offset_' in layout_data && this.cache_valid) {\n offset_cache = layout_data._offset_;\n } else {\n offset_cache = { x: -1, y: -1 };\n layout_data._offset_ = offset_cache;\n }\n if (offset_cache.x == -1 || offset_cache.y == -1) {\n var x = layout_data.offset_x;\n var y = layout_data.offset_y;\n if (!node.isroot) {\n var offset_p = this.get_node_offset(node.parent);\n x += offset_p.x;\n y += offset_p.y;\n }\n offset_cache.x = x;\n offset_cache.y = y;\n }\n return offset_cache;\n }\n get_node_point(node) {\n var view_data = node._data.view;\n var offset_p = this.get_node_offset(node);\n var p = {};\n p.x = offset_p.x + (view_data.width * (node._data.layout.direction - 1)) / 2;\n p.y = offset_p.y - view_data.height / 2;\n return p;\n }\n get_node_point_in(node) {\n var p = this.get_node_offset(node);\n return p;\n }\n get_node_point_out(node) {\n var layout_data = node._data.layout;\n var pout_cache = null;\n if ('_pout_' in layout_data && this.cache_valid) {\n pout_cache = layout_data._pout_;\n } else {\n pout_cache = { x: -1, y: -1 };\n layout_data._pout_ = pout_cache;\n }\n if (pout_cache.x == -1 || pout_cache.y == -1) {\n if (node.isroot) {\n pout_cache.x = 0;\n pout_cache.y = 0;\n } else {\n var view_data = node._data.view;\n var offset_p = this.get_node_offset(node);\n pout_cache.x =\n offset_p.x + (view_data.width + this.opts.pspace) * node._data.layout.direction;\n pout_cache.y = offset_p.y;\n }\n }\n return pout_cache;\n }\n get_expander_point(node) {\n var p = this.get_node_point_out(node);\n var ex_p = {};\n if (node._data.layout.direction == Direction.right) {\n ex_p.x = p.x - this.opts.pspace;\n } else {\n ex_p.x = p.x;\n }\n ex_p.y = p.y - Math.ceil(this.opts.pspace / 2);\n return ex_p;\n }\n get_min_size() {\n var nodes = this.jm.mind.nodes;\n var node = null;\n var pout = null;\n for (var node_id in nodes) {\n node = nodes[node_id];\n pout = this.get_node_point_out(node);\n if (pout.x > this.bounds.e) {\n this.bounds.e = pout.x;\n }\n if (pout.x < this.bounds.w) {\n this.bounds.w = pout.x;\n }\n }\n return {\n w: this.bounds.e - this.bounds.w,\n h: this.bounds.s - this.bounds.n,\n };\n }\n toggle_node(node) {\n if (node.isroot) {\n return;\n }\n if (node.expanded) {\n this.collapse_node(node);\n } else {\n this.expand_node(node);\n }\n }\n expand_node(node) {\n node.expanded = true;\n this.part_layout(node);\n this.set_visible(node.children, true);\n this.jm.invoke_event_handle(EventType.show, {\n evt: 'expand_node',\n data: [],\n node: node.id,\n });\n }\n collapse_node(node) {\n node.expanded = false;\n this.part_layout(node);\n this.set_visible(node.children, false);\n this.jm.invoke_event_handle(EventType.show, {\n evt: 'collapse_node',\n data: [],\n node: node.id,\n });\n }\n expand_all() {\n var nodes = this.jm.mind.nodes;\n var c = 0;\n var node;\n for (var node_id in nodes) {\n node = nodes[node_id];\n if (!node.expanded) {\n node.expanded = true;\n c++;\n }\n }\n if (c > 0) {\n var root = this.jm.mind.root;\n this.part_layout(root);\n this.set_visible(root.children, true);\n }\n }\n collapse_all() {\n var nodes = this.jm.mind.nodes;\n var c = 0;\n var node;\n for (var node_id in nodes) {\n node = nodes[node_id];\n if (node.expanded && !node.isroot) {\n node.expanded = false;\n c++;\n }\n }\n if (c > 0) {\n var root = this.jm.mind.root;\n this.part_layout(root);\n this.set_visible(root.children, true);\n }\n }\n expand_to_depth(target_depth, curr_nodes, curr_depth) {\n if (target_depth < 1) {\n return;\n }\n var nodes = curr_nodes || this.jm.mind.root.children;\n var depth = curr_depth || 1;\n var i = nodes.length;\n var node = null;\n while (i--) {\n node = nodes[i];\n if (depth < target_depth) {\n if (!node.expanded) {\n this.expand_node(node);\n }\n this.expand_to_depth(target_depth, node.children, depth + 1);\n }\n if (depth == target_depth) {\n if (node.expanded) {\n this.collapse_node(node);\n }\n }\n }\n }\n part_layout(node) {\n var root = this.jm.mind.root;\n if (!!root) {\n var root_layout_data = root._data.layout;\n if (node.isroot) {\n root_layout_data.outer_height_right = this._layout_offset_subnodes_height(\n root_layout_data.right_nodes\n );\n root_layout_data.outer_height_left = this._layout_offset_subnodes_height(\n root_layout_data.left_nodes\n );\n } else {\n if (node._data.layout.direction == Direction.right) {\n root_layout_data.outer_height_right = this._layout_offset_subnodes_height(\n root_layout_data.right_nodes\n );\n } else {\n root_layout_data.outer_height_left = this._layout_offset_subnodes_height(\n root_layout_data.left_nodes\n );\n }\n }\n this.bounds.s = Math.max(\n root_layout_data.outer_height_left,\n root_layout_data.outer_height_right\n );\n this.cache_valid = false;\n } else {\n logger.warn('can not found root node');\n }\n }\n set_visible(nodes, visible) {\n var i = nodes.length;\n var node = null;\n var layout_data = null;\n while (i--) {\n node = nodes[i];\n layout_data = node._data.layout;\n if (node.expanded) {\n this.set_visible(node.children, visible);\n } else {\n this.set_visible(node.children, false);\n }\n if (!node.isroot) {\n node._data.layout.visible = visible;\n }\n }\n }\n is_expand(node) {\n return node.expanded;\n }\n is_visible(node) {\n var layout_data = node._data.layout;\n if ('visible' in layout_data && !layout_data.visible) {\n return false;\n } else {\n return true;\n }\n }\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { $ } from './jsmind.dom.js';\nimport { logger } from './jsmind.common.js';\n\nclass SvgGraph {\n constructor(view) {\n this.view = view;\n this.opts = view.opts;\n this.e_svg = SvgGraph.c('svg');\n this.e_svg.setAttribute('class', 'jsmind');\n this.size = { w: 0, h: 0 };\n this.lines = [];\n this.line_drawing = {\n straight: this._line_to,\n curved: this._bezier_to,\n };\n this.init_line_render();\n }\n static c(tag) {\n return $.d.createElementNS('http://www.w3.org/2000/svg', tag);\n }\n init_line_render() {\n if (typeof this.opts.custom_line_render === 'function') {\n this.drawing = (path, x1, y1, x2, y2) => {\n try {\n this.opts.custom_line_render.call(this, {\n ctx: path,\n start_point: { x: x1, y: y1 },\n end_point: { x: x2, y: y2 },\n });\n } catch (e) {\n logger.error('custom line renderer error: ', e);\n }\n };\n } else {\n this.drawing = this.line_drawing[this.opts.line_style] || this.line_drawing.curved;\n }\n }\n element() {\n return this.e_svg;\n }\n set_size(w, h) {\n this.size.w = w;\n this.size.h = h;\n this.e_svg.setAttribute('width', w);\n this.e_svg.setAttribute('height', h);\n }\n clear() {\n var len = this.lines.length;\n while (len--) {\n this.e_svg.removeChild(this.lines[len]);\n }\n this.lines.length = 0;\n }\n draw_line(pout, pin, offset, color) {\n var line = SvgGraph.c('path');\n line.setAttribute('stroke', color || this.opts.line_color);\n line.setAttribute('stroke-width', this.opts.line_width);\n line.setAttribute('fill', 'transparent');\n this.lines.push(line);\n this.e_svg.appendChild(line);\n this.drawing(\n line,\n pin.x + offset.x,\n pin.y + offset.y,\n pout.x + offset.x,\n pout.y + offset.y\n );\n }\n\n copy_to(dest_canvas_ctx, callback) {\n var img = new Image();\n img.onload = function () {\n dest_canvas_ctx.drawImage(img, 0, 0);\n !!callback && callback();\n };\n img.src =\n 'data:image/svg+xml;base64,' + btoa(new XMLSerializer().serializeToString(this.e_svg));\n }\n _bezier_to(path, x1, y1, x2, y2) {\n path.setAttribute(\n 'd',\n 'M ' +\n x1 +\n ' ' +\n y1 +\n ' C ' +\n (x1 + ((x2 - x1) * 2) / 3) +\n ' ' +\n y1 +\n ', ' +\n x1 +\n ' ' +\n y2 +\n ', ' +\n x2 +\n ' ' +\n y2\n );\n }\n _line_to(path, x1, y1, x2, y2) {\n path.setAttribute('d', 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2);\n }\n}\n\nclass CanvasGraph {\n constructor(view) {\n this.opts = view.opts;\n this.e_canvas = $.c('canvas');\n this.e_canvas.className = 'jsmind';\n this.canvas_ctx = this.e_canvas.getContext('2d');\n this.size = { w: 0, h: 0 };\n this.line_drawing = {\n straight: this._line_to,\n curved: this._bezier_to,\n };\n this.dpr = view.device_pixel_ratio;\n this.init_line_render();\n }\n init_line_render() {\n if (typeof this.opts.custom_line_render === 'function') {\n this.drawing = (ctx, x1, y1, x2, y2) => {\n try {\n this.opts.custom_line_render.call(this, {\n ctx,\n start_point: { x: x1, y: y1 },\n end_point: { x: x2, y: y2 },\n });\n } catch (e) {\n logger.error('custom line render error: ', e);\n }\n };\n } else {\n this.drawing = this.line_drawing[this.opts.line_style] || this.line_drawing.curved;\n }\n }\n element() {\n return this.e_canvas;\n }\n set_size(w, h) {\n this.size.w = w;\n this.size.h = h;\n if (this.e_canvas.width && this.e_canvas.height && this.canvas_ctx.scale) {\n this.e_canvas.width = w * this.dpr;\n this.e_canvas.height = h * this.dpr;\n\n this.e_canvas.style.width = w + 'px';\n this.e_canvas.style.height = h + 'px';\n this.canvas_ctx.scale(this.dpr, this.dpr);\n } else {\n this.e_canvas.width = w;\n this.e_canvas.height = h;\n }\n }\n\n clear() {\n this.canvas_ctx.clearRect(0, 0, this.size.w, this.size.h);\n }\n draw_line(pout, pin, offset, color) {\n var ctx = this.canvas_ctx;\n ctx.strokeStyle = color || this.opts.line_color;\n ctx.lineWidth = this.opts.line_width;\n ctx.lineCap = 'round';\n this.drawing(ctx, pin.x + offset.x, pin.y + offset.y, pout.x + offset.x, pout.y + offset.y);\n }\n copy_to(dest_canvas_ctx, callback) {\n dest_canvas_ctx.drawImage(this.e_canvas, 0, 0, this.size.w, this.size.h);\n !!callback && callback();\n }\n _bezier_to(ctx, x1, y1, x2, y2) {\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(x1 + ((x2 - x1) * 2) / 3, y1, x1, y2, x2, y2);\n ctx.stroke();\n }\n _line_to(ctx, x1, y1, x2, y2) {\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n }\n}\n\nexport function init_graph(view, engine) {\n return engine.toLowerCase() === 'svg' ? new SvgGraph(view) : new CanvasGraph(view);\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\nimport { logger, EventType } from './jsmind.common.js';\nimport { $ } from './jsmind.dom.js';\nimport { init_graph } from './jsmind.graph.js';\nimport { util } from './jsmind.util.js';\n\nexport class ViewProvider {\n constructor(jm, options) {\n this.opts = options;\n this.jm = jm;\n this.layout = jm.layout;\n\n this.container = null;\n this.e_panel = null;\n this.e_nodes = null;\n\n this.size = { w: 0, h: 0 };\n\n this.selected_node = null;\n this.editing_node = null;\n\n this.graph = null;\n this.render_node = !!options.custom_node_render\n ? this._custom_node_render\n : this._default_node_render;\n this.zoom_current = 1;\n this.device_pixel_ratio = this.opts.enable_device_pixel_ratio\n ? $.w.devicePixelRatio || 1\n : 1;\n this._initialized = false;\n }\n init() {\n logger.debug(this.opts);\n logger.debug('view.init');\n\n this.container = $.i(this.opts.container) ? this.opts.container : $.g(this.opts.container);\n if (!this.container) {\n logger.error('the options.view.container was not be found in dom');\n return;\n }\n this.graph = init_graph(this, this.opts.engine);\n\n this.e_panel = $.c('div');\n this.e_nodes = $.c('jmnodes');\n this.e_editor = $.c('input');\n this.e_panel.className = 'jsmind-inner jmnode-overflow-' + this.opts.node_overflow;\n this.e_panel.tabIndex = 1;\n this.e_panel.appendChild(this.graph.element());\n this.e_panel.appendChild(this.e_nodes);\n\n this.e_editor.className = 'jsmind-editor';\n this.e_editor.type = 'text';\n\n var v = this;\n $.on(this.e_editor, 'keydown', function (e) {\n var evt = e || event;\n if (evt.keyCode == 13) {\n v.edit_node_end();\n evt.stopPropagation();\n }\n });\n $.on(this.e_editor, 'blur', function (e) {\n v.edit_node_end();\n });\n\n this.container.appendChild(this.e_panel);\n\n if (!this.container.offsetParent) {\n new IntersectionObserver((entities, observer) => {\n if (entities[0].isIntersecting) {\n observer.unobserve(this.e_panel);\n this.resize();\n }\n }).observe(this.e_panel);\n }\n }\n\n add_event(obj, event_name, event_handle, capture_by_panel) {\n let target = !!capture_by_panel ? this.e_panel : this.e_nodes;\n $.on(target, event_name, function (e) {\n var evt = e || event;\n event_handle.call(obj, evt);\n });\n }\n get_binded_nodeid(element) {\n if (element == null) {\n return null;\n }\n var tagName = element.tagName.toLowerCase();\n if (tagName == 'jmnode' || tagName == 'jmexpander') {\n return element.getAttribute('nodeid');\n } else if (tagName == 'jmnodes' || tagName == 'body' || tagName == 'html') {\n return null;\n } else {\n return this.get_binded_nodeid(element.parentElement);\n }\n }\n is_node(element) {\n if (element == null) {\n return false;\n }\n var tagName = element.tagName.toLowerCase();\n if (tagName == 'jmnode') {\n return true;\n } else if (tagName == 'jmnodes' || tagName == 'body' || tagName == 'html') {\n return false;\n } else {\n return this.is_node(element.parentElement);\n }\n }\n is_expander(element) {\n return element.tagName.toLowerCase() == 'jmexpander';\n }\n reset() {\n logger.debug('view.reset');\n this.selected_node = null;\n this.clear_lines();\n this.clear_nodes();\n this.reset_theme();\n }\n reset_theme() {\n var theme_name = this.jm.options.theme;\n if (!!theme_name) {\n this.e_nodes.className = 'theme-' + theme_name;\n } else {\n this.e_nodes.className = '';\n }\n }\n reset_custom_style() {\n var nodes = this.jm.mind.nodes;\n for (var nodeid in nodes) {\n this.reset_node_custom_style(nodes[nodeid]);\n }\n }\n load() {\n logger.debug('view.load');\n this.setup_canvas_draggable(this.opts.draggable);\n this.init_nodes();\n this._initialized = true;\n }\n expand_size() {\n var min_size = this.layout.get_min_size();\n var min_width = min_size.w + this.opts.hmargin * 2;\n var min_height = min_size.h + this.opts.vmargin * 2;\n var client_w = this.e_panel.clientWidth;\n var client_h = this.e_panel.clientHeight;\n if (client_w < min_width) {\n client_w = min_width;\n }\n if (client_h < min_height) {\n client_h = min_height;\n }\n this.size.w = client_w;\n this.size.h = client_h;\n }\n init_nodes_size(node) {\n var view_data = node._data.view;\n view_data.width = view_data.element.clientWidth;\n view_data.height = view_data.element.clientHeight;\n }\n init_nodes() {\n var nodes = this.jm.mind.nodes;\n var doc_frag = $.d.createDocumentFragment();\n for (var nodeid in nodes) {\n this.create_node_element(nodes[nodeid], doc_frag);\n }\n this.e_nodes.appendChild(doc_frag);\n\n this.run_in_c11y_mode_if_needed(() => {\n for (var nodeid in nodes) {\n this.init_nodes_size(nodes[nodeid]);\n }\n });\n }\n add_node(node) {\n this.create_node_element(node, this.e_nodes);\n this.run_in_c11y_mode_if_needed(() => {\n this.init_nodes_size(node);\n });\n }\n run_in_c11y_mode_if_needed(func) {\n if (!!this.container.offsetParent) {\n func();\n return;\n }\n logger.warn(\n 'init nodes in compatibility mode. because the container or its parent has style {display:none}. '\n );\n this.e_panel.style.position = 'absolute';\n this.e_panel.style.top = '-100000';\n $.d.body.appendChild(this.e_panel);\n func();\n this.container.appendChild(this.e_panel);\n this.e_panel.style.position = null;\n this.e_panel.style.top = null;\n }\n create_node_element(node, parent_node) {\n var view_data = null;\n if ('view' in node._data) {\n view_data = node._data.view;\n } else {\n view_data = {};\n node._data.view = view_data;\n }\n\n var d = $.c('jmnode');\n if (node.isroot) {\n d.className = 'root';\n } else {\n var d_e = $.c('jmexpander');\n $.t(d_e, '-');\n d_e.setAttribute('nodeid', node.id);\n d_e.style.visibility = 'hidden';\n parent_node.appendChild(d_e);\n view_data.expander = d_e;\n }\n if (!!node.topic) {\n this.render_node(d, node);\n }\n d.setAttribute('nodeid', node.id);\n d.style.visibility = 'hidden';\n this._reset_node_custom_style(d, node.data);\n\n parent_node.appendChild(d);\n view_data.element = d;\n }\n remove_node(node) {\n if (this.selected_node != null && this.selected_node.id == node.id) {\n this.selected_node = null;\n }\n if (this.editing_node != null && this.editing_node.id == node.id) {\n node._data.view.element.removeChild(this.e_editor);\n this.editing_node = null;\n }\n var children = node.children;\n var i = children.length;\n while (i--) {\n this.remove_node(children[i]);\n }\n if (node._data.view) {\n var element = node._data.view.element;\n var expander = node._data.view.expander;\n this.e_nodes.removeChild(element);\n this.e_nodes.removeChild(expander);\n node._data.view.element = null;\n node._data.view.expander = null;\n }\n }\n update_node(node) {\n var view_data = node._data.view;\n var element = view_data.element;\n if (!!node.topic) {\n this.render_node(element, node);\n }\n if (this.layout.is_visible(node)) {\n view_data.width = element.clientWidth;\n view_data.height = element.clientHeight;\n } else {\n let origin_style = element.getAttribute('style');\n element.style = 'visibility: visible; left:0; top:0;';\n view_data.width = element.clientWidth;\n view_data.height = element.clientHeight;\n element.style = origin_style;\n }\n }\n select_node(node) {\n if (!!this.selected_node) {\n var element = this.selected_node._data.view.element;\n element.className = element.className.replace(/\\s*selected\\b/i, '');\n this.restore_selected_node_custom_style(this.selected_node);\n }\n if (!!node) {\n this.selected_node = node;\n node._data.view.element.className += ' selected';\n this.clear_selected_node_custom_style(node);\n }\n }\n select_clear() {\n this.select_node(null);\n }\n get_editing_node() {\n return this.editing_node;\n }\n is_editing() {\n return !!this.editing_node;\n }\n edit_node_begin(node) {\n if (!node.topic) {\n logger.warn(\"don't edit image nodes\");\n return;\n }\n if (this.editing_node != null) {\n this.edit_node_end();\n }\n this.editing_node = node;\n var view_data = node._data.view;\n var element = view_data.element;\n var topic = node.topic;\n var ncs = getComputedStyle(element);\n this.e_editor.value = topic;\n this.e_editor.style.width =\n element.clientWidth -\n parseInt(ncs.getPropertyValue('padding-left')) -\n parseInt(ncs.getPropertyValue('padding-right')) +\n 'px';\n element.innerHTML = '';\n element.appendChild(this.e_editor);\n element.style.zIndex = 5;\n this.e_editor.focus();\n this.e_editor.select();\n }\n edit_node_end() {\n if (this.editing_node != null) {\n var node = this.editing_node;\n this.editing_node = null;\n var view_data = node._data.view;\n var element = view_data.element;\n var topic = this.e_editor.value;\n element.style.zIndex = 'auto';\n element.removeChild(this.e_editor);\n if (util.text.is_empty(topic) || node.topic === topic) {\n this.render_node(element, node);\n } else {\n this.jm.update_node(node.id, topic);\n }\n }\n this.e_panel.focus();\n }\n get_view_offset() {\n var bounds = this.layout.bounds;\n var _x = (this.size.w - bounds.e - bounds.w) / 2;\n var _y = this.size.h / 2;\n return { x: _x, y: _y };\n }\n resize() {\n this.graph.set_size(1, 1);\n this.e_nodes.style.width = '1px';\n this.e_nodes.style.height = '1px';\n\n this.expand_size();\n this._show();\n }\n _show() {\n this.graph.set_size(this.size.w, this.size.h);\n this.e_nodes.style.width = this.size.w + 'px';\n this.e_nodes.style.height = this.size.h + 'px';\n this.show_nodes();\n this.show_lines();\n //this.layout.cache_valid = true;\n this.jm.invoke_event_handle(EventType.resize, { data: [] });\n }\n zoom_in(e) {\n return this.set_zoom(this.zoom_current + this.opts.zoom.step, e);\n }\n zoom_out(e) {\n return this.set_zoom(this.zoom_current - this.opts.zoom.step, e);\n }\n set_zoom(zoom, e) {\n if (zoom < this.opts.zoom.min || zoom > this.opts.zoom.max) {\n return false;\n }\n let e_panel_rect = this.e_panel.getBoundingClientRect();\n if (\n zoom < 1 &&\n zoom < this.zoom_current &&\n this.size.w * zoom < e_panel_rect.width &&\n this.size.h * zoom < e_panel_rect.height\n ) {\n return false;\n }\n let zoom_center = !!e\n ? { x: e.x - e_panel_rect.x, y: e.y - e_panel_rect.y }\n : { x: e_panel_rect.width / 2, y: e_panel_rect.height / 2 };\n let panel_scroll_x =\n ((this.e_panel.scrollLeft + zoom_center.x) * zoom) / this.zoom_current - zoom_center.x;\n let panel_scroll_y =\n ((this.e_panel.scrollTop + zoom_center.y) * zoom) / this.zoom_current - zoom_center.y;\n\n this.zoom_current = zoom;\n for (var i = 0; i < this.e_panel.children.length; i++) {\n this.e_panel.children[i].style.zoom = zoom;\n }\n this._show();\n this.e_panel.scrollLeft = panel_scroll_x;\n this.e_panel.scrollTop = panel_scroll_y;\n return true;\n }\n show(keep_center) {\n logger.debug(`view.show: {keep_center: ${keep_center}}`);\n this.expand_size();\n this._show();\n if (!!keep_center) {\n this.center_node(this.jm.mind.root);\n }\n }\n relayout() {\n this.expand_size();\n this._show();\n }\n save_location(node) {\n var vd = node._data.view;\n vd._saved_location = {\n x: parseInt(vd.element.style.left) - this.e_panel.scrollLeft,\n y: parseInt(vd.element.style.top) - this.e_panel.scrollTop,\n };\n }\n restore_location(node) {\n var vd = node._data.view;\n this.e_panel.scrollLeft = parseInt(vd.element.style.left) - vd._saved_location.x;\n this.e_panel.scrollTop = parseInt(vd.element.style.top) - vd._saved_location.y;\n }\n clear_nodes() {\n var mind = this.jm.mind;\n if (mind == null) {\n return;\n }\n var nodes = mind.nodes;\n var node = null;\n for (var nodeid in nodes) {\n node = nodes[nodeid];\n node._data.view.element = null;\n node._data.view.expander = null;\n }\n this.e_nodes.innerHTML = '';\n }\n show_nodes() {\n var nodes = this.jm.mind.nodes;\n var node = null;\n var node_element = null;\n var p = null;\n var view_data = null;\n var view_offset = this.get_view_offset();\n for (var nodeid in nodes) {\n node = nodes[nodeid];\n view_data = node._data.view;\n node_element = view_data.element;\n if (!this.layout.is_visible(node)) {\n node_element.style.display = 'none';\n view_data.expander.style.display = 'none';\n continue;\n }\n this.reset_node_custom_style(node);\n p = this.layout.get_node_point(node);\n view_data.abs_x = view_offset.x + p.x;\n view_data.abs_y = view_offset.y + p.y;\n node_element.style.left = view_offset.x + p.x + 'px';\n node_element.style.top = view_offset.y + p.y + 'px';\n node_element.style.display = '';\n node_element.style.visibility = 'visible';\n this._show_expander(node, view_offset);\n }\n }\n _show_expander(node, view_offset) {\n if (node.isroot) {\n return;\n }\n\n var expander = node._data.view.expander;\n if (node.children.length == 0) {\n expander.style.display = 'none';\n expander.style.visibility = 'hidden';\n return;\n }\n\n let expander_text = this._get_expander_text(node);\n $.t(expander, expander_text);\n\n let p_expander = this.layout.get_expander_point(node);\n expander.style.left = view_offset.x + p_expander.x + 'px';\n expander.style.top = view_offset.y + p_expander.y + 'px';\n expander.style.display = '';\n expander.style.visibility = 'visible';\n }\n\n _get_expander_text(node) {\n let style = !!this.opts.expander_style ? this.opts.expander_style.toLowerCase() : 'char';\n if (style === 'number') {\n return node.children.length > 99 ? '...' : node.children.length;\n }\n if (style === 'char') {\n return node.expanded ? '-' : '+';\n }\n }\n\n _default_node_render(ele, node) {\n if (this.opts.support_html) {\n $.h(ele, node.topic);\n } else {\n $.t(ele, node.topic);\n }\n }\n _custom_node_render(ele, node) {\n let rendered = this.opts.custom_node_render(this.jm, ele, node);\n if (!rendered) {\n this._default_node_render(ele, node);\n }\n }\n reset_node_custom_style(node) {\n this._reset_node_custom_style(node._data.view.element, node.data);\n }\n _reset_node_custom_style(node_element, node_data) {\n if ('background-color' in node_data) {\n node_element.style.backgroundColor = node_data['background-color'];\n }\n if ('foreground-color' in node_data) {\n node_element.style.color = node_data['foreground-color'];\n }\n if ('width' in node_data) {\n node_element.style.width = node_data['width'] + 'px';\n }\n if ('height' in node_data) {\n node_element.style.height = node_data['height'] + 'px';\n }\n if ('font-size' in node_data) {\n node_element.style.fontSize = node_data['font-size'] + 'px';\n }\n if ('font-weight' in node_data) {\n node_element.style.fontWeight = node_data['font-weight'];\n }\n if ('font-style' in node_data) {\n node_element.style.fontStyle = node_data['font-style'];\n }\n if ('background-image' in node_data) {\n var backgroundImage = node_data['background-image'];\n if (backgroundImage.startsWith('data') && node_data['width'] && node_data['height']) {\n var img = new Image();\n\n img.onload = function () {\n var c = $.c('canvas');\n c.width = node_element.clientWidth;\n c.height = node_element.clientHeight;\n var img = this;\n if (c.getContext) {\n var ctx = c.getContext('2d');\n ctx.drawImage(\n img,\n 2,\n 2,\n node_element.clientWidth,\n node_element.clientHeight\n );\n var scaledImageData = c.toDataURL();\n node_element.style.backgroundImage = 'url(' + scaledImageData + ')';\n }\n };\n img.src = backgroundImage;\n } else {\n node_element.style.backgroundImage = 'url(' + backgroundImage + ')';\n }\n node_element.style.backgroundSize = '99%';\n\n if ('background-rotation' in node_data) {\n node_element.style.transform =\n 'rotate(' + node_data['background-rotation'] + 'deg)';\n }\n }\n }\n restore_selected_node_custom_style(node) {\n var node_element = node._data.view.element;\n var node_data = node.data;\n if ('background-color' in node_data) {\n node_element.style.backgroundColor = node_data['background-color'];\n }\n if ('foreground-color' in node_data) {\n node_element.style.color = node_data['foreground-color'];\n }\n }\n clear_selected_node_custom_style(node) {\n var node_element = node._data.view.element;\n node_element.style.backgroundColor = '';\n node_element.style.color = '';\n }\n clear_lines() {\n this.graph.clear();\n }\n show_lines() {\n this.clear_lines();\n var nodes = this.jm.mind.nodes;\n var node = null;\n var pin = null;\n var pout = null;\n var color = null;\n var _offset = this.get_view_offset();\n for (var nodeid in nodes) {\n node = nodes[nodeid];\n if (!!node.isroot) {\n continue;\n }\n if (!this.layout.is_visible(node)) {\n continue;\n }\n pin = this.layout.get_node_point_in(node);\n pout = this.layout.get_node_point_out(node.parent);\n color = node.data['leading-line-color'];\n this.graph.draw_line(pout, pin, _offset, color);\n }\n }\n // Drag the whole mind map with your mouse, when it's larger that the container\n setup_canvas_draggable(enabled) {\n this.opts.draggable = enabled;\n if (!this._initialized) {\n let dragging = false;\n let x, y;\n if (this.opts.hide_scrollbars_when_draggable) {\n // Avoid scrollbars when mind map is larger than the container (e_panel = id jsmind-inner)\n this.e_panel.style = 'overflow: hidden';\n }\n // Move the whole mind map with mouse moves, while button is down.\n $.on(this.container, 'mousedown', eventDown => {\n if (this.opts.draggable) {\n dragging = true;\n // Record current mouse position.\n x = eventDown.clientX;\n y = eventDown.clientY;\n }\n });\n // Stop moving mind map once mouse button is released.\n $.on(this.container, 'mouseup', () => {\n dragging = false;\n });\n // Follow current mouse position and move mind map accordingly.\n $.on(this.container, 'mousemove', eventMove => {\n if (this.opts.draggable) {\n if (dragging) {\n this.e_panel.scrollBy(x - eventMove.clientX, y - eventMove.clientY);\n // Record new current position.\n x = eventMove.clientX;\n y = eventMove.clientY;\n }\n }\n });\n }\n }\n center_node(node) {\n if (!this.layout.is_visible(node)) {\n logger.warn('can not scroll to the node, because it is invisible');\n return false;\n }\n let view_data = node._data.view;\n let e_panel_rect = this.e_panel.getBoundingClientRect();\n let node_center_point = {\n x: view_data.abs_x + view_data.width / 2,\n y: view_data.abs_y + view_data.height / 2,\n };\n this.e_panel.scrollTo(\n node_center_point.x * this.zoom_current - e_panel_rect.width / 2,\n node_center_point.y * this.zoom_current - e_panel_rect.height / 2\n );\n return true;\n }\n\n zoomIn(e) {\n logger.warn('please use zoom_in instead');\n return this.zoom_in(e);\n }\n zoomOut(e) {\n logger.warn('please use zoom_out instead');\n return this.zoom_out(e);\n }\n setZoom(zoom, e) {\n logger.warn('please use set_zoom instead');\n return this.set_zoom(zoom, e);\n }\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { $ } from './jsmind.dom.js';\nimport { util } from './jsmind.util.js';\nimport { Direction } from './jsmind.common.js';\n\nexport class ShortcutProvider {\n constructor(jm, options) {\n this.jm = jm;\n this.opts = options;\n this.mapping = options.mapping;\n this.handles = options.handles;\n this._newid = null;\n this._mapping = {};\n }\n init() {\n $.on(this.jm.view.e_panel, 'keydown', this.handler.bind(this));\n\n this.handles['addchild'] = this.handle_addchild;\n this.handles['addbrother'] = this.handle_addbrother;\n this.handles['editnode'] = this.handle_editnode;\n this.handles['delnode'] = this.handle_delnode;\n this.handles['toggle'] = this.handle_toggle;\n this.handles['up'] = this.handle_up;\n this.handles['down'] = this.handle_down;\n this.handles['left'] = this.handle_left;\n this.handles['right'] = this.handle_right;\n\n for (var handle in this.mapping) {\n if (!!this.mapping[handle] && handle in this.handles) {\n let keys = this.mapping[handle];\n if (!Array.isArray(keys)) {\n keys = [keys];\n }\n for (let key of keys) {\n this._mapping[key] = this.handles[handle];\n }\n }\n }\n\n if (typeof this.opts.id_generator === 'function') {\n this._newid = this.opts.id_generator;\n } else {\n this._newid = util.uuid.newid;\n }\n }\n enable_shortcut() {\n this.opts.enable = true;\n }\n disable_shortcut() {\n this.opts.enable = false;\n }\n handler(e) {\n if (e.which == 9) {\n e.preventDefault();\n } //prevent tab to change focus in browser\n if (this.jm.view.is_editing()) {\n return;\n }\n var evt = e || event;\n if (!this.opts.enable) {\n return true;\n }\n var kc =\n evt.keyCode +\n (evt.metaKey << 13) +\n (evt.ctrlKey << 12) +\n (evt.altKey << 11) +\n (evt.shiftKey << 10);\n if (kc in this._mapping) {\n this._mapping[kc].call(this, this.jm, e);\n }\n }\n handle_addchild(_jm, e) {\n var selected_node = _jm.get_selected_node();\n if (!!selected_node) {\n var node_id = this._newid();\n var node = _jm.add_node(selected_node, node_id, 'New Node');\n if (!!node) {\n _jm.select_node(node_id);\n _jm.begin_edit(node_id);\n }\n }\n }\n handle_addbrother(_jm, e) {\n var selected_node = _jm.get_selected_node();\n if (!!selected_node && !selected_node.isroot) {\n var node_id = this._newid();\n var node = _jm.insert_node_after(selected_node, node_id, 'New Node');\n if (!!node) {\n _jm.select_node(node_id);\n _jm.begin_edit(node_id);\n }\n }\n }\n handle_editnode(_jm, e) {\n var selected_node = _jm.get_selected_node();\n if (!!selected_node) {\n _jm.begin_edit(selected_node);\n }\n }\n handle_delnode(_jm, e) {\n var selected_node = _jm.get_selected_node();\n if (!!selected_node && !selected_node.isroot) {\n _jm.select_node(selected_node.parent);\n _jm.remove_node(selected_node);\n }\n }\n handle_toggle(_jm, e) {\n var evt = e || event;\n var selected_node = _jm.get_selected_node();\n if (!!selected_node) {\n _jm.toggle_node(selected_node.id);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n handle_up(_jm, e) {\n var evt = e || event;\n var selected_node = _jm.get_selected_node();\n if (!!selected_node) {\n var up_node = _jm.find_node_before(selected_node);\n if (!up_node) {\n var np = _jm.find_node_before(selected_node.parent);\n if (!!np && np.children.length > 0) {\n up_node = np.children[np.children.length - 1];\n }\n }\n if (!!up_node) {\n _jm.select_node(up_node);\n }\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n handle_down(_jm, e) {\n var evt = e || event;\n var selected_node = _jm.get_selected_node();\n if (!!selected_node) {\n var down_node = _jm.find_node_after(selected_node);\n if (!down_node) {\n var np = _jm.find_node_after(selected_node.parent);\n if (!!np && np.children.length > 0) {\n down_node = np.children[0];\n }\n }\n if (!!down_node) {\n _jm.select_node(down_node);\n }\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n handle_left(_jm, e) {\n this._handle_direction(_jm, e, Direction.left);\n }\n handle_right(_jm, e) {\n this._handle_direction(_jm, e, Direction.right);\n }\n _handle_direction(_jm, e, d) {\n var evt = e || event;\n var selected_node = _jm.get_selected_node();\n var node = null;\n if (!!selected_node) {\n if (selected_node.isroot) {\n var c = selected_node.children;\n var children = [];\n for (var i = 0; i < c.length; i++) {\n if (c[i].direction === d) {\n children.push(i);\n }\n }\n node = c[children[Math.floor((children.length - 1) / 2)]];\n } else if (selected_node.direction === d) {\n var children = selected_node.children;\n var children_count = children.length;\n if (children_count > 0) {\n node = children[Math.floor((children_count - 1) / 2)];\n }\n } else {\n node = selected_node.parent;\n }\n if (!!node) {\n _jm.select_node(node);\n }\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { $ } from './jsmind.dom.js';\n\nconst plugin_data = {\n plugins: [],\n};\n\nexport function register(plugin) {\n if (!(plugin instanceof Plugin)) {\n throw new Error('can not register plugin, it is not an instance of Plugin');\n }\n if (plugin_data.plugins.map(p => p.name).includes(plugin.name)) {\n throw new Error('can not register plugin ' + plugin.name + ': plugin name already exist');\n }\n plugin_data.plugins.push(plugin);\n}\n\nexport function apply(jm, options) {\n $.w.setTimeout(function () {\n _apply(jm, options);\n }, 0);\n}\n\nfunction _apply(jm, options) {\n plugin_data.plugins.forEach(p => p.fn_init(jm, options[p.name]));\n}\n\nexport class Plugin {\n // function fn_init(jm, options){ }\n constructor(name, fn_init) {\n if (!name) {\n throw new Error('plugin must has a name');\n }\n if (!fn_init || typeof fn_init !== 'function') {\n throw new Error('plugin must has an init function');\n }\n this.name = name;\n this.fn_init = fn_init;\n }\n}\n","/**\n * @license BSD\n * @copyright 2014-2023 hizzgdev@163.com\n *\n * Project Home:\n * https://github.com/hizzgdev/jsmind/\n */\n\nimport { __version__, logger, EventType, Direction, LogLevel } from './jsmind.common.js';\nimport { merge_option } from './jsmind.option.js';\nimport { Mind } from './jsmind.mind.js';\nimport { Node } from './jsmind.node.js';\nimport { DataProvider } from './jsmind.data_provider.js';\nimport { LayoutProvider } from './jsmind.layout_provider.js';\nimport { ViewProvider } from './jsmind.view_provider.js';\nimport { ShortcutProvider } from './jsmind.shortcut_provider.js';\nimport { Plugin, register as _register_plugin, apply as apply_plugins } from './jsmind.plugin.js';\nimport { format } from './jsmind.format.js';\nimport { $ } from './jsmind.dom.js';\nimport { util as _util } from './jsmind.util.js';\n\nexport default class jsMind {\n static mind = Mind;\n static node = Node;\n static direction = Direction;\n static event_type = EventType;\n static $ = $;\n static plugin = Plugin;\n static register_plugin = _register_plugin;\n static util = _util;\n\n constructor(options) {\n jsMind.current = this;\n this.options = merge_option(options);\n logger.level(LogLevel[this.options.log_level]);\n this.version = __version__;\n this.initialized = false;\n this.mind = null;\n this.event_handles = [];\n this.init();\n }\n\n init() {\n if (!!this.initialized) {\n return;\n }\n this.initialized = true;\n var opts_layout = {\n mode: this.options.mode,\n hspace: this.options.layout.hspace,\n vspace: this.options.layout.vspace,\n pspace: this.options.layout.pspace,\n cousin_space: this.options.layout.cousin_space,\n };\n var opts_view = {\n container: this.options.container,\n support_html: this.options.support_html,\n engine: this.options.view.engine,\n enable_device_pixel_ratio: this.options.view.enable_device_pixel_ratio,\n hmargin: this.options.view.hmargin,\n vmargin: this.options.view.vmargin,\n line_width: this.options.view.line_width,\n line_color: this.options.view.line_color,\n line_style: this.options.view.line_style,\n custom_line_render: this.options.view.custom_line_render,\n draggable: this.options.view.draggable,\n hide_scrollbars_when_draggable: this.options.view.hide_scrollbars_when_draggable,\n node_overflow: this.options.view.node_overflow,\n zoom: this.options.view.zoom,\n custom_node_render: this.options.view.custom_node_render,\n expander_style: this.options.view.expander_style,\n };\n // create instance of function provider\n this.data = new DataProvider(this);\n this.layout = new LayoutProvider(this, opts_layout);\n this.view = new ViewProvider(this, opts_view);\n this.shortcut = new ShortcutProvider(this, this.options.shortcut);\n\n this.data.init();\n this.layout.init();\n this.view.init();\n this.shortcut.init();\n\n this._event_bind();\n\n apply_plugins(this, this.options.plugin);\n }\n get_editable() {\n return this.options.editable;\n }\n enable_edit() {\n this.options.editable = true;\n }\n disable_edit() {\n this.options.editable = false;\n }\n get_view_draggable() {\n return this.options.view.draggable;\n }\n enable_view_draggable() {\n this.options.view.draggable = true;\n this.view.setup_canvas_draggable(true);\n }\n disable_view_draggable() {\n this.options.view.draggable = false;\n this.view.setup_canvas_draggable(false);\n }\n // options are 'mousedown', 'click', 'dblclick', 'mousewheel'\n enable_event_handle(event_handle) {\n this.options.default_event_handle['enable_' + event_handle + '_handle'] = true;\n }\n // options are 'mousedown', 'click', 'dblclick', 'mousewheel'\n disable_event_handle(event_handle) {\n this.options.default_event_handle['enable_' + event_handle + '_handle'] = false;\n }\n set_theme(theme) {\n var theme_old = this.options.theme;\n this.options.theme = !!theme ? theme : null;\n if (theme_old != this.options.theme) {\n this.view.reset_theme();\n this.view.reset_custom_style();\n }\n }\n _event_bind() {\n this.view.add_event(this, 'mousedown', this.mousedown_handle);\n this.view.add_event(this, 'click', this.click_handle);\n this.view.add_event(this, 'dblclick', this.dblclick_handle);\n this.view.add_event(this, 'mousewheel', this.mousewheel_handle, true);\n }\n mousedown_handle(e) {\n if (!this.options.default_event_handle['enable_mousedown_handle']) {\n return;\n }\n var element = e.target || event.srcElement;\n var node_id = this.view.get_binded_nodeid(element);\n if (!!node_id) {\n if (this.view.is_node(element)) {\n this.select_node(node_id);\n }\n } else {\n this.select_clear();\n }\n }\n click_handle(e) {\n if (!this.options.default_event_handle['enable_click_handle']) {\n return;\n }\n var element = e.target || event.srcElement;\n var is_expander = this.view.is_expander(element);\n if (is_expander) {\n var node_id = this.view.get_binded_nodeid(element);\n if (!!node_id) {\n this.toggle_node(node_id);\n }\n }\n }\n dblclick_handle(e) {\n if (!this.options.default_event_handle['enable_dblclick_handle']) {\n return;\n }\n if (this.get_editable()) {\n var element = e.target || event.srcElement;\n var is_node = this.view.is_node(element);\n if (is_node) {\n var node_id = this.view.get_binded_nodeid(element);\n if (!!node_id) {\n this.begin_edit(node_id);\n }\n }\n }\n }\n // Use [Ctrl] + Mousewheel, to zoom in/out.\n mousewheel_handle(e) {\n // Test if mousewheel option is enabled and Ctrl key is pressed.\n if (!this.options.default_event_handle['enable_mousewheel_handle'] || !e.ctrlKey) {\n return;\n }\n var evt = e || event;\n // Avoid default page scrolling behavior.\n evt.preventDefault();\n\n if (evt.deltaY < 0) {\n this.view.zoom_in(evt); // wheel down\n } else {\n this.view.zoom_out(evt);\n }\n }\n begin_edit(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return false;\n } else {\n return this.begin_edit(the_node);\n }\n }\n if (this.get_editable()) {\n this.view.edit_node_begin(node);\n } else {\n logger.error('fail, this mind map is not editable.');\n return;\n }\n }\n end_edit() {\n this.view.edit_node_end();\n }\n toggle_node(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return;\n } else {\n return this.toggle_node(the_node);\n }\n }\n if (node.isroot) {\n return;\n }\n this.view.save_location(node);\n this.layout.toggle_node(node);\n this.view.relayout();\n this.view.restore_location(node);\n }\n expand_node(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return;\n } else {\n return this.expand_node(the_node);\n }\n }\n if (node.isroot) {\n return;\n }\n this.view.save_location(node);\n this.layout.expand_node(node);\n this.view.relayout();\n this.view.restore_location(node);\n }\n collapse_node(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return;\n } else {\n return this.collapse_node(the_node);\n }\n }\n if (node.isroot) {\n return;\n }\n this.view.save_location(node);\n this.layout.collapse_node(node);\n this.view.relayout();\n this.view.restore_location(node);\n }\n expand_all() {\n this.layout.expand_all();\n this.view.relayout();\n }\n collapse_all() {\n this.layout.collapse_all();\n this.view.relayout();\n }\n expand_to_depth(depth) {\n this.layout.expand_to_depth(depth);\n this.view.relayout();\n }\n _reset() {\n this.view.reset();\n this.layout.reset();\n this.data.reset();\n }\n _show(mind, skip_centering) {\n var m = mind || format.node_array.example;\n this.mind = this.data.load(m);\n if (!this.mind) {\n logger.error('data.load error');\n return;\n } else {\n logger.debug('data.load ok');\n }\n\n this.view.load();\n logger.debug('view.load ok');\n\n this.layout.layout();\n logger.debug('layout.layout ok');\n\n this.view.show(!skip_centering);\n logger.debug('view.show ok');\n\n this.invoke_event_handle(EventType.show, { data: [mind] });\n }\n show(mind, skip_centering) {\n this._reset();\n this._show(mind, skip_centering);\n }\n get_meta() {\n return {\n name: this.mind.name,\n author: this.mind.author,\n version: this.mind.version,\n };\n }\n get_data(data_format) {\n var df = data_format || 'node_tree';\n return this.data.get_data(df);\n }\n get_root() {\n return this.mind.root;\n }\n get_node(node) {\n if (Node.is_node(node)) {\n return node;\n }\n return this.mind.get_node(node);\n }\n add_node(parent_node, node_id, topic, data, direction) {\n if (this.get_editable()) {\n var the_parent_node = this.get_node(parent_node);\n var dir = Direction.of(direction);\n if (dir === undefined) {\n dir = this.layout.calculate_next_child_direction(the_parent_node);\n }\n var node = this.mind.add_node(the_parent_node, node_id, topic, data, dir);\n if (!!node) {\n this.view.add_node(node);\n this.layout.layout();\n this.view.show(false);\n this.view.reset_node_custom_style(node);\n this.expand_node(the_parent_node);\n this.invoke_event_handle(EventType.edit, {\n evt: 'add_node',\n data: [the_parent_node.id, node_id, topic, data, dir],\n node: node_id,\n });\n }\n return node;\n } else {\n logger.error('fail, this mind map is not editable');\n return null;\n }\n }\n insert_node_before(node_before, node_id, topic, data, direction) {\n if (this.get_editable()) {\n var the_node_before = this.get_node(node_before);\n var dir = Direction.of(direction);\n if (dir === undefined) {\n dir = this.layout.calculate_next_child_direction(the_node_before.parent);\n }\n var node = this.mind.insert_node_before(the_node_before, node_id, topic, data, dir);\n if (!!node) {\n this.view.add_node(node);\n this.layout.layout();\n this.view.show(false);\n this.invoke_event_handle(EventType.edit, {\n evt: 'insert_node_before',\n data: [the_node_before.id, node_id, topic, data, dir],\n node: node_id,\n });\n }\n return node;\n } else {\n logger.error('fail, this mind map is not editable');\n return null;\n }\n }\n insert_node_after(node_after, node_id, topic, data, direction) {\n if (this.get_editable()) {\n var the_node_after = this.get_node(node_after);\n var dir = Direction.of(direction);\n if (dir === undefined) {\n dir = this.layout.calculate_next_child_direction(the_node_after.parent);\n }\n var node = this.mind.insert_node_after(the_node_after, node_id, topic, data, dir);\n if (!!node) {\n this.view.add_node(node);\n this.layout.layout();\n this.view.show(false);\n this.invoke_event_handle(EventType.edit, {\n evt: 'insert_node_after',\n data: [the_node_after.id, node_id, topic, data, dir],\n node: node_id,\n });\n }\n return node;\n } else {\n logger.error('fail, this mind map is not editable');\n return null;\n }\n }\n remove_node(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return false;\n } else {\n return this.remove_node(the_node);\n }\n }\n if (this.get_editable()) {\n if (node.isroot) {\n logger.error('fail, can not remove root node');\n return false;\n }\n var node_id = node.id;\n var parent_id = node.parent.id;\n var parent_node = this.get_node(parent_id);\n this.view.save_location(parent_node);\n this.view.remove_node(node);\n this.mind.remove_node(node);\n this.layout.layout();\n this.view.show(false);\n this.view.restore_location(parent_node);\n this.invoke_event_handle(EventType.edit, {\n evt: 'remove_node',\n data: [node_id],\n node: parent_id,\n });\n return true;\n } else {\n logger.error('fail, this mind map is not editable');\n return false;\n }\n }\n update_node(node_id, topic) {\n if (this.get_editable()) {\n if (_util.text.is_empty(topic)) {\n logger.warn('fail, topic can not be empty');\n return;\n }\n var node = this.get_node(node_id);\n if (!!node) {\n if (node.topic === topic) {\n logger.info('nothing changed');\n this.view.update_node(node);\n return;\n }\n node.topic = topic;\n this.view.update_node(node);\n this.layout.layout();\n this.view.show(false);\n this.invoke_event_handle(EventType.edit, {\n evt: 'update_node',\n data: [node_id, topic],\n node: node_id,\n });\n }\n } else {\n logger.error('fail, this mind map is not editable');\n return;\n }\n }\n move_node(node_id, before_id, parent_id, direction) {\n if (this.get_editable()) {\n var node = this.get_node(node_id);\n var updated_node = this.mind.move_node(node, before_id, parent_id, direction);\n if (!!updated_node) {\n this.view.update_node(updated_node);\n this.layout.layout();\n this.view.show(false);\n this.invoke_event_handle(EventType.edit, {\n evt: 'move_node',\n data: [node_id, before_id, parent_id, direction],\n node: node_id,\n });\n }\n } else {\n logger.error('fail, this mind map is not editable');\n return;\n }\n }\n select_node(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return;\n } else {\n return this.select_node(the_node);\n }\n }\n if (!this.layout.is_visible(node)) {\n return;\n }\n this.mind.selected = node;\n this.view.select_node(node);\n this.invoke_event_handle(EventType.select, { evt: 'select_node', data: [], node: node.id });\n }\n get_selected_node() {\n if (!!this.mind) {\n return this.mind.selected;\n } else {\n return null;\n }\n }\n select_clear() {\n if (!!this.mind) {\n this.mind.selected = null;\n this.view.select_clear();\n }\n }\n is_node_visible(node) {\n return this.layout.is_visible(node);\n }\n scroll_node_to_center(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n } else {\n this.scroll_node_to_center(the_node);\n }\n return;\n }\n this.view.center_node(node);\n }\n find_node_before(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return;\n } else {\n return this.find_node_before(the_node);\n }\n }\n if (node.isroot) {\n return null;\n }\n var n = null;\n if (node.parent.isroot) {\n var c = node.parent.children;\n var prev = null;\n var ni = null;\n for (var i = 0; i < c.length; i++) {\n ni = c[i];\n if (node.direction === ni.direction) {\n if (node.id === ni.id) {\n n = prev;\n }\n prev = ni;\n }\n }\n } else {\n n = this.mind.get_node_before(node);\n }\n return n;\n }\n find_node_after(node) {\n if (!Node.is_node(node)) {\n var the_node = this.get_node(node);\n if (!the_node) {\n logger.error('the node[id=' + node + '] can not be found.');\n return;\n } else {\n return this.find_node_after(the_node);\n }\n }\n if (node.isroot) {\n return null;\n }\n var n = null;\n if (node.parent.isroot) {\n var c = node.parent.children;\n var found = false;\n var ni = null;\n for (var i = 0; i < c.length; i++) {\n ni = c[i];\n if (node.direction === ni.direction) {\n if (found) {\n n = ni;\n break;\n }\n if (node.id === ni.id) {\n found = true;\n }\n }\n }\n } else {\n n = this.mind.get_node_after(node);\n }\n return n;\n }\n set_node_color(node_id, bg_color, fg_color) {\n if (this.get_editable()) {\n var node = this.mind.get_node(node_id);\n if (!!node) {\n if (!!bg_color) {\n node.data['background-color'] = bg_color;\n }\n if (!!fg_color) {\n node.data['foreground-color'] = fg_color;\n }\n this.view.reset_node_custom_style(node);\n }\n } else {\n logger.error('fail, this mind map is not editable');\n return null;\n }\n }\n set_node_font_style(node_id, size, weight, style) {\n if (this.get_editable()) {\n var node = this.mind.get_node(node_id);\n if (!!node) {\n if (!!size) {\n node.data['font-size'] = size;\n }\n if (!!weight) {\n node.data['font-weight'] = weight;\n }\n if (!!style) {\n node.data['font-style'] = style;\n }\n this.view.reset_node_custom_style(node);\n this.view.update_node(node);\n this.layout.layout();\n this.view.show(false);\n }\n } else {\n logger.error('fail, this mind map is not editable');\n return null;\n }\n }\n set_node_background_image(node_id, image, width, height, rotation) {\n if (this.get_editable()) {\n var node = this.mind.get_node(node_id);\n if (!!node) {\n if (!!image) {\n node.data['background-image'] = image;\n }\n if (!!width) {\n node.data['width'] = width;\n }\n if (!!height) {\n node.data['height'] = height;\n }\n if (!!rotation) {\n node.data['background-rotation'] = rotation;\n }\n this.view.reset_node_custom_style(node);\n this.view.update_node(node);\n this.layout.layout();\n this.view.show(false);\n }\n } else {\n logger.error('fail, this mind map is not editable');\n return null;\n }\n }\n set_node_background_rotation(node_id, rotation) {\n if (this.get_editable()) {\n var node = this.mind.get_node(node_id);\n if (!!node) {\n if (!node.data['background-image']) {\n logger.error(\n 'fail, only can change rotation angle of node with background image'\n );\n return null;\n }\n node.data['background-rotation'] = rotation;\n this.view.reset_node_custom_style(node);\n this.view.update_node(node);\n this.layout.layout();\n this.view.show(false);\n }\n } else {\n logger.error('fail, this mind map is not editable');\n return null;\n }\n }\n resize() {\n this.view.resize();\n }\n // callback(type ,data)\n add_event_listener(callback) {\n if (typeof callback === 'function') {\n this.event_handles.push(callback);\n }\n }\n clear_event_listener() {\n this.event_handles = [];\n }\n invoke_event_handle(type, data) {\n var j = this;\n $.w.setTimeout(function () {\n j._invoke_event_handle(type, data);\n }, 0);\n }\n _invoke_event_handle(type, data) {\n var l = this.event_handles.length;\n for (var i = 0; i < l; i++) {\n this.event_handles[i](type, data);\n }\n }\n\n static show(options, mind) {\n logger.warn(\n '`jsMind.show(options, mind)` is deprecated, please use `jm = new jsMind(options); jm.show(mind);` instead'\n );\n var _jm = new jsMind(options);\n _jm.show(mind);\n return _jm;\n }\n}\n"],"names":["__version__","String","prototype","startsWith","p","this","slice","length","Direction","left","center","right","of","dir","parseInt","toLowerCase","EventType","show","resize","edit","select","LogLevel","debug","info","warn","error","disable","_noop","logger","console","level","log","log_level","$","constructor","w","d","document","g","id","getElementById","c","tag","createElement","t","n","hasChildNodes","firstChild","nodeValue","appendChild","createTextNode","h","HTMLElement","innerHTML","i","el","nodeType","style","ownerDocument","on","e","addEventListener","attachEvent","window","util","file","read","file_data","fn_callback","reader","FileReader","onload","result","name","readAsText","save","type","blob","Blob","bb","BlobBuilder","MozBlobBuilder","WebKitBlobBuilder","MSBlobBuilder","append","getBlob","navigator","msSaveBlob","blob_url","URL","webkitURL","createObjectURL","anchor","visibility","href","download","body","evt","createEvent","initEvent","dispatchEvent","removeChild","location","json","json2string","JSON","stringify","string2json","json_str","parse","merge","b","a","o","Object","toString","call","uuid","newid","Date","getTime","Math","random","substring","text","is_empty","s","replace","default_options","container","editable","theme","mode","support_html","view","engine","enable_device_pixel_ratio","hmargin","vmargin","line_width","line_color","line_style","draggable","hide_scrollbars_when_draggable","node_overflow","zoom","min","max","step","custom_node_render","expander_style","layout","hspace","vspace","pspace","cousin_space","default_event_handle","enable_mousedown_handle","enable_click_handle","enable_dblclick_handle","enable_mousewheel_handle","shortcut","enable","handles","mapping","addchild","addbrother","editnode","delnode","toggle","up","down","plugin","Node","sId","iIndex","sTopic","oData","bIsRoot","oParent","eDirection","bExpanded","index","topic","data","isroot","parent","direction","expanded","children","_data","get_location","vd","x","abs_x","y","abs_y","get_size","width","height","compare","node1","node2","i1","i2","inherited","parent_node","node","pid","is_node","Mind","author","version","root","selected","nodes","get_node","node_id","set_root","_put_node","add_node","idx","push","_update_index","insert_node_before","node_before","node_index","get_node_before","the_node","insert_node_after","node_after","get_node_after","move_node","before_id","parent_id","_move_node","_flow_node_direction","len","_move_node_internal","sibling","si","splice","origin_parent","remove_node","ci","node_parent","k","sort","DEFAULT_META","format","node_tree","example","meta","get_mind","source","df","mind","_parse","get_data","_build_node","node_root","_extract_data","_extract_subnode","node_json","node_data","node_array","_array","reverse","root_node","_extract_root","root_json","extract_count","parentid","node_direction","sub_extract_count","_array_node","freemind","xml","xml_doc","_parse_xml","xml_root","_find_root","_load_node","xml_lines","_build_map","join","DOMParser","parseFromString","ActiveXObject","async","loadXML","childNodes","tagName","ns","xml_node","getAttribute","node_topic","node_folded","topic_children","topic_child","textContent","_load_attributes","node_expanded","node_position","child","attr","attr_data","pos","_escape","_line_regex","lines","split","_fill_nodes","node_path","line","match","substr","diff","pop","_build_lines","prefix","Array","DataProvider","jm","init","reset","load","mind_data","data_format","LayoutProvider","options","opts","isside","bounds","cache_valid","calculate_next_child_direction","children_len","r","layout_direction","layout_offset","_layout_direction_root","layout_data","children_count","side_index","_layout_direction_side","subnode","offset_x","offset_y","outer_height","left_nodes","right_nodes","unshift","outer_height_left","_layout_offset_subnodes","outer_height_right","total_height","nodes_count","node_outer_height","base_y","pd","set_visible","_should_reserve_cousin_space","middle_height","_layout_offset_subnodes_height","get_node_offset","offset_cache","_offset_","offset_p","get_node_point","view_data","get_node_point_in","get_node_point_out","pout_cache","_pout_","get_expander_point","ex_p","ceil","get_min_size","pout","toggle_node","collapse_node","expand_node","part_layout","invoke_event_handle","expand_all","collapse_all","expand_to_depth","target_depth","curr_nodes","curr_depth","depth","root_layout_data","visible","is_expand","is_visible","SvgGraph","e_svg","setAttribute","size","line_drawing","straight","_line_to","curved","_bezier_to","init_line_render","createElementNS","custom_line_render","drawing","path","x1","y1","x2","y2","ctx","start_point","end_point","element","set_size","clear","draw_line","pin","offset","color","copy_to","dest_canvas_ctx","callback","img","Image","drawImage","src","btoa","XMLSerializer","serializeToString","CanvasGraph","e_canvas","className","canvas_ctx","getContext","dpr","device_pixel_ratio","scale","clearRect","strokeStyle","lineWidth","lineCap","beginPath","moveTo","bezierCurveTo","stroke","lineTo","ViewProvider","e_panel","e_nodes","selected_node","editing_node","graph","render_node","_custom_node_render","_default_node_render","zoom_current","devicePixelRatio","_initialized","e_editor","tabIndex","v","event","keyCode","edit_node_end","stopPropagation","offsetParent","IntersectionObserver","entities","observer","isIntersecting","unobserve","observe","add_event","obj","event_name","event_handle","capture_by_panel","target","get_binded_nodeid","parentElement","is_expander","clear_lines","clear_nodes","reset_theme","theme_name","reset_custom_style","nodeid","reset_node_custom_style","setup_canvas_draggable","init_nodes","expand_size","min_size","min_width","min_height","client_w","clientWidth","client_h","clientHeight","init_nodes_size","doc_frag","createDocumentFragment","create_node_element","run_in_c11y_mode_if_needed","func","position","top","d_e","expander","_reset_node_custom_style","update_node","origin_style","select_node","restore_selected_node_custom_style","clear_selected_node_custom_style","select_clear","get_editing_node","is_editing","edit_node_begin","ncs","getComputedStyle","value","getPropertyValue","zIndex","focus","get_view_offset","_show","show_nodes","show_lines","zoom_in","set_zoom","zoom_out","e_panel_rect","getBoundingClientRect","zoom_center","panel_scroll_x","scrollLeft","panel_scroll_y","scrollTop","keep_center","center_node","relayout","save_location","_saved_location","restore_location","node_element","view_offset","display","_show_expander","expander_text","_get_expander_text","p_expander","ele","backgroundColor","fontSize","fontWeight","fontStyle","backgroundImage","scaledImageData","toDataURL","backgroundSize","transform","_offset","enabled","dragging","eventDown","clientX","clientY","eventMove","scrollBy","node_center_point","scrollTo","zoomIn","zoomOut","setZoom","ShortcutProvider","_newid","_mapping","handle","handler","bind","handle_addchild","handle_addbrother","handle_editnode","handle_delnode","handle_toggle","handle_up","handle_down","handle_left","handle_right","keys","isArray","key","id_generator","enable_shortcut","disable_shortcut","which","preventDefault","kc","metaKey","ctrlKey","altKey","shiftKey","_jm","get_selected_node","begin_edit","up_node","find_node_before","np","down_node","find_node_after","_handle_direction","floor","plugin_data","plugins","register","Plugin","Error","map","includes","apply","setTimeout","forEach","fn_init","_apply","jsMind","static","_register_plugin","_util","current","merge_option","initialized","event_handles","opts_layout","opts_view","_event_bind","apply_plugins","get_editable","enable_edit","disable_edit","get_view_draggable","enable_view_draggable","disable_view_draggable","enable_event_handle","disable_event_handle","set_theme","theme_old","mousedown_handle","click_handle","dblclick_handle","mousewheel_handle","srcElement","deltaY","end_edit","_reset","skip_centering","m","get_meta","get_root","the_parent_node","undefined","the_node_before","the_node_after","updated_node","is_node_visible","scroll_node_to_center","prev","ni","found","set_node_color","bg_color","fg_color","set_node_font_style","weight","set_node_background_image","image","rotation","set_node_background_rotation","add_event_listener","clear_event_listener","j","_invoke_event_handle","l"],"mappings":"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"}