From d03f063f1feee2324a9affd2490146a85ff9792b Mon Sep 17 00:00:00 2001 From: Marco Braak Date: Fri, 10 Jan 2020 17:38:32 +0100 Subject: [PATCH] Update code style (#587) * Use camelcase for filenames * Use const in webpack config * Add tsc command; also remove duplicate package * Do not use underscore for private methods * Fix source maps * Build * Update typescript to 3.7 * Use optional chaining * Remove js files from src_test * Build --- build/test.js | 714 +++++++------ build/test.js.map | 2 +- build/tree.jquery.js | 426 ++++---- build/tree.jquery.js.map | 2 +- lib/{data_loader.js => dataLoader.js} | 6 +- ..._drop_handler.js => dragAndDropHandler.js} | 20 +- ...ements_renderer.js => elementsRenderer.js} | 10 +- lib/{imouse_widget.js => imouseWidget.js} | 0 lib/{itree_widget.js => itreeWidget.js} | 0 lib/{key_handler.js => keyHandler.js} | 8 +- lib/mouse.widget.js | 50 +- lib/node.js | 41 +- lib/{node_element.js => nodeElement.js} | 8 +- ...e_state_handler.js => saveStateHandler.js} | 30 +- lib/{scroll_handler.js => scrollHandler.js} | 22 +- ...t_node_handler.js => selectNodeHandler.js} | 3 +- lib/simple.widget.js | 11 +- lib/tree.jquery.js | 214 ++-- package.json | 6 +- production | 2 +- src/{data_loader.ts => dataLoader.ts} | 20 +- ..._drop_handler.ts => dragAndDropHandler.ts} | 135 ++- ...ements_renderer.ts => elementsRenderer.ts} | 79 +- src/{imouse_widget.ts => imouseWidget.ts} | 0 src/{itree_widget.ts => itreeWidget.ts} | 2 +- src/{key_handler.ts => keyHandler.ts} | 14 +- src/mouse.widget.ts | 60 +- src/node.ts | 63 +- src/{node_element.ts => nodeElement.ts} | 34 +- ...e_state_handler.ts => saveStateHandler.ts} | 39 +- src/{scroll_handler.ts => scrollHandler.ts} | 53 +- ...t_node_handler.ts => selectNodeHandler.ts} | 7 +- src/simple.widget.ts | 36 +- src/tree.jquery.ts | 257 +++-- src_test/test.js | 7 - src_test/test.js.map | 1 + src_test/test.ts | 8 +- src_test/testJqtree.js.map | 1 + src_test/{test_jqtree.ts => testJqtree.ts} | 141 ++- src_test/testNodeUtil.js.map | 1 + .../{test_node_util.ts => testNodeUtil.ts} | 0 src_test/testTree.js.map | 1 + src_test/{test_tree.ts => testTree.ts} | 70 +- src_test/testUtil.js.map | 1 + src_test/{test_util.ts => testUtil.ts} | 0 src_test/test_jqtree.js | 992 ------------------ src_test/test_node_util.js | 14 - src_test/test_tree.js | 479 --------- src_test/test_util.js | 27 - src_test/utilsForTest.js.map | 1 + .../{utils_for_test.ts => utilsForTest.ts} | 0 src_test/utils_for_test.js | 71 -- tree.jquery.debug.js | 426 ++++---- tree.jquery.js | 3 +- webpack.config.base.js | 23 +- 55 files changed, 1877 insertions(+), 2764 deletions(-) rename lib/{data_loader.js => dataLoader.js} (95%) rename lib/{drag_and_drop_handler.js => dragAndDropHandler.js} (96%) rename lib/{elements_renderer.js => elementsRenderer.js} (95%) rename lib/{imouse_widget.js => imouseWidget.js} (100%) rename lib/{itree_widget.js => itreeWidget.js} (100%) rename lib/{key_handler.js => keyHandler.js} (92%) rename lib/{node_element.js => nodeElement.js} (97%) rename lib/{save_state_handler.js => saveStateHandler.js} (86%) rename lib/{scroll_handler.js => scrollHandler.js} (91%) rename lib/{select_node_handler.js => selectNodeHandler.js} (96%) rename src/{data_loader.ts => dataLoader.ts} (85%) rename src/{drag_and_drop_handler.ts => dragAndDropHandler.ts} (83%) rename src/{elements_renderer.ts => elementsRenderer.ts} (77%) rename src/{imouse_widget.ts => imouseWidget.ts} (100%) rename src/{itree_widget.ts => itreeWidget.ts} (97%) rename src/{key_handler.ts => keyHandler.ts} (88%) rename src/{node_element.ts => nodeElement.ts} (89%) rename src/{save_state_handler.ts => saveStateHandler.ts} (85%) rename src/{scroll_handler.ts => scrollHandler.ts} (82%) rename src/{select_node_handler.ts => selectNodeHandler.ts} (94%) delete mode 100644 src_test/test.js create mode 100644 src_test/test.js.map create mode 100644 src_test/testJqtree.js.map rename src_test/{test_jqtree.ts => testJqtree.ts} (91%) create mode 100644 src_test/testNodeUtil.js.map rename src_test/{test_node_util.ts => testNodeUtil.ts} (100%) create mode 100644 src_test/testTree.js.map rename src_test/{test_tree.ts => testTree.ts} (91%) create mode 100644 src_test/testUtil.js.map rename src_test/{test_util.ts => testUtil.ts} (100%) delete mode 100644 src_test/test_jqtree.js delete mode 100644 src_test/test_node_util.js delete mode 100644 src_test/test_tree.js delete mode 100644 src_test/test_util.js create mode 100644 src_test/utilsForTest.js.map rename src_test/{utils_for_test.ts => utilsForTest.ts} (100%) delete mode 100644 src_test/utils_for_test.js diff --git a/build/test.js b/build/test.js index 5dc961a7..5e9328e1 100644 --- a/build/test.js +++ b/build/test.js @@ -235,7 +235,7 @@ var Node = /** @class */ (function () { */ Node.prototype.addChild = function (node) { this.children.push(node); - node._setParent(this); + node.setParent(this); }; /* Add child at position. Index starts at 0. @@ -247,7 +247,7 @@ var Node = /** @class */ (function () { */ Node.prototype.addChildAtPosition = function (node, index) { this.children.splice(index, 0, node); - node._setParent(this); + node.setParent(this); }; /* Remove child. This also removes the children of the node. @@ -257,7 +257,7 @@ var Node = /** @class */ (function () { Node.prototype.removeChild = function (node) { // remove children from the index node.removeChildren(); - this._removeChild(node); + this.doRemoveChild(node); }; /* Get child index. @@ -326,7 +326,7 @@ var Node = /** @class */ (function () { return; } else { - movedNode.parent._removeChild(movedNode); + movedNode.parent.doRemoveChild(movedNode); if (position === Position.After) { if (targetNode.parent) { targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1); @@ -352,7 +352,13 @@ var Node = /** @class */ (function () { return nodes.map(function (node) { var tmpNode = {}; for (var k in node) { - if (["parent", "children", "element", "tree", "isEmptyFolder"].indexOf(k) === -1 && + if ([ + "parent", + "children", + "element", + "tree", + "isEmptyFolder" + ].indexOf(k) === -1 && Object.prototype.hasOwnProperty.call(node, k)) { var v = node[k]; tmpNode[k] = v; @@ -395,7 +401,9 @@ var Node = /** @class */ (function () { var node = new this.tree.nodeClass(nodeInfo); var childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex + 1); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -409,7 +417,9 @@ var Node = /** @class */ (function () { var node = new this.tree.nodeClass(nodeInfo); var childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -421,7 +431,7 @@ var Node = /** @class */ (function () { } else { var newParent = new this.tree.nodeClass(nodeInfo); - newParent._setParent(this.tree); + newParent.setParent(this.tree); var originalParent = this.parent; for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) { var child = _a[_i]; @@ -441,7 +451,9 @@ var Node = /** @class */ (function () { Node.prototype.append = function (nodeInfo) { var node = new this.tree.nodeClass(nodeInfo); this.addChild(node); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -449,7 +461,9 @@ var Node = /** @class */ (function () { Node.prototype.prepend = function (nodeInfo) { var node = new this.tree.nodeClass(nodeInfo); this.addChildAtPosition(node, 0); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -565,7 +579,8 @@ var Node = /** @class */ (function () { else { var previousSibling = this.getPreviousSibling(); if (previousSibling) { - if (!previousSibling.hasChildren() || !previousSibling.is_open) { + if (!previousSibling.hasChildren() || + !previousSibling.is_open) { // Previous sibling return previousSibling; } @@ -625,12 +640,12 @@ var Node = /** @class */ (function () { }; addNode(data); }; - Node.prototype._setParent = function (parent) { + Node.prototype.setParent = function (parent) { this.parent = parent; this.tree = parent.tree; this.tree.addNodeToIndex(this); }; - Node.prototype._removeChild = function (node) { + Node.prototype.doRemoveChild = function (node) { this.children.splice(this.getChildIndex(node), 1); this.tree.removeNodeFromIndex(node); }; @@ -702,7 +717,7 @@ var SimpleWidget = /** @class */ (function () { jQuery.data(el, dataKey, widget); } // Call init after setting data, so we can call methods - widget._init(); + widget.init(); } } return $el; @@ -725,7 +740,8 @@ var SimpleWidget = /** @class */ (function () { var widget = jQuery.data(el, getDataKey()); if (widget && widget instanceof SimpleWidget) { var widgetFunction = widget[functionName]; - if (widgetFunction && typeof widgetFunction === "function") { + if (widgetFunction && + typeof widgetFunction === "function") { result = widgetFunction.apply(widget, args); } } @@ -756,12 +772,12 @@ var SimpleWidget = /** @class */ (function () { }; }; SimpleWidget.prototype.destroy = function () { - this._deinit(); + this.deinit(); }; - SimpleWidget.prototype._init = function () { + SimpleWidget.prototype.init = function () { // }; - SimpleWidget.prototype._deinit = function () { + SimpleWidget.prototype.deinit = function () { // }; SimpleWidget.defaults = {}; @@ -803,26 +819,26 @@ var __assign = (this && this.__assign) || function () { exports.__esModule = true; var version_1 = __webpack_require__(5); var jQuery = __webpack_require__(2); -var drag_and_drop_handler_1 = __webpack_require__(6); -var elements_renderer_1 = __webpack_require__(7); -var data_loader_1 = __webpack_require__(8); -var key_handler_1 = __webpack_require__(9); +var dragAndDropHandler_1 = __webpack_require__(6); +var elementsRenderer_1 = __webpack_require__(7); +var dataLoader_1 = __webpack_require__(8); +var keyHandler_1 = __webpack_require__(9); var mouse_widget_1 = __webpack_require__(10); -var save_state_handler_1 = __webpack_require__(11); -var scroll_handler_1 = __webpack_require__(12); -var select_node_handler_1 = __webpack_require__(13); +var saveStateHandler_1 = __webpack_require__(11); +var scrollHandler_1 = __webpack_require__(12); +var selectNodeHandler_1 = __webpack_require__(13); var simple_widget_1 = __webpack_require__(3); var node_1 = __webpack_require__(0); var util_1 = __webpack_require__(1); -var node_element_1 = __webpack_require__(14); +var nodeElement_1 = __webpack_require__(14); var NODE_PARAM_IS_EMPTY = "Node parameter is empty"; var PARAM_IS_EMPTY = "Parameter is empty: "; var JqTreeWidget = /** @class */ (function (_super) { __extends(JqTreeWidget, _super); function JqTreeWidget() { var _this = _super !== null && _super.apply(this, arguments) || this; - _this._handleClick = function (e) { - var clickTarget = _this._getClickTarget(e.target); + _this.handleClick = function (e) { + var clickTarget = _this.getClickTarget(e.target); if (clickTarget) { if (clickTarget.type === "button") { _this.toggle(clickTarget.node, _this.options.slide); @@ -836,24 +852,25 @@ var JqTreeWidget = /** @class */ (function (_super) { click_event: e // eslint-disable-line @typescript-eslint/camelcase }); if (!event_1.isDefaultPrevented()) { - _this._selectNode(node); + _this.doSelectNode(node); } } } }; - _this._handleDblclick = function (e) { - var clickTarget = _this._getClickTarget(e.target); - if (clickTarget && clickTarget.type === "label") { + _this.handleDblclick = function (e) { + var _a; + var clickTarget = _this.getClickTarget(e.target); + if (((_a = clickTarget) === null || _a === void 0 ? void 0 : _a.type) === "label") { _this._triggerEvent("tree.dblclick", { node: clickTarget.node, click_event: e // eslint-disable-line @typescript-eslint/camelcase }); } }; - _this._handleContextmenu = function (e) { + _this.handleContextmenu = function (e) { var $div = jQuery(e.target).closest("ul.jqtree-tree .jqtree-element"); if ($div.length) { - var node = _this._getNode($div); + var node = _this.getNode($div); if (node) { e.preventDefault(); e.stopPropagation(); @@ -885,7 +902,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return this.tree; }; JqTreeWidget.prototype.selectNode = function (node, optionsParam) { - this._selectNode(node, optionsParam); + this.doSelectNode(node, optionsParam); return this.element; }; JqTreeWidget.prototype.getSelectedNode = function () { @@ -900,7 +917,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return JSON.stringify(this.tree.getData()); }; JqTreeWidget.prototype.loadData = function (data, parentNode) { - this._loadData(data, parentNode); + this.doLoadData(data, parentNode); return this.element; }; /* @@ -920,16 +937,16 @@ var JqTreeWidget = /** @class */ (function (_super) { JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) { if (typeof param1 === "string") { // first parameter is url - this._loadDataFromUrl(param1, param2, param3); + this.doLoadDataFromUrl(param1, param2, param3); } else { // first parameter is not url - this._loadDataFromUrl(null, param1, param2); + this.doLoadDataFromUrl(null, param1, param2); } return this.element; }; JqTreeWidget.prototype.reload = function (onFinished) { - this._loadDataFromUrl(null, null, onFinished); + this.doLoadDataFromUrl(null, null, onFinished); return this.element; }; JqTreeWidget.prototype.getNodeById = function (nodeId) { @@ -942,7 +959,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return this.tree.getNodesByProperty(key, value); }; JqTreeWidget.prototype.getNodeByHtmlElement = function (element) { - return this._getNode(jQuery(element)); + return this.getNode(jQuery(element)); }; JqTreeWidget.prototype.getNodeByCallback = function (callback) { return this.tree.getNodeByCallback(callback); @@ -978,8 +995,8 @@ var JqTreeWidget = /** @class */ (function (_super) { } var slide = slideParam == null ? this.options.slide : slideParam; if (node.isFolder() || node.isEmptyFolder) { - new node_element_1.FolderElement(node, this).close(slide, this.options.animationSpeed); - this._saveState(); + new nodeElement_1.FolderElement(node, this).close(slide, this.options.animationSpeed); + this.saveState(); } return this.element; }; @@ -1044,7 +1061,9 @@ var JqTreeWidget = /** @class */ (function (_super) { return node; }; JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) { - var parentNode = !parentNodeParam ? this.tree : parentNodeParam; + var parentNode = !parentNodeParam + ? this.tree + : parentNodeParam; var node = parentNode.prepend(newNodeInfo); this._refreshElements(parentNode); return node; @@ -1068,7 +1087,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } } this._refreshElements(node); - this._selectCurrentNode(); + this.selectCurrentNode(); return this.element; }; JqTreeWidget.prototype.moveNode = function (node, targetNode, position) { @@ -1096,7 +1115,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (this.selectNodeHandler) { this.selectNodeHandler.addToSelection(node); this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus); - this._saveState(); + this.saveState(); } return this.element; }; @@ -1126,7 +1145,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (this.selectNodeHandler) { this.selectNodeHandler.removeFromSelection(node); this._getNodeElementForNode(node).deselect(); - this._saveState(); + this.saveState(); } return this.element; }; @@ -1195,12 +1214,12 @@ var JqTreeWidget = /** @class */ (function (_super) { var _this = this; if (slide === void 0) { slide = true; } var doOpenNode = function (_node, _slide, _onFinished) { - var folderElement = new node_element_1.FolderElement(_node, _this); + var folderElement = new nodeElement_1.FolderElement(_node, _this); folderElement.open(_onFinished, _slide, _this.options.animationSpeed); }; if (node.isFolder() || node.isEmptyFolder) { if (node.load_on_demand) { - this._loadFolderOnDemand(node, slide, onFinished); + this.loadFolderOnDemand(node, slide, onFinished); } else { var parent_2 = node.parent; @@ -1212,7 +1231,7 @@ var JqTreeWidget = /** @class */ (function (_super) { parent_2 = parent_2.parent; } doOpenNode(node, slide, onFinished); - this._saveState(); + this.saveState(); } } }; @@ -1226,14 +1245,14 @@ var JqTreeWidget = /** @class */ (function (_super) { }; JqTreeWidget.prototype._getNodeElementForNode = function (node) { if (node.isFolder()) { - return new node_element_1.FolderElement(node, this); + return new nodeElement_1.FolderElement(node, this); } else { - return new node_element_1.NodeElement(node, this); + return new nodeElement_1.NodeElement(node, this); } }; JqTreeWidget.prototype._getNodeElement = function ($element) { - var node = this._getNode($element); + var node = this.getNode($element); if (node) { return this._getNodeElementForNode(node); } @@ -1242,61 +1261,62 @@ var JqTreeWidget = /** @class */ (function (_super) { } }; JqTreeWidget.prototype._containsElement = function (element) { - var node = this._getNode(jQuery(element)); + var node = this.getNode(jQuery(element)); return node != null && node.tree === this.tree; }; JqTreeWidget.prototype._getScrollLeft = function () { - return (this.scrollHandler && this.scrollHandler.getScrollLeft()) || 0; + var _a, _b; + return ((_b = (_a = this) === null || _a === void 0 ? void 0 : _a.scrollHandler) === null || _b === void 0 ? void 0 : _b.getScrollLeft()) || 0; }; - JqTreeWidget.prototype._init = function () { - _super.prototype._init.call(this); + JqTreeWidget.prototype.init = function () { + _super.prototype.init.call(this); this.element = this.$el; this.mouseDelay = 300; this.isInitialized = false; - this.options.rtl = this._getRtlOption(); + this.options.rtl = this.getRtlOption(); if (this.options.closedIcon === null) { - this.options.closedIcon = this._getDefaultClosedIcon(); + this.options.closedIcon = this.getDefaultClosedIcon(); } - this.renderer = new elements_renderer_1["default"](this); - this.dataLoader = new data_loader_1["default"](this); - if (save_state_handler_1["default"] != null) { - this.saveStateHandler = new save_state_handler_1["default"](this); + this.renderer = new elementsRenderer_1["default"](this); + this.dataLoader = new dataLoader_1["default"](this); + if (saveStateHandler_1["default"] != null) { + this.saveStateHandler = new saveStateHandler_1["default"](this); } else { this.options.saveState = false; } - if (select_node_handler_1["default"] != null) { - this.selectNodeHandler = new select_node_handler_1["default"](this); + if (selectNodeHandler_1["default"] != null) { + this.selectNodeHandler = new selectNodeHandler_1["default"](this); } - if (drag_and_drop_handler_1.DragAndDropHandler != null) { - this.dndHandler = new drag_and_drop_handler_1.DragAndDropHandler(this); + if (dragAndDropHandler_1.DragAndDropHandler != null) { + this.dndHandler = new dragAndDropHandler_1.DragAndDropHandler(this); } else { this.options.dragAndDrop = false; } - if (scroll_handler_1["default"] != null) { - this.scrollHandler = new scroll_handler_1["default"](this); + if (scrollHandler_1["default"] != null) { + this.scrollHandler = new scrollHandler_1["default"](this); } - if (key_handler_1["default"] != null && select_node_handler_1["default"] != null) { - this.keyHandler = new key_handler_1["default"](this); + if (keyHandler_1["default"] != null && selectNodeHandler_1["default"] != null) { + this.keyHandler = new keyHandler_1["default"](this); } - this._initData(); - this.element.click(this._handleClick); - this.element.dblclick(this._handleDblclick); + this.initData(); + this.element.click(this.handleClick); + this.element.dblclick(this.handleDblclick); if (this.options.useContextMenu) { - this.element.on("contextmenu", this._handleContextmenu); + this.element.on("contextmenu", this.handleContextmenu); } }; - JqTreeWidget.prototype._deinit = function () { + JqTreeWidget.prototype.deinit = function () { this.element.empty(); this.element.off(); if (this.keyHandler) { this.keyHandler.deinit(); } this.tree = new node_1.Node({}, true); - _super.prototype._deinit.call(this); + _super.prototype.deinit.call(this); }; - JqTreeWidget.prototype._mouseCapture = function (positionInfo) { + JqTreeWidget.prototype.mouseCapture = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseCapture(positionInfo); } @@ -1304,7 +1324,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseStart = function (positionInfo) { + JqTreeWidget.prototype.mouseStart = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStart(positionInfo); } @@ -1312,7 +1332,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseDrag = function (positionInfo) { + JqTreeWidget.prototype.mouseDrag = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { var result = this.dndHandler.mouseDrag(positionInfo); if (this.scrollHandler) { @@ -1324,7 +1344,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseStop = function (positionInfo) { + JqTreeWidget.prototype.mouseStop = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStop(positionInfo); } @@ -1332,21 +1352,21 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._initData = function () { + JqTreeWidget.prototype.initData = function () { if (this.options.data) { - this._loadData(this.options.data, null); + this.doLoadData(this.options.data, null); } else { - var dataUrl = this._getDataUrlInfo(null); + var dataUrl = this.getDataUrlInfo(null); if (dataUrl) { - this._loadDataFromUrl(null, null, null); + this.doLoadDataFromUrl(null, null, null); } else { - this._loadData([], null); + this.doLoadData([], null); } } }; - JqTreeWidget.prototype._getDataUrlInfo = function (node) { + JqTreeWidget.prototype.getDataUrlInfo = function (node) { var _this = this; var dataUrl = this.options.dataUrl || this.element.data("url"); var getUrlFromString = function () { @@ -1355,14 +1375,15 @@ var JqTreeWidget = /** @class */ (function (_super) { return urlInfo; }; var setUrlInfoData = function (urlInfo) { - if (node && node.id) { + var _a; + if ((_a = node) === null || _a === void 0 ? void 0 : _a.id) { // Load on demand of a subtree; add node parameter var data = { node: node.id }; urlInfo["data"] = data; } else { // Add selected_node parameter - var selectedNodeId = _this._getNodeIdToBeSelected(); + var selectedNodeId = _this.getNodeIdToBeSelected(); if (selectedNodeId) { var data = { selected_node: selectedNodeId }; // eslint-disable-line @typescript-eslint/camelcase urlInfo["data"] = data; @@ -1383,7 +1404,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return dataUrl; } }; - JqTreeWidget.prototype._getNodeIdToBeSelected = function () { + JqTreeWidget.prototype.getNodeIdToBeSelected = function () { if (this.options.saveState && this.saveStateHandler) { return this.saveStateHandler.getNodeIdToBeSelected(); } @@ -1391,7 +1412,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return null; } }; - JqTreeWidget.prototype._initTree = function (data) { + JqTreeWidget.prototype.initTree = function (data) { var _this = this; var doInit = function () { if (!_this.isInitialized) { @@ -1404,19 +1425,19 @@ var JqTreeWidget = /** @class */ (function (_super) { this.selectNodeHandler.clear(); } this.tree.loadFromData(data); - var mustLoadOnDemand = this._setInitialState(); + var mustLoadOnDemand = this.setInitialState(); this._refreshElements(null); if (!mustLoadOnDemand) { doInit(); } else { // Load data on demand and then init the tree - this._setInitialStateOnDemand(doInit); + this.setInitialStateOnDemand(doInit); } }; // Set initial state, either by restoring the state or auto-opening nodes // result: must load nodes on demand? - JqTreeWidget.prototype._setInitialState = function () { + JqTreeWidget.prototype.setInitialState = function () { var _this = this; var restoreState = function () { // result: is state restored, must load on demand? @@ -1440,7 +1461,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (_this.options.autoOpen === false) { return false; } - var maxLevel = _this._getAutoOpenMaxLevel(); + var maxLevel = _this.getAutoOpenMaxLevel(); var mustLoadOnDemand = false; _this.tree.iterate(function (node, level) { if (node.load_on_demand) { @@ -1465,7 +1486,7 @@ var JqTreeWidget = /** @class */ (function (_super) { }; // Set the initial state for nodes that are loaded on demand // Call cb_finished when done - JqTreeWidget.prototype._setInitialStateOnDemand = function (cbFinished) { + JqTreeWidget.prototype.setInitialStateOnDemand = function (cbFinished) { var _this = this; var restoreState = function () { if (!(_this.options.saveState && _this.saveStateHandler)) { @@ -1483,7 +1504,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } }; var autoOpenNodes = function () { - var maxLevel = _this._getAutoOpenMaxLevel(); + var maxLevel = _this.getAutoOpenMaxLevel(); var loadingCount = 0; var loadAndOpenNode = function (node) { loadingCount += 1; @@ -1515,7 +1536,7 @@ var JqTreeWidget = /** @class */ (function (_super) { autoOpenNodes(); } }; - JqTreeWidget.prototype._getAutoOpenMaxLevel = function () { + JqTreeWidget.prototype.getAutoOpenMaxLevel = function () { if (this.options.autoOpen === true) { return -1; } @@ -1523,11 +1544,11 @@ var JqTreeWidget = /** @class */ (function (_super) { return parseInt(this.options.autoOpen, 10); } }; - JqTreeWidget.prototype._getClickTarget = function (element) { + JqTreeWidget.prototype.getClickTarget = function (element) { var $target = jQuery(element); var $button = $target.closest(".jqtree-toggler"); if ($button.length) { - var node = this._getNode($button); + var node = this.getNode($button); if (node) { return { type: "button", @@ -1538,7 +1559,7 @@ var JqTreeWidget = /** @class */ (function (_super) { else { var $el = $target.closest(".jqtree-element"); if ($el.length) { - var node = this._getNode($el); + var node = this.getNode($el); if (node) { return { type: "label", @@ -1549,7 +1570,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } return null; }; - JqTreeWidget.prototype._getNode = function ($element) { + JqTreeWidget.prototype.getNode = function ($element) { var $li = $element.closest("li.jqtree_common"); if ($li.length === 0) { return null; @@ -1558,12 +1579,12 @@ var JqTreeWidget = /** @class */ (function (_super) { return $li.data("node"); } }; - JqTreeWidget.prototype._saveState = function () { + JqTreeWidget.prototype.saveState = function () { if (this.options.saveState && this.saveStateHandler) { this.saveStateHandler.saveState(); } }; - JqTreeWidget.prototype._selectCurrentNode = function () { + JqTreeWidget.prototype.selectCurrentNode = function () { var node = this.getSelectedNode(); if (node) { var nodeElement = this._getNodeElementForNode(node); @@ -1572,13 +1593,13 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._deselectCurrentNode = function () { + JqTreeWidget.prototype.deselectCurrentNode = function () { var node = this.getSelectedNode(); if (node) { this.removeFromSelection(node); } }; - JqTreeWidget.prototype._getDefaultClosedIcon = function () { + JqTreeWidget.prototype.getDefaultClosedIcon = function () { if (this.options.rtl) { // triangle to the left return "◀"; @@ -1588,13 +1609,13 @@ var JqTreeWidget = /** @class */ (function (_super) { return "►"; } }; - JqTreeWidget.prototype._getRtlOption = function () { + JqTreeWidget.prototype.getRtlOption = function () { if (this.options.rtl != null) { return this.options.rtl; } else { var dataRtl = this.element.data("rtl"); - if (dataRtl != null && dataRtl !== false) { + if (dataRtl !== null && dataRtl !== false) { return true; } else { @@ -1602,7 +1623,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._selectNode = function (inode, optionsParam) { + JqTreeWidget.prototype.doSelectNode = function (inode, optionsParam) { var _this = this; if (!this.selectNodeHandler) { return; @@ -1611,7 +1632,8 @@ var JqTreeWidget = /** @class */ (function (_super) { var selectOptions = __assign(__assign({}, defaultOptions), (optionsParam || {})); var canSelect = function () { if (_this.options.onCanSelectNode) { - return _this.options.selectable && _this.options.onCanSelectNode(inode); + return (_this.options.selectable && + _this.options.onCanSelectNode(inode)); } else { return _this.options.selectable; @@ -1630,7 +1652,7 @@ var JqTreeWidget = /** @class */ (function (_super) { }; if (!inode) { // Called with empty node -> deselect current node - this._deselectCurrentNode(); + this.deselectCurrentNode(); saveState(); return; } @@ -1640,7 +1662,7 @@ var JqTreeWidget = /** @class */ (function (_super) { var node = inode; if (this.selectNodeHandler.isNodeSelected(node)) { if (selectOptions.mustToggle) { - this._deselectCurrentNode(); + this.deselectCurrentNode(); this._triggerEvent("tree.select", { node: null, previous_node: node // eslint-disable-line @typescript-eslint/camelcase @@ -1649,7 +1671,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } else { var deselectedNode = this.getSelectedNode(); - this._deselectCurrentNode(); + this.deselectCurrentNode(); this.addToSelection(node, selectOptions.mustSetFocus); this._triggerEvent("tree.select", { node: node, @@ -1659,25 +1681,25 @@ var JqTreeWidget = /** @class */ (function (_super) { } saveState(); }; - JqTreeWidget.prototype._loadData = function (data, parentNode) { + JqTreeWidget.prototype.doLoadData = function (data, parentNode) { if (!data) { return; } else { this._triggerEvent("tree.load_data", { tree_data: data }); // eslint-disable-line @typescript-eslint/camelcase if (parentNode) { - this._deselectNodes(parentNode); - this._loadSubtree(data, parentNode); + this.deselectNodes(parentNode); + this.loadSubtree(data, parentNode); } else { - this._initTree(data); + this.initTree(data); } if (this.isDragging() && this.dndHandler) { this.dndHandler.refresh(); } } }; - JqTreeWidget.prototype._deselectNodes = function (parentNode) { + JqTreeWidget.prototype.deselectNodes = function (parentNode) { if (this.selectNodeHandler) { var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode); for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) { @@ -1686,21 +1708,21 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._loadSubtree = function (data, parentNode) { + JqTreeWidget.prototype.loadSubtree = function (data, parentNode) { parentNode.loadFromData(data); parentNode.load_on_demand = false; // eslint-disable-line @typescript-eslint/camelcase parentNode.is_loading = false; // eslint-disable-line @typescript-eslint/camelcase this._refreshElements(parentNode); }; - JqTreeWidget.prototype._loadDataFromUrl = function (urlInfoParam, parentNode, onFinished) { - var urlInfo = urlInfoParam || this._getDataUrlInfo(parentNode); + JqTreeWidget.prototype.doLoadDataFromUrl = function (urlInfoParam, parentNode, onFinished) { + var urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode); this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished); }; - JqTreeWidget.prototype._loadFolderOnDemand = function (node, slide, onFinished) { + JqTreeWidget.prototype.loadFolderOnDemand = function (node, slide, onFinished) { var _this = this; if (slide === void 0) { slide = true; } node.is_loading = true; // eslint-disable-line @typescript-eslint/camelcase - this._loadDataFromUrl(null, node, function () { + this.doLoadDataFromUrl(null, node, function () { _this._openNode(node, slide, onFinished); }); }; @@ -1795,7 +1817,8 @@ var DragAndDropHandler = /** @class */ (function () { if (!this.mustCaptureElement($element)) { return null; } - if (this.treeWidget.options.onIsMoveHandle && !this.treeWidget.options.onIsMoveHandle($element)) { + if (this.treeWidget.options.onIsMoveHandle && + !this.treeWidget.options.onIsMoveHandle($element)) { return null; } var nodeElement = this.treeWidget._getNodeElement($element); @@ -1817,7 +1840,9 @@ var DragAndDropHandler = /** @class */ (function () { } }; DragAndDropHandler.prototype.mouseStart = function (positionInfo) { - if (!this.currentItem || positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (!this.currentItem || + positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return false; } else { @@ -1826,7 +1851,9 @@ var DragAndDropHandler = /** @class */ (function () { var left = offset ? offset.left : 0; var top_1 = offset ? offset.top : 0; var node = this.currentItem.node; - var nodeName = this.treeWidget.options.autoEscape ? util_1.htmlEscape(node.name) : node.name; + var nodeName = this.treeWidget.options.autoEscape + ? util_1.htmlEscape(node.name) + : node.name; this.dragElement = new DragElement(nodeName, positionInfo.pageX - left, positionInfo.pageY - top_1, this.treeWidget.element); this.isDragging = true; this.positionInfo = positionInfo; @@ -1939,7 +1966,10 @@ var DragAndDropHandler = /** @class */ (function () { }; DragAndDropHandler.prototype.findHoveredArea = function (x, y) { var dimensions = this.getTreeDimensions(); - if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) { + if (x < dimensions.left || + y < dimensions.top || + x > dimensions.right || + y > dimensions.bottom) { return null; } var low = 0; @@ -1961,7 +1991,9 @@ var DragAndDropHandler = /** @class */ (function () { }; DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) { var node = area.node; - return node.isFolder() && !node.is_open && area.position === node_1.Position.Inside; + return (node.isFolder() && + !node.is_open && + area.position === node_1.Position.Inside); }; DragAndDropHandler.prototype.updateDropHint = function () { if (!this.hoveredArea) { @@ -2323,8 +2355,10 @@ var ElementsRenderer = /** @class */ (function () { return ul; }; ElementsRenderer.prototype.createLi = function (node, level) { - var isSelected = Boolean(this.treeWidget.selectNodeHandler && this.treeWidget.selectNodeHandler.isNodeSelected(node)); - var mustShowFolder = node.isFolder() || (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); + var isSelected = Boolean(this.treeWidget.selectNodeHandler && + this.treeWidget.selectNodeHandler.isNodeSelected(node)); + var mustShowFolder = node.isFolder() || + (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); var li = mustShowFolder ? this.createFolderLi(node, level, isSelected) : this.createNodeLi(node, level, isSelected); @@ -2336,7 +2370,9 @@ var ElementsRenderer = /** @class */ (function () { ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) { var buttonClasses = this.getButtonClasses(node); var folderClasses = this.getFolderClasses(node, isSelected); - var iconElement = node.is_open ? this.openedIconElement : this.closedIconElement; + var iconElement = node.is_open + ? this.openedIconElement + : this.closedIconElement; // li var li = document.createElement("li"); li.className = "jqtree_common " + folderClasses; @@ -2528,7 +2564,11 @@ var DataLoader = /** @class */ (function () { }; DataLoader.prototype.parseData = function (data) { var dataFilter = this.treeWidget.options.dataFilter; - var parsedData = data instanceof Array || typeof data === "object" ? data : data != null ? jQuery.parseJSON(data) : []; + var parsedData = data instanceof Array || typeof data === "object" + ? data + : data != null + ? jQuery.parseJSON(data) + : []; return dataFilter ? dataFilter(parsedData) : parsedData; }; return DataLoader; @@ -2642,11 +2682,15 @@ var KeyHandler = /** @class */ (function () { } }; KeyHandler.prototype.canHandleKeyboard = function () { - return (this.treeWidget.options.keyboardSupport && this.isFocusOnTree() && this.treeWidget.getSelectedNode() != null); + return (this.treeWidget.options.keyboardSupport && + this.isFocusOnTree() && + this.treeWidget.getSelectedNode() != null); }; KeyHandler.prototype.isFocusOnTree = function () { var activeElement = document.activeElement; - return Boolean(activeElement && activeElement.tagName === "SPAN" && this.treeWidget._containsElement(activeElement)); + return Boolean(activeElement && + activeElement.tagName === "SPAN" && + this.treeWidget._containsElement(activeElement)); }; KeyHandler.LEFT = 37; KeyHandler.UP = 38; @@ -2690,21 +2734,25 @@ var MouseWidget = /** @class */ (function (_super) { if (e.which !== 1) { return; } - var result = _this._handleMouseDown(_this._getPositionInfo(e)); + var result = _this.handleMouseDown(_this.getPositionInfo(e)); if (result) { e.preventDefault(); } return result; }; - _this.mouseMove = function (e) { return _this._handleMouseMove(e, _this._getPositionInfo(e)); }; - _this.mouseUp = function (e) { return _this._handleMouseUp(_this._getPositionInfo(e)); }; + _this.mouseMove = function (e) { + return _this.handleMouseMove(e, _this.getPositionInfo(e)); + }; + _this.mouseUp = function (e) { + return _this.handleMouseUp(_this.getPositionInfo(e)); + }; _this.touchStart = function (e) { var touchEvent = e.originalEvent; if (touchEvent.touches.length > 1) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseDown(_this._getPositionInfo(touch)); + return _this.handleMouseDown(_this.getPositionInfo(touch)); }; _this.touchMove = function (e) { var touchEvent = e.originalEvent; @@ -2712,7 +2760,7 @@ var MouseWidget = /** @class */ (function (_super) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseMove(e, _this._getPositionInfo(touch)); + return _this.handleMouseMove(e, _this.getPositionInfo(touch)); }; _this.touchEnd = function (e) { var touchEvent = e.originalEvent; @@ -2720,14 +2768,14 @@ var MouseWidget = /** @class */ (function (_super) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseUp(_this._getPositionInfo(touch)); + return _this.handleMouseUp(_this.getPositionInfo(touch)); }; return _this; } MouseWidget.prototype.setMouseDelay = function (mouseDelay) { this.mouseDelay = mouseDelay; }; - MouseWidget.prototype._init = function () { + MouseWidget.prototype.init = function () { this.$el.on("mousedown.mousewidget", this.mouseDown); this.$el.on("touchstart.mousewidget", this.touchStart); this.isMouseStarted = false; @@ -2736,36 +2784,36 @@ var MouseWidget = /** @class */ (function (_super) { this.isMouseDelayMet = true; this.mouseDownInfo = null; }; - MouseWidget.prototype._deinit = function () { + MouseWidget.prototype.deinit = function () { this.$el.off("mousedown.mousewidget"); this.$el.off("touchstart.mousewidget"); var $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("mouseup.mousewidget"); }; - MouseWidget.prototype._handleMouseDown = function (positionInfo) { + MouseWidget.prototype.handleMouseDown = function (positionInfo) { // We may have missed mouseup (out of window) if (this.isMouseStarted) { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } this.mouseDownInfo = positionInfo; - if (!this._mouseCapture(positionInfo)) { + if (!this.mouseCapture(positionInfo)) { return; } - this._handleStartMouse(); + this.handleStartMouse(); return true; }; - MouseWidget.prototype._handleStartMouse = function () { + MouseWidget.prototype.handleStartMouse = function () { var $document = jQuery(document); $document.on("mousemove.mousewidget", this.mouseMove); $document.on("touchmove.mousewidget", this.touchMove); $document.on("mouseup.mousewidget", this.mouseUp); $document.on("touchend.mousewidget", this.touchEnd); if (this.mouseDelay) { - this._startMouseDelayTimer(); + this.startMouseDelayTimer(); } }; - MouseWidget.prototype._startMouseDelayTimer = function () { + MouseWidget.prototype.startMouseDelayTimer = function () { var _this = this; if (this.mouseDelayTimer) { clearTimeout(this.mouseDelayTimer); @@ -2775,26 +2823,26 @@ var MouseWidget = /** @class */ (function (_super) { }, this.mouseDelay); this.isMouseDelayMet = false; }; - MouseWidget.prototype._handleMouseMove = function (e, positionInfo) { + MouseWidget.prototype.handleMouseMove = function (e, positionInfo) { if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); return e.preventDefault(); } if (this.mouseDelay && !this.isMouseDelayMet) { return true; } if (this.mouseDownInfo) { - this.isMouseStarted = this._mouseStart(this.mouseDownInfo) !== false; + this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false; } if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); } else { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } return !this.isMouseStarted; }; - MouseWidget.prototype._getPositionInfo = function (e) { + MouseWidget.prototype.getPositionInfo = function (e) { return { pageX: e.pageX, pageY: e.pageY, @@ -2802,7 +2850,7 @@ var MouseWidget = /** @class */ (function (_super) { originalEvent: e }; }; - MouseWidget.prototype._handleMouseUp = function (positionInfo) { + MouseWidget.prototype.handleMouseUp = function (positionInfo) { var $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("touchmove.mousewidget"); @@ -2810,7 +2858,7 @@ var MouseWidget = /** @class */ (function (_super) { $document.off("touchend.mousewidget"); if (this.isMouseStarted) { this.isMouseStarted = false; - this._mouseStop(positionInfo); + this.mouseStop(positionInfo); } }; return MouseWidget; @@ -2840,9 +2888,9 @@ var SaveStateHandler = /** @class */ (function () { } }; SaveStateHandler.prototype.getStateFromStorage = function () { - var jsonData = this._loadFromStorage(); + var jsonData = this.loadFromStorage(); if (jsonData) { - return this._parseState(jsonData); + return this.parseState(jsonData); } else { return null; @@ -2860,7 +2908,9 @@ var SaveStateHandler = /** @class */ (function () { }); return openNodes; }; - var getSelectedNodeIds = function () { return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; }); }; + var getSelectedNodeIds = function () { + return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; }); + }; /* eslint-disable @typescript-eslint/camelcase */ return { open_nodes: getOpenNodeIds(), @@ -2881,18 +2931,18 @@ var SaveStateHandler = /** @class */ (function () { else { var mustLoadOnDemand = false; if (state.open_nodes) { - mustLoadOnDemand = this._openInitialNodes(state.open_nodes); + mustLoadOnDemand = this.openInitialNodes(state.open_nodes); } if (state.selected_node) { - this._resetSelection(); - this._selectInitialNodes(state.selected_node); + this.resetSelection(); + this.selectInitialNodes(state.selected_node); } return mustLoadOnDemand; } }; SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cbFinished) { if (state) { - this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); + this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); } else { cbFinished(); @@ -2907,7 +2957,7 @@ var SaveStateHandler = /** @class */ (function () { return null; } }; - SaveStateHandler.prototype._parseState = function (jsonData) { + SaveStateHandler.prototype.parseState = function (jsonData) { var state = jQuery.parseJSON(jsonData); // Check if selected_node is an int (instead of an array) if (state && state.selected_node && util_1.isInt(state.selected_node)) { @@ -2916,7 +2966,7 @@ var SaveStateHandler = /** @class */ (function () { } return state; }; - SaveStateHandler.prototype._loadFromStorage = function () { + SaveStateHandler.prototype.loadFromStorage = function () { if (this.treeWidget.options.onGetStateFromStorage) { return this.treeWidget.options.onGetStateFromStorage(); } @@ -2924,7 +2974,7 @@ var SaveStateHandler = /** @class */ (function () { return localStorage.getItem(this.getKeyName()); } }; - SaveStateHandler.prototype._openInitialNodes = function (nodeIds) { + SaveStateHandler.prototype.openInitialNodes = function (nodeIds) { var mustLoadOnDemand = false; for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) { var nodeDd = nodeIds_1[_i]; @@ -2940,7 +2990,7 @@ var SaveStateHandler = /** @class */ (function () { } return mustLoadOnDemand; }; - SaveStateHandler.prototype._selectInitialNodes = function (nodeIds) { + SaveStateHandler.prototype.selectInitialNodes = function (nodeIds) { var selectCount = 0; for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) { var nodeId = nodeIds_2[_i]; @@ -2954,7 +3004,7 @@ var SaveStateHandler = /** @class */ (function () { } return selectCount !== 0; }; - SaveStateHandler.prototype._resetSelection = function () { + SaveStateHandler.prototype.resetSelection = function () { var selectNodeHandler = this.treeWidget.selectNodeHandler; if (selectNodeHandler) { var selectedNodes = selectNodeHandler.getSelectedNodes(); @@ -2963,7 +3013,7 @@ var SaveStateHandler = /** @class */ (function () { }); } }; - SaveStateHandler.prototype._setInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) { + SaveStateHandler.prototype.doSetInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) { var _this = this; var loadingCount = 0; var nodeIds = nodeIdsParam; @@ -2987,7 +3037,7 @@ var SaveStateHandler = /** @class */ (function () { } } nodeIds = newNodesIds; - if (_this._selectInitialNodes(selectedNodes)) { + if (_this.selectInitialNodes(selectedNodes)) { _this.treeWidget._refreshElements(null); } if (loadingCount === 0) { @@ -3110,7 +3160,8 @@ var ScrollHandler = /** @class */ (function () { for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) { var attr = cssAttributes_1[_i]; var overflowValue = $el.css(attr); - if (overflowValue === "auto" || overflowValue === "scroll") { + if (overflowValue === "auto" || + overflowValue === "scroll") { return true; } } @@ -3136,7 +3187,9 @@ var ScrollHandler = /** @class */ (function () { setDocumentAsScrollParent(); } var $scrollParent = getParentWithOverflow(); - if ($scrollParent && $scrollParent.length && $scrollParent[0].tagName !== "HTML") { + if ($scrollParent && + $scrollParent.length && + $scrollParent[0].tagName !== "HTML") { this.$scrollParent = $scrollParent; var offset = this.$scrollParent.offset(); this.scrollParentTop = offset ? offset.top : 0; @@ -3182,7 +3235,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.checkVerticalScrolling = function () { - var hoveredArea = this.treeWidget.dndHandler && this.treeWidget.dndHandler.hoveredArea; + var hoveredArea = this.treeWidget.dndHandler && + this.treeWidget.dndHandler.hoveredArea; if (hoveredArea && hoveredArea.top !== this.previousTop) { this.previousTop = hoveredArea.top; if (this.$scrollParent) { @@ -3194,7 +3248,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.checkHorizontalScrolling = function () { - var positionInfo = this.treeWidget.dndHandler && this.treeWidget.dndHandler.positionInfo; + var positionInfo = this.treeWidget.dndHandler && + this.treeWidget.dndHandler.positionInfo; if (!positionInfo) { return; } @@ -3206,7 +3261,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return; } var $scrollParent = this.$scrollParent; @@ -3215,7 +3271,8 @@ var ScrollHandler = /** @class */ (function () { return; } var scrollParent = $scrollParent[0]; - var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < scrollParent.scrollWidth; + var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < + scrollParent.scrollWidth; var canScrollLeft = scrollParent.scrollLeft > 0; var rightEdge = scrollParentOffset.left + scrollParent.clientWidth; var leftEdge = scrollParentOffset.left; @@ -3229,7 +3286,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return; } var $document = jQuery(document); @@ -3337,7 +3395,8 @@ var SelectNodeHandler = /** @class */ (function () { var _this = this; if (includeChildren === void 0) { includeChildren = false; } if (node.id == null) { - if (this.selectedSingleNode && node.element === this.selectedSingleNode.element) { + if (this.selectedSingleNode && + node.element === this.selectedSingleNode.element) { this.selectedSingleNode = null; } } @@ -3427,7 +3486,9 @@ var NodeElement = /** @class */ (function () { return this.$element.children("ul:first"); }; NodeElement.prototype.getSpan = function () { - return this.$element.children(".jqtree-element").find("span.jqtree-title"); + return this.$element + .children(".jqtree-element") + .find("span.jqtree-title"); }; NodeElement.prototype.getLi = function () { return this.$element; @@ -3516,7 +3577,9 @@ var FolderElement = /** @class */ (function (_super) { return !this.node.is_open && position === node_1.Position.Inside; }; FolderElement.prototype.getButton = function () { - return this.$element.children(".jqtree-element").find("a.jqtree-toggler"); + return this.$element + .children(".jqtree-element") + .find("a.jqtree-toggler"); }; return FolderElement; }(NodeElement)); @@ -3686,7 +3749,7 @@ QUnit.config.testTimeout = 5000; exports.__esModule = true; __webpack_require__(4); -var utils_for_test_1 = __webpack_require__(15); +var utilsForTest_1 = __webpack_require__(15); var node_1 = __webpack_require__(0); __webpack_require__(20); var module = QUnit.module, test = QUnit.test; @@ -3703,7 +3766,7 @@ module("jqtree", { }); test("create jqtree from data", function (assert) { $("#tree1").tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); assert.equal($("#tree1").children().length, 1, "number of children on level 0"); assert.ok($("#tree1") @@ -3751,22 +3814,22 @@ test("toggle", function (assert) { var $node1; // eslint-disable-line prefer-const var node1; // eslint-disable-line prefer-const $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); $tree.on("tree.open", function () { - assert.ok(!utils_for_test_1.isNodeClosed($node1), "node1 is open"); + assert.ok(!utilsForTest_1.isNodeClosed($node1), "node1 is open"); // 2. close node1 $tree.tree("toggle", node1); }); $tree.on("tree.close", function () { - assert.ok(utils_for_test_1.isNodeClosed($node1), "node1 is closed"); + assert.ok(utilsForTest_1.isNodeClosed($node1), "node1 is closed"); done(); }); var tree = $tree.tree("getTree"); node1 = tree.children[0]; $node1 = $tree.find("ul.jqtree-tree li:eq(0)"); // node1 is initially closed - assert.ok(utils_for_test_1.isNodeClosed($node1), "node1 is closed"); + assert.ok(utilsForTest_1.isNodeClosed($node1), "node1 is closed"); // 1. open node1 $tree.tree("toggle", node1); }); @@ -3775,7 +3838,7 @@ test("click event", function (assert) { // create tree var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, selectable: true }); var $node1 = $tree.find("ul.jqtree-tree li:first"); @@ -3817,7 +3880,7 @@ test("saveState", function (assert) { } function createTree() { $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, saveState: true, onSetStateFromStorage: setState, onGetStateFromStorage: getState, @@ -3853,7 +3916,7 @@ test("getSelectedNode", function (assert) { var $tree = $("#tree1"); // create tree $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, selectable: true }); // there is no node selected @@ -3869,7 +3932,7 @@ test("toJson", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); // 1. call toJson assert.equal($tree.tree("toJson"), '[{"name":"node1","id":123,"intProperty":1,"strProperty":"1",' + @@ -3886,17 +3949,17 @@ test("loadData", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, autoOpen: true }); // first node is 'node1' assert.equal($tree.find("> ul > li:first .jqtree-element:first > span").text(), "node1"); // - load new data - $tree.tree("loadData", utils_for_test_1.exampleData2); + $tree.tree("loadData", utilsForTest_1.exampleData2); // first node is 'main' assert.equal($tree.find("> ul > li:first .jqtree-element:first > span").text(), "main"); // - load new data under node 'child3' - $tree.tree("loadData", utils_for_test_1.exampleData); + $tree.tree("loadData", utilsForTest_1.exampleData); var child3 = $tree.tree("getNodeByName", "child3"); var data = [ { name: "c4", id: 200 }, @@ -3957,7 +4020,7 @@ test("openNode and closeNode", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); var node2 = $tree.tree("getNodeByName", "node2"); assert.equal(node2.name, "node2"); @@ -3965,11 +4028,11 @@ test("openNode and closeNode", function (assert) { // 1. open node2 $tree.tree("openNode", node2, false); assert.equal(node2.is_open, true); - assert.equal(utils_for_test_1.isNodeOpen($(node2.element)), true); + assert.equal(utilsForTest_1.isNodeOpen($(node2.element)), true); // 2. close node2 $tree.tree("closeNode", node2, false); assert.equal(node2.is_open, false); - assert.equal(utils_for_test_1.isNodeClosed($(node2.element)), true); + assert.equal(utilsForTest_1.isNodeClosed($(node2.element)), true); // 3. open child1 var node1 = $tree.tree("getNodeByName", "node1"); var child1 = $tree.tree("getNodeByName", "child1"); @@ -3987,7 +4050,7 @@ function testOpenNodeWithCallback(slide, includeSlideParam, assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); var node2 = $tree.tree("getNodeByName", "node2"); // open node2 @@ -4017,7 +4080,7 @@ test("selectNode", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, selectable: true }); var node1 = $tree.tree("getTree").children[0]; @@ -4048,7 +4111,7 @@ test("selectNode when another node is selected", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, selectable: true }); var node1 = $tree.tree("getTree").children[0]; @@ -4075,10 +4138,12 @@ test("click toggler", function (assert) { var done = assert.async(); var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, selectable: true }); - var $title = $tree.find("li:eq(0)").find("> .jqtree-element > span.jqtree-title"); + var $title = $tree + .find("li:eq(0)") + .find("> .jqtree-element > span.jqtree-title"); assert.equal($title.text(), "node1"); var $toggler = $title.prev(); assert.ok($toggler.is("a.jqtree-toggler.jqtree-closed")); @@ -4099,7 +4164,7 @@ test("getNodeById", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); var node2 = $tree.tree("getNodeByName", "node2"); // 1. get 'node2' by id @@ -4196,7 +4261,7 @@ test("onCreateLi", function (assert) { // 1. init tree with onCreateLi var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, onCreateLi: function (node, $li) { var $span = $li.children(".jqtree-element").find("span"); $span.html("_" + node.name + "_"); @@ -4212,7 +4277,7 @@ test("save state", function (assert) { // 1. init tree var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, selectable: true, saveState: "my_tree" }); @@ -4224,7 +4289,7 @@ test("save state", function (assert) { // 3. init tree again $tree.tree("destroy"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, selectable: true, saveState: "my_tree" }); @@ -4234,7 +4299,7 @@ test("generate hit areas", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); // 1. get hit areas var node = $tree.tree("getNodeById", 123); @@ -4249,7 +4314,7 @@ test("removeNode", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, selectable: true }); // 1. Remove selected node; node is 'child1' @@ -4257,17 +4322,17 @@ test("removeNode", function (assert) { $tree.tree("selectNode", child1); assert.equal($tree.tree("getSelectedNode").name, "child1"); $tree.tree("removeNode", child1); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child2 node2 child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child2 node2 child3"); // getSelectedNode must now return false assert.equal($tree.tree("getSelectedNode"), false); // 2. No node is selected; remove child3 - $tree.tree("loadData", utils_for_test_1.exampleData); + $tree.tree("loadData", utilsForTest_1.exampleData); var child3 = $tree.tree("getNodeByName", "child3"); $tree.tree("removeNode", child3); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 node2"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1 child2 node2"); assert.equal($tree.tree("getSelectedNode"), false); // 3. Remove parent of selected node - $tree.tree("loadData", utils_for_test_1.exampleData); + $tree.tree("loadData", utilsForTest_1.exampleData); var child1a = $tree.tree("getNodeByName", "child1"); var node1 = $tree.tree("getNodeByName", "node1"); $tree.tree("selectNode", child1a); @@ -4275,27 +4340,27 @@ test("removeNode", function (assert) { // node is unselected assert.equal($tree.tree("getSelectedNode"), false); // 4. Remove unselected node without an id - $tree.tree("loadData", utils_for_test_1.exampleData2); + $tree.tree("loadData", utilsForTest_1.exampleData2); var c1 = $tree.tree("getNodeByName", "c1"); $tree.tree("removeNode", c1); - assert.equal(utils_for_test_1.formatTitles($tree), "main c2"); + assert.equal(utilsForTest_1.formatTitles($tree), "main c2"); }); test("appendNode", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); var node1 = $tree.tree("getNodeByName", "node1"); // 1. Add child3 to node1 $tree.tree("appendNode", "child3", node1); - assert.equal(utils_for_test_1.formatTitles($(node1.element)), "node1 child1 child2 child3"); + assert.equal(utilsForTest_1.formatTitles($(node1.element)), "node1 child1 child2 child3"); // 2. Add child4 to child1 var child1 = $tree.tree("getNodeByName", "child1"); // Node 'child1' does not have a toggler button assert.equal($(child1.element).find("> .jqtree-element > .jqtree-toggler").length, 0); $tree.tree("appendNode", "child4", child1); - assert.equal(utils_for_test_1.formatTitles($(child1.element)), "child1 child4"); + assert.equal(utilsForTest_1.formatTitles($(child1.element)), "child1 child4"); // Node 'child1' must get a toggler button assert.equal($(child1.element).find("> .jqtree-element > .jqtree-toggler").length, 1); }); @@ -4303,12 +4368,12 @@ test("prependNode", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); var node1 = $tree.tree("getNodeByName", "node1"); // 1. Prepend child0 to node1 $tree.tree("prependNode", "child0", node1); - assert.equal(utils_for_test_1.formatTitles($(node1.element)), "node1 child0 child1 child2"); + assert.equal(utilsForTest_1.formatTitles($(node1.element)), "node1 child0 child1 child2"); }); test("init event for local data", function (assert) { // setup @@ -4321,7 +4386,7 @@ test("init event for local data", function (assert) { }); // init tree $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); }); test("init event for ajax", function (assert) { @@ -4330,7 +4395,7 @@ test("init event for ajax", function (assert) { var $tree = $("#tree1"); $.mockjax({ url: "/tree/", - responseText: utils_for_test_1.exampleData, + responseText: utilsForTest_1.exampleData, logging: false }); $tree.on("tree.init", function () { @@ -4345,19 +4410,19 @@ test("init event for ajax", function (assert) { test("updateNode", function (assert) { // setup var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 node2 child3"); + $tree.tree({ data: utilsForTest_1.exampleData }); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1 child2 node2 child3"); // -- update name var node2 = $tree.tree("getNodeByName", "node2"); $tree.tree("updateNode", node2, "CHANGED"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 CHANGED child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1 child2 CHANGED child3"); assert.equal(node2.name, "CHANGED"); // -- update data $tree.tree("updateNode", node2, { name: "xyz", tag1: "abc" }); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 xyz child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1 child2 xyz child3"); assert.equal(node2.name, "xyz"); assert.equal(node2.tag1, "abc"); // - update id @@ -4373,7 +4438,7 @@ test("updateNode", function (assert) { // update child1 var child1 = $tree.tree("getNodeByName", "child1"); $tree.tree("updateNode", child1, "child1a"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1a child2 xyz child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1a child2 xyz child3"); // select child1 $tree.tree("selectNode", child1); $tree.tree("updateNode", child1, "child1b"); @@ -4384,26 +4449,26 @@ test("updateNode", function (assert) { name: "child1", children: [{ id: 5, name: "child1-1" }] }); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child1-1 child2 xyz child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1 child1-1 child2 xyz child3"); // remove children $tree.tree("updateNode", child1, { id: child1.id, name: "child1", children: [] }); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 xyz child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1 child2 xyz child3"); }); test("moveNode", function (assert) { // setup var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); + $tree.tree({ data: utilsForTest_1.exampleData }); var child1 = $tree.tree("getNodeByName", "child1"); var child2 = $tree.tree("getNodeByName", "child2"); var node1 = $tree.tree("getNodeByName", "node1"); var node2 = $tree.tree("getNodeByName", "node2"); // -- Move child1 after node2 $tree.tree("moveNode", child1, node2, "after"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child2 node2 child3 child1"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child2 node2 child3 child1"); // -- Check that illegal moves are skipped $tree.tree("moveNode", node1, child2, "inside"); }); @@ -4439,45 +4504,45 @@ test("load on demand", function (assert) { // -- open node function handleOpenNode(node) { assert.equal(node.name, "node1"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1", "4"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1", "4"); done(); } var node1 = $tree.tree("getNodeByName", "node1"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1", "1"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1", "1"); $tree.tree("openNode", node1, handleOpenNode); }); test("addNodeAfter", function (assert) { // setup var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); + $tree.tree({ data: utilsForTest_1.exampleData }); var node1 = $tree.tree("getNodeByName", "node1"); // -- add node after node1 $tree.tree("addNodeAfter", "node3", node1); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 node3 node2 child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1 child2 node3 node2 child3"); }); test("addNodeBefore", function (assert) { // setup var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); + $tree.tree({ data: utilsForTest_1.exampleData }); var node1 = $tree.tree("getNodeByName", "node1"); // -- add node before node1 $tree.tree("addNodeBefore", "node3", node1); - assert.equal(utils_for_test_1.formatTitles($tree), "node3 node1 child1 child2 node2 child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node3 node1 child1 child2 node2 child3"); }); test("addParentNode", function (assert) { // setup var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); + $tree.tree({ data: utilsForTest_1.exampleData }); var child3 = $tree.tree("getNodeByName", "child3"); // -- add parent to child3 $tree.tree("addParentNode", "node3", child3); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 node2 node3 child3"); + assert.equal(utilsForTest_1.formatTitles($tree), "node1 child1 child2 node2 node3 child3"); }); test("mouse events", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData, + data: utilsForTest_1.exampleData, dragAndDrop: true, autoOpen: true }); @@ -4504,12 +4569,12 @@ test("mouse events", function (assert) { pageY: child3Offset.top })); $tree.trigger("mouseup"); - assert.equal(utils_for_test_1.formatTitles($tree), "node2 child3 node1 child1 child2"); + assert.equal(utilsForTest_1.formatTitles($tree), "node2 child3 node1 child1 child2"); }); test("multiple select", function (assert) { // setup var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); + $tree.tree({ data: utilsForTest_1.exampleData }); var child1 = $tree.tree("getNodeByName", "child1"); var child2 = $tree.tree("getNodeByName", "child2"); // -- add nodes to selection @@ -4519,7 +4584,7 @@ test("multiple select", function (assert) { $tree.tree("addToSelection", child2); // -- get selected nodes var selectedNodes = $tree.tree("getSelectedNodes"); - assert.equal(utils_for_test_1.formatNodes(selectedNodes), "child1 child2"); + assert.equal(utilsForTest_1.formatNodes(selectedNodes), "child1 child2"); }); test("keyboard", function (assert) { // setup @@ -4527,7 +4592,7 @@ test("keyboard", function (assert) { function keyDown(key) { $tree.trigger($.Event("keydown", { which: key })); } - $tree.tree({ data: utils_for_test_1.exampleData }); + $tree.tree({ data: utilsForTest_1.exampleData }); var node1 = $tree.tree("getNodeByName", "node1"); // select node1 $tree.tree("selectNode", node1); @@ -4557,7 +4622,7 @@ test("getNodesByProperty", function (assert) { // setup var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); var node2 = $tree.tree("getNodeByName", "node2"); // 1. get 'node1' by property @@ -4641,7 +4706,7 @@ test("dataUrl is function", function (assert) { test("getNodeByHtmlElement", function (assert) { var $tree = $("#tree1"); $tree.tree({ - data: utils_for_test_1.exampleData + data: utilsForTest_1.exampleData }); var $el = $(".jqtree-title"); // Get node for jquery element @@ -4715,7 +4780,7 @@ test("getPosition", function (assert) { exports.__esModule = true; var module = QUnit.module, test = QUnit.test; -var utils_for_test_1 = __webpack_require__(15); +var utilsForTest_1 = __webpack_require__(15); var node_1 = __webpack_require__(0); module("Tree"); test("constructor", function (assert) { @@ -4741,14 +4806,14 @@ test("constructor", function (assert) { }); test("create tree from data", function (assert) { function checkData(tree) { - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2", "nodes on level 1"); - assert.equal(utils_for_test_1.formatNodes(tree.children[0].children), "child1 child2", "children of node1"); - assert.equal(utils_for_test_1.formatNodes(tree.children[1].children), "child3", "children of node2"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "node1 node2", "nodes on level 1"); + assert.equal(utilsForTest_1.formatNodes(tree.children[0].children), "child1 child2", "children of node1"); + assert.equal(utilsForTest_1.formatNodes(tree.children[1].children), "child3", "children of node2"); assert.equal(tree.children[0].id, 123, "id"); } // - create tree from example data var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); checkData(tree); // - create tree from new data format var data = [ @@ -4771,7 +4836,7 @@ test("addChild", function (assert) { var tree = new node_1.Node("tree1", true); tree.addChild(new node_1.Node("abc")); tree.addChild(new node_1.Node("def")); - assert.equal(utils_for_test_1.formatNodes(tree.children), "abc def", "children"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "abc def", "children"); var node = tree.children[0]; if (!node.parent) { assert.ok(false, "Node has no parent"); @@ -4786,7 +4851,7 @@ test("addChildAtPosition", function (assert) { tree.addChildAtPosition(new node_1.Node("ghi"), 2); // index 2 does not exist tree.addChildAtPosition(new node_1.Node("def"), 1); tree.addChildAtPosition(new node_1.Node("123"), 0); - assert.equal(utils_for_test_1.formatNodes(tree.children), "123 abc def ghi", "children"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "123 abc def ghi", "children"); }); test("removeChild", function (assert) { var tree = new node_1.Node({}, true); @@ -4798,20 +4863,20 @@ test("removeChild", function (assert) { tree.addChild(ghi); var jkl = new node_1.Node({ label: "jkl", id: 4 }); def.addChild(jkl); - assert.equal(utils_for_test_1.formatNodes(tree.children), "abc def ghi", "children"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "abc def ghi", "children"); assert.equal(tree.idMapping[2].name, "def"); assert.equal(tree.idMapping[4].name, "jkl"); // remove 'def' tree.removeChild(def); - assert.equal(utils_for_test_1.formatNodes(tree.children), "abc ghi", "children"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "abc ghi", "children"); assert.equal(tree.idMapping[2], null); assert.equal(tree.idMapping[4], null); // remove 'ghi' tree.removeChild(ghi); - assert.equal(utils_for_test_1.formatNodes(tree.children), "abc", "children"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "abc", "children"); // remove 'abc' tree.removeChild(abc); - assert.equal(utils_for_test_1.formatNodes(tree.children), "", "children"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "", "children"); }); test("getChildIndex", function (assert) { // setup @@ -4835,23 +4900,23 @@ test("hasChildren", function (assert) { }); test("iterate", function (assert) { var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); // iterate over all the nodes var nodes = []; tree.iterate(function (node) { nodes.push(node); return true; }); - assert.equal(utils_for_test_1.formatNodes(nodes), "node1 child1 child2 node2 child3", "all nodes"); + assert.equal(utilsForTest_1.formatNodes(nodes), "node1 child1 child2 node2 child3", "all nodes"); // iterate over nodes on first level var nodes2 = []; tree.iterate(function (node) { nodes2.push(node); return false; }); - assert.equal(utils_for_test_1.formatNodes(nodes2), "node1 node2", "nodes on first level"); + assert.equal(utilsForTest_1.formatNodes(nodes2), "node1 node2", "nodes on first level"); // add child 4 - var node124 = utils_for_test_1.doGetNodeById(tree, 124); + var node124 = utilsForTest_1.doGetNodeById(tree, 124); var node3 = node124.children[0]; node3.addChild(new node_1.Node("child4")); // test level parameter @@ -4864,7 +4929,7 @@ test("iterate", function (assert) { }); test("moveNode", function (assert) { var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); /* node1 ---child1 @@ -4887,8 +4952,8 @@ test("moveNode", function (assert) { ---child3 child2 */ - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2 child2", "tree nodes at first level"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child1", "node1 children"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "node1 node2 child2", "tree nodes at first level"); + assert.equal(utilsForTest_1.formatNodes(node1.children), "child1", "node1 children"); // move child1 inside node2 // this means it's the first child tree.moveNode(child1, node2, node_1.Position.Inside); @@ -4899,8 +4964,8 @@ test("moveNode", function (assert) { ---child3 child2 */ - assert.equal(utils_for_test_1.formatNodes(node2.children), "child1 child3", "node2 children"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "", "node1 has no children"); + assert.equal(utilsForTest_1.formatNodes(node2.children), "child1 child3", "node2 children"); + assert.equal(utilsForTest_1.formatNodes(node1.children), "", "node1 has no children"); // move child2 before child1 tree.moveNode(child2, child1, node_1.Position.Before); /* @@ -4910,8 +4975,8 @@ test("moveNode", function (assert) { ---child1 ---child3 */ - assert.equal(utils_for_test_1.formatNodes(node2.children), "child2 child1 child3", "node2 children"); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2", "tree nodes at first level"); + assert.equal(utilsForTest_1.formatNodes(node2.children), "child2 child1 child3", "node2 children"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "node1 node2", "tree nodes at first level"); }); test("initFromData", function (assert) { var data = { @@ -4927,7 +4992,7 @@ test("initFromData", function (assert) { var node = new node_1.Node({}, true); node.initFromData(data); assert.equal(node.name, "main"); - assert.equal(utils_for_test_1.formatNodes(node.children), "c1 c2", "children"); + assert.equal(utilsForTest_1.formatNodes(node.children), "c1 c2", "children"); assert.equal(node.children[1].id, 201); }); test("getData", function (assert) { @@ -4956,7 +5021,7 @@ test("getData", function (assert) { } ]); // 3. get data including parent - var n1 = utils_for_test_1.doGetNodeByName(node, "n1"); + var n1 = utilsForTest_1.doGetNodeByName(node, "n1"); assert.deepEqual(n1.getData(true), [ { name: "n1", @@ -4967,7 +5032,7 @@ test("getData", function (assert) { test("addAfter", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); /* -node1 ---c1 @@ -4975,17 +5040,17 @@ test("addAfter", function (assert) { -node2 ---c3 */ - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "node1 node2"); // - Add 'node_b' after node2 - var node2 = utils_for_test_1.doGetNodeByName(tree, "node2"); + var node2 = utilsForTest_1.doGetNodeByName(tree, "node2"); node2.addAfter("node_b"); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2 node_b"); - var nodeB = utils_for_test_1.doGetNodeByName(tree, "node_b"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "node1 node2 node_b"); + var nodeB = utilsForTest_1.doGetNodeByName(tree, "node_b"); assert.equal(nodeB.name, "node_b"); // - Add 'node_a' after node1 - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); + var node1 = utilsForTest_1.doGetNodeByName(tree, "node1"); node1.addAfter("node_a"); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node_a node2 node_b"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "node1 node_a node2 node_b"); // - Add 'node_c' after node_b; new node is an object if (nodeB) { nodeB.addAfter({ @@ -4993,118 +5058,118 @@ test("addAfter", function (assert) { id: 789 }); } - var nodeC = utils_for_test_1.doGetNodeByName(tree, "node_c"); + var nodeC = utilsForTest_1.doGetNodeByName(tree, "node_c"); assert.equal(nodeC.id, 789); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node_a node2 node_b node_c"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "node1 node_a node2 node_b node_c"); // - Add after root node; this is not possible assert.equal(tree.addAfter("node_x"), null); }); test("addBefore", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); // - Add 'node_0' before node1 - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); + var node1 = utilsForTest_1.doGetNodeByName(tree, "node1"); node1.addBefore("node0"); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node0 node1 node2"); + assert.equal(utilsForTest_1.formatNodes(tree.children), "node0 node1 node2"); // - Add before root node; this is not possile assert.equal(tree.addBefore("x"), null); }); test("addParent", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); // - Add node 'root' as parent of node1 // Note that node also becomes a child of 'root' - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); + var node1 = utilsForTest_1.doGetNodeByName(tree, "node1"); node1.addParent("root"); - var root = utils_for_test_1.doGetNodeByName(tree, "root"); - assert.equal(utils_for_test_1.formatNodes(root.children), "node1 node2"); + var root = utilsForTest_1.doGetNodeByName(tree, "root"); + assert.equal(utilsForTest_1.formatNodes(root.children), "node1 node2"); // - Add parent to root node; not possible assert.equal(tree.addParent("x"), null); }); test("remove", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - var child1 = utils_for_test_1.doGetNodeByName(tree, "child1"); - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child1 child2"); + tree.loadFromData(utilsForTest_1.exampleData); + var child1 = utilsForTest_1.doGetNodeByName(tree, "child1"); + var node1 = utilsForTest_1.doGetNodeByName(tree, "node1"); + assert.equal(utilsForTest_1.formatNodes(node1.children), "child1 child2"); assert.equal(child1.parent, node1); // 1. Remove child1 child1.remove(); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child2"); + assert.equal(utilsForTest_1.formatNodes(node1.children), "child2"); assert.equal(child1.parent, null); }); test("append", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); + tree.loadFromData(utilsForTest_1.exampleData); + var node1 = utilsForTest_1.doGetNodeByName(tree, "node1"); // 1. Append child3 to node1 node1.append("child3"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child1 child2 child3"); + assert.equal(utilsForTest_1.formatNodes(node1.children), "child1 child2 child3"); // 2. Append subtree node1.append({ name: "child4", children: [{ name: "child5" }] }); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child1 child2 child3 child4"); - var child4 = utils_for_test_1.doGetNodeByName(node1, "child4"); - assert.equal(utils_for_test_1.formatNodes(child4.children), "child5"); + assert.equal(utilsForTest_1.formatNodes(node1.children), "child1 child2 child3 child4"); + var child4 = utilsForTest_1.doGetNodeByName(node1, "child4"); + assert.equal(utilsForTest_1.formatNodes(child4.children), "child5"); }); test("prepend", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); + tree.loadFromData(utilsForTest_1.exampleData); + var node1 = utilsForTest_1.doGetNodeByName(tree, "node1"); // 1. Prepend child0 to node1 node1.prepend("child0"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child0 child1 child2"); + assert.equal(utilsForTest_1.formatNodes(node1.children), "child0 child1 child2"); // 2. Prepend subtree node1.prepend({ name: "child3", children: [{ name: "child4" }] }); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child3 child0 child1 child2"); - var child3 = utils_for_test_1.doGetNodeByName(node1, "child3"); - assert.equal(utils_for_test_1.formatNodes(child3.children), "child4"); + assert.equal(utilsForTest_1.formatNodes(node1.children), "child3 child0 child1 child2"); + var child3 = utilsForTest_1.doGetNodeByName(node1, "child3"); + assert.equal(utilsForTest_1.formatNodes(child3.children), "child4"); }); test("getNodeById", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); // 1. Get node with id 124 - var node = utils_for_test_1.doGetNodeById(tree, 124); + var node = utilsForTest_1.doGetNodeById(tree, 124); assert.equal(node.name, "node2"); // 2. Delete node with id 124 and search again node.remove(); assert.equal(tree.getNodeById(124), null); // 3. Add node with id 456 and search for it - var child3 = utils_for_test_1.doGetNodeByName(tree, "child2"); + var child3 = utilsForTest_1.doGetNodeByName(tree, "child2"); child3.append({ id: 456, label: "new node" }); - var node2 = utils_for_test_1.doGetNodeById(tree, 456); + var node2 = utilsForTest_1.doGetNodeById(tree, 456); assert.equal(node2.name, "new node"); }); test("getLevel", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); // 1. get level for node1 and child1 - assert.equal(utils_for_test_1.doGetNodeByName(tree, "node1").getLevel(), 1); - assert.equal(utils_for_test_1.doGetNodeByName(tree, "child1").getLevel(), 2); + assert.equal(utilsForTest_1.doGetNodeByName(tree, "node1").getLevel(), 1); + assert.equal(utilsForTest_1.doGetNodeByName(tree, "child1").getLevel(), 2); }); test("loadFromData and id mapping", function (assert) { // - get node from empty tree var tree = new node_1.Node({}, true); assert.equal(tree.getNodeById(999), null); // - load example data in tree - tree.loadFromData(utils_for_test_1.exampleData); - assert.equal(utils_for_test_1.doGetNodeById(tree, 124).name, "node2"); - var child2 = utils_for_test_1.doGetNodeById(tree, 126); + tree.loadFromData(utilsForTest_1.exampleData); + assert.equal(utilsForTest_1.doGetNodeById(tree, 124).name, "node2"); + var child2 = utilsForTest_1.doGetNodeById(tree, 126); child2.addChild(new node_1.Node({ label: "child4", id: 128 })); child2.addChild(new node_1.Node({ label: "child5", id: 129 })); // - load data in node child2 @@ -5116,13 +5181,13 @@ test("loadFromData and id mapping", function (assert) { test("removeChildren", function (assert) { // - load example data var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); // add child4 and child5 - var child2 = utils_for_test_1.doGetNodeById(tree, 126); + var child2 = utilsForTest_1.doGetNodeById(tree, 126); assert.equal(child2.name, "child2"); child2.addChild(new node_1.Node({ label: "child4", id: 128 })); child2.addChild(new node_1.Node({ label: "child5", id: 129 })); - assert.equal(utils_for_test_1.doGetNodeById(tree, 128).name, "child4"); + assert.equal(utilsForTest_1.doGetNodeById(tree, 128).name, "child4"); // - remove children from child2 child2.removeChildren(); assert.equal(tree.getNodeById(128), null); @@ -5137,7 +5202,7 @@ test("node with id 0", function (assert) { label: "mynode" } ]); - var node = utils_for_test_1.doGetNodeById(tree, 0); + var node = utilsForTest_1.doGetNodeById(tree, 0); assert.equal(node.name, "mynode"); // -- remove the node node.remove(); @@ -5146,9 +5211,9 @@ test("node with id 0", function (assert) { test("getPreviousSibling", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); // - getPreviousSibling - var previousSibling = utils_for_test_1.doGetNodeByName(tree, "child2").getPreviousSibling(); + var previousSibling = utilsForTest_1.doGetNodeByName(tree, "child2").getPreviousSibling(); if (!previousSibling) { assert.ok(false, "Previous sibling not found"); } @@ -5156,33 +5221,33 @@ test("getPreviousSibling", function (assert) { assert.equal(previousSibling.name, "child1"); } assert.equal(tree.getPreviousSibling(), null); - assert.equal(utils_for_test_1.doGetNodeByName(tree, "child1").getPreviousSibling(), null); + assert.equal(utilsForTest_1.doGetNodeByName(tree, "child1").getPreviousSibling(), null); }); test("getNextSibling", function (assert) { // setup var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); // - getNextSibling - var nextSibling = utils_for_test_1.doGetNodeByName(tree, "node1").getNextSibling(); + var nextSibling = utilsForTest_1.doGetNodeByName(tree, "node1").getNextSibling(); if (!nextSibling) { assert.ok(false, "Next sibling not found"); } else { assert.equal(nextSibling.name, "node2"); } - assert.equal(utils_for_test_1.doGetNodeByName(tree, "node2").getNextSibling(), null); + assert.equal(utilsForTest_1.doGetNodeByName(tree, "node2").getNextSibling(), null); assert.equal(tree.getNextSibling(), null); }); test("getNodesByProperty", function (assert) { var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); var nodes = tree.getNodesByProperty("name", "child1"); assert.equal(nodes.length, 1); assert.equal(nodes[0].name, "child1"); }); test("getNodeByCallback", function (assert) { var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); + tree.loadFromData(utilsForTest_1.exampleData); var node = tree.getNodeByCallback(function (n) { return n.name === "child1"; }); if (!node) { assert.ok(false, "Node not found"); @@ -5228,4 +5293,5 @@ test("getBoolString", function (assert) { /***/ }) -/******/ ]); \ No newline at end of file +/******/ ]); +//# sourceMappingURL=test.js.map \ No newline at end of file diff --git a/build/test.js.map b/build/test.js.map index 6700c0e5..bf2ba247 100644 --- a/build/test.js.map +++ b/build/test.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/node.ts","webpack:///./src/util.ts","webpack:///external \"jQuery\"","webpack:///./src/simple.widget.ts","webpack:///./src/tree.jquery.ts","webpack:///./src/version.ts","webpack:///./src/drag_and_drop_handler.ts","webpack:///./src/elements_renderer.ts","webpack:///./src/data_loader.ts","webpack:///./src/key_handler.ts","webpack:///./src/mouse.widget.ts","webpack:///./src/save_state_handler.ts","webpack:///./src/scroll_handler.ts","webpack:///./src/select_node_handler.ts","webpack:///./src/node_element.ts","webpack:///./src_test/utils_for_test.ts","webpack:///./src_test/test.ts","webpack:///./src_test/test_jqtree.ts","webpack:///./src/itree_widget.ts","webpack:///./src_test/test_node_util.ts","webpack:///./src_test/test_tree.ts","webpack:///./src_test/test_util.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;AClFa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,uDAAuD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,4BAA4B;AACnE;AACA;AACA,gCAAgC,gBAAgB;AAChD,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,sBAAsB;;AAEvC,iBAAiB,sCAAsC;;AAEvD,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,gBAAgB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,2BAA2B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,4BAA4B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACrhBa;AACb;AACA,8BAA8B,6CAA6C;AAC3E,mCAAmC,gCAAgC;AACnE,0CAA0C;AAC1C;AACA;AACA,6BAA6B;AAC7B,4BAA4B;AAC5B,4BAA4B;AAC5B,8BAA8B;AAC9B,8BAA8B;AAC9B,+BAA+B;AAC/B;AACA,0CAA0C,mCAAmC;;;;;;;ACd7E,wB;;;;;;;ACAa;AACb;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,sCAAsC,sCAAsC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AClGa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,CAAW;AACnC,aAAa,mBAAO,CAAC,CAAQ;AAC7B,8BAA8B,mBAAO,CAAC,CAAyB;AAC/D,0BAA0B,mBAAO,CAAC,CAAqB;AACvD,oBAAoB,mBAAO,CAAC,CAAe;AAC3C,oBAAoB,mBAAO,CAAC,CAAe;AAC3C,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C,2BAA2B,mBAAO,CAAC,EAAsB;AACzD,uBAAuB,mBAAO,CAAC,EAAkB;AACjD,4BAA4B,mBAAO,CAAC,EAAuB;AAC3D,sBAAsB,mBAAO,CAAC,CAAiB;AAC/C,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,yBAAyB,EAAE;AAClF,sDAAsD,yBAAyB,EAAE;;AAEjF;AACA;AACA;AACA,0CAA0C,yBAAyB,EAAE;AACrE,2CAA2C,yBAAyB,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,uCAAuC,qCAAqC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,kBAAkB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAwC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC78Ba;AACb;AACA;AACA;;;;;;;;ACHa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,yBAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACveY;AACb;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACtMa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,0CAA0C,gBAAgB,iCAAiC,eAAe;AAC1G;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpFa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACrHa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,CAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC9Ja;AACb;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yEAAyE,aAAa,EAAE;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACtNa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,gBAAgB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AClNa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC3Ga;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AClNY;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2CAA2C;AACxD,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc,GAAG,cAAc;AACnD;AACA;AACA;AACA,6CAA6C,kBAAkB,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,qBAAqB,EAAE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACzEa;AACb;AACA,mBAAO,CAAC,EAAe;AACvB,mBAAO,CAAC,EAAkB;AAC1B,mBAAO,CAAC,EAAa;AACrB,mBAAO,CAAC,EAAa;AACrB;;;;;;;;ACNa;AACb;AACA,mBAAO,CAAC,CAAoB;AAC5B,uBAAuB,mBAAO,CAAC,EAAkB;AACjD,aAAa,mBAAO,CAAC,CAAa;AAClC,mBAAO,CAAC,EAAqB;AAC7B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,0CAA0C;AAC1C,sBAAsB,yCAAyC,EAAE;AACjE,2BAA2B,EAAE,EAAE;AAC/B,wCAAwC,yBAAyB,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa,GAAG,aAAa;AAC/C;AACA;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4CAA4C,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4CAA4C;AAC5C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gCAAgC,gBAAgB,aAAa;AAC7D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qCAAqC,UAAU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wCAAwC,UAAU;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0CAA0C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;;;;;;;AC18BY;AACb;;;;;;;;ACDa;AACb;AACA;AACA,aAAa,mBAAO,CAAC,CAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;;;;;;;;ACbY;AACb;AACA;AACA,uBAAuB,mBAAO,CAAC,EAAkB;AACjD,aAAa,mBAAO,CAAC,CAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC,uDAAuD;AACvD,uDAAuD;AACvD;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC,+BAA+B,sBAAsB;AACrD,+BAA+B,sBAAsB;AACrD,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA,oDAAoD,4BAA4B,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACheY;AACb;AACA;AACA,aAAa,mBAAO,CAAC,CAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,kDAAkD;AAClD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC","file":"test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n","\"use strict\";\nexports.__esModule = true;\nvar Position;\n(function (Position) {\n Position[Position[\"Before\"] = 1] = \"Before\";\n Position[Position[\"After\"] = 2] = \"After\";\n Position[Position[\"Inside\"] = 3] = \"Inside\";\n Position[Position[\"None\"] = 4] = \"None\";\n})(Position = exports.Position || (exports.Position = {}));\nvar positionNames = {\n before: Position.Before,\n after: Position.After,\n inside: Position.Inside,\n none: Position.None\n};\nexports.getPositionName = function (position) {\n for (var name_1 in positionNames) {\n if (positionNames.hasOwnProperty(name_1)) {\n if (positionNames[name_1] === position) {\n return name_1;\n }\n }\n }\n return \"\";\n};\nexports.getPosition = function (name) { return positionNames[name]; };\nvar Node = /** @class */ (function () {\n function Node(o, isRoot, nodeClass) {\n if (isRoot === void 0) { isRoot = false; }\n if (nodeClass === void 0) { nodeClass = Node; }\n this.name = \"\";\n this.setData(o);\n this.children = [];\n this.parent = null;\n if (isRoot) {\n this.idMapping = {};\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setdata(object): set attributes of the node\n\n Examples:\n setdata('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n Node.prototype.setData = function (o) {\n var _this = this;\n var setName = function (name) {\n if (name != null) {\n _this.name = name;\n }\n };\n if (!o) {\n return;\n }\n else if (typeof o !== \"object\") {\n setName(o);\n }\n else {\n for (var key in o) {\n if (o.hasOwnProperty(key)) {\n var value = o[key];\n if (key === \"label\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n setName(value);\n }\n else if (key !== \"children\") {\n // You can't update the children using this function\n this[key] = value;\n }\n }\n }\n }\n };\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n Node.prototype.loadFromData = function (data) {\n this.removeChildren();\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var o = data_1[_i];\n var node = new this.tree.nodeClass(o);\n this.addChild(node);\n if (typeof o === \"object\" && o[\"children\"]) {\n node.loadFromData(o[\"children\"]);\n }\n }\n };\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n Node.prototype.addChild = function (node) {\n this.children.push(node);\n node._setParent(this);\n };\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n Node.prototype.addChildAtPosition = function (node, index) {\n this.children.splice(index, 0, node);\n node._setParent(this);\n };\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n Node.prototype.removeChild = function (node) {\n // remove children from the index\n node.removeChildren();\n this._removeChild(node);\n };\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n Node.prototype.getChildIndex = function (node) {\n return jQuery.inArray(node, this.children);\n };\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n Node.prototype.hasChildren = function () {\n return this.children.length !== 0;\n };\n Node.prototype.isFolder = function () {\n return this.hasChildren() || this.load_on_demand;\n };\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n Node.prototype.iterate = function (callback) {\n var _iterate = function (node, level) {\n if (node.children) {\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var result = callback(child, level);\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n }\n };\n _iterate(this, 0);\n };\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n Node.prototype.moveNode = function (movedNode, targetNode, position) {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return;\n }\n else {\n movedNode.parent._removeChild(movedNode);\n if (position === Position.After) {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1);\n }\n }\n else if (position === Position.Before) {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode));\n }\n }\n else if (position === Position.Inside) {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n }\n }\n };\n /*\n Get the tree as data.\n */\n Node.prototype.getData = function (includeParent) {\n if (includeParent === void 0) { includeParent = false; }\n function getDataFromNodes(nodes) {\n return nodes.map(function (node) {\n var tmpNode = {};\n for (var k in node) {\n if ([\"parent\", \"children\", \"element\", \"tree\"].indexOf(k) ===\n -1 &&\n Object.prototype.hasOwnProperty.call(node, k)) {\n var v = node[k];\n tmpNode[k] = v;\n }\n }\n if (node.hasChildren()) {\n tmpNode[\"children\"] = getDataFromNodes(node.children);\n }\n return tmpNode;\n });\n }\n if (includeParent) {\n return getDataFromNodes([this]);\n }\n else {\n return getDataFromNodes(this.children);\n }\n };\n Node.prototype.getNodeByName = function (name) {\n return this.getNodeByCallback(function (node) { return node.name === name; });\n };\n Node.prototype.getNodeByCallback = function (callback) {\n var result = null;\n this.iterate(function (node) {\n if (callback(node)) {\n result = node;\n return false;\n }\n else {\n return true;\n }\n });\n return result;\n };\n Node.prototype.addAfter = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var node = new this.tree.nodeClass(nodeInfo);\n var child_index = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, child_index + 1);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n }\n };\n Node.prototype.addBefore = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var node = new this.tree.nodeClass(nodeInfo);\n var child_index = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, child_index);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n }\n };\n Node.prototype.addParent = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var newParent = new this.tree.nodeClass(nodeInfo);\n newParent._setParent(this.tree);\n var originalParent = this.parent;\n for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) {\n var child = _a[_i];\n newParent.addChild(child);\n }\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n };\n Node.prototype.remove = function () {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n };\n Node.prototype.append = function (nodeInfo) {\n var node = new this.tree.nodeClass(nodeInfo);\n this.addChild(node);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n };\n Node.prototype.prepend = function (nodeInfo) {\n var node = new this.tree.nodeClass(nodeInfo);\n this.addChildAtPosition(node, 0);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n };\n Node.prototype.isParentOf = function (node) {\n var parent = node.parent;\n while (parent) {\n if (parent === this) {\n return true;\n }\n parent = parent.parent;\n }\n return false;\n };\n Node.prototype.getLevel = function () {\n var level = 0;\n var node = this;\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n return level;\n };\n Node.prototype.getNodeById = function (nodeId) {\n return this.idMapping[nodeId];\n };\n Node.prototype.addNodeToIndex = function (node) {\n if (node.id != null) {\n this.idMapping[node.id] = node;\n }\n };\n Node.prototype.removeNodeFromIndex = function (node) {\n if (node.id != null) {\n delete this.idMapping[node.id];\n }\n };\n Node.prototype.removeChildren = function () {\n var _this = this;\n this.iterate(function (child) {\n _this.tree.removeNodeFromIndex(child);\n return true;\n });\n this.children = [];\n };\n Node.prototype.getPreviousSibling = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex];\n }\n else {\n return null;\n }\n }\n };\n Node.prototype.getNextSibling = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex];\n }\n else {\n return null;\n }\n }\n };\n Node.prototype.getNodesByProperty = function (key, value) {\n return this.filter(function (node) { return node[key] === value; });\n };\n Node.prototype.filter = function (f) {\n var result = [];\n this.iterate(function (node) {\n if (f(node)) {\n result.push(node);\n }\n return true;\n });\n return result;\n };\n Node.prototype.getNextNode = function (includeChildren) {\n if (includeChildren === void 0) { includeChildren = true; }\n if (includeChildren && this.hasChildren() && this.is_open) {\n // First child\n return this.children[0];\n }\n else {\n if (!this.parent) {\n return null;\n }\n else {\n var nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n }\n else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n };\n Node.prototype.getPreviousNode = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var previousSibling = this.getPreviousSibling();\n if (previousSibling) {\n if (!previousSibling.hasChildren() ||\n !previousSibling.is_open) {\n // Previous sibling\n return previousSibling;\n }\n else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n else {\n return this.getParent();\n }\n }\n };\n Node.prototype.getParent = function () {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n }\n else if (!this.parent.parent) {\n // Root node -> null\n return null;\n }\n else {\n return this.parent;\n }\n };\n Node.prototype.getLastChild = function () {\n if (!this.hasChildren()) {\n return null;\n }\n else {\n var lastChild = this.children[this.children.length - 1];\n if (!lastChild.hasChildren() || !lastChild.is_open) {\n return lastChild;\n }\n else {\n return lastChild.getLastChild();\n }\n }\n };\n // Init Node from data without making it the root of the tree\n Node.prototype.initFromData = function (data) {\n var _this = this;\n var addNode = function (nodeData) {\n _this.setData(nodeData);\n if (nodeData[\"children\"]) {\n addChildren(nodeData[\"children\"]);\n }\n };\n var addChildren = function (childrenData) {\n for (var _i = 0, childrenData_1 = childrenData; _i < childrenData_1.length; _i++) {\n var child = childrenData_1[_i];\n var node = new _this.tree.nodeClass(\"\");\n node.initFromData(child);\n _this.addChild(node);\n }\n };\n addNode(data);\n };\n Node.prototype._setParent = function (parent) {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree.addNodeToIndex(this);\n };\n Node.prototype._removeChild = function (node) {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree.removeNodeFromIndex(node);\n };\n return Node;\n}());\nexports.Node = Node;\n","\"use strict\";\nexports.__esModule = true;\nexports.isInt = function (n) { return typeof n === \"number\" && n % 1 === 0; };\nexports.isFunction = function (v) { return typeof v === \"function\"; };\n// Escape a string for HTML interpolation; copied from underscore js\nexports.htmlEscape = function (text) {\n return (\"\" + text)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\")\n .replace(/\\//g, \"/\");\n};\nexports.getBoolString = function (value) { return (value ? \"true\" : \"false\"); };\n","module.exports = jQuery;","\"use strict\";\nexports.__esModule = true;\nvar SimpleWidget = /** @class */ (function () {\n function SimpleWidget(el, options) {\n this.$el = jQuery(el);\n var defaults = this.constructor.defaults;\n this.options = jQuery.extend({}, defaults, options);\n }\n SimpleWidget.register = function (widgetClass, widgetName) {\n var getDataKey = function () { return \"simple_widget_\" + widgetName; };\n function getWidgetData(el, dataKey) {\n var widget = jQuery.data(el, dataKey);\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n }\n else {\n return null;\n }\n }\n function createWidget($el, options) {\n var dataKey = getDataKey();\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var existingWidget = getWidgetData(el, dataKey);\n if (!existingWidget) {\n var widget = new widgetClass(el, options);\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n // Call init after setting data, so we can call methods\n widget._init();\n }\n }\n return $el;\n }\n function destroyWidget($el) {\n var dataKey = getDataKey();\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var widget = getWidgetData(el, dataKey);\n if (widget) {\n widget.destroy();\n }\n jQuery.removeData(el, dataKey);\n }\n }\n function callFunction($el, functionName, args) {\n var result = null;\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var widget = jQuery.data(el, getDataKey());\n if (widget && widget instanceof SimpleWidget) {\n var widgetFunction = widget[functionName];\n if (widgetFunction &&\n typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args);\n }\n }\n }\n return result;\n }\n // tslint:disable-next-line: only-arrow-functions\n jQuery.fn[widgetName] = function (argument1) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var $el = this;\n if (argument1 === undefined || typeof argument1 === \"object\") {\n var options = argument1;\n return createWidget($el, options);\n }\n else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n var functionName = argument1;\n if (functionName === \"destroy\") {\n return destroyWidget($el);\n }\n else if (functionName === \"get_widget_class\") {\n return widgetClass;\n }\n else {\n return callFunction($el, functionName, args);\n }\n }\n };\n };\n SimpleWidget.prototype.destroy = function () {\n this._deinit();\n };\n SimpleWidget.prototype._init = function () {\n //\n };\n SimpleWidget.prototype._deinit = function () {\n //\n };\n SimpleWidget.defaults = {};\n return SimpleWidget;\n}());\nexports[\"default\"] = SimpleWidget;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nexports.__esModule = true;\nvar version_1 = require(\"./version\");\nvar jQuery = require(\"jquery\");\nvar drag_and_drop_handler_1 = require(\"./drag_and_drop_handler\");\nvar elements_renderer_1 = require(\"./elements_renderer\");\nvar data_loader_1 = require(\"./data_loader\");\nvar key_handler_1 = require(\"./key_handler\");\nvar mouse_widget_1 = require(\"./mouse.widget\");\nvar save_state_handler_1 = require(\"./save_state_handler\");\nvar scroll_handler_1 = require(\"./scroll_handler\");\nvar select_node_handler_1 = require(\"./select_node_handler\");\nvar simple_widget_1 = require(\"./simple.widget\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar node_element_1 = require(\"./node_element\");\nvar NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nvar PARAM_IS_EMPTY = \"Parameter is empty: \";\nvar JqTreeWidget = /** @class */ (function (_super) {\n __extends(JqTreeWidget, _super);\n function JqTreeWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._handleClick = function (e) {\n var clickTarget = _this._getClickTarget(e.target);\n if (clickTarget) {\n if (clickTarget.type === \"button\") {\n _this.toggle(clickTarget.node, _this.options.slide);\n e.preventDefault();\n e.stopPropagation();\n }\n else if (clickTarget.type === \"label\") {\n var node = clickTarget.node;\n var event_1 = _this._triggerEvent(\"tree.click\", {\n node: node,\n click_event: e\n });\n if (!event_1.isDefaultPrevented()) {\n _this._selectNode(node);\n }\n }\n }\n };\n _this._handleDblclick = function (e) {\n var clickTarget = _this._getClickTarget(e.target);\n if (clickTarget && clickTarget.type === \"label\") {\n _this._triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n click_event: e\n });\n }\n };\n _this._handleContextmenu = function (e) {\n var $div = jQuery(e.target).closest(\"ul.jqtree-tree .jqtree-element\");\n if ($div.length) {\n var node = _this._getNode($div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n _this._triggerEvent(\"tree.contextmenu\", {\n node: node,\n click_event: e\n });\n return false;\n }\n }\n return null;\n };\n return _this;\n }\n JqTreeWidget.prototype.toggle = function (node, slideParam) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var slide = slideParam == null ? this.options.slide : slideParam;\n if (node.is_open) {\n this.closeNode(node, slide);\n }\n else {\n this.openNode(node, slide);\n }\n return this.element;\n };\n JqTreeWidget.prototype.getTree = function () {\n return this.tree;\n };\n JqTreeWidget.prototype.selectNode = function (node, optionsParam) {\n this._selectNode(node, optionsParam);\n return this.element;\n };\n JqTreeWidget.prototype.getSelectedNode = function () {\n if (this.selectNodeHandler) {\n return this.selectNodeHandler.getSelectedNode();\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.toJson = function () {\n return JSON.stringify(this.tree.getData());\n };\n JqTreeWidget.prototype.loadData = function (data, parent_node) {\n this._loadData(data, parent_node);\n return this.element;\n };\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this._loadDataFromUrl(param1, param2, param3);\n }\n else {\n // first parameter is not url\n this._loadDataFromUrl(null, param1, param2);\n }\n return this.element;\n };\n JqTreeWidget.prototype.reload = function (onFinished) {\n this._loadDataFromUrl(null, null, onFinished);\n return this.element;\n };\n JqTreeWidget.prototype.getNodeById = function (nodeId) {\n return this.tree.getNodeById(nodeId);\n };\n JqTreeWidget.prototype.getNodeByName = function (name) {\n return this.tree.getNodeByName(name);\n };\n JqTreeWidget.prototype.getNodesByProperty = function (key, value) {\n return this.tree.getNodesByProperty(key, value);\n };\n JqTreeWidget.prototype.getNodeByHtmlElement = function (element) {\n return this._getNode(jQuery(element));\n };\n JqTreeWidget.prototype.getNodeByCallback = function (callback) {\n return this.tree.getNodeByCallback(callback);\n };\n JqTreeWidget.prototype.openNode = function (node, param1, param2) {\n var _this = this;\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var parseParams = function () {\n var onFinished;\n var slide;\n if (util_1.isFunction(param1)) {\n onFinished = param1;\n slide = null;\n }\n else {\n slide = param1;\n onFinished = param2;\n }\n if (slide == null) {\n slide = _this.options.slide;\n }\n return [slide, onFinished];\n };\n var _a = parseParams(), slide = _a[0], onFinished = _a[1];\n this._openNode(node, slide, onFinished);\n return this.element;\n };\n JqTreeWidget.prototype.closeNode = function (node, slideParam) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var slide = slideParam == null ? this.options.slide : slideParam;\n if (node.isFolder()) {\n new node_element_1.FolderElement(node, this).close(slide, this.options.animationSpeed);\n this._saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.isDragging = function () {\n if (this.dndHandler) {\n return this.dndHandler.isDragging;\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.refreshHitAreas = function () {\n if (this.dndHandler) {\n this.dndHandler.refresh();\n }\n return this.element;\n };\n JqTreeWidget.prototype.addNodeAfter = function (newNodeInfo, existingNode) {\n var newNode = existingNode.addAfter(newNodeInfo);\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.addNodeBefore = function (newNodeInfo, existingNode) {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n var newNode = existingNode.addBefore(newNodeInfo);\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.addParentNode = function (newNodeInfo, existingNode) {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n var newNode = existingNode.addParent(newNodeInfo);\n if (newNode) {\n this._refreshElements(newNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.removeNode = function (inode) {\n if (!inode) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var node = inode;\n if (node.parent && this.selectNodeHandler) {\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n node.remove();\n this._refreshElements(node.parent);\n }\n return this.element;\n };\n JqTreeWidget.prototype.appendNode = function (newNodeInfo, parentNodeParam) {\n var parentNode = parentNodeParam || this.tree;\n var node = parentNode.append(newNodeInfo);\n this._refreshElements(parentNode);\n return node;\n };\n JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) {\n var parentNode = !parentNodeParam\n ? this.tree\n : parentNodeParam;\n var node = parentNode.prepend(newNodeInfo);\n this._refreshElements(parentNode);\n return node;\n };\n JqTreeWidget.prototype.updateNode = function (node, data) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var id_is_changed = data.id && data.id !== node.id;\n if (id_is_changed) {\n this.tree.removeNodeFromIndex(node);\n }\n node.setData(data);\n if (id_is_changed) {\n this.tree.addNodeToIndex(node);\n }\n if (typeof data === \"object\" && data.children) {\n node.removeChildren();\n if (data.children.length) {\n node.loadFromData(data.children);\n }\n }\n this._refreshElements(node);\n this._selectCurrentNode();\n return this.element;\n };\n JqTreeWidget.prototype.moveNode = function (node, targetNode, position) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n var positionIndex = node_1.getPosition(position);\n this.tree.moveNode(node, targetNode, positionIndex);\n this._refreshElements(null);\n return this.element;\n };\n JqTreeWidget.prototype.getStateFromStorage = function () {\n if (this.saveStateHandler) {\n return this.saveStateHandler.getStateFromStorage();\n }\n };\n JqTreeWidget.prototype.addToSelection = function (inode, mustSetFocus) {\n if (!inode) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var node = inode;\n if (this.selectNodeHandler) {\n this.selectNodeHandler.addToSelection(node);\n this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus);\n this._saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.getSelectedNodes = function () {\n if (!this.selectNodeHandler) {\n return [];\n }\n else {\n return this.selectNodeHandler.getSelectedNodes();\n }\n };\n JqTreeWidget.prototype.isNodeSelected = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (!this.selectNodeHandler) {\n return false;\n }\n else {\n return this.selectNodeHandler.isNodeSelected(node);\n }\n };\n JqTreeWidget.prototype.removeFromSelection = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (this.selectNodeHandler) {\n this.selectNodeHandler.removeFromSelection(node);\n this._getNodeElementForNode(node).deselect();\n this._saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.scrollToNode = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (this.scrollHandler) {\n var node_offset = jQuery(node.element).offset();\n var node_top = node_offset ? node_offset.top : 0;\n var tree_offset = this.$el.offset();\n var tree_top = tree_offset ? tree_offset.top : 0;\n var top_1 = node_top - tree_top;\n this.scrollHandler.scrollToY(top_1);\n }\n return this.element;\n };\n JqTreeWidget.prototype.getState = function () {\n if (this.saveStateHandler) {\n return this.saveStateHandler.getState();\n }\n };\n JqTreeWidget.prototype.setState = function (state) {\n if (this.saveStateHandler) {\n this.saveStateHandler.setInitialState(state);\n this._refreshElements(null);\n }\n return this.element;\n };\n JqTreeWidget.prototype.setOption = function (option, value) {\n this.options[option] = value;\n return this.element;\n };\n JqTreeWidget.prototype.moveDown = function () {\n if (this.keyHandler) {\n this.keyHandler.moveDown();\n }\n return this.element;\n };\n JqTreeWidget.prototype.moveUp = function () {\n if (this.keyHandler) {\n this.keyHandler.moveUp();\n }\n return this.element;\n };\n JqTreeWidget.prototype.getVersion = function () {\n return version_1[\"default\"];\n };\n JqTreeWidget.prototype.testGenerateHitAreas = function (movingNode) {\n if (!this.dndHandler) {\n return [];\n }\n else {\n this.dndHandler.currentItem = this._getNodeElementForNode(movingNode);\n this.dndHandler.generateHitAreas();\n return this.dndHandler.hitAreas;\n }\n };\n JqTreeWidget.prototype._triggerEvent = function (eventName, values) {\n var event = jQuery.Event(eventName);\n jQuery.extend(event, values);\n this.element.trigger(event);\n return event;\n };\n JqTreeWidget.prototype._openNode = function (node, slide, onFinished) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n var doOpenNode = function (_node, _slide, _onFinished) {\n var folder_element = new node_element_1.FolderElement(_node, _this);\n folder_element.open(_onFinished, _slide, _this.options.animationSpeed);\n };\n if (node.isFolder()) {\n if (node.load_on_demand) {\n this._loadFolderOnDemand(node, slide, onFinished);\n }\n else {\n var parent_1 = node.parent;\n while (parent_1) {\n // nb: do not open root element\n if (parent_1.parent) {\n doOpenNode(parent_1, false, null);\n }\n parent_1 = parent_1.parent;\n }\n doOpenNode(node, slide, onFinished);\n this._saveState();\n }\n }\n };\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n JqTreeWidget.prototype._refreshElements = function (fromNode) {\n this.renderer.render(fromNode);\n this._triggerEvent(\"tree.refresh\");\n };\n JqTreeWidget.prototype._getNodeElementForNode = function (node) {\n if (node.isFolder()) {\n return new node_element_1.FolderElement(node, this);\n }\n else {\n return new node_element_1.NodeElement(node, this);\n }\n };\n JqTreeWidget.prototype._getNodeElement = function ($element) {\n var node = this._getNode($element);\n if (node) {\n return this._getNodeElementForNode(node);\n }\n else {\n return null;\n }\n };\n JqTreeWidget.prototype._containsElement = function (element) {\n var node = this._getNode(jQuery(element));\n return node != null && node.tree === this.tree;\n };\n JqTreeWidget.prototype._getScrollLeft = function () {\n return (this.scrollHandler && this.scrollHandler.getScrollLeft()) || 0;\n };\n JqTreeWidget.prototype._init = function () {\n _super.prototype._init.call(this);\n this.element = this.$el;\n this.mouseDelay = 300;\n this.isInitialized = false;\n this.options.rtl = this._getRtlOption();\n if (this.options.closedIcon === null) {\n this.options.closedIcon = this._getDefaultClosedIcon();\n }\n this.renderer = new elements_renderer_1[\"default\"](this);\n this.dataLoader = new data_loader_1[\"default\"](this);\n if (save_state_handler_1[\"default\"] != null) {\n this.saveStateHandler = new save_state_handler_1[\"default\"](this);\n }\n else {\n this.options.saveState = false;\n }\n if (select_node_handler_1[\"default\"] != null) {\n this.selectNodeHandler = new select_node_handler_1[\"default\"](this);\n }\n if (drag_and_drop_handler_1.DragAndDropHandler != null) {\n this.dndHandler = new drag_and_drop_handler_1.DragAndDropHandler(this);\n }\n else {\n this.options.dragAndDrop = false;\n }\n if (scroll_handler_1[\"default\"] != null) {\n this.scrollHandler = new scroll_handler_1[\"default\"](this);\n }\n if (key_handler_1[\"default\"] != null && select_node_handler_1[\"default\"] != null) {\n this.keyHandler = new key_handler_1[\"default\"](this);\n }\n this._initData();\n this.element.click(this._handleClick);\n this.element.dblclick(this._handleDblclick);\n if (this.options.useContextMenu) {\n this.element.on(\"contextmenu\", this._handleContextmenu);\n }\n };\n JqTreeWidget.prototype._deinit = function () {\n this.element.empty();\n this.element.off();\n if (this.keyHandler) {\n this.keyHandler.deinit();\n }\n this.tree = new node_1.Node({}, true);\n _super.prototype._deinit.call(this);\n };\n JqTreeWidget.prototype._mouseCapture = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseCapture(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype._mouseStart = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseStart(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype._mouseDrag = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n var result = this.dndHandler.mouseDrag(positionInfo);\n if (this.scrollHandler) {\n this.scrollHandler.checkScrolling();\n }\n return result;\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype._mouseStop = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseStop(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype._initData = function () {\n if (this.options.data) {\n this._loadData(this.options.data, null);\n }\n else {\n var data_url = this._getDataUrlInfo(null);\n if (data_url) {\n this._loadDataFromUrl(null, null, null);\n }\n else {\n this._loadData([], null);\n }\n }\n };\n JqTreeWidget.prototype._getDataUrlInfo = function (node) {\n var _this = this;\n var data_url = this.options.dataUrl || this.element.data(\"url\");\n var getUrlFromString = function () {\n var url_info = { url: data_url };\n setUrlInfoData(url_info);\n return url_info;\n };\n var setUrlInfoData = function (url_info) {\n if (node && node.id) {\n // Load on demand of a subtree; add node parameter\n var data = { node: node.id };\n // tslint:disable-next-line: no-string-literal\n url_info[\"data\"] = data;\n }\n else {\n // Add selected_node parameter\n var selected_node_id = _this._getNodeIdToBeSelected();\n if (selected_node_id) {\n var data = { selected_node: selected_node_id };\n // tslint:disable-next-line: no-string-literal\n url_info[\"data\"] = data;\n }\n }\n };\n if (typeof data_url === \"function\") {\n return data_url(node);\n }\n else if (typeof data_url === \"string\") {\n return getUrlFromString();\n }\n else if (typeof data_url === \"object\") {\n setUrlInfoData(data_url);\n return data_url;\n }\n else {\n return data_url;\n }\n };\n JqTreeWidget.prototype._getNodeIdToBeSelected = function () {\n if (this.options.saveState && this.saveStateHandler) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n }\n else {\n return null;\n }\n };\n JqTreeWidget.prototype._initTree = function (data) {\n var _this = this;\n var doInit = function () {\n if (!_this.isInitialized) {\n _this.isInitialized = true;\n _this._triggerEvent(\"tree.init\");\n }\n };\n this.tree = new this.options.nodeClass(null, true, this.options.nodeClass);\n if (this.selectNodeHandler) {\n this.selectNodeHandler.clear();\n }\n this.tree.loadFromData(data);\n var mustLoadOnDemand = this._setInitialState();\n this._refreshElements(null);\n if (!mustLoadOnDemand) {\n doInit();\n }\n else {\n // Load data on demand and then init the tree\n this._setInitialStateOnDemand(doInit);\n }\n };\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n JqTreeWidget.prototype._setInitialState = function () {\n var _this = this;\n var restoreState = function () {\n // result: is state restored, must load on demand?\n if (!(_this.options.saveState && _this.saveStateHandler)) {\n return [false, false];\n }\n else {\n var state = _this.saveStateHandler.getStateFromStorage();\n if (!state) {\n return [false, false];\n }\n else {\n var mustLoadOnDemand_1 = _this.saveStateHandler.setInitialState(state);\n // return true: the state is restored\n return [true, mustLoadOnDemand_1];\n }\n }\n };\n var autoOpenNodes = function () {\n // result: must load on demand?\n if (_this.options.autoOpen === false) {\n return false;\n }\n var max_level = _this._getAutoOpenMaxLevel();\n var mustLoadOnDemand = false;\n _this.tree.iterate(function (node, level) {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n }\n else if (!node.hasChildren()) {\n return false;\n }\n else {\n node.is_open = true;\n return level !== max_level;\n }\n });\n return mustLoadOnDemand;\n };\n // tslint:disable-next-line: prefer-const\n var _a = restoreState(), isRestored = _a[0], mustLoadOnDemand = _a[1];\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n return mustLoadOnDemand;\n };\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n JqTreeWidget.prototype._setInitialStateOnDemand = function (cbFinished) {\n var _this = this;\n var restoreState = function () {\n if (!(_this.options.saveState && _this.saveStateHandler)) {\n return false;\n }\n else {\n var state = _this.saveStateHandler.getStateFromStorage();\n if (!state) {\n return false;\n }\n else {\n _this.saveStateHandler.setInitialStateOnDemand(state, cbFinished);\n return true;\n }\n }\n };\n var autoOpenNodes = function () {\n var maxLevel = _this._getAutoOpenMaxLevel();\n var loadingCount = 0;\n var loadAndOpenNode = function (node) {\n loadingCount += 1;\n _this._openNode(node, false, function () {\n loadingCount -= 1;\n openNodes();\n });\n };\n var openNodes = function () {\n _this.tree.iterate(function (node, level) {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n return false;\n }\n else {\n _this._openNode(node, false, null);\n return level !== maxLevel;\n }\n });\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n openNodes();\n };\n if (!restoreState()) {\n autoOpenNodes();\n }\n };\n JqTreeWidget.prototype._getAutoOpenMaxLevel = function () {\n if (this.options.autoOpen === true) {\n return -1;\n }\n else {\n return parseInt(this.options.autoOpen, 10);\n }\n };\n JqTreeWidget.prototype._getClickTarget = function (element) {\n var $target = jQuery(element);\n var $button = $target.closest(\".jqtree-toggler\");\n if ($button.length) {\n var node = this._getNode($button);\n if (node) {\n return {\n type: \"button\",\n node: node\n };\n }\n }\n else {\n var $el = $target.closest(\".jqtree-element\");\n if ($el.length) {\n var node = this._getNode($el);\n if (node) {\n return {\n type: \"label\",\n node: node\n };\n }\n }\n }\n return null;\n };\n JqTreeWidget.prototype._getNode = function ($element) {\n var $li = $element.closest(\"li.jqtree_common\");\n if ($li.length === 0) {\n return null;\n }\n else {\n return $li.data(\"node\");\n }\n };\n JqTreeWidget.prototype._saveState = function () {\n if (this.options.saveState && this.saveStateHandler) {\n this.saveStateHandler.saveState();\n }\n };\n JqTreeWidget.prototype._selectCurrentNode = function () {\n var node = this.getSelectedNode();\n if (node) {\n var node_element = this._getNodeElementForNode(node);\n if (node_element) {\n node_element.select(true);\n }\n }\n };\n JqTreeWidget.prototype._deselectCurrentNode = function () {\n var node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n };\n JqTreeWidget.prototype._getDefaultClosedIcon = function () {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n }\n else {\n // triangle to the right\n return \"►\";\n }\n };\n JqTreeWidget.prototype._getRtlOption = function () {\n if (this.options.rtl != null) {\n return this.options.rtl;\n }\n else {\n var data_rtl = this.element.data(\"rtl\");\n if (data_rtl != null && data_rtl !== false) {\n return true;\n }\n else {\n return false;\n }\n }\n };\n JqTreeWidget.prototype._selectNode = function (inode, optionsParam) {\n var _this = this;\n if (!this.selectNodeHandler) {\n return;\n }\n var defaultOptions = { mustSetFocus: true, mustToggle: true };\n var selectOptions = __assign({}, defaultOptions, (optionsParam || {}));\n var canSelect = function () {\n if (_this.options.onCanSelectNode) {\n return (_this.options.selectable &&\n _this.options.onCanSelectNode(inode));\n }\n else {\n return _this.options.selectable;\n }\n };\n var openParents = function () {\n var parent = inode.parent;\n if (parent && parent.parent && !parent.is_open) {\n _this.openNode(parent, false);\n }\n };\n var saveState = function () {\n if (_this.options.saveState && _this.saveStateHandler) {\n _this.saveStateHandler.saveState();\n }\n };\n if (!inode) {\n // Called with empty node -> deselect current node\n this._deselectCurrentNode();\n saveState();\n return;\n }\n if (!canSelect()) {\n return;\n }\n var node = inode;\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this._deselectCurrentNode();\n this._triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node\n });\n }\n }\n else {\n var deselected_node = this.getSelectedNode();\n this._deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n this._triggerEvent(\"tree.select\", {\n node: node,\n deselected_node: deselected_node\n });\n openParents();\n }\n saveState();\n };\n JqTreeWidget.prototype._loadData = function (data, parentNode) {\n if (!data) {\n return;\n }\n else {\n this._triggerEvent(\"tree.load_data\", { tree_data: data });\n if (parentNode) {\n this._deselectNodes(parentNode);\n this._loadSubtree(data, parentNode);\n }\n else {\n this._initTree(data);\n }\n if (this.isDragging() && this.dndHandler) {\n this.dndHandler.refresh();\n }\n }\n };\n JqTreeWidget.prototype._deselectNodes = function (parentNode) {\n if (this.selectNodeHandler) {\n var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) {\n var n = selectedNodesUnderParent_1[_i];\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n };\n JqTreeWidget.prototype._loadSubtree = function (data, parentNode) {\n parentNode.loadFromData(data);\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n this._refreshElements(parentNode);\n };\n JqTreeWidget.prototype._loadDataFromUrl = function (urlInfoParam, parentNode, onFinished) {\n var urlInfo = urlInfoParam || this._getDataUrlInfo(parentNode);\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n };\n JqTreeWidget.prototype._loadFolderOnDemand = function (node, slide, on_finished) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n node.is_loading = true;\n this._loadDataFromUrl(null, node, function () {\n _this._openNode(node, slide, on_finished);\n });\n };\n JqTreeWidget.defaults = {\n animationSpeed: \"fast\",\n autoOpen: false,\n saveState: false,\n dragAndDrop: false,\n selectable: true,\n useContextMenu: true,\n onCanSelectNode: null,\n onSetStateFromStorage: null,\n onGetStateFromStorage: null,\n onCreateLi: null,\n onIsMoveHandle: null,\n // Can this node be moved?\n onCanMove: null,\n // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanMoveTo: null,\n onLoadFailed: null,\n autoEscape: true,\n dataUrl: null,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: null,\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n openedIcon: \"▼\",\n slide: true,\n nodeClass: node_1.Node,\n dataFilter: null,\n keyboardSupport: true,\n openFolderDelay: 500,\n rtl: false,\n onDragMove: null,\n onDragStop: null,\n buttonLeft: true,\n onLoading: null,\n tabIndex: 0\n };\n return JqTreeWidget;\n}(mouse_widget_1[\"default\"]));\nsimple_widget_1[\"default\"].register(JqTreeWidget, \"tree\");\n","\"use strict\";\nexports.__esModule = true;\nvar version = \"1.4.10\";\nexports[\"default\"] = version;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\nvar jQuery = require(\"jquery\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar DragAndDropHandler = /** @class */ (function () {\n function DragAndDropHandler(treeWidget) {\n this.treeWidget = treeWidget;\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n this.positionInfo = null;\n }\n DragAndDropHandler.prototype.mouseCapture = function (positionInfo) {\n var $element = jQuery(positionInfo.target);\n if (!this.mustCaptureElement($element)) {\n return null;\n }\n if (this.treeWidget.options.onIsMoveHandle &&\n !this.treeWidget.options.onIsMoveHandle($element)) {\n return null;\n }\n var nodeElement = this.treeWidget._getNodeElement($element);\n if (nodeElement && this.treeWidget.options.onCanMove) {\n if (!this.treeWidget.options.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n this.currentItem = nodeElement;\n return this.currentItem != null;\n };\n DragAndDropHandler.prototype.generateHitAreas = function () {\n if (!this.currentItem) {\n this.hitAreas = [];\n }\n else {\n var hitAreasGenerator = new HitAreasGenerator(this.treeWidget.tree, this.currentItem.node, this.getTreeDimensions().bottom);\n this.hitAreas = hitAreasGenerator.generate();\n }\n };\n DragAndDropHandler.prototype.mouseStart = function (positionInfo) {\n if (!this.currentItem ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return false;\n }\n else {\n this.refresh();\n var offset = jQuery(positionInfo.target).offset();\n var left = offset ? offset.left : 0;\n var top_1 = offset ? offset.top : 0;\n var node = this.currentItem.node;\n var nodeName = this.treeWidget.options.autoEscape\n ? util_1.htmlEscape(node.name)\n : node.name;\n this.dragElement = new DragElement(nodeName, positionInfo.pageX - left, positionInfo.pageY - top_1, this.treeWidget.element);\n this.isDragging = true;\n this.positionInfo = positionInfo;\n this.currentItem.$element.addClass(\"jqtree-moving\");\n return true;\n }\n };\n DragAndDropHandler.prototype.mouseDrag = function (positionInfo) {\n if (!this.currentItem ||\n !this.dragElement ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return false;\n }\n else {\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n this.positionInfo = positionInfo;\n var area = this.findHoveredArea(positionInfo.pageX, positionInfo.pageY);\n var canMoveTo = this.canMoveToArea(area);\n if (canMoveTo && area) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n }\n else {\n this.stopOpenFolderTimer();\n }\n this.updateDropHint();\n }\n }\n else {\n this.removeHover();\n this.removeDropHint();\n this.stopOpenFolderTimer();\n }\n if (!area) {\n if (this.treeWidget.options.onDragMove) {\n this.treeWidget.options.onDragMove(this.currentItem.node, positionInfo.originalEvent);\n }\n }\n return true;\n }\n };\n DragAndDropHandler.prototype.mouseStop = function (positionInfo) {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n var currentItem = this.currentItem;\n if (this.currentItem) {\n this.currentItem.$element.removeClass(\"jqtree-moving\");\n this.currentItem = null;\n }\n this.isDragging = false;\n this.positionInfo = null;\n if (!this.hoveredArea && currentItem) {\n if (this.treeWidget.options.onDragStop) {\n this.treeWidget.options.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n return false;\n };\n DragAndDropHandler.prototype.refresh = function () {\n this.removeHitAreas();\n if (this.currentItem) {\n this.generateHitAreas();\n this.currentItem = this.treeWidget._getNodeElementForNode(this.currentItem.node);\n if (this.isDragging) {\n this.currentItem.$element.addClass(\"jqtree-moving\");\n }\n }\n };\n DragAndDropHandler.prototype.mustCaptureElement = function ($element) {\n return !$element.is(\"input,select,textarea\");\n };\n DragAndDropHandler.prototype.canMoveToArea = function (area) {\n if (!area || !this.currentItem) {\n return false;\n }\n else if (this.treeWidget.options.onCanMoveTo) {\n var position_name = node_1.getPositionName(area.position);\n return this.treeWidget.options.onCanMoveTo(this.currentItem.node, area.node, position_name);\n }\n else {\n return true;\n }\n };\n DragAndDropHandler.prototype.removeHitAreas = function () {\n this.hitAreas = [];\n };\n DragAndDropHandler.prototype.clear = function () {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n };\n DragAndDropHandler.prototype.removeDropHint = function () {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n };\n DragAndDropHandler.prototype.removeHover = function () {\n this.hoveredArea = null;\n };\n DragAndDropHandler.prototype.findHoveredArea = function (x, y) {\n var dimensions = this.getTreeDimensions();\n if (x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom) {\n return null;\n }\n var low = 0;\n var high = this.hitAreas.length;\n while (low < high) {\n // tslint:disable-next-line: no-bitwise\n var mid = (low + high) >> 1;\n var area = this.hitAreas[mid];\n if (y < area.top) {\n high = mid;\n }\n else if (y > area.bottom) {\n low = mid + 1;\n }\n else {\n return area;\n }\n }\n return null;\n };\n DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) {\n var node = area.node;\n return (node.isFolder() &&\n !node.is_open &&\n area.position === node_1.Position.Inside);\n };\n DragAndDropHandler.prototype.updateDropHint = function () {\n if (!this.hoveredArea) {\n return;\n }\n // remove previous drop hint\n this.removeDropHint();\n // add new drop hint\n var node_element = this.treeWidget._getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = node_element.addDropHint(this.hoveredArea.position);\n };\n DragAndDropHandler.prototype.startOpenFolderTimer = function (folder) {\n var _this = this;\n var openFolder = function () {\n _this.treeWidget._openNode(folder, _this.treeWidget.options.slide, function () {\n _this.refresh();\n _this.updateDropHint();\n });\n };\n this.stopOpenFolderTimer();\n this.openFolderTimer = window.setTimeout(openFolder, this.treeWidget.options.openFolderDelay);\n };\n DragAndDropHandler.prototype.stopOpenFolderTimer = function () {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n };\n DragAndDropHandler.prototype.moveItem = function (positionInfo) {\n var _this = this;\n if (this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== node_1.Position.None &&\n this.canMoveToArea(this.hoveredArea)) {\n var moved_node_1 = this.currentItem.node;\n var target_node_1 = this.hoveredArea.node;\n var position_1 = this.hoveredArea.position;\n var previous_parent = moved_node_1.parent;\n if (position_1 === node_1.Position.Inside) {\n this.hoveredArea.node.is_open = true;\n }\n var doMove = function () {\n _this.treeWidget.tree.moveNode(moved_node_1, target_node_1, position_1);\n _this.treeWidget.element.empty();\n _this.treeWidget._refreshElements(null);\n };\n var event_1 = this.treeWidget._triggerEvent(\"tree.move\", {\n move_info: {\n moved_node: moved_node_1,\n target_node: target_node_1,\n position: node_1.getPositionName(position_1),\n previous_parent: previous_parent,\n do_move: doMove,\n original_event: positionInfo.originalEvent\n }\n });\n if (!event_1.isDefaultPrevented()) {\n doMove();\n }\n }\n };\n DragAndDropHandler.prototype.getTreeDimensions = function () {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n var offset = this.treeWidget.element.offset();\n if (!offset) {\n return { left: 0, top: 0, right: 0, bottom: 0 };\n }\n else {\n var el = this.treeWidget.element;\n var width = el.width() || 0;\n var height = el.height() || 0;\n var left = offset.left + this.treeWidget._getScrollLeft();\n return {\n left: left,\n top: offset.top,\n right: left + width,\n bottom: offset.top + height + 16\n };\n }\n };\n return DragAndDropHandler;\n}());\nexports.DragAndDropHandler = DragAndDropHandler;\nvar VisibleNodeIterator = /** @class */ (function () {\n function VisibleNodeIterator(tree) {\n this.tree = tree;\n }\n VisibleNodeIterator.prototype.iterate = function () {\n var _this = this;\n var isFirstNode = true;\n var _iterateNode = function (node, nextNode) {\n var mustIterateInside = (node.is_open || !node.element) && node.hasChildren();\n var $element = null;\n if (node.element) {\n $element = jQuery(node.element);\n if (!$element.is(\":visible\")) {\n return;\n }\n if (isFirstNode) {\n _this.handleFirstNode(node);\n isFirstNode = false;\n }\n if (!node.hasChildren()) {\n _this.handleNode(node, nextNode, $element);\n }\n else if (node.is_open) {\n if (!_this.handleOpenFolder(node, $element)) {\n mustIterateInside = false;\n }\n }\n else {\n _this.handleClosedFolder(node, nextNode, $element);\n }\n }\n if (mustIterateInside) {\n var children_length_1 = node.children.length;\n node.children.forEach(function (_, i) {\n if (i === children_length_1 - 1) {\n _iterateNode(node.children[i], null);\n }\n else {\n _iterateNode(node.children[i], node.children[i + 1]);\n }\n });\n if (node.is_open && $element) {\n _this.handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n _iterateNode(this.tree, null);\n };\n return VisibleNodeIterator;\n}());\nvar HitAreasGenerator = /** @class */ (function (_super) {\n __extends(HitAreasGenerator, _super);\n function HitAreasGenerator(tree, currentNode, treeBottom) {\n var _this = _super.call(this, tree) || this;\n _this.currentNode = currentNode;\n _this.treeBottom = treeBottom;\n return _this;\n }\n HitAreasGenerator.prototype.generate = function () {\n this.positions = [];\n this.lastTop = 0;\n this.iterate();\n return this.generateHitAreas(this.positions);\n };\n HitAreasGenerator.prototype.generateHitAreas = function (positions) {\n var previousTop = -1;\n var group = [];\n var hitAreas = [];\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n if (position.top !== previousTop && group.length) {\n if (group.length) {\n this.generateHitAreasForGroup(hitAreas, group, previousTop, position.top);\n }\n previousTop = position.top;\n group = [];\n }\n group.push(position);\n }\n this.generateHitAreasForGroup(hitAreas, group, previousTop, this.treeBottom);\n return hitAreas;\n };\n HitAreasGenerator.prototype.handleOpenFolder = function (node, $element) {\n if (node === this.currentNode) {\n // Cannot move inside current item\n // Stop iterating\n return false;\n }\n // Cannot move before current item\n if (node.children[0] !== this.currentNode) {\n this.addPosition(node, node_1.Position.Inside, this.getTop($element));\n }\n // Continue iterating\n return true;\n };\n HitAreasGenerator.prototype.handleClosedFolder = function (node, nextNode, $element) {\n var top = this.getTop($element);\n if (node === this.currentNode) {\n // Cannot move after current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.Inside, top);\n // Cannot move before current item\n if (nextNode !== this.currentNode) {\n this.addPosition(node, node_1.Position.After, top);\n }\n }\n };\n HitAreasGenerator.prototype.handleFirstNode = function (node) {\n if (node !== this.currentNode) {\n this.addPosition(node, node_1.Position.Before, this.getTop(jQuery(node.element)));\n }\n };\n HitAreasGenerator.prototype.handleAfterOpenFolder = function (node, next_node) {\n if (node === this.currentNode || next_node === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, node_1.Position.None, this.lastTop);\n }\n else {\n this.addPosition(node, node_1.Position.After, this.lastTop);\n }\n };\n HitAreasGenerator.prototype.handleNode = function (node, nextNode, $element) {\n var top = this.getTop($element);\n if (node === this.currentNode) {\n // Cannot move inside current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.Inside, top);\n }\n if (nextNode === this.currentNode || node === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.After, top);\n }\n };\n HitAreasGenerator.prototype.getTop = function ($element) {\n var offset = $element.offset();\n return offset ? offset.top : 0;\n };\n HitAreasGenerator.prototype.addPosition = function (node, position, top) {\n var area = {\n top: top,\n bottom: 0,\n node: node,\n position: position\n };\n this.positions.push(area);\n this.lastTop = top;\n };\n HitAreasGenerator.prototype.generateHitAreasForGroup = function (hitAreas, positionsInGroup, top, bottom) {\n // limit positions in group\n var position_count = Math.min(positionsInGroup.length, 4);\n var area_height = Math.round((bottom - top) / position_count);\n var area_top = top;\n var i = 0;\n while (i < position_count) {\n var position = positionsInGroup[i];\n hitAreas.push({\n top: area_top,\n bottom: area_top + area_height,\n node: position.node,\n position: position.position\n });\n area_top += area_height;\n i += 1;\n }\n };\n return HitAreasGenerator;\n}(VisibleNodeIterator));\nexports.HitAreasGenerator = HitAreasGenerator;\nvar DragElement = /** @class */ (function () {\n function DragElement(node_name, offset_x, offset_y, $tree) {\n this.offsetX = offset_x;\n this.offsetY = offset_y;\n this.$element = jQuery(\"\" + node_name + \"\");\n this.$element.css(\"position\", \"absolute\");\n $tree.append(this.$element);\n }\n DragElement.prototype.move = function (pageX, pageY) {\n this.$element.offset({\n left: pageX - this.offsetX,\n top: pageY - this.offsetY\n });\n };\n DragElement.prototype.remove = function () {\n this.$element.remove();\n };\n return DragElement;\n}());\n","\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar ElementsRenderer = /** @class */ (function () {\n function ElementsRenderer(treeWidget) {\n this.treeWidget = treeWidget;\n this.openedIconElement = this.createButtonElement(treeWidget.options.openedIcon);\n this.closedIconElement = this.createButtonElement(treeWidget.options.closedIcon);\n }\n ElementsRenderer.prototype.render = function (fromNode) {\n if (fromNode && fromNode.parent) {\n this.renderFromNode(fromNode);\n }\n else {\n this.renderFromRoot();\n }\n };\n ElementsRenderer.prototype.renderFromRoot = function () {\n var $element = this.treeWidget.element;\n $element.empty();\n this.createDomElements($element[0], this.treeWidget.tree.children, true, 1);\n };\n ElementsRenderer.prototype.renderFromNode = function (node) {\n // remember current li\n var $previousLi = jQuery(node.element);\n // create element\n var li = this.createLi(node, node.getLevel());\n this.attachNodeData(node, li);\n // add element to dom\n $previousLi.after(li);\n // remove previous li\n $previousLi.remove();\n // create children\n if (node.children) {\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n };\n ElementsRenderer.prototype.createDomElements = function (element, children, isRootNode, level) {\n var ul = this.createUl(isRootNode);\n element.appendChild(ul);\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var child = children_1[_i];\n var li = this.createLi(child, level);\n ul.appendChild(li);\n this.attachNodeData(child, li);\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n };\n ElementsRenderer.prototype.attachNodeData = function (node, li) {\n node.element = li;\n jQuery(li).data(\"node\", node);\n };\n ElementsRenderer.prototype.createUl = function (isRootNode) {\n var classString;\n var role;\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n }\n else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n if (this.treeWidget.options.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n var ul = document.createElement(\"ul\");\n ul.className = \"jqtree_common \" + classString;\n ul.setAttribute(\"role\", role);\n return ul;\n };\n ElementsRenderer.prototype.createLi = function (node, level) {\n var isSelected = Boolean(this.treeWidget.selectNodeHandler &&\n this.treeWidget.selectNodeHandler.isNodeSelected(node));\n var li = node.isFolder()\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n if (this.treeWidget.options.onCreateLi) {\n this.treeWidget.options.onCreateLi(node, jQuery(li), isSelected);\n }\n return li;\n };\n ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) {\n var buttonClasses = this.getButtonClasses(node);\n var folderClasses = this.getFolderClasses(node, isSelected);\n var iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n // li\n var li = document.createElement(\"li\");\n li.className = \"jqtree_common \" + folderClasses;\n li.setAttribute(\"role\", \"presentation\");\n // div\n var div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n li.appendChild(div);\n // button link\n var buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n buttonLink.appendChild(iconElement.cloneNode(true));\n buttonLink.setAttribute(\"role\", \"presentation\");\n buttonLink.setAttribute(\"aria-hidden\", \"true\");\n if (this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n // title span\n div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, true));\n if (!this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n return li;\n };\n ElementsRenderer.prototype.createNodeLi = function (node, level, isSelected) {\n var liClasses = [\"jqtree_common\"];\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n var classString = liClasses.join(\" \");\n // li\n var li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"presentation\");\n // div\n var div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n li.appendChild(div);\n // title span\n div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, false));\n return li;\n };\n ElementsRenderer.prototype.createTitleSpan = function (nodeName, level, isSelected, isOpen, isFolder) {\n var titleSpan = document.createElement(\"span\");\n var classes = \"jqtree-title jqtree_common\";\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n titleSpan.className = classes;\n titleSpan.setAttribute(\"role\", \"treeitem\");\n titleSpan.setAttribute(\"aria-level\", \"\" + level);\n titleSpan.setAttribute(\"aria-selected\", util_1.getBoolString(isSelected));\n titleSpan.setAttribute(\"aria-expanded\", util_1.getBoolString(isOpen));\n if (isSelected) {\n titleSpan.setAttribute(\"tabindex\", this.treeWidget.options.tabIndex);\n }\n titleSpan.innerHTML = this.escapeIfNecessary(nodeName);\n return titleSpan;\n };\n ElementsRenderer.prototype.getButtonClasses = function (node) {\n var classes = [\"jqtree-toggler\", \"jqtree_common\"];\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n if (this.treeWidget.options.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n }\n else {\n classes.push(\"jqtree-toggler-right\");\n }\n return classes.join(\" \");\n };\n ElementsRenderer.prototype.getFolderClasses = function (node, isSelected) {\n var classes = [\"jqtree-folder\"];\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n return classes.join(\" \");\n };\n ElementsRenderer.prototype.escapeIfNecessary = function (value) {\n if (this.treeWidget.options.autoEscape) {\n return util_1.htmlEscape(value);\n }\n else {\n return value;\n }\n };\n ElementsRenderer.prototype.createButtonElement = function (value) {\n if (typeof value === \"string\") {\n // convert value to html\n var div = document.createElement(\"div\");\n div.innerHTML = value;\n return document.createTextNode(div.innerHTML);\n }\n else {\n return jQuery(value)[0];\n }\n };\n return ElementsRenderer;\n}());\nexports[\"default\"] = ElementsRenderer;\n","\"use strict\";\nexports.__esModule = true;\nvar DataLoader = /** @class */ (function () {\n function DataLoader(treeWidget) {\n this.treeWidget = treeWidget;\n }\n DataLoader.prototype.loadFromUrl = function (urlInfo, parentNode, onFinished) {\n var _this = this;\n if (!urlInfo) {\n return;\n }\n var $el = this.getDomElement(parentNode);\n this.addLoadingClass($el);\n this.notifyLoading(true, parentNode, $el);\n var stopLoading = function () {\n _this.removeLoadingClass($el);\n _this.notifyLoading(false, parentNode, $el);\n };\n var handleSuccess = function (data) {\n stopLoading();\n _this.treeWidget.loadData(_this.parseData(data), parentNode);\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n var handleError = function (jqXHR) {\n stopLoading();\n var onLoadFailed = _this.treeWidget.options.onLoadFailed;\n if (onLoadFailed) {\n onLoadFailed(jqXHR);\n }\n };\n this.submitRequest(urlInfo, handleSuccess, handleError);\n };\n DataLoader.prototype.addLoadingClass = function ($el) {\n if ($el) {\n $el.addClass(\"jqtree-loading\");\n }\n };\n DataLoader.prototype.removeLoadingClass = function ($el) {\n if ($el) {\n $el.removeClass(\"jqtree-loading\");\n }\n };\n DataLoader.prototype.getDomElement = function (parentNode) {\n if (parentNode) {\n return jQuery(parentNode.element);\n }\n else {\n return this.treeWidget.element;\n }\n };\n DataLoader.prototype.notifyLoading = function (isLoading, node, $el) {\n var onLoading = this.treeWidget.options.onLoading;\n if (onLoading) {\n onLoading(isLoading, node, $el);\n }\n this.treeWidget._triggerEvent(\"tree.loading_data\", {\n isLoading: isLoading,\n node: node,\n $el: $el\n });\n };\n DataLoader.prototype.submitRequest = function (urlInfo, handleSuccess, handleError) {\n var ajaxSettings = jQuery.extend({ method: \"GET\" }, typeof urlInfo === \"string\" ? { url: urlInfo } : urlInfo, {\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError\n });\n ajaxSettings.method = ajaxSettings.method.toUpperCase();\n jQuery.ajax(ajaxSettings);\n };\n DataLoader.prototype.parseData = function (data) {\n var dataFilter = this.treeWidget.options.dataFilter;\n var parsedData = data instanceof Array || typeof data === \"object\"\n ? data\n : data != null\n ? jQuery.parseJSON(data)\n : [];\n return dataFilter ? dataFilter(parsedData) : parsedData;\n };\n return DataLoader;\n}());\nexports[\"default\"] = DataLoader;\n","\"use strict\";\nexports.__esModule = true;\nvar KeyHandler = /** @class */ (function () {\n function KeyHandler(treeWidget) {\n var _this = this;\n this.handleKeyDown = function (e) {\n if (!_this.canHandleKeyboard()) {\n return true;\n }\n else {\n var key = e.which;\n switch (key) {\n case KeyHandler.DOWN:\n return _this.moveDown();\n case KeyHandler.UP:\n return _this.moveUp();\n case KeyHandler.RIGHT:\n return _this.moveRight();\n case KeyHandler.LEFT:\n return _this.moveLeft();\n default:\n return true;\n }\n }\n };\n this.treeWidget = treeWidget;\n if (treeWidget.options.keyboardSupport) {\n jQuery(document).on(\"keydown.jqtree\", this.handleKeyDown);\n }\n }\n KeyHandler.prototype.deinit = function () {\n jQuery(document).off(\"keydown.jqtree\");\n };\n KeyHandler.prototype.moveDown = function () {\n var node = this.treeWidget.getSelectedNode();\n if (node) {\n return this.selectNode(node.getNextNode());\n }\n else {\n return false;\n }\n };\n KeyHandler.prototype.moveUp = function () {\n var node = this.treeWidget.getSelectedNode();\n if (node) {\n return this.selectNode(node.getPreviousNode());\n }\n else {\n return false;\n }\n };\n KeyHandler.prototype.moveRight = function () {\n var node = this.treeWidget.getSelectedNode();\n if (!node) {\n return true;\n }\n else if (!node.isFolder()) {\n return true;\n }\n else {\n // folder node\n if (node.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(node.getNextNode());\n }\n else {\n // Right expands a closed node\n this.treeWidget.openNode(node);\n return false;\n }\n }\n };\n KeyHandler.prototype.moveLeft = function () {\n var node = this.treeWidget.getSelectedNode();\n if (!node) {\n return true;\n }\n else if (node.isFolder() && node.is_open) {\n // Left on an open node closes the node\n this.treeWidget.closeNode(node);\n return false;\n }\n else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(node.getParent());\n }\n };\n KeyHandler.prototype.selectNode = function (node) {\n if (!node) {\n return true;\n }\n else {\n this.treeWidget.selectNode(node);\n if (this.treeWidget.scrollHandler &&\n !this.treeWidget.scrollHandler.isScrolledIntoView(jQuery(node.element).find(\".jqtree-element\"))) {\n this.treeWidget.scrollToNode(node);\n }\n return false;\n }\n };\n KeyHandler.prototype.canHandleKeyboard = function () {\n return (this.treeWidget.options.keyboardSupport &&\n this.isFocusOnTree() &&\n this.treeWidget.getSelectedNode() != null);\n };\n KeyHandler.prototype.isFocusOnTree = function () {\n var activeElement = document.activeElement;\n return Boolean(activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.treeWidget._containsElement(activeElement));\n };\n KeyHandler.LEFT = 37;\n KeyHandler.UP = 38;\n KeyHandler.RIGHT = 39;\n KeyHandler.DOWN = 40;\n return KeyHandler;\n}());\nexports[\"default\"] = KeyHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\n/*\nThis widget does the same a the mouse widget in jqueryui.\n*/\nvar simple_widget_1 = require(\"./simple.widget\");\nvar MouseWidget = /** @class */ (function (_super) {\n __extends(MouseWidget, _super);\n function MouseWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.mouseDown = function (e) {\n // Is left mouse button?\n if (e.which !== 1) {\n return;\n }\n var result = _this._handleMouseDown(_this._getPositionInfo(e));\n if (result) {\n e.preventDefault();\n }\n return result;\n };\n _this.mouseMove = function (e) {\n return _this._handleMouseMove(e, _this._getPositionInfo(e));\n };\n _this.mouseUp = function (e) {\n return _this._handleMouseUp(_this._getPositionInfo(e));\n };\n _this.touchStart = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this._handleMouseDown(_this._getPositionInfo(touch));\n };\n _this.touchMove = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this._handleMouseMove(e, _this._getPositionInfo(touch));\n };\n _this.touchEnd = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this._handleMouseUp(_this._getPositionInfo(touch));\n };\n return _this;\n }\n MouseWidget.prototype.setMouseDelay = function (mouseDelay) {\n this.mouseDelay = mouseDelay;\n };\n MouseWidget.prototype._init = function () {\n this.$el.on(\"mousedown.mousewidget\", this.mouseDown);\n this.$el.on(\"touchstart.mousewidget\", this.touchStart);\n this.isMouseStarted = false;\n this.mouseDelay = 0;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = true;\n this.mouseDownInfo = null;\n };\n MouseWidget.prototype._deinit = function () {\n this.$el.off(\"mousedown.mousewidget\");\n this.$el.off(\"touchstart.mousewidget\");\n var $document = jQuery(document);\n $document.off(\"mousemove.mousewidget\");\n $document.off(\"mouseup.mousewidget\");\n };\n MouseWidget.prototype._handleMouseDown = function (positionInfo) {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this._handleMouseUp(positionInfo);\n }\n this.mouseDownInfo = positionInfo;\n if (!this._mouseCapture(positionInfo)) {\n return;\n }\n this._handleStartMouse();\n return true;\n };\n MouseWidget.prototype._handleStartMouse = function () {\n var $document = jQuery(document);\n $document.on(\"mousemove.mousewidget\", this.mouseMove);\n $document.on(\"touchmove.mousewidget\", this.touchMove);\n $document.on(\"mouseup.mousewidget\", this.mouseUp);\n $document.on(\"touchend.mousewidget\", this.touchEnd);\n if (this.mouseDelay) {\n this._startMouseDelayTimer();\n }\n };\n MouseWidget.prototype._startMouseDelayTimer = function () {\n var _this = this;\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n this.mouseDelayTimer = window.setTimeout(function () {\n _this.isMouseDelayMet = true;\n }, this.mouseDelay);\n this.isMouseDelayMet = false;\n };\n MouseWidget.prototype._handleMouseMove = function (e, positionInfo) {\n if (this.isMouseStarted) {\n this._mouseDrag(positionInfo);\n return e.preventDefault();\n }\n if (this.mouseDelay && !this.isMouseDelayMet) {\n return true;\n }\n if (this.mouseDownInfo) {\n this.isMouseStarted =\n this._mouseStart(this.mouseDownInfo) !== false;\n }\n if (this.isMouseStarted) {\n this._mouseDrag(positionInfo);\n }\n else {\n this._handleMouseUp(positionInfo);\n }\n return !this.isMouseStarted;\n };\n MouseWidget.prototype._getPositionInfo = function (e) {\n return {\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target,\n originalEvent: e\n };\n };\n MouseWidget.prototype._handleMouseUp = function (positionInfo) {\n var $document = jQuery(document);\n $document.off(\"mousemove.mousewidget\");\n $document.off(\"touchmove.mousewidget\");\n $document.off(\"mouseup.mousewidget\");\n $document.off(\"touchend.mousewidget\");\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this._mouseStop(positionInfo);\n }\n };\n return MouseWidget;\n}(simple_widget_1[\"default\"]));\nexports[\"default\"] = MouseWidget;\n","\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar SaveStateHandler = /** @class */ (function () {\n function SaveStateHandler(treeWidget) {\n this.treeWidget = treeWidget;\n }\n SaveStateHandler.prototype.saveState = function () {\n var state = JSON.stringify(this.getState());\n if (this.treeWidget.options.onSetStateFromStorage) {\n this.treeWidget.options.onSetStateFromStorage(state);\n }\n else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n };\n SaveStateHandler.prototype.getStateFromStorage = function () {\n var jsonData = this._loadFromStorage();\n if (jsonData) {\n return this._parseState(jsonData);\n }\n else {\n return null;\n }\n };\n SaveStateHandler.prototype.getState = function () {\n var _this = this;\n var getOpenNodeIds = function () {\n var openNodes = [];\n _this.treeWidget.tree.iterate(function (node) {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n return openNodes;\n };\n var getSelectedNodeIds = function () {\n return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; });\n };\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds()\n };\n };\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n SaveStateHandler.prototype.setInitialState = function (state) {\n if (!state) {\n return false;\n }\n else {\n var mustLoadOnDemand = false;\n if (state.open_nodes) {\n mustLoadOnDemand = this._openInitialNodes(state.open_nodes);\n }\n if (state.selected_node) {\n this._resetSelection();\n this._selectInitialNodes(state.selected_node);\n }\n return mustLoadOnDemand;\n }\n };\n SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cb_finished) {\n if (state) {\n this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cb_finished);\n }\n else {\n cb_finished();\n }\n };\n SaveStateHandler.prototype.getNodeIdToBeSelected = function () {\n var state = this.getStateFromStorage();\n if (state && state.selected_node) {\n return state.selected_node[0];\n }\n else {\n return null;\n }\n };\n SaveStateHandler.prototype._parseState = function (jsonData) {\n var state = jQuery.parseJSON(jsonData);\n // Check if selected_node is an int (instead of an array)\n if (state && state.selected_node && util_1.isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n return state;\n };\n SaveStateHandler.prototype._loadFromStorage = function () {\n if (this.treeWidget.options.onGetStateFromStorage) {\n return this.treeWidget.options.onGetStateFromStorage();\n }\n else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n }\n };\n SaveStateHandler.prototype._openInitialNodes = function (nodeIds) {\n var mustLoadOnDemand = false;\n for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) {\n var node_id = nodeIds_1[_i];\n var node = this.treeWidget.getNodeById(node_id);\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n }\n else {\n mustLoadOnDemand = true;\n }\n }\n }\n return mustLoadOnDemand;\n };\n SaveStateHandler.prototype._selectInitialNodes = function (nodeIds) {\n var select_count = 0;\n for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) {\n var node_id = nodeIds_2[_i];\n var node = this.treeWidget.getNodeById(node_id);\n if (node) {\n select_count += 1;\n if (this.treeWidget.selectNodeHandler) {\n this.treeWidget.selectNodeHandler.addToSelection(node);\n }\n }\n }\n return select_count !== 0;\n };\n SaveStateHandler.prototype._resetSelection = function () {\n var selectNodeHandler = this.treeWidget.selectNodeHandler;\n if (selectNodeHandler) {\n var selectedNodes = selectNodeHandler.getSelectedNodes();\n selectedNodes.forEach(function (node) {\n selectNodeHandler.removeFromSelection(node);\n });\n }\n };\n SaveStateHandler.prototype._setInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) {\n var _this = this;\n var loadingCount = 0;\n var nodeIds = nodeIdsParam;\n var openNodes = function () {\n var newNodesIds = [];\n for (var _i = 0, nodeIds_3 = nodeIds; _i < nodeIds_3.length; _i++) {\n var node_id = nodeIds_3[_i];\n var node = _this.treeWidget.getNodeById(node_id);\n if (!node) {\n newNodesIds.push(node_id);\n }\n else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n }\n else {\n _this.treeWidget._openNode(node, false, null);\n }\n }\n }\n }\n nodeIds = newNodesIds;\n if (_this._selectInitialNodes(selectedNodes)) {\n _this.treeWidget._refreshElements(null);\n }\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n var loadAndOpenNode = function (node) {\n loadingCount += 1;\n _this.treeWidget._openNode(node, false, function () {\n loadingCount -= 1;\n openNodes();\n });\n };\n openNodes();\n };\n SaveStateHandler.prototype.getKeyName = function () {\n if (typeof this.treeWidget.options.saveState === \"string\") {\n return this.treeWidget.options.saveState;\n }\n else {\n return \"tree\";\n }\n };\n SaveStateHandler.prototype.supportsLocalStorage = function () {\n var testSupport = function () {\n // Is local storage supported?\n if (localStorage == null) {\n return false;\n }\n else {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n var key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n }\n catch (error) {\n return false;\n }\n return true;\n }\n };\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n return this._supportsLocalStorage;\n };\n return SaveStateHandler;\n}());\nexports[\"default\"] = SaveStateHandler;\n","\"use strict\";\nexports.__esModule = true;\nvar ScrollHandler = /** @class */ (function () {\n function ScrollHandler(tree_widget) {\n this.treeWidget = tree_widget;\n this.previousTop = -1;\n this.isInitialized = false;\n }\n ScrollHandler.prototype.checkScrolling = function () {\n this.ensureInit();\n this.checkVerticalScrolling();\n this.checkHorizontalScrolling();\n };\n ScrollHandler.prototype.scrollToY = function (top) {\n this.ensureInit();\n if (this.$scrollParent) {\n this.$scrollParent[0].scrollTop = top;\n }\n else {\n var offset = this.treeWidget.$el.offset();\n var treeTop = offset ? offset.top : 0;\n jQuery(document).scrollTop(top + treeTop);\n }\n };\n ScrollHandler.prototype.isScrolledIntoView = function ($element) {\n this.ensureInit();\n var elementBottom;\n var viewBottom;\n var elementTop;\n var viewTop;\n var elHeight = $element.height() || 0;\n if (this.$scrollParent) {\n viewTop = 0;\n viewBottom = this.$scrollParent.height() || 0;\n var offset = $element.offset();\n var originalTop = offset ? offset.top : 0;\n elementTop = originalTop - this.scrollParentTop;\n elementBottom = elementTop + elHeight;\n }\n else {\n viewTop = jQuery(window).scrollTop() || 0;\n var windowHeight = jQuery(window).height() || 0;\n viewBottom = viewTop + windowHeight;\n var offset = $element.offset();\n elementTop = offset ? offset.top : 0;\n elementBottom = elementTop + elHeight;\n }\n return elementBottom <= viewBottom && elementTop >= viewTop;\n };\n ScrollHandler.prototype.getScrollLeft = function () {\n if (!this.$scrollParent) {\n return 0;\n }\n else {\n return this.$scrollParent.scrollLeft() || 0;\n }\n };\n ScrollHandler.prototype.initScrollParent = function () {\n var _this = this;\n var getParentWithOverflow = function () {\n var cssAttributes = [\"overflow\", \"overflow-y\"];\n var hasOverFlow = function ($el) {\n for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) {\n var attr = cssAttributes_1[_i];\n var overflowValue = $el.css(attr);\n if (overflowValue === \"auto\" ||\n overflowValue === \"scroll\") {\n return true;\n }\n }\n return false;\n };\n if (hasOverFlow(_this.treeWidget.$el)) {\n return _this.treeWidget.$el;\n }\n for (var _i = 0, _a = _this.treeWidget.$el.parents().get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var $el = jQuery(el);\n if (hasOverFlow($el)) {\n return $el;\n }\n }\n return null;\n };\n var setDocumentAsScrollParent = function () {\n _this.scrollParentTop = 0;\n _this.$scrollParent = null;\n };\n if (this.treeWidget.$el.css(\"position\") === \"fixed\") {\n setDocumentAsScrollParent();\n }\n var $scrollParent = getParentWithOverflow();\n if ($scrollParent &&\n $scrollParent.length &&\n $scrollParent[0].tagName !== \"HTML\") {\n this.$scrollParent = $scrollParent;\n var offset = this.$scrollParent.offset();\n this.scrollParentTop = offset ? offset.top : 0;\n }\n else {\n setDocumentAsScrollParent();\n }\n this.isInitialized = true;\n };\n ScrollHandler.prototype.ensureInit = function () {\n if (!this.isInitialized) {\n this.initScrollParent();\n }\n };\n ScrollHandler.prototype.handleVerticalScrollingWithScrollParent = function (area) {\n var scrollParent = this.$scrollParent && this.$scrollParent[0];\n if (!scrollParent) {\n return;\n }\n var distanceBottom = this.scrollParentTop + scrollParent.offsetHeight - area.bottom;\n if (distanceBottom < 20) {\n scrollParent.scrollTop += 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n else if (area.top - this.scrollParentTop < 20) {\n scrollParent.scrollTop -= 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n };\n ScrollHandler.prototype.handleVerticalScrollingWithDocument = function (area) {\n var scrollTop = jQuery(document).scrollTop() || 0;\n var distanceTop = area.top - scrollTop;\n if (distanceTop < 20) {\n jQuery(document).scrollTop(scrollTop - 20);\n }\n else {\n var windowHeight = jQuery(window).height() || 0;\n if (windowHeight - (area.bottom - scrollTop) < 20) {\n jQuery(document).scrollTop(scrollTop + 20);\n }\n }\n };\n ScrollHandler.prototype.checkVerticalScrolling = function () {\n var hoveredArea = this.treeWidget.dndHandler &&\n this.treeWidget.dndHandler.hoveredArea;\n if (hoveredArea && hoveredArea.top !== this.previousTop) {\n this.previousTop = hoveredArea.top;\n if (this.$scrollParent) {\n this.handleVerticalScrollingWithScrollParent(hoveredArea);\n }\n else {\n this.handleVerticalScrollingWithDocument(hoveredArea);\n }\n }\n };\n ScrollHandler.prototype.checkHorizontalScrolling = function () {\n var positionInfo = this.treeWidget.dndHandler &&\n this.treeWidget.dndHandler.positionInfo;\n if (!positionInfo) {\n return;\n }\n if (this.$scrollParent) {\n this.handleHorizontalScrollingWithParent(positionInfo);\n }\n else {\n this.handleHorizontalScrollingWithDocument(positionInfo);\n }\n };\n ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) {\n if (positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return;\n }\n var $scrollParent = this.$scrollParent;\n var scrollParentOffset = $scrollParent && $scrollParent.offset();\n if (!($scrollParent && scrollParentOffset)) {\n return;\n }\n var scrollParent = $scrollParent[0];\n var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth <\n scrollParent.scrollWidth;\n var canScrollLeft = scrollParent.scrollLeft > 0;\n var rightEdge = scrollParentOffset.left + scrollParent.clientWidth;\n var leftEdge = scrollParentOffset.left;\n var isNearRightEdge = positionInfo.pageX > rightEdge - 20;\n var isNearLeftEdge = positionInfo.pageX < leftEdge + 20;\n if (isNearRightEdge && canScrollRight) {\n scrollParent.scrollLeft = Math.min(scrollParent.scrollLeft + 20, scrollParent.scrollWidth);\n }\n else if (isNearLeftEdge && canScrollLeft) {\n scrollParent.scrollLeft = Math.max(scrollParent.scrollLeft - 20, 0);\n }\n };\n ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) {\n if (positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return;\n }\n var $document = jQuery(document);\n var scrollLeft = $document.scrollLeft() || 0;\n var windowWidth = jQuery(window).width() || 0;\n var canScrollLeft = scrollLeft > 0;\n var isNearRightEdge = positionInfo.pageX > windowWidth - 20;\n var isNearLeftEdge = positionInfo.pageX - scrollLeft < 20;\n if (isNearRightEdge) {\n $document.scrollLeft(scrollLeft + 20);\n }\n else if (isNearLeftEdge && canScrollLeft) {\n $document.scrollLeft(Math.max(scrollLeft - 20, 0));\n }\n };\n return ScrollHandler;\n}());\nexports[\"default\"] = ScrollHandler;\n","\"use strict\";\nexports.__esModule = true;\nvar SelectNodeHandler = /** @class */ (function () {\n function SelectNodeHandler(tree_widget) {\n this.treeWidget = tree_widget;\n this.clear();\n }\n SelectNodeHandler.prototype.getSelectedNode = function () {\n var selectedNodes = this.getSelectedNodes();\n if (selectedNodes.length) {\n return selectedNodes[0];\n }\n else {\n return false;\n }\n };\n SelectNodeHandler.prototype.getSelectedNodes = function () {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n }\n else {\n var selectedNodes = [];\n for (var id in this.selectedNodes) {\n if (this.selectedNodes.hasOwnProperty(id)) {\n var node = this.treeWidget.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n }\n }\n return selectedNodes;\n }\n };\n SelectNodeHandler.prototype.getSelectedNodesUnder = function (parent) {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n }\n else {\n return [];\n }\n }\n else {\n var selectedNodes = [];\n for (var id in this.selectedNodes) {\n if (this.selectedNodes.hasOwnProperty(id)) {\n var node = this.treeWidget.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n return selectedNodes;\n }\n };\n SelectNodeHandler.prototype.isNodeSelected = function (node) {\n if (!node) {\n return false;\n }\n else if (node.id != null) {\n if (this.selectedNodes[node.id]) {\n return true;\n }\n else {\n return false;\n }\n }\n else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n }\n else {\n return false;\n }\n };\n SelectNodeHandler.prototype.clear = function () {\n this.selectedNodes = {};\n this.selectedSingleNode = null;\n };\n SelectNodeHandler.prototype.removeFromSelection = function (node, includeChildren) {\n var _this = this;\n if (includeChildren === void 0) { includeChildren = false; }\n if (node.id == null) {\n if (this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element) {\n this.selectedSingleNode = null;\n }\n }\n else {\n delete this.selectedNodes[node.id];\n if (includeChildren) {\n node.iterate(function () {\n delete _this.selectedNodes[node.id];\n return true;\n });\n }\n }\n };\n SelectNodeHandler.prototype.addToSelection = function (node) {\n if (node.id != null) {\n this.selectedNodes[node.id] = true;\n }\n else {\n this.selectedSingleNode = node;\n }\n };\n return SelectNodeHandler;\n}());\nexports[\"default\"] = SelectNodeHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\nvar node_1 = require(\"./node\");\nvar NodeElement = /** @class */ (function () {\n function NodeElement(node, treeWidget) {\n this.init(node, treeWidget);\n }\n NodeElement.prototype.init = function (node, treeWidget) {\n this.node = node;\n this.treeWidget = treeWidget;\n if (!node.element) {\n node.element = this.treeWidget.element.get(0);\n }\n this.$element = jQuery(node.element);\n };\n NodeElement.prototype.addDropHint = function (position) {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.$element, this.treeWidget._getScrollLeft());\n }\n else {\n return new GhostDropHint(this.node, this.$element, position);\n }\n };\n NodeElement.prototype.select = function (mustSetFocus) {\n var $li = this.getLi();\n $li.addClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"true\");\n var $span = this.getSpan();\n $span.attr(\"tabindex\", this.treeWidget.options.tabIndex);\n if (mustSetFocus) {\n $span.focus();\n }\n };\n NodeElement.prototype.deselect = function () {\n var $li = this.getLi();\n $li.removeClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"false\");\n var $span = this.getSpan();\n $span.removeAttr(\"tabindex\");\n $span.blur();\n };\n NodeElement.prototype.getUl = function () {\n return this.$element.children(\"ul:first\");\n };\n NodeElement.prototype.getSpan = function () {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"span.jqtree-title\");\n };\n NodeElement.prototype.getLi = function () {\n return this.$element;\n };\n NodeElement.prototype.mustShowBorderDropHint = function (position) {\n return position === node_1.Position.Inside;\n };\n return NodeElement;\n}());\nexports.NodeElement = NodeElement;\nvar FolderElement = /** @class */ (function (_super) {\n __extends(FolderElement, _super);\n function FolderElement() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FolderElement.prototype.open = function (onFinished, slide, animationSpeed) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n if (this.node.is_open) {\n return;\n }\n this.node.is_open = true;\n var $button = this.getButton();\n $button.removeClass(\"jqtree-closed\");\n $button.html(\"\");\n var button_el = $button.get(0);\n if (button_el) {\n var icon = this.treeWidget.renderer.openedIconElement.cloneNode(true);\n button_el.appendChild(icon);\n }\n var doOpen = function () {\n var $li = _this.getLi();\n $li.removeClass(\"jqtree-closed\");\n var $span = _this.getSpan();\n $span.attr(\"aria-expanded\", \"true\");\n if (onFinished) {\n onFinished(_this.node);\n }\n _this.treeWidget._triggerEvent(\"tree.open\", {\n node: _this.node\n });\n };\n if (slide) {\n this.getUl().slideDown(animationSpeed, doOpen);\n }\n else {\n this.getUl().show();\n doOpen();\n }\n };\n FolderElement.prototype.close = function (slide, animationSpeed) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n if (!this.node.is_open) {\n return;\n }\n this.node.is_open = false;\n var $button = this.getButton();\n $button.addClass(\"jqtree-closed\");\n $button.html(\"\");\n var button_el = $button.get(0);\n if (button_el) {\n var icon = this.treeWidget.renderer.closedIconElement.cloneNode(true);\n button_el.appendChild(icon);\n }\n var doClose = function () {\n var $li = _this.getLi();\n $li.addClass(\"jqtree-closed\");\n var $span = _this.getSpan();\n $span.attr(\"aria-expanded\", \"false\");\n _this.treeWidget._triggerEvent(\"tree.close\", {\n node: _this.node\n });\n };\n if (slide) {\n this.getUl().slideUp(animationSpeed, doClose);\n }\n else {\n this.getUl().hide();\n doClose();\n }\n };\n FolderElement.prototype.mustShowBorderDropHint = function (position) {\n return !this.node.is_open && position === node_1.Position.Inside;\n };\n FolderElement.prototype.getButton = function () {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"a.jqtree-toggler\");\n };\n return FolderElement;\n}(NodeElement));\nexports.FolderElement = FolderElement;\nvar BorderDropHint = /** @class */ (function () {\n function BorderDropHint($element, scrollLeft) {\n var $div = $element.children(\".jqtree-element\");\n var elWidth = $element.width() || 0;\n var width = Math.max(elWidth + scrollLeft - 4, 0);\n var elHeight = $div.outerHeight() || 0;\n var height = Math.max(elHeight - 4, 0);\n this.$hint = jQuery('');\n $div.append(this.$hint);\n this.$hint.css({ width: width, height: height });\n }\n BorderDropHint.prototype.remove = function () {\n this.$hint.remove();\n };\n return BorderDropHint;\n}());\nexports.BorderDropHint = BorderDropHint;\nvar GhostDropHint = /** @class */ (function () {\n function GhostDropHint(node, $element, position) {\n this.$element = $element;\n this.node = node;\n this.$ghost = jQuery(\"
  • \\n
  • \");\n if (position === node_1.Position.After) {\n this.moveAfter();\n }\n else if (position === node_1.Position.Before) {\n this.moveBefore();\n }\n else if (position === node_1.Position.Inside) {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n }\n else {\n this.moveInside();\n }\n }\n }\n GhostDropHint.prototype.remove = function () {\n this.$ghost.remove();\n };\n GhostDropHint.prototype.moveAfter = function () {\n this.$element.after(this.$ghost);\n };\n GhostDropHint.prototype.moveBefore = function () {\n this.$element.before(this.$ghost);\n };\n GhostDropHint.prototype.moveInsideOpenFolder = function () {\n jQuery(this.node.children[0].element).before(this.$ghost);\n };\n GhostDropHint.prototype.moveInside = function () {\n this.$element.after(this.$ghost);\n this.$ghost.addClass(\"jqtree-inside\");\n };\n return GhostDropHint;\n}());\n","\"use strict\";\nexports.__esModule = true;\nexports.exampleData = [\n {\n label: \"node1\",\n id: 123,\n intProperty: 1,\n strProperty: \"1\",\n children: [\n { label: \"child1\", id: 125, intProperty: 2 },\n { label: \"child2\", id: 126 }\n ]\n },\n {\n label: \"node2\",\n id: 124,\n intProperty: 3,\n strProperty: \"3\",\n children: [{ label: \"child3\", id: 127 }]\n }\n];\n/*\nexample data 2:\n\n-main\n---c1\n---c2\n*/\nexports.exampleData2 = [\n {\n label: \"main\",\n children: [{ label: \"c1\" }, { label: \"c2\" }]\n }\n];\nfunction formatNodes(nodes) {\n var strings = nodes.map(function (node) { return node.name; });\n return strings.join(\" \");\n}\nexports.formatNodes = formatNodes;\nfunction isNodeClosed($node) {\n return ($node.is(\"li.jqtree-folder.jqtree-closed\") &&\n $node.find(\"a:eq(0)\").is(\"a.jqtree-toggler.jqtree-closed\") &&\n $node.find(\"ul:eq(0)\").is(\"ul\"));\n}\nexports.isNodeClosed = isNodeClosed;\nfunction isNodeOpen($node) {\n return ($node.is(\"li.jqtree-folder\") &&\n $node.find(\"a:eq(0)\").is(\"a.jqtree-toggler\") &&\n $node.find(\"ul:eq(0)\").is(\"ul\") &&\n !$node.is(\"li.jqtree-folder.jqtree-closed\") &&\n !$node.find(\"span:eq(0)\").is(\"a.jqtree-toggler.jqtree-closed\"));\n}\nexports.isNodeOpen = isNodeOpen;\nfunction formatTitles($node) {\n var titles = $node.find(\".jqtree-title\").map(function (_, el) { return $(el).text(); });\n return titles.toArray().join(\" \");\n}\nexports.formatTitles = formatTitles;\nfunction doGetNodeByName(tree, name) {\n var result = tree.getNodeByName(name);\n if (!result) {\n throw Error(\"Node with name '\" + name + \"' not found\");\n }\n return result;\n}\nexports.doGetNodeByName = doGetNodeByName;\nfunction doGetNodeById(tree, id) {\n var result = tree.getNodeById(id);\n if (!result) {\n throw Error(\"Node with id '\" + id + \"' not found\");\n }\n return result;\n}\nexports.doGetNodeById = doGetNodeById;\n","\"use strict\";\nexports.__esModule = true;\nrequire(\"./test_jqtree\");\nrequire(\"./test_node_util\");\nrequire(\"./test_tree\");\nrequire(\"./test_util\");\nQUnit.config.testTimeout = 5000;\n","\"use strict\";\nexports.__esModule = true;\nrequire(\"../src/tree.jquery\");\nvar utils_for_test_1 = require(\"./utils_for_test\");\nvar node_1 = require(\"../src/node\");\nrequire(\"../src/itree_widget\");\nvar module = QUnit.module, test = QUnit.test;\nmodule(\"jqtree\", {\n beforeEach: function () {\n $(\"body\").append('
    ');\n },\n afterEach: function () {\n var $tree = $(\"#tree1\");\n $tree.tree(\"destroy\");\n $tree.remove();\n $.mockjax.clear();\n }\n});\ntest(\"create jqtree from data\", function (assert) {\n $(\"#tree1\").tree({\n data: utils_for_test_1.exampleData\n });\n assert.equal($(\"#tree1\").children().length, 1, \"number of children on level 0\");\n assert.ok($(\"#tree1\")\n .children()\n .is(\"ul.jqtree-tree\"), \"first element is ul.jqtree-tree\");\n assert.equal($(\"#tree1 ul.jqtree-tree > li\").length, 2, \"number of children on level 1\");\n assert.ok($(\"#tree1 ul.jqtree-tree li:eq(0)\").is(\"li.jqtree-folder.jqtree-closed\"), \"first child is li.jqtree-folder.jqtree-closed\");\n assert.ok($(\"#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element > a.jqtree-toggler\").is(\"a.jqtree-toggler.jqtree-closed\"), \"button in first folder\");\n assert.equal($(\"#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element span.jqtree-title\").text(), \"node1\");\n});\ntest(\"toggle\", function (assert) {\n // setup\n var done = assert.async();\n // create tree\n var $tree = $(\"#tree1\");\n var $node1;\n var node1;\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n $tree.on(\"tree.open\", function () {\n assert.ok(!utils_for_test_1.isNodeClosed($node1), \"node1 is open\");\n // 2. close node1\n $tree.tree(\"toggle\", node1);\n });\n $tree.on(\"tree.close\", function () {\n assert.ok(utils_for_test_1.isNodeClosed($node1), \"node1 is closed\");\n done();\n });\n var tree = $tree.tree(\"getTree\");\n node1 = tree.children[0];\n $node1 = $tree.find(\"ul.jqtree-tree li:eq(0)\");\n // node1 is initially closed\n assert.ok(utils_for_test_1.isNodeClosed($node1), \"node1 is closed\");\n // 1. open node1\n $tree.tree(\"toggle\", node1);\n});\ntest(\"click event\", function (assert) {\n var selectCount = 0;\n // create tree\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n selectable: true\n });\n var $node1 = $tree.find(\"ul.jqtree-tree li:first\");\n var $textSpan = $node1.find(\"span:first\");\n $tree.on(\"tree.click\", function (e) {\n assert.equal(e.node.name, \"node1\");\n });\n var done = assert.async();\n $tree.on(\"tree.select\", function (e) {\n selectCount += 1;\n if (selectCount === 1) {\n assert.equal(e.node.name, \"node1\");\n var selectedNode = $tree.tree(\"getSelectedNode\");\n assert.ok(selectedNode);\n if (selectedNode) {\n assert.equal(selectedNode.name, \"node1\");\n }\n // deselect\n $textSpan.click();\n }\n else {\n assert.equal(e.node, null);\n assert.equal(e.previous_node.name, \"node1\");\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n done();\n }\n });\n // click on node1\n $textSpan.click();\n});\ntest(\"saveState\", function (assert) {\n var $tree = $(\"#tree1\");\n var savedState;\n function setState(state) {\n savedState = state;\n }\n function getState() {\n return savedState;\n }\n function createTree() {\n $tree.tree({\n data: utils_for_test_1.exampleData,\n saveState: true,\n onSetStateFromStorage: setState,\n onGetStateFromStorage: getState,\n selectable: true\n });\n }\n // create tree\n createTree();\n // nodes are initially closed\n var tree = $tree.tree(\"getTree\");\n tree.iterate(function (node) {\n assert.ok(!node.is_open, \"jqtree-closed\");\n return true;\n });\n // open node1\n $tree.tree(\"toggle\", tree.children[0]);\n // node1 is open\n assert.ok(tree.children[0].is_open, \"node1 is_open\");\n // select node2\n $tree.tree(\"selectNode\", tree.children[1]);\n // node2 is selected\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node2\", \"getSelectedNode (1)\");\n // create tree again\n $tree.tree(\"destroy\");\n createTree();\n var tree2 = $tree.tree(\"getTree\");\n assert.ok(tree2.children[0].is_open, \"node1 is_open\");\n assert.ok(!tree2.children[1].is_open, \"node2 is closed\");\n // node2 is selected\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node2\", \"getSelectedNode (2)\");\n});\ntest(\"getSelectedNode\", function (assert) {\n var $tree = $(\"#tree1\");\n // create tree\n $tree.tree({\n data: utils_for_test_1.exampleData,\n selectable: true\n });\n // there is no node selected\n assert.equal($tree.tree(\"getSelectedNode\"), false, \"getSelectedNode\");\n // select node1\n var tree = $tree.tree(\"getTree\");\n var node1 = tree.children[0];\n $tree.tree(\"selectNode\", node1);\n // node1 is selected\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\", \"getSelectedNode\");\n});\ntest(\"toJson\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n // 1. call toJson\n assert.equal($tree.tree(\"toJson\"), '[{\"name\":\"node1\",\"id\":123,\"intProperty\":1,\"strProperty\":\"1\",' +\n '\"children\":[{\"name\":\"child1\",\"id\":125,\"intProperty\":2},{\"name\":' +\n '\"child2\",\"id\":126}]},{\"name\":\"node2\",\"id\":124,\"intProperty\":3,' +\n '\"strProperty\":\"3\",\"children\":[{\"name\":\"child3\",\"id\":127}]}]');\n // Check that properties 'children', 'parent' and 'element' still exist.\n var tree = $tree.tree(\"getTree\");\n assert.equal(tree.children.length, 2);\n assert.ok(tree.children[0].parent !== undefined, \"parent\");\n assert.ok($(tree.children[0].element).is(\"li\"), \"element\");\n});\ntest(\"loadData\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n autoOpen: true\n });\n // first node is 'node1'\n assert.equal($tree.find(\"> ul > li:first .jqtree-element:first > span\").text(), \"node1\");\n // - load new data\n $tree.tree(\"loadData\", utils_for_test_1.exampleData2);\n // first node is 'main'\n assert.equal($tree.find(\"> ul > li:first .jqtree-element:first > span\").text(), \"main\");\n // - load new data under node 'child3'\n $tree.tree(\"loadData\", utils_for_test_1.exampleData);\n var child3 = $tree.tree(\"getNodeByName\", \"child3\");\n var data = [\n { name: \"c4\", id: 200 },\n {\n name: \"c5\",\n id: 201,\n children: [{ name: \"c6\", id: 202 }]\n }\n ];\n $tree.tree(\"loadData\", data, child3);\n // first node in html is still 'node1'\n assert.equal($tree\n .find(\"li:eq(0)\")\n .find(\".jqtree-element:eq(0) span.jqtree-title\")\n .text(), \"node1\");\n // Node 'child3' now has a children 'c4' and 'c5'\n var $child3 = $tree.find(\"span:contains(child3)\");\n var $li = $child3.closest(\"li\");\n assert.equal($li\n .children(\"ul\")\n .children(\"li:eq(0)\")\n .find(\".jqtree-element span.jqtree-title\")\n .text(), \"c4\");\n // Node 'child3' must have toggler button\n assert.ok($child3.prev().is(\"a.jqtree-toggler\"), \"node 'child3' must have toggler button\");\n // - select node 'c5' and load new data under 'child3'\n var c5 = $tree.tree(\"getNodeByName\", \"c5\");\n $tree.tree(\"selectNode\", c5);\n var selectedNode = $tree.tree(\"getSelectedNode\");\n assert.ok(selectedNode);\n if (selectedNode) {\n assert.equal(selectedNode.name, \"c5\");\n }\n var data2 = [{ name: \"c7\" }, { name: \"c8\" }];\n $tree.tree(\"loadData\", data2, child3);\n // c5 must be deselected\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // - select c7; load new data under child3; note that c7 has no id\n $tree.tree(\"selectNode\", $tree.tree(\"getNodeByName\", \"c7\"));\n selectedNode = $tree.tree(\"getSelectedNode\");\n assert.ok(selectedNode);\n if (selectedNode) {\n assert.equal(selectedNode.name, \"c7\");\n }\n $tree.tree(\"loadData\", [\"c9\"], child3);\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // - select c9 (which has no id); load new nodes under child2\n $tree.tree(\"selectNode\", $tree.tree(\"getNodeByName\", \"c9\"));\n var child2 = $tree.tree(\"getNodeByName\", \"child2\");\n $tree.tree(\"loadData\", [\"c10\"], child2);\n selectedNode = $tree.tree(\"getSelectedNode\");\n assert.ok(selectedNode);\n if (selectedNode) {\n assert.equal(selectedNode.name, \"c9\");\n }\n});\ntest(\"openNode and closeNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n assert.equal(node2.name, \"node2\");\n assert.equal(node2.is_open, undefined);\n // 1. open node2\n $tree.tree(\"openNode\", node2, false);\n assert.equal(node2.is_open, true);\n assert.equal(utils_for_test_1.isNodeOpen($(node2.element)), true);\n // 2. close node2\n $tree.tree(\"closeNode\", node2, false);\n assert.equal(node2.is_open, false);\n assert.equal(utils_for_test_1.isNodeClosed($(node2.element)), true);\n // 3. open child1\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n // add a child to child1 so it is a folder\n $tree.tree(\"appendNode\", \"child1a\", child1);\n // node1 is initialy closed\n assert.equal(node1.is_open, undefined);\n // open child1\n $tree.tree(\"openNode\", child1, false);\n // node1 and child1 are now open1\n assert.equal(node1.is_open, true);\n assert.equal(child1.is_open, true);\n});\nfunction test_open_node_with_callback(slide, includeSlideParam, assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n // open node2\n var done = assert.async();\n function handleOpenNode(node) {\n assert.equal(node.name, \"node2\");\n assert.ok(node.is_open);\n done();\n }\n if (includeSlideParam) {\n $tree.tree(\"openNode\", node2, slide, handleOpenNode);\n }\n else {\n $tree.tree(\"openNode\", node2, handleOpenNode);\n }\n}\ntest(\"openNode with callback with slide true\", function (assert) {\n test_open_node_with_callback(true, true, assert);\n});\ntest(\"openNode with callback with slide false\", function (assert) {\n test_open_node_with_callback(false, true, assert);\n});\ntest(\"openNode with callback with slide null\", function (assert) {\n test_open_node_with_callback(null, true, assert);\n});\ntest(\"openNode with callback without slide param\", function (assert) {\n test_open_node_with_callback(null, false, assert);\n});\ntest(\"selectNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n selectable: true\n });\n var node1 = $tree.tree(\"getTree\").children[0];\n var node2 = $tree.tree(\"getTree\").children[1];\n var child3 = node2.children[0];\n assert.equal(child3.name, \"child3\");\n assert.equal(node1.is_open, undefined);\n assert.equal(node2.is_open, undefined);\n assert.equal(child3.is_open, undefined);\n // -- select node 'child3', which is a child of 'node2'; must_open_parents = true\n $tree.tree(\"selectNode\", child3);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"child3\");\n assert.equal(node1.is_open, undefined);\n assert.equal(node2.is_open, true);\n assert.equal(child3.is_open, undefined);\n // -- select node 'node1'\n $tree.tree(\"selectNode\", node1);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // -- is 'node1' selected?\n assert.equal($tree.tree(\"isNodeSelected\", node1), true);\n // -- deselect\n $tree.tree(\"selectNode\", null);\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // -- is 'node1' selected?\n assert.equal($tree.tree(\"isNodeSelected\", node1), false);\n});\ntest(\"selectNode when another node is selected\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n selectable: true\n });\n var node1 = $tree.tree(\"getTree\").children[0];\n var node2 = $tree.tree(\"getTree\").children[1];\n // -- select node 'node2'\n $tree.tree(\"selectNode\", node2);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node2\");\n // -- setting event\n // -- is node 'node2' named 'deselected_node' in object's attributes?\n var isSelectEventFired = false;\n $tree.on(\"tree.select\", function (e) {\n assert.equal(e.deselected_node, node2);\n isSelectEventFired = true;\n });\n // -- select node 'node1'; node 'node2' is selected before it\n $tree.tree(\"selectNode\", node1);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n assert.equal($tree.tree(\"isNodeSelected\", node1), true);\n // event was fired\n assert.ok(isSelectEventFired);\n});\ntest(\"click toggler\", function (assert) {\n // setup\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n selectable: true\n });\n var $title = $tree\n .find(\"li:eq(0)\")\n .find(\"> .jqtree-element > span.jqtree-title\");\n assert.equal($title.text(), \"node1\");\n var $toggler = $title.prev();\n assert.ok($toggler.is(\"a.jqtree-toggler.jqtree-closed\"));\n $tree.on(\"tree.open\", function (e) {\n // 2. handle 'open' event\n assert.equal(e.node.name, \"node1\");\n // 3. click toggler again\n $toggler.click();\n });\n $tree.on(\"tree.close\", function (e) {\n assert.equal(e.node.name, \"node1\");\n done();\n });\n // 1. click toggler of 'node1'\n $toggler.click();\n});\ntest(\"getNodeById\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n // 1. get 'node2' by id\n assert.equal($tree.tree(\"getNodeById\", 124).name, \"node2\");\n // 2. get id that does not exist\n assert.equal($tree.tree(\"getNodeById\", 333), null);\n // 3. get id by string\n assert.equal($tree.tree(\"getNodeById\", \"124\").name, \"node2\");\n // 4. add node with string id; search by int\n $tree.tree(\"appendNode\", {\n name: \"abc\",\n id: \"234\"\n });\n assert.equal($tree.tree(\"getNodeById\", 234).name, \"abc\");\n assert.equal($tree.tree(\"getNodeById\", \"234\").name, \"abc\");\n // 5. load subtree in node2\n var subtree_data = [\n {\n name: \"sub1\",\n id: 200,\n children: [{ name: \"sub2\", id: 201 }]\n }\n ];\n $tree.tree(\"loadData\", subtree_data, node2);\n var t = $tree.tree(\"getTree\");\n assert.notEqual(t, null);\n assert.equal($tree.tree(\"getNodeById\", 200).name, \"sub1\");\n assert.equal($tree.tree(\"getNodeById\", 201).name, \"sub2\");\n});\ntest(\"autoOpen\", function (assert) {\n var $tree = $(\"#tree1\");\n function formatOpenFolders() {\n var open_nodes = [];\n $tree.find(\"li\").each(\n // tslint:disable-next-line: only-arrow-functions\n function () {\n var $li = $(this);\n if ($li.is(\".jqtree-folder\") && !$li.is(\".jqtree-closed\")) {\n var name_1 = $li\n .children(\".jqtree-element\")\n .find(\"span\")\n .text();\n open_nodes.push(name_1);\n }\n });\n return open_nodes.join(\";\");\n }\n /*\n -l1n1 (level 0)\n ----l2n1 (1)\n ----l2n2 (1)\n -------l3n1 (2)\n ----------l4n1 (3)\n -l1n2\n */\n var data = [\n {\n name: \"l1n1\",\n children: [\n \"l2n1\",\n {\n name: \"l2n2\",\n children: [\n {\n name: \"l3n1\",\n children: [\"l4n1\"]\n }\n ]\n }\n ]\n },\n \"l1n2\"\n ];\n // 1. autoOpen is false\n $tree.tree({\n data: data,\n autoOpen: false\n });\n assert.equal(formatOpenFolders(), \"\");\n $tree.tree(\"destroy\");\n // 2. autoOpen is true\n $tree.tree({\n data: data,\n autoOpen: true\n });\n assert.equal(formatOpenFolders(), \"l1n1;l2n2;l3n1\");\n $tree.tree(\"destroy\");\n // 3. autoOpen level 1\n $tree.tree({\n data: data,\n autoOpen: 1\n });\n assert.equal(formatOpenFolders(), \"l1n1;l2n2\");\n});\ntest(\"onCreateLi\", function (assert) {\n // 1. init tree with onCreateLi\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n onCreateLi: function (node, $li) {\n var $span = $li.children(\".jqtree-element\").find(\"span\");\n $span.html(\"_\" + node.name + \"_\");\n }\n });\n assert.equal($tree.find(\"span:eq(0)\").text(), \"_node1_\");\n});\ntest(\"save state\", function (assert) {\n // Remove state from localstorage\n if (typeof localStorage !== \"undefined\") {\n localStorage.setItem(\"my_tree\", \"\");\n }\n // 1. init tree\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n selectable: true,\n saveState: \"my_tree\"\n });\n var tree = $tree.tree(\"getTree\");\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // 2. select node -> state is saved\n $tree.tree(\"selectNode\", tree.children[0]);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // 3. init tree again\n $tree.tree(\"destroy\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n selectable: true,\n saveState: \"my_tree\"\n });\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n});\ntest(\"generate hit areas\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n // 1. get hit areas\n var node = $tree.tree(\"getNodeById\", 123);\n var hitAreas = $tree.tree(\"testGenerateHitAreas\", node);\n var strings = $.map(hitAreas, function (hit_area) {\n var position_name = node_1.getPositionName(hit_area.position);\n return hit_area.node.name + \" \" + position_name;\n });\n assert.equal(strings.join(\";\"), \"node1 none;node2 inside;node2 after\");\n});\ntest(\"removeNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n selectable: true\n });\n // 1. Remove selected node; node is 'child1'\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n $tree.tree(\"selectNode\", child1);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"child1\");\n $tree.tree(\"removeNode\", child1);\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child2 node2 child3\");\n // getSelectedNode must now return false\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // 2. No node is selected; remove child3\n $tree.tree(\"loadData\", utils_for_test_1.exampleData);\n var child3 = $tree.tree(\"getNodeByName\", \"child3\");\n $tree.tree(\"removeNode\", child3);\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1 child2 node2\");\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // 3. Remove parent of selected node\n $tree.tree(\"loadData\", utils_for_test_1.exampleData);\n var child1a = $tree.tree(\"getNodeByName\", \"child1\");\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n $tree.tree(\"selectNode\", child1a);\n $tree.tree(\"removeNode\", node1);\n // node is unselected\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // 4. Remove unselected node without an id\n $tree.tree(\"loadData\", utils_for_test_1.exampleData2);\n var c1 = $tree.tree(\"getNodeByName\", \"c1\");\n $tree.tree(\"removeNode\", c1);\n assert.equal(utils_for_test_1.formatTitles($tree), \"main c2\");\n});\ntest(\"appendNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // 1. Add child3 to node1\n $tree.tree(\"appendNode\", \"child3\", node1);\n assert.equal(utils_for_test_1.formatTitles($(node1.element)), \"node1 child1 child2 child3\");\n // 2. Add child4 to child1\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n // Node 'child1' does not have a toggler button\n assert.equal($(child1.element).find(\"> .jqtree-element > .jqtree-toggler\").length, 0);\n $tree.tree(\"appendNode\", \"child4\", child1);\n assert.equal(utils_for_test_1.formatTitles($(child1.element)), \"child1 child4\");\n // Node 'child1' must get a toggler button\n assert.equal($(child1.element).find(\"> .jqtree-element > .jqtree-toggler\").length, 1);\n});\ntest(\"prependNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // 1. Prepend child0 to node1\n $tree.tree(\"prependNode\", \"child0\", node1);\n assert.equal(utils_for_test_1.formatTitles($(node1.element)), \"node1 child0 child1 child2\");\n});\ntest(\"init event for local data\", function (assert) {\n // setup\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $tree.on(\"tree.init\", function () {\n // Check that we can call functions in 'tree.init' event\n assert.equal($tree.tree(\"getNodeByName\", \"node2\").name, \"node2\");\n done();\n });\n // init tree\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n});\ntest(\"init event for ajax\", function (assert) {\n // setup\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $.mockjax({\n url: \"/tree/\",\n responseText: utils_for_test_1.exampleData,\n logging: false\n });\n $tree.on(\"tree.init\", function () {\n assert.equal($tree.tree(\"getNodeByName\", \"node2\").name, \"node2\");\n done();\n });\n // init tree\n $tree.tree({\n dataUrl: \"/tree/\"\n });\n});\ntest(\"updateNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utils_for_test_1.exampleData });\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1 child2 node2 child3\");\n // -- update name\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n $tree.tree(\"updateNode\", node2, \"CHANGED\");\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1 child2 CHANGED child3\");\n assert.equal(node2.name, \"CHANGED\");\n // -- update data\n $tree.tree(\"updateNode\", node2, {\n name: \"xyz\",\n tag1: \"abc\"\n });\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1 child2 xyz child3\");\n assert.equal(node2.name, \"xyz\");\n assert.equal(node2.tag1, \"abc\");\n // - update id\n assert.equal(node2.id, 124);\n $tree.tree(\"updateNode\", node2, { id: 555 });\n assert.equal(node2.id, 555);\n assert.equal(node2.name, \"xyz\");\n // get node by id\n var node_555 = $tree.tree(\"getNodeById\", 555);\n assert.equal(node_555.name, \"xyz\");\n var node_124 = $tree.tree(\"getNodeById\", 124);\n assert.equal(node_124, undefined);\n // update child1\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n $tree.tree(\"updateNode\", child1, \"child1a\");\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1a child2 xyz child3\");\n // select child1\n $tree.tree(\"selectNode\", child1);\n $tree.tree(\"updateNode\", child1, \"child1b\");\n assert.ok($(child1.element).hasClass(\"jqtree-selected\"));\n // add children to child1\n $tree.tree(\"updateNode\", child1, {\n id: child1.id,\n name: \"child1\",\n children: [{ id: 5, name: \"child1-1\" }]\n });\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1 child1-1 child2 xyz child3\");\n // remove children\n $tree.tree(\"updateNode\", child1, {\n id: child1.id,\n name: \"child1\",\n children: []\n });\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1 child2 xyz child3\");\n});\ntest(\"moveNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utils_for_test_1.exampleData });\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n var child2 = $tree.tree(\"getNodeByName\", \"child2\");\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n // -- Move child1 after node2\n $tree.tree(\"moveNode\", child1, node2, \"after\");\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child2 node2 child3 child1\");\n // -- Check that illegal moves are skipped\n $tree.tree(\"moveNode\", node1, child2, \"inside\");\n});\ntest(\"load on demand\", function (assert) {\n // setup\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: [\n {\n id: 1,\n name: \"node1\",\n load_on_demand: true\n }\n ],\n dataUrl: \"/tree/\"\n });\n // tslint:disable-next-line: only-arrow-functions\n function handleResponse(options) {\n assert.equal(options.url, \"/tree/\", \"2\");\n assert.deepEqual(options.data, { node: 1 }, \"3\");\n this.responseText = [\n {\n id: 2,\n name: \"child1\"\n }\n ];\n }\n $.mockjax({\n url: \"*\",\n response: handleResponse,\n logging: false\n });\n // -- open node\n function handleOpenNode(node) {\n assert.equal(node.name, \"node1\");\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1\", \"4\");\n done();\n }\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1\", \"1\");\n $tree.tree(\"openNode\", node1, handleOpenNode);\n});\ntest(\"addNodeAfter\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utils_for_test_1.exampleData });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // -- add node after node1\n $tree.tree(\"addNodeAfter\", \"node3\", node1);\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1 child2 node3 node2 child3\");\n});\ntest(\"addNodeBefore\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utils_for_test_1.exampleData });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // -- add node before node1\n $tree.tree(\"addNodeBefore\", \"node3\", node1);\n assert.equal(utils_for_test_1.formatTitles($tree), \"node3 node1 child1 child2 node2 child3\");\n});\ntest(\"addParentNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utils_for_test_1.exampleData });\n var child3 = $tree.tree(\"getNodeByName\", \"child3\");\n // -- add parent to child3\n $tree.tree(\"addParentNode\", \"node3\", child3);\n assert.equal(utils_for_test_1.formatTitles($tree), \"node1 child1 child2 node2 node3 child3\");\n});\ntest(\"mouse events\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData,\n dragAndDrop: true,\n autoOpen: true\n });\n $tree.tree(\"setMouseDelay\", 0);\n function getTitleElement(node_name) {\n var node = $tree.tree(\"getNodeByName\", node_name);\n var $el = $(node.element);\n return $($el.find(\".jqtree-title\"));\n }\n var $node1 = getTitleElement(\"node1\");\n var $child3 = getTitleElement(\"child3\");\n // -- Move node1 inside child3\n // 1: trigger mousedown event on node1\n var node1Offset = $node1.offset() || { left: 0, top: 0 };\n $node1.trigger($.Event(\"mousedown\", {\n which: 1,\n pageX: node1Offset.left,\n pageY: node1Offset.top\n }));\n // 2: trigger mouse move to child3\n var child3Offset = $child3.offset() || { left: 0, top: 0 };\n $tree.trigger($.Event(\"mousemove\", {\n pageX: child3Offset.left,\n pageY: child3Offset.top\n }));\n $tree.trigger(\"mouseup\");\n assert.equal(utils_for_test_1.formatTitles($tree), \"node2 child3 node1 child1 child2\");\n});\ntest(\"multiple select\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utils_for_test_1.exampleData });\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n var child2 = $tree.tree(\"getNodeByName\", \"child2\");\n // -- add nodes to selection\n // todo: more nodes as parameters?\n // todo: rename to 'selection.add' or 'selection' 'add'?\n $tree.tree(\"addToSelection\", child1);\n $tree.tree(\"addToSelection\", child2);\n // -- get selected nodes\n var selectedNodes = $tree.tree(\"getSelectedNodes\");\n assert.equal(utils_for_test_1.formatNodes(selectedNodes), \"child1 child2\");\n});\ntest(\"keyboard\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n function keyDown(key) {\n $tree.trigger($.Event(\"keydown\", { which: key }));\n }\n $tree.tree({ data: utils_for_test_1.exampleData });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // select node1\n $tree.tree(\"selectNode\", node1);\n assert.equal(node1.is_open, undefined);\n // - move down; -> node2\n keyDown(40);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node2\");\n // - move up; -> back to node1\n keyDown(38);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // - move right; open node1\n keyDown(39);\n assert.equal(node1.is_open, true);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // - down -> child1\n keyDown(40);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"child1\");\n // - up -> node1\n keyDown(38);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // - left -> close\n keyDown(37);\n assert.equal(node1.is_open, false);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n});\ntest(\"getNodesByProperty\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n // 1. get 'node1' by property\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 1)[0].name, \"node1\");\n // 2. get property that does not exist in any node\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 123).length, 0);\n // 3. get string property\n assert.equal($tree.tree(\"getNodesByProperty\", \"strProperty\", \"1\")[0].name, \"node1\");\n // 4. add node with string id; search by int\n $tree.tree(\"appendNode\", {\n name: \"abc\",\n id: \"234\",\n strProperty: \"111\",\n intProperty: 111\n });\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 111)[0].name, \"abc\");\n assert.equal($tree.tree(\"getNodesByProperty\", \"strProperty\", \"111\")[0].name, \"abc\");\n // 5. load subtree in node2\n var subtreeData = [\n {\n name: \"sub1\",\n id: 200,\n intProperty: 222,\n children: [{ name: \"sub2\", id: 201, intProperty: 444 }]\n }\n ];\n $tree.tree(\"loadData\", subtreeData, node2);\n var t = $tree.tree(\"getTree\");\n assert.notEqual(t, null);\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 222)[0].name, \"sub1\");\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 444)[0].name, \"sub2\");\n});\ntest(\"dataUrl extra options\", function (assert) {\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $.mockjax({\n url: \"*\",\n response: function (options) {\n // 2. handle ajax request\n // expect 'headers' option\n assert.equal(options.url, \"/tree2/\");\n assert.deepEqual(options.headers, { abc: \"def\" });\n done();\n },\n logging: false\n });\n // 1. init tree\n // dataUrl contains 'headers' option\n $tree.tree({\n dataUrl: {\n url: \"/tree2/\",\n headers: { abc: \"def\" }\n }\n });\n});\ntest(\"dataUrl is function\", function (assert) {\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $.mockjax({\n url: \"*\",\n response: function (options) {\n // 2. handle ajax request\n // expect 'headers' option\n assert.equal(options.url, \"/tree3/\");\n assert.deepEqual(options.headers, { abc: \"def\" });\n done();\n },\n logging: false\n });\n // 1. init tree\n // dataUrl is a function\n $tree.tree({\n dataUrl: function () {\n return {\n url: \"/tree3/\",\n headers: { abc: \"def\" }\n };\n }\n });\n});\ntest(\"getNodeByHtmlElement\", function (assert) {\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utils_for_test_1.exampleData\n });\n var $el = $(\".jqtree-title\");\n // Get node for jquery element\n var node = $tree.tree(\"getNodeByHtmlElement\", $el);\n assert.ok(node);\n if (node) {\n assert.equal(node.name, \"node1\");\n }\n // Same for html element\n var node2 = $tree.tree(\"getNodeByHtmlElement\", $el[0]);\n assert.ok(node2);\n if (node2) {\n assert.equal(node2.name, \"node1\");\n }\n});\ntest(\"onLoadFailed\", function (assert) {\n $.mockjax({\n url: \"/tree/\",\n status: 500,\n responseText: \"test error\",\n logging: false\n });\n var done = assert.async();\n function handleLoadFailed(e) {\n assert.equal(e.responseText, \"test error\");\n done();\n }\n var $tree = $(\"#tree1\");\n $tree.tree({\n dataUrl: \"/tree/\",\n onLoadFailed: handleLoadFailed\n });\n});\n","\"use strict\";\nexports.__esModule = true;\n","\"use strict\";\nexports.__esModule = true;\nvar module = QUnit.module, test = QUnit.test;\nvar node_1 = require(\"../src/node\");\nmodule(\"node_util\");\ntest(\"getPositionName\", function (assert) {\n assert.equal(node_1.getPositionName(node_1.Position.Before), \"before\");\n assert.equal(node_1.getPositionName(node_1.Position.After), \"after\");\n assert.equal(node_1.getPositionName(node_1.Position.Inside), \"inside\");\n assert.equal(node_1.getPositionName(node_1.Position.None), \"none\");\n});\ntest(\"getPosition\", function (assert) {\n assert.equal(node_1.getPosition(\"inside\"), node_1.Position.Inside);\n});\n","\"use strict\";\nexports.__esModule = true;\nvar module = QUnit.module, test = QUnit.test;\nvar utils_for_test_1 = require(\"./utils_for_test\");\nvar node_1 = require(\"../src/node\");\nmodule(\"Tree\");\ntest(\"constructor\", function (assert) {\n // 1. Create node from string\n var node = new node_1.Node(\"n1\");\n assert.equal(node.name, \"n1\");\n assert.equal(node.children.length, 0);\n assert.equal(node.parent, null);\n // 2. Create node from object\n var node2 = new node_1.Node({\n label: \"n2\",\n id: 123,\n parent: \"abc\",\n children: [\"c\"],\n url: \"/\"\n });\n assert.equal(node2.name, \"n2\");\n assert.equal(node2.id, 123);\n // tslint:disable-next-line: no-string-literal\n assert.equal(node2[\"url\"], \"/\");\n // tslint:disable-next-line: no-string-literal\n assert.equal(node2[\"label\"], undefined);\n assert.equal(node2.children.length, 0);\n assert.equal(node2.parent, null);\n});\ntest(\"create tree from data\", function (assert) {\n function checkData(tree) {\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"node1 node2\", \"nodes on level 1\");\n assert.equal(utils_for_test_1.formatNodes(tree.children[0].children), \"child1 child2\", \"children of node1\");\n assert.equal(utils_for_test_1.formatNodes(tree.children[1].children), \"child3\", \"children of node2\");\n assert.equal(tree.children[0].id, 123, \"id\");\n }\n // - create tree from example data\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n checkData(tree);\n // - create tree from new data format\n var data = [\n {\n label: \"node1\",\n id: 123,\n children: [\"child1\", \"child2\"] // nodes are only defined by a string\n },\n {\n label: \"node2\",\n id: 124,\n children: [\"child3\"]\n }\n ];\n var tree2 = new node_1.Node({}, true);\n tree2.loadFromData(data);\n checkData(tree2);\n});\ntest(\"addChild\", function (assert) {\n var tree = new node_1.Node(\"tree1\", true);\n tree.addChild(new node_1.Node(\"abc\"));\n tree.addChild(new node_1.Node(\"def\"));\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"abc def\", \"children\");\n var node = tree.children[0];\n if (!node.parent) {\n assert.ok(false, \"Node has no parent\");\n }\n else {\n assert.equal(node.parent.name, \"tree1\", \"parent of node\");\n }\n});\ntest(\"addChildAtPosition\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.addChildAtPosition(new node_1.Node(\"abc\"), 0); // first\n tree.addChildAtPosition(new node_1.Node(\"ghi\"), 2); // index 2 does not exist\n tree.addChildAtPosition(new node_1.Node(\"def\"), 1);\n tree.addChildAtPosition(new node_1.Node(\"123\"), 0);\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"123 abc def ghi\", \"children\");\n});\ntest(\"removeChild\", function (assert) {\n var tree = new node_1.Node({}, true);\n var abc = new node_1.Node({ label: \"abc\", id: 1 });\n var def = new node_1.Node({ label: \"def\", id: 2 });\n var ghi = new node_1.Node({ label: \"ghi\", id: 3 });\n tree.addChild(abc);\n tree.addChild(def);\n tree.addChild(ghi);\n var jkl = new node_1.Node({ label: \"jkl\", id: 4 });\n def.addChild(jkl);\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"abc def ghi\", \"children\");\n assert.equal(tree.idMapping[2].name, \"def\");\n assert.equal(tree.idMapping[4].name, \"jkl\");\n // remove 'def'\n tree.removeChild(def);\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"abc ghi\", \"children\");\n assert.equal(tree.idMapping[2], null);\n assert.equal(tree.idMapping[4], null);\n // remove 'ghi'\n tree.removeChild(ghi);\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"abc\", \"children\");\n // remove 'abc'\n tree.removeChild(abc);\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"\", \"children\");\n});\ntest(\"getChildIndex\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n var abc = new node_1.Node(\"abc\");\n var def = new node_1.Node(\"def\");\n var ghi = new node_1.Node(\"ghi\");\n tree.addChild(abc);\n tree.addChild(def);\n tree.addChild(ghi);\n // 1. Get child index of 'def'\n assert.equal(tree.getChildIndex(def), 1);\n // 2. Get child index of non-existing node\n assert.equal(tree.getChildIndex(new node_1.Node(\"xyz\")), -1);\n});\ntest(\"hasChildren\", function (assert) {\n var tree = new node_1.Node({}, true);\n assert.equal(tree.hasChildren(), false, \"tree without children\");\n tree.addChild(new node_1.Node(\"abc\"));\n assert.equal(tree.hasChildren(), true, \"tree has children\");\n});\ntest(\"iterate\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n // iterate over all the nodes\n var nodes = [];\n tree.iterate(function (node) {\n nodes.push(node);\n return true;\n });\n assert.equal(utils_for_test_1.formatNodes(nodes), \"node1 child1 child2 node2 child3\", \"all nodes\");\n // iterate over nodes on first level\n var nodes2 = [];\n tree.iterate(function (node) {\n nodes2.push(node);\n return false;\n });\n assert.equal(utils_for_test_1.formatNodes(nodes2), \"node1 node2\", \"nodes on first level\");\n // add child 4\n var node124 = utils_for_test_1.doGetNodeById(tree, 124);\n var node3 = node124.children[0];\n node3.addChild(new node_1.Node(\"child4\"));\n // test level parameter\n var nodes3 = [];\n tree.iterate(function (node, level) {\n nodes3.push(node.name + \" \" + level);\n return true;\n });\n assert.equal(nodes3.join(\",\"), \"node1 0,child1 1,child2 1,node2 0,child3 1,child4 2\");\n});\ntest(\"moveNode\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n /*\n node1\n ---child1\n ---child2\n node2\n ---child3\n */\n var node1 = tree.children[0];\n var node2 = tree.children[1];\n var child1 = node1.children[0];\n var child2 = node1.children[1];\n assert.equal(node2.name, \"node2\", \"node2 name\");\n assert.equal(child2.name, \"child2\", \"child2 name\");\n // move child2 after node2\n tree.moveNode(child2, node2, node_1.Position.After);\n /*\n node1\n ---child1\n node2\n ---child3\n child2\n */\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"node1 node2 child2\", \"tree nodes at first level\");\n assert.equal(utils_for_test_1.formatNodes(node1.children), \"child1\", \"node1 children\");\n // move child1 inside node2\n // this means it's the first child\n tree.moveNode(child1, node2, node_1.Position.Inside);\n /*\n node1\n node2\n ---child1\n ---child3\n child2\n */\n assert.equal(utils_for_test_1.formatNodes(node2.children), \"child1 child3\", \"node2 children\");\n assert.equal(utils_for_test_1.formatNodes(node1.children), \"\", \"node1 has no children\");\n // move child2 before child1\n tree.moveNode(child2, child1, node_1.Position.Before);\n /*\n node1\n node2\n ---child2\n ---child1\n ---child3\n */\n assert.equal(utils_for_test_1.formatNodes(node2.children), \"child2 child1 child3\", \"node2 children\");\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"node1 node2\", \"tree nodes at first level\");\n});\ntest(\"initFromData\", function (assert) {\n var data = {\n label: \"main\",\n children: [\n \"c1\",\n {\n label: \"c2\",\n id: 201\n }\n ]\n };\n var node = new node_1.Node({}, true);\n node.initFromData(data);\n assert.equal(node.name, \"main\");\n assert.equal(utils_for_test_1.formatNodes(node.children), \"c1 c2\", \"children\");\n assert.equal(node.children[1].id, 201);\n});\ntest(\"getData\", function (assert) {\n // 1. empty node\n var node = new node_1.Node({}, true);\n assert.deepEqual(node.getData(), []);\n // 2.node with data\n node.loadFromData([\n {\n label: \"n1\",\n children: [\n {\n label: \"c1\"\n }\n ]\n }\n ]);\n assert.deepEqual(node.getData(), [\n {\n name: \"n1\",\n children: [\n {\n name: \"c1\"\n }\n ]\n }\n ]);\n // 3. get data including parent\n var n1 = utils_for_test_1.doGetNodeByName(node, \"n1\");\n assert.deepEqual(n1.getData(true), [\n {\n name: \"n1\",\n children: [{ name: \"c1\" }]\n }\n ]);\n});\ntest(\"addAfter\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n /*\n -node1\n ---c1\n ---c2\n -node2\n ---c3\n */\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"node1 node2\");\n // - Add 'node_b' after node2\n var node2 = utils_for_test_1.doGetNodeByName(tree, \"node2\");\n node2.addAfter(\"node_b\");\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"node1 node2 node_b\");\n var node_b = utils_for_test_1.doGetNodeByName(tree, \"node_b\");\n assert.equal(node_b.name, \"node_b\");\n // - Add 'node_a' after node1\n var node1 = utils_for_test_1.doGetNodeByName(tree, \"node1\");\n node1.addAfter(\"node_a\");\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"node1 node_a node2 node_b\");\n // - Add 'node_c' after node_b; new node is an object\n if (node_b) {\n node_b.addAfter({\n label: \"node_c\",\n id: 789\n });\n }\n var node_c = utils_for_test_1.doGetNodeByName(tree, \"node_c\");\n assert.equal(node_c.id, 789);\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"node1 node_a node2 node_b node_c\");\n // - Add after root node; this is not possible\n assert.equal(tree.addAfter(\"node_x\"), null);\n});\ntest(\"addBefore\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n // - Add 'node_0' before node1\n var node1 = utils_for_test_1.doGetNodeByName(tree, \"node1\");\n node1.addBefore(\"node0\");\n assert.equal(utils_for_test_1.formatNodes(tree.children), \"node0 node1 node2\");\n // - Add before root node; this is not possile\n assert.equal(tree.addBefore(\"x\"), null);\n});\ntest(\"addParent\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n // - Add node 'root' as parent of node1\n // Note that node also becomes a child of 'root'\n var node1 = utils_for_test_1.doGetNodeByName(tree, \"node1\");\n node1.addParent(\"root\");\n var root = utils_for_test_1.doGetNodeByName(tree, \"root\");\n assert.equal(utils_for_test_1.formatNodes(root.children), \"node1 node2\");\n // - Add parent to root node; not possible\n assert.equal(tree.addParent(\"x\"), null);\n});\ntest(\"remove\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n var child1 = utils_for_test_1.doGetNodeByName(tree, \"child1\");\n var node1 = utils_for_test_1.doGetNodeByName(tree, \"node1\");\n assert.equal(utils_for_test_1.formatNodes(node1.children), \"child1 child2\");\n assert.equal(child1.parent, node1);\n // 1. Remove child1\n child1.remove();\n assert.equal(utils_for_test_1.formatNodes(node1.children), \"child2\");\n assert.equal(child1.parent, null);\n});\ntest(\"append\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n var node1 = utils_for_test_1.doGetNodeByName(tree, \"node1\");\n // 1. Append child3 to node1\n node1.append(\"child3\");\n assert.equal(utils_for_test_1.formatNodes(node1.children), \"child1 child2 child3\");\n // 2. Append subtree\n node1.append({\n name: \"child4\",\n children: [{ name: \"child5\" }]\n });\n assert.equal(utils_for_test_1.formatNodes(node1.children), \"child1 child2 child3 child4\");\n var child4 = utils_for_test_1.doGetNodeByName(node1, \"child4\");\n assert.equal(utils_for_test_1.formatNodes(child4.children), \"child5\");\n});\ntest(\"prepend\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n var node1 = utils_for_test_1.doGetNodeByName(tree, \"node1\");\n // 1. Prepend child0 to node1\n node1.prepend(\"child0\");\n assert.equal(utils_for_test_1.formatNodes(node1.children), \"child0 child1 child2\");\n // 2. Prepend subtree\n node1.prepend({\n name: \"child3\",\n children: [{ name: \"child4\" }]\n });\n assert.equal(utils_for_test_1.formatNodes(node1.children), \"child3 child0 child1 child2\");\n var child3 = utils_for_test_1.doGetNodeByName(node1, \"child3\");\n assert.equal(utils_for_test_1.formatNodes(child3.children), \"child4\");\n});\ntest(\"getNodeById\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n // 1. Get node with id 124\n var node = utils_for_test_1.doGetNodeById(tree, 124);\n assert.equal(node.name, \"node2\");\n // 2. Delete node with id 124 and search again\n node.remove();\n assert.equal(tree.getNodeById(124), null);\n // 3. Add node with id 456 and search for it\n var child3 = utils_for_test_1.doGetNodeByName(tree, \"child2\");\n child3.append({\n id: 456,\n label: \"new node\"\n });\n var node2 = utils_for_test_1.doGetNodeById(tree, 456);\n assert.equal(node2.name, \"new node\");\n});\ntest(\"getLevel\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n // 1. get level for node1 and child1\n assert.equal(utils_for_test_1.doGetNodeByName(tree, \"node1\").getLevel(), 1);\n assert.equal(utils_for_test_1.doGetNodeByName(tree, \"child1\").getLevel(), 2);\n});\ntest(\"loadFromData and id mapping\", function (assert) {\n // - get node from empty tree\n var tree = new node_1.Node({}, true);\n assert.equal(tree.getNodeById(999), null);\n // - load example data in tree\n tree.loadFromData(utils_for_test_1.exampleData);\n assert.equal(utils_for_test_1.doGetNodeById(tree, 124).name, \"node2\");\n var child2 = utils_for_test_1.doGetNodeById(tree, 126);\n child2.addChild(new node_1.Node({ label: \"child4\", id: 128 }));\n child2.addChild(new node_1.Node({ label: \"child5\", id: 129 }));\n // - load data in node child2\n child2.loadFromData([\"abc\", \"def\"]);\n assert.equal(tree.getNodeById(128), null);\n assert.equal(child2.children.length, 2);\n assert.equal(child2.children[0].name, \"abc\");\n});\ntest(\"removeChildren\", function (assert) {\n // - load example data\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n // add child4 and child5\n var child2 = utils_for_test_1.doGetNodeById(tree, 126);\n assert.equal(child2.name, \"child2\");\n child2.addChild(new node_1.Node({ label: \"child4\", id: 128 }));\n child2.addChild(new node_1.Node({ label: \"child5\", id: 129 }));\n assert.equal(utils_for_test_1.doGetNodeById(tree, 128).name, \"child4\");\n // - remove children from child2\n child2.removeChildren();\n assert.equal(tree.getNodeById(128), null);\n assert.equal(child2.children.length, 0);\n});\ntest(\"node with id 0\", function (assert) {\n // - load node with id 0\n var tree = new node_1.Node({}, true);\n tree.loadFromData([\n {\n id: 0,\n label: \"mynode\"\n }\n ]);\n var node = utils_for_test_1.doGetNodeById(tree, 0);\n assert.equal(node.name, \"mynode\");\n // -- remove the node\n node.remove();\n assert.equal(tree.getNodeById(0), undefined);\n});\ntest(\"getPreviousSibling\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n // - getPreviousSibling\n var previous_sibling = utils_for_test_1.doGetNodeByName(tree, \"child2\").getPreviousSibling();\n if (!previous_sibling) {\n assert.ok(false, \"Previous sibling not found\");\n }\n else {\n assert.equal(previous_sibling.name, \"child1\");\n }\n assert.equal(tree.getPreviousSibling(), null);\n assert.equal(utils_for_test_1.doGetNodeByName(tree, \"child1\").getPreviousSibling(), null);\n});\ntest(\"getNextSibling\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n // - getNextSibling\n var next_sibling = utils_for_test_1.doGetNodeByName(tree, \"node1\").getNextSibling();\n if (!next_sibling) {\n assert.ok(false, \"Next sibling not found\");\n }\n else {\n assert.equal(next_sibling.name, \"node2\");\n }\n assert.equal(utils_for_test_1.doGetNodeByName(tree, \"node2\").getNextSibling(), null);\n assert.equal(tree.getNextSibling(), null);\n});\ntest(\"getNodesByProperty\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n var nodes = tree.getNodesByProperty(\"name\", \"child1\");\n assert.equal(nodes.length, 1);\n assert.equal(nodes[0].name, \"child1\");\n});\ntest(\"getNodeByCallback\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utils_for_test_1.exampleData);\n var node = tree.getNodeByCallback(function (n) { return n.name === \"child1\"; });\n if (!node) {\n assert.ok(false, \"Node not found\");\n }\n else {\n assert.equal(node.name, \"child1\");\n }\n});\n","\"use strict\";\nexports.__esModule = true;\nvar module = QUnit.module, test = QUnit.test;\nvar util_1 = require(\"../src/util\");\nmodule(\"util\");\ntest(\"isInt\", function (assert) {\n assert.ok(util_1.isInt(10));\n assert.ok(util_1.isInt(0));\n assert.ok(util_1.isInt(-1));\n assert.notOk(util_1.isInt(\"1\"));\n assert.notOk(null);\n});\ntest(\"isFunction\", function (assert) {\n assert.ok(util_1.isFunction(util_1.isInt));\n assert.notOk(util_1.isFunction(\"test\"));\n});\ntest(\"htmlEscape\", function (assert) {\n assert.equal(util_1.htmlEscape(\"\"), \"\");\n assert.equal(util_1.htmlEscape(\"test\"), \"test\");\n assert.equal(util_1.htmlEscape(\"a&b\"), \"a&b\");\n});\ntest(\"getBoolString\", function (assert) {\n assert.equal(util_1.getBoolString(true), \"true\");\n assert.equal(util_1.getBoolString(false), \"false\");\n assert.equal(util_1.getBoolString(1), \"true\");\n assert.equal(util_1.getBoolString(null), \"false\");\n});\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/node.ts","webpack:///./src/util.ts","webpack:///external \"jQuery\"","webpack:///./src/simple.widget.ts","webpack:///./src/tree.jquery.ts","webpack:///./src/version.ts","webpack:///./src/dragAndDropHandler.ts","webpack:///./src/elementsRenderer.ts","webpack:///./src/dataLoader.ts","webpack:///./src/keyHandler.ts","webpack:///./src/mouse.widget.ts","webpack:///./src/saveStateHandler.ts","webpack:///./src/scrollHandler.ts","webpack:///./src/selectNodeHandler.ts","webpack:///./src/nodeElement.ts","webpack:///./src_test/utilsForTest.ts","webpack:///./src_test/test.ts","webpack:///./src_test/testJqtree.ts","webpack:///./src/itreeWidget.ts","webpack:///./src_test/testNodeUtil.ts","webpack:///./src_test/testTree.ts","webpack:///./src_test/testUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;AClFa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,uDAAuD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,4BAA4B;AACnE;AACA;AACA,gCAAgC,gBAAgB;AAChD,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,sBAAsB;;AAEvC,iBAAiB,sCAAsC;;AAEvD,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,gBAAgB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,2BAA2B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,4BAA4B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AChiBa;AACb;AACA,8BAA8B,6CAA6C;AAC3E,mCAAmC,gCAAgC;AACnE,0CAA0C;AAC1C;AACA;AACA,6BAA6B;AAC7B,4BAA4B;AAC5B,4BAA4B;AAC5B,8BAA8B;AAC9B,8BAA8B;AAC9B,+BAA+B;AAC/B;AACA,0CAA0C,mCAAmC;;;;;;;ACd7E,wB;;;;;;;ACAa;AACb;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,sCAAsC,sCAAsC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AChGa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,CAAW;AACnC,aAAa,mBAAO,CAAC,CAAQ;AAC7B,2BAA2B,mBAAO,CAAC,CAAsB;AACzD,yBAAyB,mBAAO,CAAC,CAAoB;AACrD,mBAAmB,mBAAO,CAAC,CAAc;AACzC,mBAAmB,mBAAO,CAAC,CAAc;AACzC,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C,yBAAyB,mBAAO,CAAC,EAAoB;AACrD,sBAAsB,mBAAO,CAAC,EAAiB;AAC/C,0BAA0B,mBAAO,CAAC,EAAqB;AACvD,sBAAsB,mBAAO,CAAC,CAAiB;AAC/C,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B,oBAAoB,mBAAO,CAAC,EAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,yBAAyB,EAAE;AAClF,sDAAsD,yBAAyB,EAAE;;AAEjF;AACA;AACA;AACA,0CAA0C,yBAAyB,EAAE;AACrE,2CAA2C,yBAAyB,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,aAAa;AACb;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,gDAAgD,sCAAsC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,kBAAkB,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAwC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,+BAA+B;AAC/B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC/8Ba;AACb;AACA;AACA;;;;;;;;ACHa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,yBAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACxeY;AACb;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACxMa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,0CAA0C,gBAAgB,iCAAiC,eAAe;AAC1G;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpFa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACrHa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,CAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC7Ja;AACb;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yEAAyE,aAAa,EAAE;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACxNa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,gBAAgB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AClNa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC3Ga;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AClNY;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAA2C,GAAG,2BAA2B;AAC7F,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc,GAAG,cAAc;AACnD;AACA;AACA;AACA,6CAA6C,kBAAkB,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,qBAAqB,EAAE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACtEa;AACb;AACA,mBAAO,CAAC,EAAc;AACtB,mBAAO,CAAC,EAAgB;AACxB,mBAAO,CAAC,EAAY;AACpB,mBAAO,CAAC,EAAY;AACpB;;;;;;;;ACNa;AACb;AACA,mBAAO,CAAC,CAAoB;AAC5B,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C,aAAa,mBAAO,CAAC,CAAa;AAClC,mBAAO,CAAC,EAAoB;AAC5B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,cAAc;AACd;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,0CAA0C;AAC1C,sBAAsB,yCAAyC,EAAE;AACjE,2BAA2B,EAAE,EAAE;AAC/B,wCAAwC,yBAAyB,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa,GAAG,aAAa;AAC/C;AACA;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4CAA4C,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,4CAA4C;AAC5C,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gCAAgC,gBAAgB,aAAa;AAC7D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,qCAAqC,UAAU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wCAAwC,UAAU;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,4CAA4C;AAC5C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA,gBAAgB,mCAAmC;AACnD;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0CAA0C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,aAAa;AAC5D;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;;;;;;;ACj+BY;AACb;;;;;;;;ACDa;AACb;AACA;AACA,aAAa,mBAAO,CAAC,CAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;;;;;;;;ACbY;AACb;AACA;AACA,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C,aAAa,mBAAO,CAAC,CAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC,uDAAuD;AACvD,uDAAuD;AACvD;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC,+BAA+B,sBAAsB;AACrD,+BAA+B,sBAAsB;AACrD,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,qCAAqC,2BAA2B;AAChE,qCAAqC,2BAA2B;AAChE;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,iCAAiC;AACjC;AACA,oDAAoD,4BAA4B,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AC9dY;AACb;AACA;AACA,aAAa,mBAAO,CAAC,CAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,kDAAkD;AAClD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC","file":"test.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n","\"use strict\";\nexports.__esModule = true;\nvar Position;\n(function (Position) {\n Position[Position[\"Before\"] = 1] = \"Before\";\n Position[Position[\"After\"] = 2] = \"After\";\n Position[Position[\"Inside\"] = 3] = \"Inside\";\n Position[Position[\"None\"] = 4] = \"None\";\n})(Position = exports.Position || (exports.Position = {}));\nvar positionNames = {\n before: Position.Before,\n after: Position.After,\n inside: Position.Inside,\n none: Position.None\n};\nexports.getPositionName = function (position) {\n for (var name_1 in positionNames) {\n if (positionNames.hasOwnProperty(name_1)) {\n if (positionNames[name_1] === position) {\n return name_1;\n }\n }\n }\n return \"\";\n};\nexports.getPosition = function (name) { return positionNames[name]; };\nvar Node = /** @class */ (function () {\n function Node(o, isRoot, nodeClass) {\n if (isRoot === void 0) { isRoot = false; }\n if (nodeClass === void 0) { nodeClass = Node; }\n this.name = \"\";\n this.isEmptyFolder = false;\n this.setData(o);\n this.children = [];\n this.parent = null;\n if (isRoot) {\n this.idMapping = {};\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setdata(object): set attributes of the node\n\n Examples:\n setdata('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n Node.prototype.setData = function (o) {\n var _this = this;\n var setName = function (name) {\n if (name != null) {\n _this.name = name;\n }\n };\n if (!o) {\n return;\n }\n else if (typeof o !== \"object\") {\n setName(o);\n }\n else {\n for (var key in o) {\n if (o.hasOwnProperty(key)) {\n var value = o[key];\n if (key === \"label\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n setName(value);\n }\n else if (key !== \"children\") {\n // You can't update the children using this function\n this[key] = value;\n }\n }\n }\n }\n };\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n Node.prototype.loadFromData = function (data) {\n this.removeChildren();\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var o = data_1[_i];\n var node = new this.tree.nodeClass(o);\n this.addChild(node);\n if (typeof o === \"object\" && o[\"children\"]) {\n if (o[\"children\"].length === 0) {\n node.isEmptyFolder = true;\n }\n else {\n node.loadFromData(o[\"children\"]);\n }\n }\n }\n };\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n Node.prototype.addChild = function (node) {\n this.children.push(node);\n node.setParent(this);\n };\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n Node.prototype.addChildAtPosition = function (node, index) {\n this.children.splice(index, 0, node);\n node.setParent(this);\n };\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n Node.prototype.removeChild = function (node) {\n // remove children from the index\n node.removeChildren();\n this.doRemoveChild(node);\n };\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n Node.prototype.getChildIndex = function (node) {\n return jQuery.inArray(node, this.children);\n };\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n Node.prototype.hasChildren = function () {\n return this.children.length !== 0;\n };\n Node.prototype.isFolder = function () {\n return this.hasChildren() || this.load_on_demand;\n };\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n Node.prototype.iterate = function (callback) {\n var _iterate = function (node, level) {\n if (node.children) {\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var result = callback(child, level);\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n }\n };\n _iterate(this, 0);\n };\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n Node.prototype.moveNode = function (movedNode, targetNode, position) {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return;\n }\n else {\n movedNode.parent.doRemoveChild(movedNode);\n if (position === Position.After) {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1);\n }\n }\n else if (position === Position.Before) {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode));\n }\n }\n else if (position === Position.Inside) {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n }\n }\n };\n /*\n Get the tree as data.\n */\n Node.prototype.getData = function (includeParent) {\n if (includeParent === void 0) { includeParent = false; }\n function getDataFromNodes(nodes) {\n return nodes.map(function (node) {\n var tmpNode = {};\n for (var k in node) {\n if ([\n \"parent\",\n \"children\",\n \"element\",\n \"tree\",\n \"isEmptyFolder\"\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)) {\n var v = node[k];\n tmpNode[k] = v;\n }\n }\n if (node.hasChildren()) {\n tmpNode[\"children\"] = getDataFromNodes(node.children);\n }\n return tmpNode;\n });\n }\n if (includeParent) {\n return getDataFromNodes([this]);\n }\n else {\n return getDataFromNodes(this.children);\n }\n };\n Node.prototype.getNodeByName = function (name) {\n return this.getNodeByCallback(function (node) { return node.name === name; });\n };\n Node.prototype.getNodeByCallback = function (callback) {\n var result = null;\n this.iterate(function (node) {\n if (callback(node)) {\n result = node;\n return false;\n }\n else {\n return true;\n }\n });\n return result;\n };\n Node.prototype.addAfter = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var node = new this.tree.nodeClass(nodeInfo);\n var childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n }\n };\n Node.prototype.addBefore = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var node = new this.tree.nodeClass(nodeInfo);\n var childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n }\n };\n Node.prototype.addParent = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var newParent = new this.tree.nodeClass(nodeInfo);\n newParent.setParent(this.tree);\n var originalParent = this.parent;\n for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) {\n var child = _a[_i];\n newParent.addChild(child);\n }\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n };\n Node.prototype.remove = function () {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n };\n Node.prototype.append = function (nodeInfo) {\n var node = new this.tree.nodeClass(nodeInfo);\n this.addChild(node);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n };\n Node.prototype.prepend = function (nodeInfo) {\n var node = new this.tree.nodeClass(nodeInfo);\n this.addChildAtPosition(node, 0);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n };\n Node.prototype.isParentOf = function (node) {\n var parent = node.parent;\n while (parent) {\n if (parent === this) {\n return true;\n }\n parent = parent.parent;\n }\n return false;\n };\n Node.prototype.getLevel = function () {\n var level = 0;\n var node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n return level;\n };\n Node.prototype.getNodeById = function (nodeId) {\n return this.idMapping[nodeId];\n };\n Node.prototype.addNodeToIndex = function (node) {\n if (node.id != null) {\n this.idMapping[node.id] = node;\n }\n };\n Node.prototype.removeNodeFromIndex = function (node) {\n if (node.id != null) {\n delete this.idMapping[node.id];\n }\n };\n Node.prototype.removeChildren = function () {\n var _this = this;\n this.iterate(function (child) {\n _this.tree.removeNodeFromIndex(child);\n return true;\n });\n this.children = [];\n };\n Node.prototype.getPreviousSibling = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex];\n }\n else {\n return null;\n }\n }\n };\n Node.prototype.getNextSibling = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex];\n }\n else {\n return null;\n }\n }\n };\n Node.prototype.getNodesByProperty = function (key, value) {\n return this.filter(function (node) { return node[key] === value; });\n };\n Node.prototype.filter = function (f) {\n var result = [];\n this.iterate(function (node) {\n if (f(node)) {\n result.push(node);\n }\n return true;\n });\n return result;\n };\n Node.prototype.getNextNode = function (includeChildren) {\n if (includeChildren === void 0) { includeChildren = true; }\n if (includeChildren && this.hasChildren() && this.is_open) {\n // First child\n return this.children[0];\n }\n else {\n if (!this.parent) {\n return null;\n }\n else {\n var nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n }\n else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n };\n Node.prototype.getPreviousNode = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var previousSibling = this.getPreviousSibling();\n if (previousSibling) {\n if (!previousSibling.hasChildren() ||\n !previousSibling.is_open) {\n // Previous sibling\n return previousSibling;\n }\n else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n else {\n return this.getParent();\n }\n }\n };\n Node.prototype.getParent = function () {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n }\n else if (!this.parent.parent) {\n // Root node -> null\n return null;\n }\n else {\n return this.parent;\n }\n };\n Node.prototype.getLastChild = function () {\n if (!this.hasChildren()) {\n return null;\n }\n else {\n var lastChild = this.children[this.children.length - 1];\n if (!lastChild.hasChildren() || !lastChild.is_open) {\n return lastChild;\n }\n else {\n return lastChild.getLastChild();\n }\n }\n };\n // Init Node from data without making it the root of the tree\n Node.prototype.initFromData = function (data) {\n var _this = this;\n var addNode = function (nodeData) {\n _this.setData(nodeData);\n if (nodeData[\"children\"]) {\n addChildren(nodeData[\"children\"]);\n }\n };\n var addChildren = function (childrenData) {\n for (var _i = 0, childrenData_1 = childrenData; _i < childrenData_1.length; _i++) {\n var child = childrenData_1[_i];\n var node = new _this.tree.nodeClass(\"\");\n node.initFromData(child);\n _this.addChild(node);\n }\n };\n addNode(data);\n };\n Node.prototype.setParent = function (parent) {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree.addNodeToIndex(this);\n };\n Node.prototype.doRemoveChild = function (node) {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree.removeNodeFromIndex(node);\n };\n return Node;\n}());\nexports.Node = Node;\n","\"use strict\";\nexports.__esModule = true;\nexports.isInt = function (n) { return typeof n === \"number\" && n % 1 === 0; };\nexports.isFunction = function (v) { return typeof v === \"function\"; };\n// Escape a string for HTML interpolation; copied from underscore js\nexports.htmlEscape = function (text) {\n return (\"\" + text)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\")\n .replace(/\\//g, \"/\");\n};\nexports.getBoolString = function (value) { return (value ? \"true\" : \"false\"); };\n","module.exports = jQuery;","\"use strict\";\nexports.__esModule = true;\nvar SimpleWidget = /** @class */ (function () {\n function SimpleWidget(el, options) {\n this.$el = jQuery(el);\n var defaults = this.constructor.defaults;\n this.options = jQuery.extend({}, defaults, options);\n }\n SimpleWidget.register = function (widgetClass, widgetName) {\n var getDataKey = function () { return \"simple_widget_\" + widgetName; };\n function getWidgetData(el, dataKey) {\n var widget = jQuery.data(el, dataKey);\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n }\n else {\n return null;\n }\n }\n function createWidget($el, options) {\n var dataKey = getDataKey();\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var existingWidget = getWidgetData(el, dataKey);\n if (!existingWidget) {\n var widget = new widgetClass(el, options);\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n return $el;\n }\n function destroyWidget($el) {\n var dataKey = getDataKey();\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var widget = getWidgetData(el, dataKey);\n if (widget) {\n widget.destroy();\n }\n jQuery.removeData(el, dataKey);\n }\n }\n function callFunction($el, functionName, args) {\n var result = null;\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var widget = jQuery.data(el, getDataKey());\n if (widget && widget instanceof SimpleWidget) {\n var widgetFunction = widget[functionName];\n if (widgetFunction &&\n typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args);\n }\n }\n }\n return result;\n }\n jQuery.fn[widgetName] = function (argument1) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (argument1 === undefined || typeof argument1 === \"object\") {\n var options = argument1;\n return createWidget(this, options);\n }\n else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n var functionName = argument1;\n if (functionName === \"destroy\") {\n return destroyWidget(this);\n }\n else if (functionName === \"get_widget_class\") {\n return widgetClass;\n }\n else {\n return callFunction(this, functionName, args);\n }\n }\n };\n };\n SimpleWidget.prototype.destroy = function () {\n this.deinit();\n };\n SimpleWidget.prototype.init = function () {\n //\n };\n SimpleWidget.prototype.deinit = function () {\n //\n };\n SimpleWidget.defaults = {};\n return SimpleWidget;\n}());\nexports[\"default\"] = SimpleWidget;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nexports.__esModule = true;\nvar version_1 = require(\"./version\");\nvar jQuery = require(\"jquery\");\nvar dragAndDropHandler_1 = require(\"./dragAndDropHandler\");\nvar elementsRenderer_1 = require(\"./elementsRenderer\");\nvar dataLoader_1 = require(\"./dataLoader\");\nvar keyHandler_1 = require(\"./keyHandler\");\nvar mouse_widget_1 = require(\"./mouse.widget\");\nvar saveStateHandler_1 = require(\"./saveStateHandler\");\nvar scrollHandler_1 = require(\"./scrollHandler\");\nvar selectNodeHandler_1 = require(\"./selectNodeHandler\");\nvar simple_widget_1 = require(\"./simple.widget\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar nodeElement_1 = require(\"./nodeElement\");\nvar NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nvar PARAM_IS_EMPTY = \"Parameter is empty: \";\nvar JqTreeWidget = /** @class */ (function (_super) {\n __extends(JqTreeWidget, _super);\n function JqTreeWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handleClick = function (e) {\n var clickTarget = _this.getClickTarget(e.target);\n if (clickTarget) {\n if (clickTarget.type === \"button\") {\n _this.toggle(clickTarget.node, _this.options.slide);\n e.preventDefault();\n e.stopPropagation();\n }\n else if (clickTarget.type === \"label\") {\n var node = clickTarget.node;\n var event_1 = _this._triggerEvent(\"tree.click\", {\n node: node,\n click_event: e // eslint-disable-line @typescript-eslint/camelcase\n });\n if (!event_1.isDefaultPrevented()) {\n _this.doSelectNode(node);\n }\n }\n }\n };\n _this.handleDblclick = function (e) {\n var _a;\n var clickTarget = _this.getClickTarget(e.target);\n if (((_a = clickTarget) === null || _a === void 0 ? void 0 : _a.type) === \"label\") {\n _this._triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n click_event: e // eslint-disable-line @typescript-eslint/camelcase\n });\n }\n };\n _this.handleContextmenu = function (e) {\n var $div = jQuery(e.target).closest(\"ul.jqtree-tree .jqtree-element\");\n if ($div.length) {\n var node = _this.getNode($div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n _this._triggerEvent(\"tree.contextmenu\", {\n node: node,\n click_event: e // eslint-disable-line @typescript-eslint/camelcase\n });\n return false;\n }\n }\n return null;\n };\n return _this;\n }\n JqTreeWidget.prototype.toggle = function (node, slideParam) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var slide = slideParam == null ? this.options.slide : slideParam;\n if (node.is_open) {\n this.closeNode(node, slide);\n }\n else {\n this.openNode(node, slide);\n }\n return this.element;\n };\n JqTreeWidget.prototype.getTree = function () {\n return this.tree;\n };\n JqTreeWidget.prototype.selectNode = function (node, optionsParam) {\n this.doSelectNode(node, optionsParam);\n return this.element;\n };\n JqTreeWidget.prototype.getSelectedNode = function () {\n if (this.selectNodeHandler) {\n return this.selectNodeHandler.getSelectedNode();\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.toJson = function () {\n return JSON.stringify(this.tree.getData());\n };\n JqTreeWidget.prototype.loadData = function (data, parentNode) {\n this.doLoadData(data, parentNode);\n return this.element;\n };\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(param1, param2, param3);\n }\n else {\n // first parameter is not url\n this.doLoadDataFromUrl(null, param1, param2);\n }\n return this.element;\n };\n JqTreeWidget.prototype.reload = function (onFinished) {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n };\n JqTreeWidget.prototype.getNodeById = function (nodeId) {\n return this.tree.getNodeById(nodeId);\n };\n JqTreeWidget.prototype.getNodeByName = function (name) {\n return this.tree.getNodeByName(name);\n };\n JqTreeWidget.prototype.getNodesByProperty = function (key, value) {\n return this.tree.getNodesByProperty(key, value);\n };\n JqTreeWidget.prototype.getNodeByHtmlElement = function (element) {\n return this.getNode(jQuery(element));\n };\n JqTreeWidget.prototype.getNodeByCallback = function (callback) {\n return this.tree.getNodeByCallback(callback);\n };\n JqTreeWidget.prototype.openNode = function (node, param1, param2) {\n var _this = this;\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var parseParams = function () {\n var onFinished;\n var slide;\n if (util_1.isFunction(param1)) {\n onFinished = param1;\n slide = null;\n }\n else {\n slide = param1;\n onFinished = param2;\n }\n if (slide == null) {\n slide = _this.options.slide;\n }\n return [slide, onFinished];\n };\n var _a = parseParams(), slide = _a[0], onFinished = _a[1];\n this._openNode(node, slide, onFinished);\n return this.element;\n };\n JqTreeWidget.prototype.closeNode = function (node, slideParam) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var slide = slideParam == null ? this.options.slide : slideParam;\n if (node.isFolder() || node.isEmptyFolder) {\n new nodeElement_1.FolderElement(node, this).close(slide, this.options.animationSpeed);\n this.saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.isDragging = function () {\n if (this.dndHandler) {\n return this.dndHandler.isDragging;\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.refreshHitAreas = function () {\n if (this.dndHandler) {\n this.dndHandler.refresh();\n }\n return this.element;\n };\n JqTreeWidget.prototype.addNodeAfter = function (newNodeInfo, existingNode) {\n var newNode = existingNode.addAfter(newNodeInfo);\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.addNodeBefore = function (newNodeInfo, existingNode) {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n var newNode = existingNode.addBefore(newNodeInfo);\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.addParentNode = function (newNodeInfo, existingNode) {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n var newNode = existingNode.addParent(newNodeInfo);\n if (newNode) {\n this._refreshElements(newNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.removeNode = function (inode) {\n if (!inode) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var node = inode;\n if (node.parent && this.selectNodeHandler) {\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n var parent_1 = node.parent;\n node.remove();\n this._refreshElements(parent_1);\n }\n return this.element;\n };\n JqTreeWidget.prototype.appendNode = function (newNodeInfo, parentNodeParam) {\n var parentNode = parentNodeParam || this.tree;\n var node = parentNode.append(newNodeInfo);\n this._refreshElements(parentNode);\n return node;\n };\n JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) {\n var parentNode = !parentNodeParam\n ? this.tree\n : parentNodeParam;\n var node = parentNode.prepend(newNodeInfo);\n this._refreshElements(parentNode);\n return node;\n };\n JqTreeWidget.prototype.updateNode = function (node, data) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var idIsChanged = data.id && data.id !== node.id;\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n node.setData(data);\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n if (typeof data === \"object\" && data.children) {\n node.removeChildren();\n if (data.children.length) {\n node.loadFromData(data.children);\n }\n }\n this._refreshElements(node);\n this.selectCurrentNode();\n return this.element;\n };\n JqTreeWidget.prototype.moveNode = function (node, targetNode, position) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n var positionIndex = node_1.getPosition(position);\n this.tree.moveNode(node, targetNode, positionIndex);\n this._refreshElements(null);\n return this.element;\n };\n JqTreeWidget.prototype.getStateFromStorage = function () {\n if (this.saveStateHandler) {\n return this.saveStateHandler.getStateFromStorage();\n }\n };\n JqTreeWidget.prototype.addToSelection = function (inode, mustSetFocus) {\n if (!inode) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var node = inode;\n if (this.selectNodeHandler) {\n this.selectNodeHandler.addToSelection(node);\n this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus);\n this.saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.getSelectedNodes = function () {\n if (!this.selectNodeHandler) {\n return [];\n }\n else {\n return this.selectNodeHandler.getSelectedNodes();\n }\n };\n JqTreeWidget.prototype.isNodeSelected = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (!this.selectNodeHandler) {\n return false;\n }\n else {\n return this.selectNodeHandler.isNodeSelected(node);\n }\n };\n JqTreeWidget.prototype.removeFromSelection = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (this.selectNodeHandler) {\n this.selectNodeHandler.removeFromSelection(node);\n this._getNodeElementForNode(node).deselect();\n this.saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.scrollToNode = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (this.scrollHandler) {\n var nodeOffset = jQuery(node.element).offset();\n var nodeTop = nodeOffset ? nodeOffset.top : 0;\n var treeOffset = this.$el.offset();\n var treeTop = treeOffset ? treeOffset.top : 0;\n var top_1 = nodeTop - treeTop;\n this.scrollHandler.scrollToY(top_1);\n }\n return this.element;\n };\n JqTreeWidget.prototype.getState = function () {\n if (this.saveStateHandler) {\n return this.saveStateHandler.getState();\n }\n };\n JqTreeWidget.prototype.setState = function (state) {\n if (this.saveStateHandler) {\n this.saveStateHandler.setInitialState(state);\n this._refreshElements(null);\n }\n return this.element;\n };\n JqTreeWidget.prototype.setOption = function (option, value) {\n this.options[option] = value;\n return this.element;\n };\n JqTreeWidget.prototype.moveDown = function () {\n if (this.keyHandler) {\n this.keyHandler.moveDown();\n }\n return this.element;\n };\n JqTreeWidget.prototype.moveUp = function () {\n if (this.keyHandler) {\n this.keyHandler.moveUp();\n }\n return this.element;\n };\n JqTreeWidget.prototype.getVersion = function () {\n return version_1[\"default\"];\n };\n JqTreeWidget.prototype.testGenerateHitAreas = function (movingNode) {\n if (!this.dndHandler) {\n return [];\n }\n else {\n this.dndHandler.currentItem = this._getNodeElementForNode(movingNode);\n this.dndHandler.generateHitAreas();\n return this.dndHandler.hitAreas;\n }\n };\n JqTreeWidget.prototype._triggerEvent = function (eventName, values) {\n var event = jQuery.Event(eventName);\n jQuery.extend(event, values);\n this.element.trigger(event);\n return event;\n };\n JqTreeWidget.prototype._openNode = function (node, slide, onFinished) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n var doOpenNode = function (_node, _slide, _onFinished) {\n var folderElement = new nodeElement_1.FolderElement(_node, _this);\n folderElement.open(_onFinished, _slide, _this.options.animationSpeed);\n };\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n }\n else {\n var parent_2 = node.parent;\n while (parent_2) {\n // nb: do not open root element\n if (parent_2.parent) {\n doOpenNode(parent_2, false, null);\n }\n parent_2 = parent_2.parent;\n }\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n };\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n JqTreeWidget.prototype._refreshElements = function (fromNode) {\n this.renderer.render(fromNode);\n this._triggerEvent(\"tree.refresh\");\n };\n JqTreeWidget.prototype._getNodeElementForNode = function (node) {\n if (node.isFolder()) {\n return new nodeElement_1.FolderElement(node, this);\n }\n else {\n return new nodeElement_1.NodeElement(node, this);\n }\n };\n JqTreeWidget.prototype._getNodeElement = function ($element) {\n var node = this.getNode($element);\n if (node) {\n return this._getNodeElementForNode(node);\n }\n else {\n return null;\n }\n };\n JqTreeWidget.prototype._containsElement = function (element) {\n var node = this.getNode(jQuery(element));\n return node != null && node.tree === this.tree;\n };\n JqTreeWidget.prototype._getScrollLeft = function () {\n var _a, _b;\n return ((_b = (_a = this) === null || _a === void 0 ? void 0 : _a.scrollHandler) === null || _b === void 0 ? void 0 : _b.getScrollLeft()) || 0;\n };\n JqTreeWidget.prototype.init = function () {\n _super.prototype.init.call(this);\n this.element = this.$el;\n this.mouseDelay = 300;\n this.isInitialized = false;\n this.options.rtl = this.getRtlOption();\n if (this.options.closedIcon === null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n this.renderer = new elementsRenderer_1[\"default\"](this);\n this.dataLoader = new dataLoader_1[\"default\"](this);\n if (saveStateHandler_1[\"default\"] != null) {\n this.saveStateHandler = new saveStateHandler_1[\"default\"](this);\n }\n else {\n this.options.saveState = false;\n }\n if (selectNodeHandler_1[\"default\"] != null) {\n this.selectNodeHandler = new selectNodeHandler_1[\"default\"](this);\n }\n if (dragAndDropHandler_1.DragAndDropHandler != null) {\n this.dndHandler = new dragAndDropHandler_1.DragAndDropHandler(this);\n }\n else {\n this.options.dragAndDrop = false;\n }\n if (scrollHandler_1[\"default\"] != null) {\n this.scrollHandler = new scrollHandler_1[\"default\"](this);\n }\n if (keyHandler_1[\"default\"] != null && selectNodeHandler_1[\"default\"] != null) {\n this.keyHandler = new keyHandler_1[\"default\"](this);\n }\n this.initData();\n this.element.click(this.handleClick);\n this.element.dblclick(this.handleDblclick);\n if (this.options.useContextMenu) {\n this.element.on(\"contextmenu\", this.handleContextmenu);\n }\n };\n JqTreeWidget.prototype.deinit = function () {\n this.element.empty();\n this.element.off();\n if (this.keyHandler) {\n this.keyHandler.deinit();\n }\n this.tree = new node_1.Node({}, true);\n _super.prototype.deinit.call(this);\n };\n JqTreeWidget.prototype.mouseCapture = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseCapture(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.mouseStart = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseStart(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.mouseDrag = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n var result = this.dndHandler.mouseDrag(positionInfo);\n if (this.scrollHandler) {\n this.scrollHandler.checkScrolling();\n }\n return result;\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.mouseStop = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseStop(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.initData = function () {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n }\n else {\n var dataUrl = this.getDataUrlInfo(null);\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n }\n else {\n this.doLoadData([], null);\n }\n }\n };\n JqTreeWidget.prototype.getDataUrlInfo = function (node) {\n var _this = this;\n var dataUrl = this.options.dataUrl || this.element.data(\"url\");\n var getUrlFromString = function () {\n var urlInfo = { url: dataUrl };\n setUrlInfoData(urlInfo);\n return urlInfo;\n };\n var setUrlInfoData = function (urlInfo) {\n var _a;\n if ((_a = node) === null || _a === void 0 ? void 0 : _a.id) {\n // Load on demand of a subtree; add node parameter\n var data = { node: node.id };\n urlInfo[\"data\"] = data;\n }\n else {\n // Add selected_node parameter\n var selectedNodeId = _this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n var data = { selected_node: selectedNodeId }; // eslint-disable-line @typescript-eslint/camelcase\n urlInfo[\"data\"] = data;\n }\n }\n };\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n }\n else if (typeof dataUrl === \"string\") {\n return getUrlFromString();\n }\n else if (typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n }\n else {\n return dataUrl;\n }\n };\n JqTreeWidget.prototype.getNodeIdToBeSelected = function () {\n if (this.options.saveState && this.saveStateHandler) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n }\n else {\n return null;\n }\n };\n JqTreeWidget.prototype.initTree = function (data) {\n var _this = this;\n var doInit = function () {\n if (!_this.isInitialized) {\n _this.isInitialized = true;\n _this._triggerEvent(\"tree.init\");\n }\n };\n this.tree = new this.options.nodeClass(null, true, this.options.nodeClass);\n if (this.selectNodeHandler) {\n this.selectNodeHandler.clear();\n }\n this.tree.loadFromData(data);\n var mustLoadOnDemand = this.setInitialState();\n this._refreshElements(null);\n if (!mustLoadOnDemand) {\n doInit();\n }\n else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n };\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n JqTreeWidget.prototype.setInitialState = function () {\n var _this = this;\n var restoreState = function () {\n // result: is state restored, must load on demand?\n if (!(_this.options.saveState && _this.saveStateHandler)) {\n return [false, false];\n }\n else {\n var state = _this.saveStateHandler.getStateFromStorage();\n if (!state) {\n return [false, false];\n }\n else {\n var mustLoadOnDemand_1 = _this.saveStateHandler.setInitialState(state);\n // return true: the state is restored\n return [true, mustLoadOnDemand_1];\n }\n }\n };\n var autoOpenNodes = function () {\n // result: must load on demand?\n if (_this.options.autoOpen === false) {\n return false;\n }\n var maxLevel = _this.getAutoOpenMaxLevel();\n var mustLoadOnDemand = false;\n _this.tree.iterate(function (node, level) {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n }\n else if (!node.hasChildren()) {\n return false;\n }\n else {\n node.is_open = true; // eslint-disable-line @typescript-eslint/camelcase\n return level !== maxLevel;\n }\n });\n return mustLoadOnDemand;\n };\n var _a = restoreState(), isRestored = _a[0], mustLoadOnDemand = _a[1]; // eslint-disable-line prefer-const\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n return mustLoadOnDemand;\n };\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n JqTreeWidget.prototype.setInitialStateOnDemand = function (cbFinished) {\n var _this = this;\n var restoreState = function () {\n if (!(_this.options.saveState && _this.saveStateHandler)) {\n return false;\n }\n else {\n var state = _this.saveStateHandler.getStateFromStorage();\n if (!state) {\n return false;\n }\n else {\n _this.saveStateHandler.setInitialStateOnDemand(state, cbFinished);\n return true;\n }\n }\n };\n var autoOpenNodes = function () {\n var maxLevel = _this.getAutoOpenMaxLevel();\n var loadingCount = 0;\n var loadAndOpenNode = function (node) {\n loadingCount += 1;\n _this._openNode(node, false, function () {\n loadingCount -= 1;\n openNodes();\n });\n };\n var openNodes = function () {\n _this.tree.iterate(function (node, level) {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n return false;\n }\n else {\n _this._openNode(node, false, null);\n return level !== maxLevel;\n }\n });\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n openNodes();\n };\n if (!restoreState()) {\n autoOpenNodes();\n }\n };\n JqTreeWidget.prototype.getAutoOpenMaxLevel = function () {\n if (this.options.autoOpen === true) {\n return -1;\n }\n else {\n return parseInt(this.options.autoOpen, 10);\n }\n };\n JqTreeWidget.prototype.getClickTarget = function (element) {\n var $target = jQuery(element);\n var $button = $target.closest(\".jqtree-toggler\");\n if ($button.length) {\n var node = this.getNode($button);\n if (node) {\n return {\n type: \"button\",\n node: node\n };\n }\n }\n else {\n var $el = $target.closest(\".jqtree-element\");\n if ($el.length) {\n var node = this.getNode($el);\n if (node) {\n return {\n type: \"label\",\n node: node\n };\n }\n }\n }\n return null;\n };\n JqTreeWidget.prototype.getNode = function ($element) {\n var $li = $element.closest(\"li.jqtree_common\");\n if ($li.length === 0) {\n return null;\n }\n else {\n return $li.data(\"node\");\n }\n };\n JqTreeWidget.prototype.saveState = function () {\n if (this.options.saveState && this.saveStateHandler) {\n this.saveStateHandler.saveState();\n }\n };\n JqTreeWidget.prototype.selectCurrentNode = function () {\n var node = this.getSelectedNode();\n if (node) {\n var nodeElement = this._getNodeElementForNode(node);\n if (nodeElement) {\n nodeElement.select(true);\n }\n }\n };\n JqTreeWidget.prototype.deselectCurrentNode = function () {\n var node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n };\n JqTreeWidget.prototype.getDefaultClosedIcon = function () {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n }\n else {\n // triangle to the right\n return \"►\";\n }\n };\n JqTreeWidget.prototype.getRtlOption = function () {\n if (this.options.rtl != null) {\n return this.options.rtl;\n }\n else {\n var dataRtl = this.element.data(\"rtl\");\n if (dataRtl !== null && dataRtl !== false) {\n return true;\n }\n else {\n return false;\n }\n }\n };\n JqTreeWidget.prototype.doSelectNode = function (inode, optionsParam) {\n var _this = this;\n if (!this.selectNodeHandler) {\n return;\n }\n var defaultOptions = { mustSetFocus: true, mustToggle: true };\n var selectOptions = __assign(__assign({}, defaultOptions), (optionsParam || {}));\n var canSelect = function () {\n if (_this.options.onCanSelectNode) {\n return (_this.options.selectable &&\n _this.options.onCanSelectNode(inode));\n }\n else {\n return _this.options.selectable;\n }\n };\n var openParents = function () {\n var parent = inode.parent;\n if (parent && parent.parent && !parent.is_open) {\n _this.openNode(parent, false);\n }\n };\n var saveState = function () {\n if (_this.options.saveState && _this.saveStateHandler) {\n _this.saveStateHandler.saveState();\n }\n };\n if (!inode) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n if (!canSelect()) {\n return;\n }\n var node = inode;\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this._triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node // eslint-disable-line @typescript-eslint/camelcase\n });\n }\n }\n else {\n var deselectedNode = this.getSelectedNode();\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n this._triggerEvent(\"tree.select\", {\n node: node,\n deselected_node: deselectedNode // eslint-disable-line @typescript-eslint/camelcase\n });\n openParents();\n }\n saveState();\n };\n JqTreeWidget.prototype.doLoadData = function (data, parentNode) {\n if (!data) {\n return;\n }\n else {\n this._triggerEvent(\"tree.load_data\", { tree_data: data }); // eslint-disable-line @typescript-eslint/camelcase\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n }\n else {\n this.initTree(data);\n }\n if (this.isDragging() && this.dndHandler) {\n this.dndHandler.refresh();\n }\n }\n };\n JqTreeWidget.prototype.deselectNodes = function (parentNode) {\n if (this.selectNodeHandler) {\n var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) {\n var n = selectedNodesUnderParent_1[_i];\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n };\n JqTreeWidget.prototype.loadSubtree = function (data, parentNode) {\n parentNode.loadFromData(data);\n parentNode.load_on_demand = false; // eslint-disable-line @typescript-eslint/camelcase\n parentNode.is_loading = false; // eslint-disable-line @typescript-eslint/camelcase\n this._refreshElements(parentNode);\n };\n JqTreeWidget.prototype.doLoadDataFromUrl = function (urlInfoParam, parentNode, onFinished) {\n var urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode);\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n };\n JqTreeWidget.prototype.loadFolderOnDemand = function (node, slide, onFinished) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n node.is_loading = true; // eslint-disable-line @typescript-eslint/camelcase\n this.doLoadDataFromUrl(null, node, function () {\n _this._openNode(node, slide, onFinished);\n });\n };\n JqTreeWidget.defaults = {\n animationSpeed: \"fast\",\n autoOpen: false,\n saveState: false,\n dragAndDrop: false,\n selectable: true,\n useContextMenu: true,\n onCanSelectNode: null,\n onSetStateFromStorage: null,\n onGetStateFromStorage: null,\n onCreateLi: null,\n onIsMoveHandle: null,\n // Can this node be moved?\n onCanMove: null,\n // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanMoveTo: null,\n onLoadFailed: null,\n autoEscape: true,\n dataUrl: null,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: null,\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n openedIcon: \"▼\",\n slide: true,\n nodeClass: node_1.Node,\n dataFilter: null,\n keyboardSupport: true,\n openFolderDelay: 500,\n rtl: false,\n onDragMove: null,\n onDragStop: null,\n buttonLeft: true,\n onLoading: null,\n showEmptyFolder: false,\n tabIndex: 0\n };\n return JqTreeWidget;\n}(mouse_widget_1[\"default\"]));\nsimple_widget_1[\"default\"].register(JqTreeWidget, \"tree\");\n","\"use strict\";\nexports.__esModule = true;\nvar version = \"1.4.12\";\nexports[\"default\"] = version;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\nvar jQuery = require(\"jquery\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar DragAndDropHandler = /** @class */ (function () {\n function DragAndDropHandler(treeWidget) {\n this.treeWidget = treeWidget;\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n this.positionInfo = null;\n }\n DragAndDropHandler.prototype.mouseCapture = function (positionInfo) {\n var $element = jQuery(positionInfo.target);\n if (!this.mustCaptureElement($element)) {\n return null;\n }\n if (this.treeWidget.options.onIsMoveHandle &&\n !this.treeWidget.options.onIsMoveHandle($element)) {\n return null;\n }\n var nodeElement = this.treeWidget._getNodeElement($element);\n if (nodeElement && this.treeWidget.options.onCanMove) {\n if (!this.treeWidget.options.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n this.currentItem = nodeElement;\n return this.currentItem != null;\n };\n DragAndDropHandler.prototype.generateHitAreas = function () {\n if (!this.currentItem) {\n this.hitAreas = [];\n }\n else {\n var hitAreasGenerator = new HitAreasGenerator(this.treeWidget.tree, this.currentItem.node, this.getTreeDimensions().bottom);\n this.hitAreas = hitAreasGenerator.generate();\n }\n };\n DragAndDropHandler.prototype.mouseStart = function (positionInfo) {\n if (!this.currentItem ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return false;\n }\n else {\n this.refresh();\n var offset = jQuery(positionInfo.target).offset();\n var left = offset ? offset.left : 0;\n var top_1 = offset ? offset.top : 0;\n var node = this.currentItem.node;\n var nodeName = this.treeWidget.options.autoEscape\n ? util_1.htmlEscape(node.name)\n : node.name;\n this.dragElement = new DragElement(nodeName, positionInfo.pageX - left, positionInfo.pageY - top_1, this.treeWidget.element);\n this.isDragging = true;\n this.positionInfo = positionInfo;\n this.currentItem.$element.addClass(\"jqtree-moving\");\n return true;\n }\n };\n DragAndDropHandler.prototype.mouseDrag = function (positionInfo) {\n if (!this.currentItem ||\n !this.dragElement ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return false;\n }\n else {\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n this.positionInfo = positionInfo;\n var area = this.findHoveredArea(positionInfo.pageX, positionInfo.pageY);\n var canMoveTo = this.canMoveToArea(area);\n if (canMoveTo && area) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n }\n else {\n this.stopOpenFolderTimer();\n }\n this.updateDropHint();\n }\n }\n else {\n this.removeHover();\n this.removeDropHint();\n this.stopOpenFolderTimer();\n }\n if (!area) {\n if (this.treeWidget.options.onDragMove) {\n this.treeWidget.options.onDragMove(this.currentItem.node, positionInfo.originalEvent);\n }\n }\n return true;\n }\n };\n DragAndDropHandler.prototype.mouseStop = function (positionInfo) {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n var currentItem = this.currentItem;\n if (this.currentItem) {\n this.currentItem.$element.removeClass(\"jqtree-moving\");\n this.currentItem = null;\n }\n this.isDragging = false;\n this.positionInfo = null;\n if (!this.hoveredArea && currentItem) {\n if (this.treeWidget.options.onDragStop) {\n this.treeWidget.options.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n return false;\n };\n DragAndDropHandler.prototype.refresh = function () {\n this.removeHitAreas();\n if (this.currentItem) {\n this.generateHitAreas();\n this.currentItem = this.treeWidget._getNodeElementForNode(this.currentItem.node);\n if (this.isDragging) {\n this.currentItem.$element.addClass(\"jqtree-moving\");\n }\n }\n };\n DragAndDropHandler.prototype.mustCaptureElement = function ($element) {\n return !$element.is(\"input,select,textarea\");\n };\n DragAndDropHandler.prototype.canMoveToArea = function (area) {\n if (!area || !this.currentItem) {\n return false;\n }\n else if (this.treeWidget.options.onCanMoveTo) {\n var positionName = node_1.getPositionName(area.position);\n return this.treeWidget.options.onCanMoveTo(this.currentItem.node, area.node, positionName);\n }\n else {\n return true;\n }\n };\n DragAndDropHandler.prototype.removeHitAreas = function () {\n this.hitAreas = [];\n };\n DragAndDropHandler.prototype.clear = function () {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n };\n DragAndDropHandler.prototype.removeDropHint = function () {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n };\n DragAndDropHandler.prototype.removeHover = function () {\n this.hoveredArea = null;\n };\n DragAndDropHandler.prototype.findHoveredArea = function (x, y) {\n var dimensions = this.getTreeDimensions();\n if (x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom) {\n return null;\n }\n var low = 0;\n var high = this.hitAreas.length;\n while (low < high) {\n var mid = (low + high) >> 1;\n var area = this.hitAreas[mid];\n if (y < area.top) {\n high = mid;\n }\n else if (y > area.bottom) {\n low = mid + 1;\n }\n else {\n return area;\n }\n }\n return null;\n };\n DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) {\n var node = area.node;\n return (node.isFolder() &&\n !node.is_open &&\n area.position === node_1.Position.Inside);\n };\n DragAndDropHandler.prototype.updateDropHint = function () {\n if (!this.hoveredArea) {\n return;\n }\n // remove previous drop hint\n this.removeDropHint();\n // add new drop hint\n var nodeElement = this.treeWidget._getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n };\n DragAndDropHandler.prototype.startOpenFolderTimer = function (folder) {\n var _this = this;\n var openFolder = function () {\n _this.treeWidget._openNode(folder, _this.treeWidget.options.slide, function () {\n _this.refresh();\n _this.updateDropHint();\n });\n };\n this.stopOpenFolderTimer();\n this.openFolderTimer = window.setTimeout(openFolder, this.treeWidget.options.openFolderDelay);\n };\n DragAndDropHandler.prototype.stopOpenFolderTimer = function () {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n };\n DragAndDropHandler.prototype.moveItem = function (positionInfo) {\n var _this = this;\n if (this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== node_1.Position.None &&\n this.canMoveToArea(this.hoveredArea)) {\n var movedNode_1 = this.currentItem.node;\n var targetNode_1 = this.hoveredArea.node;\n var position_1 = this.hoveredArea.position;\n var previousParent = movedNode_1.parent;\n if (position_1 === node_1.Position.Inside) {\n this.hoveredArea.node.is_open = true; // eslint-disable-line @typescript-eslint/camelcase\n }\n var doMove = function () {\n _this.treeWidget.tree.moveNode(movedNode_1, targetNode_1, position_1);\n _this.treeWidget.element.empty();\n _this.treeWidget._refreshElements(null);\n };\n /* eslint-disable @typescript-eslint/camelcase */\n var event_1 = this.treeWidget._triggerEvent(\"tree.move\", {\n move_info: {\n moved_node: movedNode_1,\n target_node: targetNode_1,\n position: node_1.getPositionName(position_1),\n previous_parent: previousParent,\n do_move: doMove,\n original_event: positionInfo.originalEvent\n }\n });\n /* eslint-enable @typescript-eslint/camelcase */\n if (!event_1.isDefaultPrevented()) {\n doMove();\n }\n }\n };\n DragAndDropHandler.prototype.getTreeDimensions = function () {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n var offset = this.treeWidget.element.offset();\n if (!offset) {\n return { left: 0, top: 0, right: 0, bottom: 0 };\n }\n else {\n var el = this.treeWidget.element;\n var width = el.width() || 0;\n var height = el.height() || 0;\n var left = offset.left + this.treeWidget._getScrollLeft();\n return {\n left: left,\n top: offset.top,\n right: left + width,\n bottom: offset.top + height + 16\n };\n }\n };\n return DragAndDropHandler;\n}());\nexports.DragAndDropHandler = DragAndDropHandler;\nvar VisibleNodeIterator = /** @class */ (function () {\n function VisibleNodeIterator(tree) {\n this.tree = tree;\n }\n VisibleNodeIterator.prototype.iterate = function () {\n var _this = this;\n var isFirstNode = true;\n var _iterateNode = function (node, nextNode) {\n var mustIterateInside = (node.is_open || !node.element) && node.hasChildren();\n var $element = null;\n if (node.element) {\n $element = jQuery(node.element);\n if (!$element.is(\":visible\")) {\n return;\n }\n if (isFirstNode) {\n _this.handleFirstNode(node);\n isFirstNode = false;\n }\n if (!node.hasChildren()) {\n _this.handleNode(node, nextNode, $element);\n }\n else if (node.is_open) {\n if (!_this.handleOpenFolder(node, $element)) {\n mustIterateInside = false;\n }\n }\n else {\n _this.handleClosedFolder(node, nextNode, $element);\n }\n }\n if (mustIterateInside) {\n var childrenLength_1 = node.children.length;\n node.children.forEach(function (_, i) {\n if (i === childrenLength_1 - 1) {\n _iterateNode(node.children[i], null);\n }\n else {\n _iterateNode(node.children[i], node.children[i + 1]);\n }\n });\n if (node.is_open && $element) {\n _this.handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n _iterateNode(this.tree, null);\n };\n return VisibleNodeIterator;\n}());\nvar HitAreasGenerator = /** @class */ (function (_super) {\n __extends(HitAreasGenerator, _super);\n function HitAreasGenerator(tree, currentNode, treeBottom) {\n var _this = _super.call(this, tree) || this;\n _this.currentNode = currentNode;\n _this.treeBottom = treeBottom;\n return _this;\n }\n HitAreasGenerator.prototype.generate = function () {\n this.positions = [];\n this.lastTop = 0;\n this.iterate();\n return this.generateHitAreas(this.positions);\n };\n HitAreasGenerator.prototype.generateHitAreas = function (positions) {\n var previousTop = -1;\n var group = [];\n var hitAreas = [];\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n if (position.top !== previousTop && group.length) {\n if (group.length) {\n this.generateHitAreasForGroup(hitAreas, group, previousTop, position.top);\n }\n previousTop = position.top;\n group = [];\n }\n group.push(position);\n }\n this.generateHitAreasForGroup(hitAreas, group, previousTop, this.treeBottom);\n return hitAreas;\n };\n HitAreasGenerator.prototype.handleOpenFolder = function (node, $element) {\n if (node === this.currentNode) {\n // Cannot move inside current item\n // Stop iterating\n return false;\n }\n // Cannot move before current item\n if (node.children[0] !== this.currentNode) {\n this.addPosition(node, node_1.Position.Inside, this.getTop($element));\n }\n // Continue iterating\n return true;\n };\n HitAreasGenerator.prototype.handleClosedFolder = function (node, nextNode, $element) {\n var top = this.getTop($element);\n if (node === this.currentNode) {\n // Cannot move after current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.Inside, top);\n // Cannot move before current item\n if (nextNode !== this.currentNode) {\n this.addPosition(node, node_1.Position.After, top);\n }\n }\n };\n HitAreasGenerator.prototype.handleFirstNode = function (node) {\n if (node !== this.currentNode) {\n this.addPosition(node, node_1.Position.Before, this.getTop(jQuery(node.element)));\n }\n };\n HitAreasGenerator.prototype.handleAfterOpenFolder = function (node, nextNode) {\n if (node === this.currentNode || nextNode === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, node_1.Position.None, this.lastTop);\n }\n else {\n this.addPosition(node, node_1.Position.After, this.lastTop);\n }\n };\n HitAreasGenerator.prototype.handleNode = function (node, nextNode, $element) {\n var top = this.getTop($element);\n if (node === this.currentNode) {\n // Cannot move inside current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.Inside, top);\n }\n if (nextNode === this.currentNode || node === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.After, top);\n }\n };\n HitAreasGenerator.prototype.getTop = function ($element) {\n var offset = $element.offset();\n return offset ? offset.top : 0;\n };\n HitAreasGenerator.prototype.addPosition = function (node, position, top) {\n var area = {\n top: top,\n bottom: 0,\n node: node,\n position: position\n };\n this.positions.push(area);\n this.lastTop = top;\n };\n HitAreasGenerator.prototype.generateHitAreasForGroup = function (hitAreas, positionsInGroup, top, bottom) {\n // limit positions in group\n var positionCount = Math.min(positionsInGroup.length, 4);\n var areaHeight = Math.round((bottom - top) / positionCount);\n var areaTop = top;\n var i = 0;\n while (i < positionCount) {\n var position = positionsInGroup[i];\n hitAreas.push({\n top: areaTop,\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position\n });\n areaTop += areaHeight;\n i += 1;\n }\n };\n return HitAreasGenerator;\n}(VisibleNodeIterator));\nexports.HitAreasGenerator = HitAreasGenerator;\nvar DragElement = /** @class */ (function () {\n function DragElement(nodeName, offsetX, offsetY, $tree) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.$element = jQuery(\"\" + nodeName + \"\");\n this.$element.css(\"position\", \"absolute\");\n $tree.append(this.$element);\n }\n DragElement.prototype.move = function (pageX, pageY) {\n this.$element.offset({\n left: pageX - this.offsetX,\n top: pageY - this.offsetY\n });\n };\n DragElement.prototype.remove = function () {\n this.$element.remove();\n };\n return DragElement;\n}());\n","\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar ElementsRenderer = /** @class */ (function () {\n function ElementsRenderer(treeWidget) {\n this.treeWidget = treeWidget;\n this.openedIconElement = this.createButtonElement(treeWidget.options.openedIcon);\n this.closedIconElement = this.createButtonElement(treeWidget.options.closedIcon);\n }\n ElementsRenderer.prototype.render = function (fromNode) {\n if (fromNode && fromNode.parent) {\n this.renderFromNode(fromNode);\n }\n else {\n this.renderFromRoot();\n }\n };\n ElementsRenderer.prototype.renderFromRoot = function () {\n var $element = this.treeWidget.element;\n $element.empty();\n this.createDomElements($element[0], this.treeWidget.tree.children, true, 1);\n };\n ElementsRenderer.prototype.renderFromNode = function (node) {\n // remember current li\n var $previousLi = jQuery(node.element);\n // create element\n var li = this.createLi(node, node.getLevel());\n this.attachNodeData(node, li);\n // add element to dom\n $previousLi.after(li);\n // remove previous li\n $previousLi.remove();\n // create children\n if (node.children) {\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n };\n ElementsRenderer.prototype.createDomElements = function (element, children, isRootNode, level) {\n var ul = this.createUl(isRootNode);\n element.appendChild(ul);\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var child = children_1[_i];\n var li = this.createLi(child, level);\n ul.appendChild(li);\n this.attachNodeData(child, li);\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n };\n ElementsRenderer.prototype.attachNodeData = function (node, li) {\n node.element = li;\n jQuery(li).data(\"node\", node);\n };\n ElementsRenderer.prototype.createUl = function (isRootNode) {\n var classString;\n var role;\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n }\n else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n if (this.treeWidget.options.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n var ul = document.createElement(\"ul\");\n ul.className = \"jqtree_common \" + classString;\n ul.setAttribute(\"role\", role);\n return ul;\n };\n ElementsRenderer.prototype.createLi = function (node, level) {\n var isSelected = Boolean(this.treeWidget.selectNodeHandler &&\n this.treeWidget.selectNodeHandler.isNodeSelected(node));\n var mustShowFolder = node.isFolder() ||\n (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder);\n var li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n if (this.treeWidget.options.onCreateLi) {\n this.treeWidget.options.onCreateLi(node, jQuery(li), isSelected);\n }\n return li;\n };\n ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) {\n var buttonClasses = this.getButtonClasses(node);\n var folderClasses = this.getFolderClasses(node, isSelected);\n var iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n // li\n var li = document.createElement(\"li\");\n li.className = \"jqtree_common \" + folderClasses;\n li.setAttribute(\"role\", \"presentation\");\n // div\n var div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n li.appendChild(div);\n // button link\n var buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n buttonLink.appendChild(iconElement.cloneNode(true));\n buttonLink.setAttribute(\"role\", \"presentation\");\n buttonLink.setAttribute(\"aria-hidden\", \"true\");\n if (this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n // title span\n div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, true));\n if (!this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n return li;\n };\n ElementsRenderer.prototype.createNodeLi = function (node, level, isSelected) {\n var liClasses = [\"jqtree_common\"];\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n var classString = liClasses.join(\" \");\n // li\n var li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"presentation\");\n // div\n var div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n li.appendChild(div);\n // title span\n div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, false));\n return li;\n };\n ElementsRenderer.prototype.createTitleSpan = function (nodeName, level, isSelected, isOpen, isFolder) {\n var titleSpan = document.createElement(\"span\");\n var classes = \"jqtree-title jqtree_common\";\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n titleSpan.className = classes;\n titleSpan.setAttribute(\"role\", \"treeitem\");\n titleSpan.setAttribute(\"aria-level\", \"\" + level);\n titleSpan.setAttribute(\"aria-selected\", util_1.getBoolString(isSelected));\n titleSpan.setAttribute(\"aria-expanded\", util_1.getBoolString(isOpen));\n if (isSelected) {\n titleSpan.setAttribute(\"tabindex\", this.treeWidget.options.tabIndex);\n }\n titleSpan.innerHTML = this.escapeIfNecessary(nodeName);\n return titleSpan;\n };\n ElementsRenderer.prototype.getButtonClasses = function (node) {\n var classes = [\"jqtree-toggler\", \"jqtree_common\"];\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n if (this.treeWidget.options.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n }\n else {\n classes.push(\"jqtree-toggler-right\");\n }\n return classes.join(\" \");\n };\n ElementsRenderer.prototype.getFolderClasses = function (node, isSelected) {\n var classes = [\"jqtree-folder\"];\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n return classes.join(\" \");\n };\n ElementsRenderer.prototype.escapeIfNecessary = function (value) {\n if (this.treeWidget.options.autoEscape) {\n return util_1.htmlEscape(value);\n }\n else {\n return value;\n }\n };\n ElementsRenderer.prototype.createButtonElement = function (value) {\n if (typeof value === \"string\") {\n // convert value to html\n var div = document.createElement(\"div\");\n div.innerHTML = value;\n return document.createTextNode(div.innerHTML);\n }\n else {\n return jQuery(value)[0];\n }\n };\n return ElementsRenderer;\n}());\nexports[\"default\"] = ElementsRenderer;\n","\"use strict\";\nexports.__esModule = true;\nvar DataLoader = /** @class */ (function () {\n function DataLoader(treeWidget) {\n this.treeWidget = treeWidget;\n }\n DataLoader.prototype.loadFromUrl = function (urlInfo, parentNode, onFinished) {\n var _this = this;\n if (!urlInfo) {\n return;\n }\n var $el = this.getDomElement(parentNode);\n this.addLoadingClass($el);\n this.notifyLoading(true, parentNode, $el);\n var stopLoading = function () {\n _this.removeLoadingClass($el);\n _this.notifyLoading(false, parentNode, $el);\n };\n var handleSuccess = function (data) {\n stopLoading();\n _this.treeWidget.loadData(_this.parseData(data), parentNode);\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n var handleError = function (jqXHR) {\n stopLoading();\n var onLoadFailed = _this.treeWidget.options.onLoadFailed;\n if (onLoadFailed) {\n onLoadFailed(jqXHR);\n }\n };\n this.submitRequest(urlInfo, handleSuccess, handleError);\n };\n DataLoader.prototype.addLoadingClass = function ($el) {\n if ($el) {\n $el.addClass(\"jqtree-loading\");\n }\n };\n DataLoader.prototype.removeLoadingClass = function ($el) {\n if ($el) {\n $el.removeClass(\"jqtree-loading\");\n }\n };\n DataLoader.prototype.getDomElement = function (parentNode) {\n if (parentNode) {\n return jQuery(parentNode.element);\n }\n else {\n return this.treeWidget.element;\n }\n };\n DataLoader.prototype.notifyLoading = function (isLoading, node, $el) {\n var onLoading = this.treeWidget.options.onLoading;\n if (onLoading) {\n onLoading(isLoading, node, $el);\n }\n this.treeWidget._triggerEvent(\"tree.loading_data\", {\n isLoading: isLoading,\n node: node,\n $el: $el\n });\n };\n DataLoader.prototype.submitRequest = function (urlInfo, handleSuccess, handleError) {\n var ajaxSettings = jQuery.extend({ method: \"GET\" }, typeof urlInfo === \"string\" ? { url: urlInfo } : urlInfo, {\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError\n });\n ajaxSettings.method = ajaxSettings.method.toUpperCase();\n jQuery.ajax(ajaxSettings);\n };\n DataLoader.prototype.parseData = function (data) {\n var dataFilter = this.treeWidget.options.dataFilter;\n var parsedData = data instanceof Array || typeof data === \"object\"\n ? data\n : data != null\n ? jQuery.parseJSON(data)\n : [];\n return dataFilter ? dataFilter(parsedData) : parsedData;\n };\n return DataLoader;\n}());\nexports[\"default\"] = DataLoader;\n","\"use strict\";\nexports.__esModule = true;\nvar KeyHandler = /** @class */ (function () {\n function KeyHandler(treeWidget) {\n var _this = this;\n this.handleKeyDown = function (e) {\n if (!_this.canHandleKeyboard()) {\n return true;\n }\n else {\n var key = e.which;\n switch (key) {\n case KeyHandler.DOWN:\n return _this.moveDown();\n case KeyHandler.UP:\n return _this.moveUp();\n case KeyHandler.RIGHT:\n return _this.moveRight();\n case KeyHandler.LEFT:\n return _this.moveLeft();\n default:\n return true;\n }\n }\n };\n this.treeWidget = treeWidget;\n if (treeWidget.options.keyboardSupport) {\n jQuery(document).on(\"keydown.jqtree\", this.handleKeyDown);\n }\n }\n KeyHandler.prototype.deinit = function () {\n jQuery(document).off(\"keydown.jqtree\");\n };\n KeyHandler.prototype.moveDown = function () {\n var node = this.treeWidget.getSelectedNode();\n if (node) {\n return this.selectNode(node.getNextNode());\n }\n else {\n return false;\n }\n };\n KeyHandler.prototype.moveUp = function () {\n var node = this.treeWidget.getSelectedNode();\n if (node) {\n return this.selectNode(node.getPreviousNode());\n }\n else {\n return false;\n }\n };\n KeyHandler.prototype.moveRight = function () {\n var node = this.treeWidget.getSelectedNode();\n if (!node) {\n return true;\n }\n else if (!node.isFolder()) {\n return true;\n }\n else {\n // folder node\n if (node.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(node.getNextNode());\n }\n else {\n // Right expands a closed node\n this.treeWidget.openNode(node);\n return false;\n }\n }\n };\n KeyHandler.prototype.moveLeft = function () {\n var node = this.treeWidget.getSelectedNode();\n if (!node) {\n return true;\n }\n else if (node.isFolder() && node.is_open) {\n // Left on an open node closes the node\n this.treeWidget.closeNode(node);\n return false;\n }\n else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(node.getParent());\n }\n };\n KeyHandler.prototype.selectNode = function (node) {\n if (!node) {\n return true;\n }\n else {\n this.treeWidget.selectNode(node);\n if (this.treeWidget.scrollHandler &&\n !this.treeWidget.scrollHandler.isScrolledIntoView(jQuery(node.element).find(\".jqtree-element\"))) {\n this.treeWidget.scrollToNode(node);\n }\n return false;\n }\n };\n KeyHandler.prototype.canHandleKeyboard = function () {\n return (this.treeWidget.options.keyboardSupport &&\n this.isFocusOnTree() &&\n this.treeWidget.getSelectedNode() != null);\n };\n KeyHandler.prototype.isFocusOnTree = function () {\n var activeElement = document.activeElement;\n return Boolean(activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.treeWidget._containsElement(activeElement));\n };\n KeyHandler.LEFT = 37;\n KeyHandler.UP = 38;\n KeyHandler.RIGHT = 39;\n KeyHandler.DOWN = 40;\n return KeyHandler;\n}());\nexports[\"default\"] = KeyHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\n/*\nThis widget does the same a the mouse widget in jqueryui.\n*/\nvar simple_widget_1 = require(\"./simple.widget\");\nvar MouseWidget = /** @class */ (function (_super) {\n __extends(MouseWidget, _super);\n function MouseWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.mouseDown = function (e) {\n // Is left mouse button?\n if (e.which !== 1) {\n return;\n }\n var result = _this.handleMouseDown(_this.getPositionInfo(e));\n if (result) {\n e.preventDefault();\n }\n return result;\n };\n _this.mouseMove = function (e) {\n return _this.handleMouseMove(e, _this.getPositionInfo(e));\n };\n _this.mouseUp = function (e) {\n return _this.handleMouseUp(_this.getPositionInfo(e));\n };\n _this.touchStart = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this.handleMouseDown(_this.getPositionInfo(touch));\n };\n _this.touchMove = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this.handleMouseMove(e, _this.getPositionInfo(touch));\n };\n _this.touchEnd = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this.handleMouseUp(_this.getPositionInfo(touch));\n };\n return _this;\n }\n MouseWidget.prototype.setMouseDelay = function (mouseDelay) {\n this.mouseDelay = mouseDelay;\n };\n MouseWidget.prototype.init = function () {\n this.$el.on(\"mousedown.mousewidget\", this.mouseDown);\n this.$el.on(\"touchstart.mousewidget\", this.touchStart);\n this.isMouseStarted = false;\n this.mouseDelay = 0;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = true;\n this.mouseDownInfo = null;\n };\n MouseWidget.prototype.deinit = function () {\n this.$el.off(\"mousedown.mousewidget\");\n this.$el.off(\"touchstart.mousewidget\");\n var $document = jQuery(document);\n $document.off(\"mousemove.mousewidget\");\n $document.off(\"mouseup.mousewidget\");\n };\n MouseWidget.prototype.handleMouseDown = function (positionInfo) {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n this.mouseDownInfo = positionInfo;\n if (!this.mouseCapture(positionInfo)) {\n return;\n }\n this.handleStartMouse();\n return true;\n };\n MouseWidget.prototype.handleStartMouse = function () {\n var $document = jQuery(document);\n $document.on(\"mousemove.mousewidget\", this.mouseMove);\n $document.on(\"touchmove.mousewidget\", this.touchMove);\n $document.on(\"mouseup.mousewidget\", this.mouseUp);\n $document.on(\"touchend.mousewidget\", this.touchEnd);\n if (this.mouseDelay) {\n this.startMouseDelayTimer();\n }\n };\n MouseWidget.prototype.startMouseDelayTimer = function () {\n var _this = this;\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n this.mouseDelayTimer = window.setTimeout(function () {\n _this.isMouseDelayMet = true;\n }, this.mouseDelay);\n this.isMouseDelayMet = false;\n };\n MouseWidget.prototype.handleMouseMove = function (e, positionInfo) {\n if (this.isMouseStarted) {\n this.mouseDrag(positionInfo);\n return e.preventDefault();\n }\n if (this.mouseDelay && !this.isMouseDelayMet) {\n return true;\n }\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false;\n }\n if (this.isMouseStarted) {\n this.mouseDrag(positionInfo);\n }\n else {\n this.handleMouseUp(positionInfo);\n }\n return !this.isMouseStarted;\n };\n MouseWidget.prototype.getPositionInfo = function (e) {\n return {\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target,\n originalEvent: e\n };\n };\n MouseWidget.prototype.handleMouseUp = function (positionInfo) {\n var $document = jQuery(document);\n $document.off(\"mousemove.mousewidget\");\n $document.off(\"touchmove.mousewidget\");\n $document.off(\"mouseup.mousewidget\");\n $document.off(\"touchend.mousewidget\");\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.mouseStop(positionInfo);\n }\n };\n return MouseWidget;\n}(simple_widget_1[\"default\"]));\nexports[\"default\"] = MouseWidget;\n","\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar SaveStateHandler = /** @class */ (function () {\n function SaveStateHandler(treeWidget) {\n this.treeWidget = treeWidget;\n }\n SaveStateHandler.prototype.saveState = function () {\n var state = JSON.stringify(this.getState());\n if (this.treeWidget.options.onSetStateFromStorage) {\n this.treeWidget.options.onSetStateFromStorage(state);\n }\n else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n };\n SaveStateHandler.prototype.getStateFromStorage = function () {\n var jsonData = this.loadFromStorage();\n if (jsonData) {\n return this.parseState(jsonData);\n }\n else {\n return null;\n }\n };\n SaveStateHandler.prototype.getState = function () {\n var _this = this;\n var getOpenNodeIds = function () {\n var openNodes = [];\n _this.treeWidget.tree.iterate(function (node) {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n return openNodes;\n };\n var getSelectedNodeIds = function () {\n return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; });\n };\n /* eslint-disable @typescript-eslint/camelcase */\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds()\n };\n /* eslint-enable @typescript-eslint/camelcase */\n };\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n SaveStateHandler.prototype.setInitialState = function (state) {\n if (!state) {\n return false;\n }\n else {\n var mustLoadOnDemand = false;\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n if (state.selected_node) {\n this.resetSelection();\n this.selectInitialNodes(state.selected_node);\n }\n return mustLoadOnDemand;\n }\n };\n SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cbFinished) {\n if (state) {\n this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished);\n }\n else {\n cbFinished();\n }\n };\n SaveStateHandler.prototype.getNodeIdToBeSelected = function () {\n var state = this.getStateFromStorage();\n if (state && state.selected_node) {\n return state.selected_node[0];\n }\n else {\n return null;\n }\n };\n SaveStateHandler.prototype.parseState = function (jsonData) {\n var state = jQuery.parseJSON(jsonData);\n // Check if selected_node is an int (instead of an array)\n if (state && state.selected_node && util_1.isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node]; // eslint-disable-line @typescript-eslint/camelcase\n }\n return state;\n };\n SaveStateHandler.prototype.loadFromStorage = function () {\n if (this.treeWidget.options.onGetStateFromStorage) {\n return this.treeWidget.options.onGetStateFromStorage();\n }\n else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n }\n };\n SaveStateHandler.prototype.openInitialNodes = function (nodeIds) {\n var mustLoadOnDemand = false;\n for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) {\n var nodeDd = nodeIds_1[_i];\n var node = this.treeWidget.getNodeById(nodeDd);\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true; // eslint-disable-line @typescript-eslint/camelcase\n }\n else {\n mustLoadOnDemand = true;\n }\n }\n }\n return mustLoadOnDemand;\n };\n SaveStateHandler.prototype.selectInitialNodes = function (nodeIds) {\n var selectCount = 0;\n for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) {\n var nodeId = nodeIds_2[_i];\n var node = this.treeWidget.getNodeById(nodeId);\n if (node) {\n selectCount += 1;\n if (this.treeWidget.selectNodeHandler) {\n this.treeWidget.selectNodeHandler.addToSelection(node);\n }\n }\n }\n return selectCount !== 0;\n };\n SaveStateHandler.prototype.resetSelection = function () {\n var selectNodeHandler = this.treeWidget.selectNodeHandler;\n if (selectNodeHandler) {\n var selectedNodes = selectNodeHandler.getSelectedNodes();\n selectedNodes.forEach(function (node) {\n selectNodeHandler.removeFromSelection(node);\n });\n }\n };\n SaveStateHandler.prototype.doSetInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) {\n var _this = this;\n var loadingCount = 0;\n var nodeIds = nodeIdsParam;\n var openNodes = function () {\n var newNodesIds = [];\n for (var _i = 0, nodeIds_3 = nodeIds; _i < nodeIds_3.length; _i++) {\n var nodeId = nodeIds_3[_i];\n var node = _this.treeWidget.getNodeById(nodeId);\n if (!node) {\n newNodesIds.push(nodeId);\n }\n else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n }\n else {\n _this.treeWidget._openNode(node, false, null);\n }\n }\n }\n }\n nodeIds = newNodesIds;\n if (_this.selectInitialNodes(selectedNodes)) {\n _this.treeWidget._refreshElements(null);\n }\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n var loadAndOpenNode = function (node) {\n loadingCount += 1;\n _this.treeWidget._openNode(node, false, function () {\n loadingCount -= 1;\n openNodes();\n });\n };\n openNodes();\n };\n SaveStateHandler.prototype.getKeyName = function () {\n if (typeof this.treeWidget.options.saveState === \"string\") {\n return this.treeWidget.options.saveState;\n }\n else {\n return \"tree\";\n }\n };\n SaveStateHandler.prototype.supportsLocalStorage = function () {\n var testSupport = function () {\n // Is local storage supported?\n if (localStorage == null) {\n return false;\n }\n else {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n var key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n }\n catch (error) {\n return false;\n }\n return true;\n }\n };\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n return this._supportsLocalStorage;\n };\n return SaveStateHandler;\n}());\nexports[\"default\"] = SaveStateHandler;\n","\"use strict\";\nexports.__esModule = true;\nvar ScrollHandler = /** @class */ (function () {\n function ScrollHandler(treeWidget) {\n this.treeWidget = treeWidget;\n this.previousTop = -1;\n this.isInitialized = false;\n }\n ScrollHandler.prototype.checkScrolling = function () {\n this.ensureInit();\n this.checkVerticalScrolling();\n this.checkHorizontalScrolling();\n };\n ScrollHandler.prototype.scrollToY = function (top) {\n this.ensureInit();\n if (this.$scrollParent) {\n this.$scrollParent[0].scrollTop = top;\n }\n else {\n var offset = this.treeWidget.$el.offset();\n var treeTop = offset ? offset.top : 0;\n jQuery(document).scrollTop(top + treeTop);\n }\n };\n ScrollHandler.prototype.isScrolledIntoView = function ($element) {\n this.ensureInit();\n var elementBottom;\n var viewBottom;\n var elementTop;\n var viewTop;\n var elHeight = $element.height() || 0;\n if (this.$scrollParent) {\n viewTop = 0;\n viewBottom = this.$scrollParent.height() || 0;\n var offset = $element.offset();\n var originalTop = offset ? offset.top : 0;\n elementTop = originalTop - this.scrollParentTop;\n elementBottom = elementTop + elHeight;\n }\n else {\n viewTop = jQuery(window).scrollTop() || 0;\n var windowHeight = jQuery(window).height() || 0;\n viewBottom = viewTop + windowHeight;\n var offset = $element.offset();\n elementTop = offset ? offset.top : 0;\n elementBottom = elementTop + elHeight;\n }\n return elementBottom <= viewBottom && elementTop >= viewTop;\n };\n ScrollHandler.prototype.getScrollLeft = function () {\n if (!this.$scrollParent) {\n return 0;\n }\n else {\n return this.$scrollParent.scrollLeft() || 0;\n }\n };\n ScrollHandler.prototype.initScrollParent = function () {\n var _this = this;\n var getParentWithOverflow = function () {\n var cssAttributes = [\"overflow\", \"overflow-y\"];\n var hasOverFlow = function ($el) {\n for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) {\n var attr = cssAttributes_1[_i];\n var overflowValue = $el.css(attr);\n if (overflowValue === \"auto\" ||\n overflowValue === \"scroll\") {\n return true;\n }\n }\n return false;\n };\n if (hasOverFlow(_this.treeWidget.$el)) {\n return _this.treeWidget.$el;\n }\n for (var _i = 0, _a = _this.treeWidget.$el.parents().get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var $el = jQuery(el);\n if (hasOverFlow($el)) {\n return $el;\n }\n }\n return null;\n };\n var setDocumentAsScrollParent = function () {\n _this.scrollParentTop = 0;\n _this.$scrollParent = null;\n };\n if (this.treeWidget.$el.css(\"position\") === \"fixed\") {\n setDocumentAsScrollParent();\n }\n var $scrollParent = getParentWithOverflow();\n if ($scrollParent &&\n $scrollParent.length &&\n $scrollParent[0].tagName !== \"HTML\") {\n this.$scrollParent = $scrollParent;\n var offset = this.$scrollParent.offset();\n this.scrollParentTop = offset ? offset.top : 0;\n }\n else {\n setDocumentAsScrollParent();\n }\n this.isInitialized = true;\n };\n ScrollHandler.prototype.ensureInit = function () {\n if (!this.isInitialized) {\n this.initScrollParent();\n }\n };\n ScrollHandler.prototype.handleVerticalScrollingWithScrollParent = function (area) {\n var scrollParent = this.$scrollParent && this.$scrollParent[0];\n if (!scrollParent) {\n return;\n }\n var distanceBottom = this.scrollParentTop + scrollParent.offsetHeight - area.bottom;\n if (distanceBottom < 20) {\n scrollParent.scrollTop += 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n else if (area.top - this.scrollParentTop < 20) {\n scrollParent.scrollTop -= 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n };\n ScrollHandler.prototype.handleVerticalScrollingWithDocument = function (area) {\n var scrollTop = jQuery(document).scrollTop() || 0;\n var distanceTop = area.top - scrollTop;\n if (distanceTop < 20) {\n jQuery(document).scrollTop(scrollTop - 20);\n }\n else {\n var windowHeight = jQuery(window).height() || 0;\n if (windowHeight - (area.bottom - scrollTop) < 20) {\n jQuery(document).scrollTop(scrollTop + 20);\n }\n }\n };\n ScrollHandler.prototype.checkVerticalScrolling = function () {\n var hoveredArea = this.treeWidget.dndHandler &&\n this.treeWidget.dndHandler.hoveredArea;\n if (hoveredArea && hoveredArea.top !== this.previousTop) {\n this.previousTop = hoveredArea.top;\n if (this.$scrollParent) {\n this.handleVerticalScrollingWithScrollParent(hoveredArea);\n }\n else {\n this.handleVerticalScrollingWithDocument(hoveredArea);\n }\n }\n };\n ScrollHandler.prototype.checkHorizontalScrolling = function () {\n var positionInfo = this.treeWidget.dndHandler &&\n this.treeWidget.dndHandler.positionInfo;\n if (!positionInfo) {\n return;\n }\n if (this.$scrollParent) {\n this.handleHorizontalScrollingWithParent(positionInfo);\n }\n else {\n this.handleHorizontalScrollingWithDocument(positionInfo);\n }\n };\n ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) {\n if (positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return;\n }\n var $scrollParent = this.$scrollParent;\n var scrollParentOffset = $scrollParent && $scrollParent.offset();\n if (!($scrollParent && scrollParentOffset)) {\n return;\n }\n var scrollParent = $scrollParent[0];\n var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth <\n scrollParent.scrollWidth;\n var canScrollLeft = scrollParent.scrollLeft > 0;\n var rightEdge = scrollParentOffset.left + scrollParent.clientWidth;\n var leftEdge = scrollParentOffset.left;\n var isNearRightEdge = positionInfo.pageX > rightEdge - 20;\n var isNearLeftEdge = positionInfo.pageX < leftEdge + 20;\n if (isNearRightEdge && canScrollRight) {\n scrollParent.scrollLeft = Math.min(scrollParent.scrollLeft + 20, scrollParent.scrollWidth);\n }\n else if (isNearLeftEdge && canScrollLeft) {\n scrollParent.scrollLeft = Math.max(scrollParent.scrollLeft - 20, 0);\n }\n };\n ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) {\n if (positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return;\n }\n var $document = jQuery(document);\n var scrollLeft = $document.scrollLeft() || 0;\n var windowWidth = jQuery(window).width() || 0;\n var canScrollLeft = scrollLeft > 0;\n var isNearRightEdge = positionInfo.pageX > windowWidth - 20;\n var isNearLeftEdge = positionInfo.pageX - scrollLeft < 20;\n if (isNearRightEdge) {\n $document.scrollLeft(scrollLeft + 20);\n }\n else if (isNearLeftEdge && canScrollLeft) {\n $document.scrollLeft(Math.max(scrollLeft - 20, 0));\n }\n };\n return ScrollHandler;\n}());\nexports[\"default\"] = ScrollHandler;\n","\"use strict\";\nexports.__esModule = true;\nvar SelectNodeHandler = /** @class */ (function () {\n function SelectNodeHandler(treeWidget) {\n this.treeWidget = treeWidget;\n this.clear();\n }\n SelectNodeHandler.prototype.getSelectedNode = function () {\n var selectedNodes = this.getSelectedNodes();\n if (selectedNodes.length) {\n return selectedNodes[0];\n }\n else {\n return false;\n }\n };\n SelectNodeHandler.prototype.getSelectedNodes = function () {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n }\n else {\n var selectedNodes = [];\n for (var id in this.selectedNodes) {\n if (this.selectedNodes.hasOwnProperty(id)) {\n var node = this.treeWidget.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n }\n }\n return selectedNodes;\n }\n };\n SelectNodeHandler.prototype.getSelectedNodesUnder = function (parent) {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n }\n else {\n return [];\n }\n }\n else {\n var selectedNodes = [];\n for (var id in this.selectedNodes) {\n if (this.selectedNodes.hasOwnProperty(id)) {\n var node = this.treeWidget.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n return selectedNodes;\n }\n };\n SelectNodeHandler.prototype.isNodeSelected = function (node) {\n if (!node) {\n return false;\n }\n else if (node.id != null) {\n if (this.selectedNodes[node.id]) {\n return true;\n }\n else {\n return false;\n }\n }\n else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n }\n else {\n return false;\n }\n };\n SelectNodeHandler.prototype.clear = function () {\n this.selectedNodes = {};\n this.selectedSingleNode = null;\n };\n SelectNodeHandler.prototype.removeFromSelection = function (node, includeChildren) {\n var _this = this;\n if (includeChildren === void 0) { includeChildren = false; }\n if (node.id == null) {\n if (this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element) {\n this.selectedSingleNode = null;\n }\n }\n else {\n delete this.selectedNodes[node.id];\n if (includeChildren) {\n node.iterate(function () {\n delete _this.selectedNodes[node.id];\n return true;\n });\n }\n }\n };\n SelectNodeHandler.prototype.addToSelection = function (node) {\n if (node.id != null) {\n this.selectedNodes[node.id] = true;\n }\n else {\n this.selectedSingleNode = node;\n }\n };\n return SelectNodeHandler;\n}());\nexports[\"default\"] = SelectNodeHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\nvar node_1 = require(\"./node\");\nvar NodeElement = /** @class */ (function () {\n function NodeElement(node, treeWidget) {\n this.init(node, treeWidget);\n }\n NodeElement.prototype.init = function (node, treeWidget) {\n this.node = node;\n this.treeWidget = treeWidget;\n if (!node.element) {\n node.element = this.treeWidget.element.get(0);\n }\n this.$element = jQuery(node.element);\n };\n NodeElement.prototype.addDropHint = function (position) {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.$element, this.treeWidget._getScrollLeft());\n }\n else {\n return new GhostDropHint(this.node, this.$element, position);\n }\n };\n NodeElement.prototype.select = function (mustSetFocus) {\n var $li = this.getLi();\n $li.addClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"true\");\n var $span = this.getSpan();\n $span.attr(\"tabindex\", this.treeWidget.options.tabIndex);\n if (mustSetFocus) {\n $span.focus();\n }\n };\n NodeElement.prototype.deselect = function () {\n var $li = this.getLi();\n $li.removeClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"false\");\n var $span = this.getSpan();\n $span.removeAttr(\"tabindex\");\n $span.blur();\n };\n NodeElement.prototype.getUl = function () {\n return this.$element.children(\"ul:first\");\n };\n NodeElement.prototype.getSpan = function () {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"span.jqtree-title\");\n };\n NodeElement.prototype.getLi = function () {\n return this.$element;\n };\n NodeElement.prototype.mustShowBorderDropHint = function (position) {\n return position === node_1.Position.Inside;\n };\n return NodeElement;\n}());\nexports.NodeElement = NodeElement;\nvar FolderElement = /** @class */ (function (_super) {\n __extends(FolderElement, _super);\n function FolderElement() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FolderElement.prototype.open = function (onFinished, slide, animationSpeed) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n if (this.node.is_open) {\n return;\n }\n this.node.is_open = true; // eslint-disable-line @typescript-eslint/camelcase\n var $button = this.getButton();\n $button.removeClass(\"jqtree-closed\");\n $button.html(\"\");\n var buttonEl = $button.get(0);\n if (buttonEl) {\n var icon = this.treeWidget.renderer.openedIconElement.cloneNode(true);\n buttonEl.appendChild(icon);\n }\n var doOpen = function () {\n var $li = _this.getLi();\n $li.removeClass(\"jqtree-closed\");\n var $span = _this.getSpan();\n $span.attr(\"aria-expanded\", \"true\");\n if (onFinished) {\n onFinished(_this.node);\n }\n _this.treeWidget._triggerEvent(\"tree.open\", {\n node: _this.node\n });\n };\n if (slide) {\n this.getUl().slideDown(animationSpeed, doOpen);\n }\n else {\n this.getUl().show();\n doOpen();\n }\n };\n FolderElement.prototype.close = function (slide, animationSpeed) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n if (!this.node.is_open) {\n return;\n }\n this.node.is_open = false; // eslint-disable-line @typescript-eslint/camelcase\n var $button = this.getButton();\n $button.addClass(\"jqtree-closed\");\n $button.html(\"\");\n var buttonEl = $button.get(0);\n if (buttonEl) {\n var icon = this.treeWidget.renderer.closedIconElement.cloneNode(true);\n buttonEl.appendChild(icon);\n }\n var doClose = function () {\n var $li = _this.getLi();\n $li.addClass(\"jqtree-closed\");\n var $span = _this.getSpan();\n $span.attr(\"aria-expanded\", \"false\");\n _this.treeWidget._triggerEvent(\"tree.close\", {\n node: _this.node\n });\n };\n if (slide) {\n this.getUl().slideUp(animationSpeed, doClose);\n }\n else {\n this.getUl().hide();\n doClose();\n }\n };\n FolderElement.prototype.mustShowBorderDropHint = function (position) {\n return !this.node.is_open && position === node_1.Position.Inside;\n };\n FolderElement.prototype.getButton = function () {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"a.jqtree-toggler\");\n };\n return FolderElement;\n}(NodeElement));\nexports.FolderElement = FolderElement;\nvar BorderDropHint = /** @class */ (function () {\n function BorderDropHint($element, scrollLeft) {\n var $div = $element.children(\".jqtree-element\");\n var elWidth = $element.width() || 0;\n var width = Math.max(elWidth + scrollLeft - 4, 0);\n var elHeight = $div.outerHeight() || 0;\n var height = Math.max(elHeight - 4, 0);\n this.$hint = jQuery('');\n $div.append(this.$hint);\n this.$hint.css({ width: width, height: height });\n }\n BorderDropHint.prototype.remove = function () {\n this.$hint.remove();\n };\n return BorderDropHint;\n}());\nexports.BorderDropHint = BorderDropHint;\nvar GhostDropHint = /** @class */ (function () {\n function GhostDropHint(node, $element, position) {\n this.$element = $element;\n this.node = node;\n this.$ghost = jQuery(\"
  • \\n
  • \");\n if (position === node_1.Position.After) {\n this.moveAfter();\n }\n else if (position === node_1.Position.Before) {\n this.moveBefore();\n }\n else if (position === node_1.Position.Inside) {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n }\n else {\n this.moveInside();\n }\n }\n }\n GhostDropHint.prototype.remove = function () {\n this.$ghost.remove();\n };\n GhostDropHint.prototype.moveAfter = function () {\n this.$element.after(this.$ghost);\n };\n GhostDropHint.prototype.moveBefore = function () {\n this.$element.before(this.$ghost);\n };\n GhostDropHint.prototype.moveInsideOpenFolder = function () {\n jQuery(this.node.children[0].element).before(this.$ghost);\n };\n GhostDropHint.prototype.moveInside = function () {\n this.$element.after(this.$ghost);\n this.$ghost.addClass(\"jqtree-inside\");\n };\n return GhostDropHint;\n}());\n","\"use strict\";\nexports.__esModule = true;\nexports.exampleData = [\n {\n label: \"node1\",\n id: 123,\n intProperty: 1,\n strProperty: \"1\",\n children: [{ label: \"child1\", id: 125, intProperty: 2 }, { label: \"child2\", id: 126 }]\n },\n {\n label: \"node2\",\n id: 124,\n intProperty: 3,\n strProperty: \"3\",\n children: [{ label: \"child3\", id: 127 }]\n }\n];\n/*\nexample data 2:\n\n-main\n---c1\n---c2\n*/\nexports.exampleData2 = [\n {\n label: \"main\",\n children: [{ label: \"c1\" }, { label: \"c2\" }]\n }\n];\nfunction formatNodes(nodes) {\n var strings = nodes.map(function (node) { return node.name; });\n return strings.join(\" \");\n}\nexports.formatNodes = formatNodes;\nfunction isNodeClosed($node) {\n return ($node.is(\"li.jqtree-folder.jqtree-closed\") &&\n $node.find(\"a:eq(0)\").is(\"a.jqtree-toggler.jqtree-closed\") &&\n $node.find(\"ul:eq(0)\").is(\"ul\"));\n}\nexports.isNodeClosed = isNodeClosed;\nfunction isNodeOpen($node) {\n return ($node.is(\"li.jqtree-folder\") &&\n $node.find(\"a:eq(0)\").is(\"a.jqtree-toggler\") &&\n $node.find(\"ul:eq(0)\").is(\"ul\") &&\n !$node.is(\"li.jqtree-folder.jqtree-closed\") &&\n !$node.find(\"span:eq(0)\").is(\"a.jqtree-toggler.jqtree-closed\"));\n}\nexports.isNodeOpen = isNodeOpen;\nfunction formatTitles($node) {\n var titles = $node.find(\".jqtree-title\").map(function (_, el) { return $(el).text(); });\n return titles.toArray().join(\" \");\n}\nexports.formatTitles = formatTitles;\nfunction doGetNodeByName(tree, name) {\n var result = tree.getNodeByName(name);\n if (!result) {\n throw Error(\"Node with name '\" + name + \"' not found\");\n }\n return result;\n}\nexports.doGetNodeByName = doGetNodeByName;\nfunction doGetNodeById(tree, id) {\n var result = tree.getNodeById(id);\n if (!result) {\n throw Error(\"Node with id '\" + id + \"' not found\");\n }\n return result;\n}\nexports.doGetNodeById = doGetNodeById;\n","\"use strict\";\nexports.__esModule = true;\nrequire(\"./testJqtree\");\nrequire(\"./testNodeUtil\");\nrequire(\"./testTree\");\nrequire(\"./testUtil\");\nQUnit.config.testTimeout = 5000;\n","\"use strict\";\nexports.__esModule = true;\nrequire(\"../src/tree.jquery\");\nvar utilsForTest_1 = require(\"./utilsForTest\");\nvar node_1 = require(\"../src/node\");\nrequire(\"../src/itreeWidget\");\nvar module = QUnit.module, test = QUnit.test;\nmodule(\"jqtree\", {\n beforeEach: function () {\n $(\"body\").append('
    ');\n },\n afterEach: function () {\n var $tree = $(\"#tree1\");\n $tree.tree(\"destroy\");\n $tree.remove();\n $.mockjax.clear();\n }\n});\ntest(\"create jqtree from data\", function (assert) {\n $(\"#tree1\").tree({\n data: utilsForTest_1.exampleData\n });\n assert.equal($(\"#tree1\").children().length, 1, \"number of children on level 0\");\n assert.ok($(\"#tree1\")\n .children()\n .is(\"ul.jqtree-tree\"), \"first element is ul.jqtree-tree\");\n assert.equal($(\"#tree1 ul.jqtree-tree > li\").length, 2, \"number of children on level 1\");\n assert.ok($(\"#tree1 ul.jqtree-tree li:eq(0)\").is(\"li.jqtree-folder.jqtree-closed\"), \"first child is li.jqtree-folder.jqtree-closed\");\n assert.ok($(\"#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element > a.jqtree-toggler\").is(\"a.jqtree-toggler.jqtree-closed\"), \"button in first folder\");\n assert.equal($(\"#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element span.jqtree-title\").text(), \"node1\");\n});\nvar nodeWithEmptyChildren = {\n id: 1,\n name: \"abc\",\n children: []\n};\ntest(\"node with empty children is not a folder (with showEmptyFolder false)\", function (assert) {\n $(\"#tree1\").tree({\n data: [nodeWithEmptyChildren],\n showEmptyFolder: false\n });\n assert.equal($(\".jqtree-title\").text(), \"abc\");\n assert.equal($(\".jqtree-folder\").length, 0);\n});\ntest(\"node with empty children is a folder (with showEmptyFolder true)\", function (assert) {\n $(\"#tree1\").tree({\n data: [nodeWithEmptyChildren],\n showEmptyFolder: true\n });\n assert.equal($(\".jqtree-title\").text(), \"abc\");\n assert.equal($(\".jqtree-folder\").length, 1);\n});\ntest(\"node without children property is not a folder (with showEmptyFolder true)\", function (assert) {\n $(\"#tree1\").tree({\n data: [{ id: 1, name: \"abc\" }],\n showEmptyFolder: true\n });\n assert.equal($(\".jqtree-title\").text(), \"abc\");\n assert.equal($(\".jqtree-folder\").length, 0);\n});\ntest(\"toggle\", function (assert) {\n // setup\n var done = assert.async();\n // create tree\n var $tree = $(\"#tree1\");\n var $node1; // eslint-disable-line prefer-const\n var node1; // eslint-disable-line prefer-const\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n $tree.on(\"tree.open\", function () {\n assert.ok(!utilsForTest_1.isNodeClosed($node1), \"node1 is open\");\n // 2. close node1\n $tree.tree(\"toggle\", node1);\n });\n $tree.on(\"tree.close\", function () {\n assert.ok(utilsForTest_1.isNodeClosed($node1), \"node1 is closed\");\n done();\n });\n var tree = $tree.tree(\"getTree\");\n node1 = tree.children[0];\n $node1 = $tree.find(\"ul.jqtree-tree li:eq(0)\");\n // node1 is initially closed\n assert.ok(utilsForTest_1.isNodeClosed($node1), \"node1 is closed\");\n // 1. open node1\n $tree.tree(\"toggle\", node1);\n});\ntest(\"click event\", function (assert) {\n var selectCount = 0;\n // create tree\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n selectable: true\n });\n var $node1 = $tree.find(\"ul.jqtree-tree li:first\");\n var $textSpan = $node1.find(\"span:first\");\n $tree.on(\"tree.click\", function (e) {\n assert.equal(e.node.name, \"node1\");\n });\n var done = assert.async();\n $tree.on(\"tree.select\", function (e) {\n selectCount += 1;\n if (selectCount === 1) {\n assert.equal(e.node.name, \"node1\");\n var selectedNode = $tree.tree(\"getSelectedNode\");\n assert.ok(selectedNode);\n if (selectedNode) {\n assert.equal(selectedNode.name, \"node1\");\n }\n // deselect\n $textSpan.click();\n }\n else {\n assert.equal(e.node, null);\n assert.equal(e.previous_node.name, \"node1\");\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n done();\n }\n });\n // click on node1\n $textSpan.click();\n});\ntest(\"saveState\", function (assert) {\n var $tree = $(\"#tree1\");\n var savedState;\n function setState(state) {\n savedState = state;\n }\n function getState() {\n return savedState;\n }\n function createTree() {\n $tree.tree({\n data: utilsForTest_1.exampleData,\n saveState: true,\n onSetStateFromStorage: setState,\n onGetStateFromStorage: getState,\n selectable: true\n });\n }\n // create tree\n createTree();\n // nodes are initially closed\n var tree = $tree.tree(\"getTree\");\n tree.iterate(function (node) {\n assert.ok(!node.is_open, \"jqtree-closed\");\n return true;\n });\n // open node1\n $tree.tree(\"toggle\", tree.children[0]);\n // node1 is open\n assert.ok(tree.children[0].is_open, \"node1 is_open\");\n // select node2\n $tree.tree(\"selectNode\", tree.children[1]);\n // node2 is selected\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node2\", \"getSelectedNode (1)\");\n // create tree again\n $tree.tree(\"destroy\");\n createTree();\n var tree2 = $tree.tree(\"getTree\");\n assert.ok(tree2.children[0].is_open, \"node1 is_open\");\n assert.ok(!tree2.children[1].is_open, \"node2 is closed\");\n // node2 is selected\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node2\", \"getSelectedNode (2)\");\n});\ntest(\"getSelectedNode\", function (assert) {\n var $tree = $(\"#tree1\");\n // create tree\n $tree.tree({\n data: utilsForTest_1.exampleData,\n selectable: true\n });\n // there is no node selected\n assert.equal($tree.tree(\"getSelectedNode\"), false, \"getSelectedNode\");\n // select node1\n var tree = $tree.tree(\"getTree\");\n var node1 = tree.children[0];\n $tree.tree(\"selectNode\", node1);\n // node1 is selected\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\", \"getSelectedNode\");\n});\ntest(\"toJson\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n // 1. call toJson\n assert.equal($tree.tree(\"toJson\"), '[{\"name\":\"node1\",\"id\":123,\"intProperty\":1,\"strProperty\":\"1\",' +\n '\"children\":[{\"name\":\"child1\",\"id\":125,\"intProperty\":2},{\"name\":' +\n '\"child2\",\"id\":126}]},{\"name\":\"node2\",\"id\":124,\"intProperty\":3,' +\n '\"strProperty\":\"3\",\"children\":[{\"name\":\"child3\",\"id\":127}]}]');\n // Check that properties 'children', 'parent' and 'element' still exist.\n var tree = $tree.tree(\"getTree\");\n assert.equal(tree.children.length, 2);\n assert.ok(tree.children[0].parent !== undefined, \"parent\");\n assert.ok($(tree.children[0].element).is(\"li\"), \"element\");\n});\ntest(\"loadData\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n autoOpen: true\n });\n // first node is 'node1'\n assert.equal($tree.find(\"> ul > li:first .jqtree-element:first > span\").text(), \"node1\");\n // - load new data\n $tree.tree(\"loadData\", utilsForTest_1.exampleData2);\n // first node is 'main'\n assert.equal($tree.find(\"> ul > li:first .jqtree-element:first > span\").text(), \"main\");\n // - load new data under node 'child3'\n $tree.tree(\"loadData\", utilsForTest_1.exampleData);\n var child3 = $tree.tree(\"getNodeByName\", \"child3\");\n var data = [\n { name: \"c4\", id: 200 },\n {\n name: \"c5\",\n id: 201,\n children: [{ name: \"c6\", id: 202 }]\n }\n ];\n $tree.tree(\"loadData\", data, child3);\n // first node in html is still 'node1'\n assert.equal($tree\n .find(\"li:eq(0)\")\n .find(\".jqtree-element:eq(0) span.jqtree-title\")\n .text(), \"node1\");\n // Node 'child3' now has a children 'c4' and 'c5'\n var $child3 = $tree.find(\"span:contains(child3)\");\n var $li = $child3.closest(\"li\");\n assert.equal($li\n .children(\"ul\")\n .children(\"li:eq(0)\")\n .find(\".jqtree-element span.jqtree-title\")\n .text(), \"c4\");\n // Node 'child3' must have toggler button\n assert.ok($child3.prev().is(\"a.jqtree-toggler\"), \"node 'child3' must have toggler button\");\n // - select node 'c5' and load new data under 'child3'\n var c5 = $tree.tree(\"getNodeByName\", \"c5\");\n $tree.tree(\"selectNode\", c5);\n var selectedNode = $tree.tree(\"getSelectedNode\");\n assert.ok(selectedNode);\n if (selectedNode) {\n assert.equal(selectedNode.name, \"c5\");\n }\n var data2 = [{ name: \"c7\" }, { name: \"c8\" }];\n $tree.tree(\"loadData\", data2, child3);\n // c5 must be deselected\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // - select c7; load new data under child3; note that c7 has no id\n $tree.tree(\"selectNode\", $tree.tree(\"getNodeByName\", \"c7\"));\n selectedNode = $tree.tree(\"getSelectedNode\");\n assert.ok(selectedNode);\n if (selectedNode) {\n assert.equal(selectedNode.name, \"c7\");\n }\n $tree.tree(\"loadData\", [\"c9\"], child3);\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // - select c9 (which has no id); load new nodes under child2\n $tree.tree(\"selectNode\", $tree.tree(\"getNodeByName\", \"c9\"));\n var child2 = $tree.tree(\"getNodeByName\", \"child2\");\n $tree.tree(\"loadData\", [\"c10\"], child2);\n selectedNode = $tree.tree(\"getSelectedNode\");\n assert.ok(selectedNode);\n if (selectedNode) {\n assert.equal(selectedNode.name, \"c9\");\n }\n});\ntest(\"openNode and closeNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n assert.equal(node2.name, \"node2\");\n assert.equal(node2.is_open, undefined);\n // 1. open node2\n $tree.tree(\"openNode\", node2, false);\n assert.equal(node2.is_open, true);\n assert.equal(utilsForTest_1.isNodeOpen($(node2.element)), true);\n // 2. close node2\n $tree.tree(\"closeNode\", node2, false);\n assert.equal(node2.is_open, false);\n assert.equal(utilsForTest_1.isNodeClosed($(node2.element)), true);\n // 3. open child1\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n // add a child to child1 so it is a folder\n $tree.tree(\"appendNode\", \"child1a\", child1);\n // node1 is initialy closed\n assert.equal(node1.is_open, undefined);\n // open child1\n $tree.tree(\"openNode\", child1, false);\n // node1 and child1 are now open1\n assert.equal(node1.is_open, true);\n assert.equal(child1.is_open, true);\n});\nfunction testOpenNodeWithCallback(slide, includeSlideParam, assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n // open node2\n var done = assert.async();\n function handleOpenNode(node) {\n assert.equal(node.name, \"node2\");\n assert.ok(node.is_open);\n done();\n }\n if (includeSlideParam) {\n $tree.tree(\"openNode\", node2, slide, handleOpenNode);\n }\n else {\n $tree.tree(\"openNode\", node2, handleOpenNode);\n }\n}\ntest(\"openNode with callback with slide true\", function (assert) {\n testOpenNodeWithCallback(true, true, assert);\n});\ntest(\"openNode with callback with slide false\", function (assert) {\n testOpenNodeWithCallback(false, true, assert);\n});\ntest(\"openNode with callback without slide param\", function (assert) {\n testOpenNodeWithCallback(false, false, assert);\n});\ntest(\"selectNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n selectable: true\n });\n var node1 = $tree.tree(\"getTree\").children[0];\n var node2 = $tree.tree(\"getTree\").children[1];\n var child3 = node2.children[0];\n assert.equal(child3.name, \"child3\");\n assert.equal(node1.is_open, undefined);\n assert.equal(node2.is_open, undefined);\n assert.equal(child3.is_open, undefined);\n // -- select node 'child3', which is a child of 'node2'; must_open_parents = true\n $tree.tree(\"selectNode\", child3);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"child3\");\n assert.equal(node1.is_open, undefined);\n assert.equal(node2.is_open, true);\n assert.equal(child3.is_open, undefined);\n // -- select node 'node1'\n $tree.tree(\"selectNode\", node1);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // -- is 'node1' selected?\n assert.equal($tree.tree(\"isNodeSelected\", node1), true);\n // -- deselect\n $tree.tree(\"selectNode\", null);\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // -- is 'node1' selected?\n assert.equal($tree.tree(\"isNodeSelected\", node1), false);\n});\ntest(\"selectNode when another node is selected\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n selectable: true\n });\n var node1 = $tree.tree(\"getTree\").children[0];\n var node2 = $tree.tree(\"getTree\").children[1];\n // -- select node 'node2'\n $tree.tree(\"selectNode\", node2);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node2\");\n // -- setting event\n // -- is node 'node2' named 'deselected_node' in object's attributes?\n var isSelectEventFired = false;\n $tree.on(\"tree.select\", function (e) {\n assert.equal(e.deselected_node, node2);\n isSelectEventFired = true;\n });\n // -- select node 'node1'; node 'node2' is selected before it\n $tree.tree(\"selectNode\", node1);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n assert.equal($tree.tree(\"isNodeSelected\", node1), true);\n // event was fired\n assert.ok(isSelectEventFired);\n});\ntest(\"click toggler\", function (assert) {\n // setup\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n selectable: true\n });\n var $title = $tree\n .find(\"li:eq(0)\")\n .find(\"> .jqtree-element > span.jqtree-title\");\n assert.equal($title.text(), \"node1\");\n var $toggler = $title.prev();\n assert.ok($toggler.is(\"a.jqtree-toggler.jqtree-closed\"));\n $tree.on(\"tree.open\", function (e) {\n // 2. handle 'open' event\n assert.equal(e.node.name, \"node1\");\n // 3. click toggler again\n $toggler.click();\n });\n $tree.on(\"tree.close\", function (e) {\n assert.equal(e.node.name, \"node1\");\n done();\n });\n // 1. click toggler of 'node1'\n $toggler.click();\n});\ntest(\"getNodeById\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n // 1. get 'node2' by id\n assert.equal($tree.tree(\"getNodeById\", 124).name, \"node2\");\n // 2. get id that does not exist\n assert.equal($tree.tree(\"getNodeById\", 333), null);\n // 3. get id by string\n assert.equal($tree.tree(\"getNodeById\", \"124\").name, \"node2\");\n // 4. add node with string id; search by int\n $tree.tree(\"appendNode\", {\n name: \"abc\",\n id: \"234\"\n });\n assert.equal($tree.tree(\"getNodeById\", 234).name, \"abc\");\n assert.equal($tree.tree(\"getNodeById\", \"234\").name, \"abc\");\n // 5. load subtree in node2\n var subtreeData = [\n {\n name: \"sub1\",\n id: 200,\n children: [{ name: \"sub2\", id: 201 }]\n }\n ];\n $tree.tree(\"loadData\", subtreeData, node2);\n var t = $tree.tree(\"getTree\");\n assert.notEqual(t, null);\n assert.equal($tree.tree(\"getNodeById\", 200).name, \"sub1\");\n assert.equal($tree.tree(\"getNodeById\", 201).name, \"sub2\");\n});\ntest(\"autoOpen\", function (assert) {\n var $tree = $(\"#tree1\");\n function formatOpenFolders() {\n var openNodes = [];\n $tree.find(\"li\").each(function () {\n var $li = $(this);\n if ($li.is(\".jqtree-folder\") && !$li.is(\".jqtree-closed\")) {\n var name_1 = $li\n .children(\".jqtree-element\")\n .find(\"span\")\n .text();\n openNodes.push(name_1);\n }\n });\n return openNodes.join(\";\");\n }\n /*\n -l1n1 (level 0)\n ----l2n1 (1)\n ----l2n2 (1)\n -------l3n1 (2)\n ----------l4n1 (3)\n -l1n2\n */\n var data = [\n {\n name: \"l1n1\",\n children: [\n \"l2n1\",\n {\n name: \"l2n2\",\n children: [\n {\n name: \"l3n1\",\n children: [\"l4n1\"]\n }\n ]\n }\n ]\n },\n \"l1n2\"\n ];\n // 1. autoOpen is false\n $tree.tree({\n data: data,\n autoOpen: false\n });\n assert.equal(formatOpenFolders(), \"\");\n $tree.tree(\"destroy\");\n // 2. autoOpen is true\n $tree.tree({\n data: data,\n autoOpen: true\n });\n assert.equal(formatOpenFolders(), \"l1n1;l2n2;l3n1\");\n $tree.tree(\"destroy\");\n // 3. autoOpen level 1\n $tree.tree({\n data: data,\n autoOpen: 1\n });\n assert.equal(formatOpenFolders(), \"l1n1;l2n2\");\n});\ntest(\"onCreateLi\", function (assert) {\n // 1. init tree with onCreateLi\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n onCreateLi: function (node, $li) {\n var $span = $li.children(\".jqtree-element\").find(\"span\");\n $span.html(\"_\" + node.name + \"_\");\n }\n });\n assert.equal($tree.find(\"span:eq(0)\").text(), \"_node1_\");\n});\ntest(\"save state\", function (assert) {\n // Remove state from localstorage\n if (typeof localStorage !== \"undefined\") {\n localStorage.setItem(\"my_tree\", \"\");\n }\n // 1. init tree\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n selectable: true,\n saveState: \"my_tree\"\n });\n var tree = $tree.tree(\"getTree\");\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // 2. select node -> state is saved\n $tree.tree(\"selectNode\", tree.children[0]);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // 3. init tree again\n $tree.tree(\"destroy\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n selectable: true,\n saveState: \"my_tree\"\n });\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n});\ntest(\"generate hit areas\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n // 1. get hit areas\n var node = $tree.tree(\"getNodeById\", 123);\n var hitAreas = $tree.tree(\"testGenerateHitAreas\", node);\n var strings = $.map(hitAreas, function (hitArea) {\n var positionName = node_1.getPositionName(hitArea.position);\n return hitArea.node.name + \" \" + positionName;\n });\n assert.equal(strings.join(\";\"), \"node1 none;node2 inside;node2 after\");\n});\ntest(\"removeNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n selectable: true\n });\n // 1. Remove selected node; node is 'child1'\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n $tree.tree(\"selectNode\", child1);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"child1\");\n $tree.tree(\"removeNode\", child1);\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child2 node2 child3\");\n // getSelectedNode must now return false\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // 2. No node is selected; remove child3\n $tree.tree(\"loadData\", utilsForTest_1.exampleData);\n var child3 = $tree.tree(\"getNodeByName\", \"child3\");\n $tree.tree(\"removeNode\", child3);\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1 child2 node2\");\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // 3. Remove parent of selected node\n $tree.tree(\"loadData\", utilsForTest_1.exampleData);\n var child1a = $tree.tree(\"getNodeByName\", \"child1\");\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n $tree.tree(\"selectNode\", child1a);\n $tree.tree(\"removeNode\", node1);\n // node is unselected\n assert.equal($tree.tree(\"getSelectedNode\"), false);\n // 4. Remove unselected node without an id\n $tree.tree(\"loadData\", utilsForTest_1.exampleData2);\n var c1 = $tree.tree(\"getNodeByName\", \"c1\");\n $tree.tree(\"removeNode\", c1);\n assert.equal(utilsForTest_1.formatTitles($tree), \"main c2\");\n});\ntest(\"appendNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // 1. Add child3 to node1\n $tree.tree(\"appendNode\", \"child3\", node1);\n assert.equal(utilsForTest_1.formatTitles($(node1.element)), \"node1 child1 child2 child3\");\n // 2. Add child4 to child1\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n // Node 'child1' does not have a toggler button\n assert.equal($(child1.element).find(\"> .jqtree-element > .jqtree-toggler\").length, 0);\n $tree.tree(\"appendNode\", \"child4\", child1);\n assert.equal(utilsForTest_1.formatTitles($(child1.element)), \"child1 child4\");\n // Node 'child1' must get a toggler button\n assert.equal($(child1.element).find(\"> .jqtree-element > .jqtree-toggler\").length, 1);\n});\ntest(\"prependNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // 1. Prepend child0 to node1\n $tree.tree(\"prependNode\", \"child0\", node1);\n assert.equal(utilsForTest_1.formatTitles($(node1.element)), \"node1 child0 child1 child2\");\n});\ntest(\"init event for local data\", function (assert) {\n // setup\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $tree.on(\"tree.init\", function () {\n // Check that we can call functions in 'tree.init' event\n assert.equal($tree.tree(\"getNodeByName\", \"node2\").name, \"node2\");\n done();\n });\n // init tree\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n});\ntest(\"init event for ajax\", function (assert) {\n // setup\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $.mockjax({\n url: \"/tree/\",\n responseText: utilsForTest_1.exampleData,\n logging: false\n });\n $tree.on(\"tree.init\", function () {\n assert.equal($tree.tree(\"getNodeByName\", \"node2\").name, \"node2\");\n done();\n });\n // init tree\n $tree.tree({\n dataUrl: \"/tree/\"\n });\n});\ntest(\"updateNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utilsForTest_1.exampleData });\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1 child2 node2 child3\");\n // -- update name\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n $tree.tree(\"updateNode\", node2, \"CHANGED\");\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1 child2 CHANGED child3\");\n assert.equal(node2.name, \"CHANGED\");\n // -- update data\n $tree.tree(\"updateNode\", node2, {\n name: \"xyz\",\n tag1: \"abc\"\n });\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1 child2 xyz child3\");\n assert.equal(node2.name, \"xyz\");\n assert.equal(node2.tag1, \"abc\");\n // - update id\n assert.equal(node2.id, 124);\n $tree.tree(\"updateNode\", node2, { id: 555 });\n assert.equal(node2.id, 555);\n assert.equal(node2.name, \"xyz\");\n // get node by id\n var node555 = $tree.tree(\"getNodeById\", 555);\n assert.equal(node555.name, \"xyz\");\n var node124 = $tree.tree(\"getNodeById\", 124);\n assert.equal(node124, undefined);\n // update child1\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n $tree.tree(\"updateNode\", child1, \"child1a\");\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1a child2 xyz child3\");\n // select child1\n $tree.tree(\"selectNode\", child1);\n $tree.tree(\"updateNode\", child1, \"child1b\");\n assert.ok($(child1.element).hasClass(\"jqtree-selected\"));\n // add children to child1\n $tree.tree(\"updateNode\", child1, {\n id: child1.id,\n name: \"child1\",\n children: [{ id: 5, name: \"child1-1\" }]\n });\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1 child1-1 child2 xyz child3\");\n // remove children\n $tree.tree(\"updateNode\", child1, {\n id: child1.id,\n name: \"child1\",\n children: []\n });\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1 child2 xyz child3\");\n});\ntest(\"moveNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utilsForTest_1.exampleData });\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n var child2 = $tree.tree(\"getNodeByName\", \"child2\");\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n // -- Move child1 after node2\n $tree.tree(\"moveNode\", child1, node2, \"after\");\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child2 node2 child3 child1\");\n // -- Check that illegal moves are skipped\n $tree.tree(\"moveNode\", node1, child2, \"inside\");\n});\ntest(\"load on demand\", function (assert) {\n // setup\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: [\n {\n id: 1,\n name: \"node1\",\n load_on_demand: true // eslint-disable-line @typescript-eslint/camelcase\n }\n ],\n dataUrl: \"/tree/\"\n });\n function handleResponse(options) {\n assert.equal(options.url, \"/tree/\", \"2\");\n assert.deepEqual(options.data, { node: 1 }, \"3\");\n this.responseText = [\n {\n id: 2,\n name: \"child1\"\n }\n ];\n }\n $.mockjax({\n url: \"*\",\n response: handleResponse,\n logging: false\n });\n // -- open node\n function handleOpenNode(node) {\n assert.equal(node.name, \"node1\");\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1\", \"4\");\n done();\n }\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1\", \"1\");\n $tree.tree(\"openNode\", node1, handleOpenNode);\n});\ntest(\"addNodeAfter\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utilsForTest_1.exampleData });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // -- add node after node1\n $tree.tree(\"addNodeAfter\", \"node3\", node1);\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1 child2 node3 node2 child3\");\n});\ntest(\"addNodeBefore\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utilsForTest_1.exampleData });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // -- add node before node1\n $tree.tree(\"addNodeBefore\", \"node3\", node1);\n assert.equal(utilsForTest_1.formatTitles($tree), \"node3 node1 child1 child2 node2 child3\");\n});\ntest(\"addParentNode\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utilsForTest_1.exampleData });\n var child3 = $tree.tree(\"getNodeByName\", \"child3\");\n // -- add parent to child3\n $tree.tree(\"addParentNode\", \"node3\", child3);\n assert.equal(utilsForTest_1.formatTitles($tree), \"node1 child1 child2 node2 node3 child3\");\n});\ntest(\"mouse events\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData,\n dragAndDrop: true,\n autoOpen: true\n });\n $tree.tree(\"setMouseDelay\", 0);\n function getTitleElement(nodeName) {\n var node = $tree.tree(\"getNodeByName\", nodeName);\n var $el = $(node.element);\n return $($el.find(\".jqtree-title\"));\n }\n var $node1 = getTitleElement(\"node1\");\n var $child3 = getTitleElement(\"child3\");\n // -- Move node1 inside child3\n // 1: trigger mousedown event on node1\n var node1Offset = $node1.offset() || { left: 0, top: 0 };\n $node1.trigger($.Event(\"mousedown\", {\n which: 1,\n pageX: node1Offset.left,\n pageY: node1Offset.top\n }));\n // 2: trigger mouse move to child3\n var child3Offset = $child3.offset() || { left: 0, top: 0 };\n $tree.trigger($.Event(\"mousemove\", {\n pageX: child3Offset.left,\n pageY: child3Offset.top\n }));\n $tree.trigger(\"mouseup\");\n assert.equal(utilsForTest_1.formatTitles($tree), \"node2 child3 node1 child1 child2\");\n});\ntest(\"multiple select\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({ data: utilsForTest_1.exampleData });\n var child1 = $tree.tree(\"getNodeByName\", \"child1\");\n var child2 = $tree.tree(\"getNodeByName\", \"child2\");\n // -- add nodes to selection\n // todo: more nodes as parameters?\n // todo: rename to 'selection.add' or 'selection' 'add'?\n $tree.tree(\"addToSelection\", child1);\n $tree.tree(\"addToSelection\", child2);\n // -- get selected nodes\n var selectedNodes = $tree.tree(\"getSelectedNodes\");\n assert.equal(utilsForTest_1.formatNodes(selectedNodes), \"child1 child2\");\n});\ntest(\"keyboard\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n function keyDown(key) {\n $tree.trigger($.Event(\"keydown\", { which: key }));\n }\n $tree.tree({ data: utilsForTest_1.exampleData });\n var node1 = $tree.tree(\"getNodeByName\", \"node1\");\n // select node1\n $tree.tree(\"selectNode\", node1);\n assert.equal(node1.is_open, undefined);\n // - move down; -> node2\n keyDown(40);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node2\");\n // - move up; -> back to node1\n keyDown(38);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // - move right; open node1\n keyDown(39);\n assert.equal(node1.is_open, true);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // - down -> child1\n keyDown(40);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"child1\");\n // - up -> node1\n keyDown(38);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n // - left -> close\n keyDown(37);\n assert.equal(node1.is_open, false);\n assert.equal($tree.tree(\"getSelectedNode\").name, \"node1\");\n});\ntest(\"getNodesByProperty\", function (assert) {\n // setup\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n var node2 = $tree.tree(\"getNodeByName\", \"node2\");\n // 1. get 'node1' by property\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 1)[0].name, \"node1\");\n // 2. get property that does not exist in any node\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 123).length, 0);\n // 3. get string property\n assert.equal($tree.tree(\"getNodesByProperty\", \"strProperty\", \"1\")[0].name, \"node1\");\n // 4. add node with string id; search by int\n $tree.tree(\"appendNode\", {\n name: \"abc\",\n id: \"234\",\n strProperty: \"111\",\n intProperty: 111\n });\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 111)[0].name, \"abc\");\n assert.equal($tree.tree(\"getNodesByProperty\", \"strProperty\", \"111\")[0].name, \"abc\");\n // 5. load subtree in node2\n var subtreeData = [\n {\n name: \"sub1\",\n id: 200,\n intProperty: 222,\n children: [{ name: \"sub2\", id: 201, intProperty: 444 }]\n }\n ];\n $tree.tree(\"loadData\", subtreeData, node2);\n var t = $tree.tree(\"getTree\");\n assert.notEqual(t, null);\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 222)[0].name, \"sub1\");\n assert.equal($tree.tree(\"getNodesByProperty\", \"intProperty\", 444)[0].name, \"sub2\");\n});\ntest(\"dataUrl extra options\", function (assert) {\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $.mockjax({\n url: \"*\",\n response: function (options) {\n // 2. handle ajax request\n // expect 'headers' option\n assert.equal(options.url, \"/tree2/\");\n assert.deepEqual(options.headers, { abc: \"def\" });\n done();\n },\n logging: false\n });\n // 1. init tree\n // dataUrl contains 'headers' option\n $tree.tree({\n dataUrl: {\n url: \"/tree2/\",\n headers: { abc: \"def\" }\n }\n });\n});\ntest(\"dataUrl is function\", function (assert) {\n var done = assert.async();\n var $tree = $(\"#tree1\");\n $.mockjax({\n url: \"*\",\n response: function (options) {\n // 2. handle ajax request\n // expect 'headers' option\n assert.equal(options.url, \"/tree3/\");\n assert.deepEqual(options.headers, { abc: \"def\" });\n done();\n },\n logging: false\n });\n // 1. init tree\n // dataUrl is a function\n $tree.tree({\n dataUrl: function () {\n return {\n url: \"/tree3/\",\n headers: { abc: \"def\" }\n };\n }\n });\n});\ntest(\"getNodeByHtmlElement\", function (assert) {\n var $tree = $(\"#tree1\");\n $tree.tree({\n data: utilsForTest_1.exampleData\n });\n var $el = $(\".jqtree-title\");\n // Get node for jquery element\n var node = $tree.tree(\"getNodeByHtmlElement\", $el);\n assert.ok(node);\n if (node) {\n assert.equal(node.name, \"node1\");\n }\n // Same for html element\n var node2 = $tree.tree(\"getNodeByHtmlElement\", $el[0]);\n assert.ok(node2);\n if (node2) {\n assert.equal(node2.name, \"node1\");\n }\n});\ntest(\"onLoadFailed\", function (assert) {\n $.mockjax({\n url: \"/tree/\",\n status: 500,\n responseText: \"test error\",\n logging: false\n });\n var done = assert.async();\n function handleLoadFailed(e) {\n assert.equal(e.responseText, \"test error\");\n done();\n }\n var $tree = $(\"#tree1\");\n $tree.tree({\n dataUrl: \"/tree/\",\n onLoadFailed: handleLoadFailed\n });\n});\n","\"use strict\";\nexports.__esModule = true;\n","\"use strict\";\nexports.__esModule = true;\nvar module = QUnit.module, test = QUnit.test;\nvar node_1 = require(\"../src/node\");\nmodule(\"node_util\");\ntest(\"getPositionName\", function (assert) {\n assert.equal(node_1.getPositionName(node_1.Position.Before), \"before\");\n assert.equal(node_1.getPositionName(node_1.Position.After), \"after\");\n assert.equal(node_1.getPositionName(node_1.Position.Inside), \"inside\");\n assert.equal(node_1.getPositionName(node_1.Position.None), \"none\");\n});\ntest(\"getPosition\", function (assert) {\n assert.equal(node_1.getPosition(\"inside\"), node_1.Position.Inside);\n});\n","\"use strict\";\nexports.__esModule = true;\nvar module = QUnit.module, test = QUnit.test;\nvar utilsForTest_1 = require(\"./utilsForTest\");\nvar node_1 = require(\"../src/node\");\nmodule(\"Tree\");\ntest(\"constructor\", function (assert) {\n // 1. Create node from string\n var node = new node_1.Node(\"n1\");\n assert.equal(node.name, \"n1\");\n assert.equal(node.children.length, 0);\n assert.equal(node.parent, null);\n // 2. Create node from object\n var node2 = new node_1.Node({\n label: \"n2\",\n id: 123,\n parent: \"abc\",\n children: [\"c\"],\n url: \"/\"\n });\n assert.equal(node2.name, \"n2\");\n assert.equal(node2.id, 123);\n assert.equal(node2[\"url\"], \"/\");\n assert.equal(node2[\"label\"], undefined);\n assert.equal(node2.children.length, 0);\n assert.equal(node2.parent, null);\n});\ntest(\"create tree from data\", function (assert) {\n function checkData(tree) {\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"node1 node2\", \"nodes on level 1\");\n assert.equal(utilsForTest_1.formatNodes(tree.children[0].children), \"child1 child2\", \"children of node1\");\n assert.equal(utilsForTest_1.formatNodes(tree.children[1].children), \"child3\", \"children of node2\");\n assert.equal(tree.children[0].id, 123, \"id\");\n }\n // - create tree from example data\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n checkData(tree);\n // - create tree from new data format\n var data = [\n {\n label: \"node1\",\n id: 123,\n children: [\"child1\", \"child2\"] // nodes are only defined by a string\n },\n {\n label: \"node2\",\n id: 124,\n children: [\"child3\"]\n }\n ];\n var tree2 = new node_1.Node({}, true);\n tree2.loadFromData(data);\n checkData(tree2);\n});\ntest(\"addChild\", function (assert) {\n var tree = new node_1.Node(\"tree1\", true);\n tree.addChild(new node_1.Node(\"abc\"));\n tree.addChild(new node_1.Node(\"def\"));\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"abc def\", \"children\");\n var node = tree.children[0];\n if (!node.parent) {\n assert.ok(false, \"Node has no parent\");\n }\n else {\n assert.equal(node.parent.name, \"tree1\", \"parent of node\");\n }\n});\ntest(\"addChildAtPosition\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.addChildAtPosition(new node_1.Node(\"abc\"), 0); // first\n tree.addChildAtPosition(new node_1.Node(\"ghi\"), 2); // index 2 does not exist\n tree.addChildAtPosition(new node_1.Node(\"def\"), 1);\n tree.addChildAtPosition(new node_1.Node(\"123\"), 0);\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"123 abc def ghi\", \"children\");\n});\ntest(\"removeChild\", function (assert) {\n var tree = new node_1.Node({}, true);\n var abc = new node_1.Node({ label: \"abc\", id: 1 });\n var def = new node_1.Node({ label: \"def\", id: 2 });\n var ghi = new node_1.Node({ label: \"ghi\", id: 3 });\n tree.addChild(abc);\n tree.addChild(def);\n tree.addChild(ghi);\n var jkl = new node_1.Node({ label: \"jkl\", id: 4 });\n def.addChild(jkl);\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"abc def ghi\", \"children\");\n assert.equal(tree.idMapping[2].name, \"def\");\n assert.equal(tree.idMapping[4].name, \"jkl\");\n // remove 'def'\n tree.removeChild(def);\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"abc ghi\", \"children\");\n assert.equal(tree.idMapping[2], null);\n assert.equal(tree.idMapping[4], null);\n // remove 'ghi'\n tree.removeChild(ghi);\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"abc\", \"children\");\n // remove 'abc'\n tree.removeChild(abc);\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"\", \"children\");\n});\ntest(\"getChildIndex\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n var abc = new node_1.Node(\"abc\");\n var def = new node_1.Node(\"def\");\n var ghi = new node_1.Node(\"ghi\");\n tree.addChild(abc);\n tree.addChild(def);\n tree.addChild(ghi);\n // 1. Get child index of 'def'\n assert.equal(tree.getChildIndex(def), 1);\n // 2. Get child index of non-existing node\n assert.equal(tree.getChildIndex(new node_1.Node(\"xyz\")), -1);\n});\ntest(\"hasChildren\", function (assert) {\n var tree = new node_1.Node({}, true);\n assert.equal(tree.hasChildren(), false, \"tree without children\");\n tree.addChild(new node_1.Node(\"abc\"));\n assert.equal(tree.hasChildren(), true, \"tree has children\");\n});\ntest(\"iterate\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n // iterate over all the nodes\n var nodes = [];\n tree.iterate(function (node) {\n nodes.push(node);\n return true;\n });\n assert.equal(utilsForTest_1.formatNodes(nodes), \"node1 child1 child2 node2 child3\", \"all nodes\");\n // iterate over nodes on first level\n var nodes2 = [];\n tree.iterate(function (node) {\n nodes2.push(node);\n return false;\n });\n assert.equal(utilsForTest_1.formatNodes(nodes2), \"node1 node2\", \"nodes on first level\");\n // add child 4\n var node124 = utilsForTest_1.doGetNodeById(tree, 124);\n var node3 = node124.children[0];\n node3.addChild(new node_1.Node(\"child4\"));\n // test level parameter\n var nodes3 = [];\n tree.iterate(function (node, level) {\n nodes3.push(node.name + \" \" + level);\n return true;\n });\n assert.equal(nodes3.join(\",\"), \"node1 0,child1 1,child2 1,node2 0,child3 1,child4 2\");\n});\ntest(\"moveNode\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n /*\n node1\n ---child1\n ---child2\n node2\n ---child3\n */\n var node1 = tree.children[0];\n var node2 = tree.children[1];\n var child1 = node1.children[0];\n var child2 = node1.children[1];\n assert.equal(node2.name, \"node2\", \"node2 name\");\n assert.equal(child2.name, \"child2\", \"child2 name\");\n // move child2 after node2\n tree.moveNode(child2, node2, node_1.Position.After);\n /*\n node1\n ---child1\n node2\n ---child3\n child2\n */\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"node1 node2 child2\", \"tree nodes at first level\");\n assert.equal(utilsForTest_1.formatNodes(node1.children), \"child1\", \"node1 children\");\n // move child1 inside node2\n // this means it's the first child\n tree.moveNode(child1, node2, node_1.Position.Inside);\n /*\n node1\n node2\n ---child1\n ---child3\n child2\n */\n assert.equal(utilsForTest_1.formatNodes(node2.children), \"child1 child3\", \"node2 children\");\n assert.equal(utilsForTest_1.formatNodes(node1.children), \"\", \"node1 has no children\");\n // move child2 before child1\n tree.moveNode(child2, child1, node_1.Position.Before);\n /*\n node1\n node2\n ---child2\n ---child1\n ---child3\n */\n assert.equal(utilsForTest_1.formatNodes(node2.children), \"child2 child1 child3\", \"node2 children\");\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"node1 node2\", \"tree nodes at first level\");\n});\ntest(\"initFromData\", function (assert) {\n var data = {\n label: \"main\",\n children: [\n \"c1\",\n {\n label: \"c2\",\n id: 201\n }\n ]\n };\n var node = new node_1.Node({}, true);\n node.initFromData(data);\n assert.equal(node.name, \"main\");\n assert.equal(utilsForTest_1.formatNodes(node.children), \"c1 c2\", \"children\");\n assert.equal(node.children[1].id, 201);\n});\ntest(\"getData\", function (assert) {\n // 1. empty node\n var node = new node_1.Node({}, true);\n assert.deepEqual(node.getData(), []);\n // 2.node with data\n node.loadFromData([\n {\n label: \"n1\",\n children: [\n {\n label: \"c1\"\n }\n ]\n }\n ]);\n assert.deepEqual(node.getData(), [\n {\n name: \"n1\",\n children: [\n {\n name: \"c1\"\n }\n ]\n }\n ]);\n // 3. get data including parent\n var n1 = utilsForTest_1.doGetNodeByName(node, \"n1\");\n assert.deepEqual(n1.getData(true), [\n {\n name: \"n1\",\n children: [{ name: \"c1\" }]\n }\n ]);\n});\ntest(\"addAfter\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n /*\n -node1\n ---c1\n ---c2\n -node2\n ---c3\n */\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"node1 node2\");\n // - Add 'node_b' after node2\n var node2 = utilsForTest_1.doGetNodeByName(tree, \"node2\");\n node2.addAfter(\"node_b\");\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"node1 node2 node_b\");\n var nodeB = utilsForTest_1.doGetNodeByName(tree, \"node_b\");\n assert.equal(nodeB.name, \"node_b\");\n // - Add 'node_a' after node1\n var node1 = utilsForTest_1.doGetNodeByName(tree, \"node1\");\n node1.addAfter(\"node_a\");\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"node1 node_a node2 node_b\");\n // - Add 'node_c' after node_b; new node is an object\n if (nodeB) {\n nodeB.addAfter({\n label: \"node_c\",\n id: 789\n });\n }\n var nodeC = utilsForTest_1.doGetNodeByName(tree, \"node_c\");\n assert.equal(nodeC.id, 789);\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"node1 node_a node2 node_b node_c\");\n // - Add after root node; this is not possible\n assert.equal(tree.addAfter(\"node_x\"), null);\n});\ntest(\"addBefore\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n // - Add 'node_0' before node1\n var node1 = utilsForTest_1.doGetNodeByName(tree, \"node1\");\n node1.addBefore(\"node0\");\n assert.equal(utilsForTest_1.formatNodes(tree.children), \"node0 node1 node2\");\n // - Add before root node; this is not possile\n assert.equal(tree.addBefore(\"x\"), null);\n});\ntest(\"addParent\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n // - Add node 'root' as parent of node1\n // Note that node also becomes a child of 'root'\n var node1 = utilsForTest_1.doGetNodeByName(tree, \"node1\");\n node1.addParent(\"root\");\n var root = utilsForTest_1.doGetNodeByName(tree, \"root\");\n assert.equal(utilsForTest_1.formatNodes(root.children), \"node1 node2\");\n // - Add parent to root node; not possible\n assert.equal(tree.addParent(\"x\"), null);\n});\ntest(\"remove\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n var child1 = utilsForTest_1.doGetNodeByName(tree, \"child1\");\n var node1 = utilsForTest_1.doGetNodeByName(tree, \"node1\");\n assert.equal(utilsForTest_1.formatNodes(node1.children), \"child1 child2\");\n assert.equal(child1.parent, node1);\n // 1. Remove child1\n child1.remove();\n assert.equal(utilsForTest_1.formatNodes(node1.children), \"child2\");\n assert.equal(child1.parent, null);\n});\ntest(\"append\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n var node1 = utilsForTest_1.doGetNodeByName(tree, \"node1\");\n // 1. Append child3 to node1\n node1.append(\"child3\");\n assert.equal(utilsForTest_1.formatNodes(node1.children), \"child1 child2 child3\");\n // 2. Append subtree\n node1.append({\n name: \"child4\",\n children: [{ name: \"child5\" }]\n });\n assert.equal(utilsForTest_1.formatNodes(node1.children), \"child1 child2 child3 child4\");\n var child4 = utilsForTest_1.doGetNodeByName(node1, \"child4\");\n assert.equal(utilsForTest_1.formatNodes(child4.children), \"child5\");\n});\ntest(\"prepend\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n var node1 = utilsForTest_1.doGetNodeByName(tree, \"node1\");\n // 1. Prepend child0 to node1\n node1.prepend(\"child0\");\n assert.equal(utilsForTest_1.formatNodes(node1.children), \"child0 child1 child2\");\n // 2. Prepend subtree\n node1.prepend({\n name: \"child3\",\n children: [{ name: \"child4\" }]\n });\n assert.equal(utilsForTest_1.formatNodes(node1.children), \"child3 child0 child1 child2\");\n var child3 = utilsForTest_1.doGetNodeByName(node1, \"child3\");\n assert.equal(utilsForTest_1.formatNodes(child3.children), \"child4\");\n});\ntest(\"getNodeById\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n // 1. Get node with id 124\n var node = utilsForTest_1.doGetNodeById(tree, 124);\n assert.equal(node.name, \"node2\");\n // 2. Delete node with id 124 and search again\n node.remove();\n assert.equal(tree.getNodeById(124), null);\n // 3. Add node with id 456 and search for it\n var child3 = utilsForTest_1.doGetNodeByName(tree, \"child2\");\n child3.append({\n id: 456,\n label: \"new node\"\n });\n var node2 = utilsForTest_1.doGetNodeById(tree, 456);\n assert.equal(node2.name, \"new node\");\n});\ntest(\"getLevel\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n // 1. get level for node1 and child1\n assert.equal(utilsForTest_1.doGetNodeByName(tree, \"node1\").getLevel(), 1);\n assert.equal(utilsForTest_1.doGetNodeByName(tree, \"child1\").getLevel(), 2);\n});\ntest(\"loadFromData and id mapping\", function (assert) {\n // - get node from empty tree\n var tree = new node_1.Node({}, true);\n assert.equal(tree.getNodeById(999), null);\n // - load example data in tree\n tree.loadFromData(utilsForTest_1.exampleData);\n assert.equal(utilsForTest_1.doGetNodeById(tree, 124).name, \"node2\");\n var child2 = utilsForTest_1.doGetNodeById(tree, 126);\n child2.addChild(new node_1.Node({ label: \"child4\", id: 128 }));\n child2.addChild(new node_1.Node({ label: \"child5\", id: 129 }));\n // - load data in node child2\n child2.loadFromData([\"abc\", \"def\"]);\n assert.equal(tree.getNodeById(128), null);\n assert.equal(child2.children.length, 2);\n assert.equal(child2.children[0].name, \"abc\");\n});\ntest(\"removeChildren\", function (assert) {\n // - load example data\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n // add child4 and child5\n var child2 = utilsForTest_1.doGetNodeById(tree, 126);\n assert.equal(child2.name, \"child2\");\n child2.addChild(new node_1.Node({ label: \"child4\", id: 128 }));\n child2.addChild(new node_1.Node({ label: \"child5\", id: 129 }));\n assert.equal(utilsForTest_1.doGetNodeById(tree, 128).name, \"child4\");\n // - remove children from child2\n child2.removeChildren();\n assert.equal(tree.getNodeById(128), null);\n assert.equal(child2.children.length, 0);\n});\ntest(\"node with id 0\", function (assert) {\n // - load node with id 0\n var tree = new node_1.Node({}, true);\n tree.loadFromData([\n {\n id: 0,\n label: \"mynode\"\n }\n ]);\n var node = utilsForTest_1.doGetNodeById(tree, 0);\n assert.equal(node.name, \"mynode\");\n // -- remove the node\n node.remove();\n assert.equal(tree.getNodeById(0), undefined);\n});\ntest(\"getPreviousSibling\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n // - getPreviousSibling\n var previousSibling = utilsForTest_1.doGetNodeByName(tree, \"child2\").getPreviousSibling();\n if (!previousSibling) {\n assert.ok(false, \"Previous sibling not found\");\n }\n else {\n assert.equal(previousSibling.name, \"child1\");\n }\n assert.equal(tree.getPreviousSibling(), null);\n assert.equal(utilsForTest_1.doGetNodeByName(tree, \"child1\").getPreviousSibling(), null);\n});\ntest(\"getNextSibling\", function (assert) {\n // setup\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n // - getNextSibling\n var nextSibling = utilsForTest_1.doGetNodeByName(tree, \"node1\").getNextSibling();\n if (!nextSibling) {\n assert.ok(false, \"Next sibling not found\");\n }\n else {\n assert.equal(nextSibling.name, \"node2\");\n }\n assert.equal(utilsForTest_1.doGetNodeByName(tree, \"node2\").getNextSibling(), null);\n assert.equal(tree.getNextSibling(), null);\n});\ntest(\"getNodesByProperty\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n var nodes = tree.getNodesByProperty(\"name\", \"child1\");\n assert.equal(nodes.length, 1);\n assert.equal(nodes[0].name, \"child1\");\n});\ntest(\"getNodeByCallback\", function (assert) {\n var tree = new node_1.Node({}, true);\n tree.loadFromData(utilsForTest_1.exampleData);\n var node = tree.getNodeByCallback(function (n) { return n.name === \"child1\"; });\n if (!node) {\n assert.ok(false, \"Node not found\");\n }\n else {\n assert.equal(node.name, \"child1\");\n }\n});\n","\"use strict\";\nexports.__esModule = true;\nvar module = QUnit.module, test = QUnit.test;\nvar util_1 = require(\"../src/util\");\nmodule(\"util\");\ntest(\"isInt\", function (assert) {\n assert.ok(util_1.isInt(10));\n assert.ok(util_1.isInt(0));\n assert.ok(util_1.isInt(-1));\n assert.notOk(util_1.isInt(\"1\"));\n assert.notOk(null);\n});\ntest(\"isFunction\", function (assert) {\n assert.ok(util_1.isFunction(util_1.isInt));\n assert.notOk(util_1.isFunction(\"test\"));\n});\ntest(\"htmlEscape\", function (assert) {\n assert.equal(util_1.htmlEscape(\"\"), \"\");\n assert.equal(util_1.htmlEscape(\"test\"), \"test\");\n assert.equal(util_1.htmlEscape(\"a&b\"), \"a&b\");\n});\ntest(\"getBoolString\", function (assert) {\n assert.equal(util_1.getBoolString(true), \"true\");\n assert.equal(util_1.getBoolString(false), \"false\");\n assert.equal(util_1.getBoolString(1), \"true\");\n assert.equal(util_1.getBoolString(null), \"false\");\n});\n"],"sourceRoot":""} \ No newline at end of file diff --git a/build/tree.jquery.js b/build/tree.jquery.js index faebedfd..1973df05 100644 --- a/build/tree.jquery.js +++ b/build/tree.jquery.js @@ -235,7 +235,7 @@ var Node = /** @class */ (function () { */ Node.prototype.addChild = function (node) { this.children.push(node); - node._setParent(this); + node.setParent(this); }; /* Add child at position. Index starts at 0. @@ -247,7 +247,7 @@ var Node = /** @class */ (function () { */ Node.prototype.addChildAtPosition = function (node, index) { this.children.splice(index, 0, node); - node._setParent(this); + node.setParent(this); }; /* Remove child. This also removes the children of the node. @@ -257,7 +257,7 @@ var Node = /** @class */ (function () { Node.prototype.removeChild = function (node) { // remove children from the index node.removeChildren(); - this._removeChild(node); + this.doRemoveChild(node); }; /* Get child index. @@ -326,7 +326,7 @@ var Node = /** @class */ (function () { return; } else { - movedNode.parent._removeChild(movedNode); + movedNode.parent.doRemoveChild(movedNode); if (position === Position.After) { if (targetNode.parent) { targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1); @@ -352,7 +352,13 @@ var Node = /** @class */ (function () { return nodes.map(function (node) { var tmpNode = {}; for (var k in node) { - if (["parent", "children", "element", "tree", "isEmptyFolder"].indexOf(k) === -1 && + if ([ + "parent", + "children", + "element", + "tree", + "isEmptyFolder" + ].indexOf(k) === -1 && Object.prototype.hasOwnProperty.call(node, k)) { var v = node[k]; tmpNode[k] = v; @@ -395,7 +401,9 @@ var Node = /** @class */ (function () { var node = new this.tree.nodeClass(nodeInfo); var childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex + 1); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -409,7 +417,9 @@ var Node = /** @class */ (function () { var node = new this.tree.nodeClass(nodeInfo); var childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -421,7 +431,7 @@ var Node = /** @class */ (function () { } else { var newParent = new this.tree.nodeClass(nodeInfo); - newParent._setParent(this.tree); + newParent.setParent(this.tree); var originalParent = this.parent; for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) { var child = _a[_i]; @@ -441,7 +451,9 @@ var Node = /** @class */ (function () { Node.prototype.append = function (nodeInfo) { var node = new this.tree.nodeClass(nodeInfo); this.addChild(node); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -449,7 +461,9 @@ var Node = /** @class */ (function () { Node.prototype.prepend = function (nodeInfo) { var node = new this.tree.nodeClass(nodeInfo); this.addChildAtPosition(node, 0); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -565,7 +579,8 @@ var Node = /** @class */ (function () { else { var previousSibling = this.getPreviousSibling(); if (previousSibling) { - if (!previousSibling.hasChildren() || !previousSibling.is_open) { + if (!previousSibling.hasChildren() || + !previousSibling.is_open) { // Previous sibling return previousSibling; } @@ -625,12 +640,12 @@ var Node = /** @class */ (function () { }; addNode(data); }; - Node.prototype._setParent = function (parent) { + Node.prototype.setParent = function (parent) { this.parent = parent; this.tree = parent.tree; this.tree.addNodeToIndex(this); }; - Node.prototype._removeChild = function (node) { + Node.prototype.doRemoveChild = function (node) { this.children.splice(this.getChildIndex(node), 1); this.tree.removeNodeFromIndex(node); }; @@ -702,7 +717,7 @@ var SimpleWidget = /** @class */ (function () { jQuery.data(el, dataKey, widget); } // Call init after setting data, so we can call methods - widget._init(); + widget.init(); } } return $el; @@ -725,7 +740,8 @@ var SimpleWidget = /** @class */ (function () { var widget = jQuery.data(el, getDataKey()); if (widget && widget instanceof SimpleWidget) { var widgetFunction = widget[functionName]; - if (widgetFunction && typeof widgetFunction === "function") { + if (widgetFunction && + typeof widgetFunction === "function") { result = widgetFunction.apply(widget, args); } } @@ -756,12 +772,12 @@ var SimpleWidget = /** @class */ (function () { }; }; SimpleWidget.prototype.destroy = function () { - this._deinit(); + this.deinit(); }; - SimpleWidget.prototype._init = function () { + SimpleWidget.prototype.init = function () { // }; - SimpleWidget.prototype._deinit = function () { + SimpleWidget.prototype.deinit = function () { // }; SimpleWidget.defaults = {}; @@ -803,26 +819,26 @@ var __assign = (this && this.__assign) || function () { exports.__esModule = true; var version_1 = __webpack_require__(5); var jQuery = __webpack_require__(2); -var drag_and_drop_handler_1 = __webpack_require__(6); -var elements_renderer_1 = __webpack_require__(7); -var data_loader_1 = __webpack_require__(8); -var key_handler_1 = __webpack_require__(9); +var dragAndDropHandler_1 = __webpack_require__(6); +var elementsRenderer_1 = __webpack_require__(7); +var dataLoader_1 = __webpack_require__(8); +var keyHandler_1 = __webpack_require__(9); var mouse_widget_1 = __webpack_require__(10); -var save_state_handler_1 = __webpack_require__(11); -var scroll_handler_1 = __webpack_require__(12); -var select_node_handler_1 = __webpack_require__(13); +var saveStateHandler_1 = __webpack_require__(11); +var scrollHandler_1 = __webpack_require__(12); +var selectNodeHandler_1 = __webpack_require__(13); var simple_widget_1 = __webpack_require__(3); var node_1 = __webpack_require__(0); var util_1 = __webpack_require__(1); -var node_element_1 = __webpack_require__(14); +var nodeElement_1 = __webpack_require__(14); var NODE_PARAM_IS_EMPTY = "Node parameter is empty"; var PARAM_IS_EMPTY = "Parameter is empty: "; var JqTreeWidget = /** @class */ (function (_super) { __extends(JqTreeWidget, _super); function JqTreeWidget() { var _this = _super !== null && _super.apply(this, arguments) || this; - _this._handleClick = function (e) { - var clickTarget = _this._getClickTarget(e.target); + _this.handleClick = function (e) { + var clickTarget = _this.getClickTarget(e.target); if (clickTarget) { if (clickTarget.type === "button") { _this.toggle(clickTarget.node, _this.options.slide); @@ -836,24 +852,25 @@ var JqTreeWidget = /** @class */ (function (_super) { click_event: e // eslint-disable-line @typescript-eslint/camelcase }); if (!event_1.isDefaultPrevented()) { - _this._selectNode(node); + _this.doSelectNode(node); } } } }; - _this._handleDblclick = function (e) { - var clickTarget = _this._getClickTarget(e.target); - if (clickTarget && clickTarget.type === "label") { + _this.handleDblclick = function (e) { + var _a; + var clickTarget = _this.getClickTarget(e.target); + if (((_a = clickTarget) === null || _a === void 0 ? void 0 : _a.type) === "label") { _this._triggerEvent("tree.dblclick", { node: clickTarget.node, click_event: e // eslint-disable-line @typescript-eslint/camelcase }); } }; - _this._handleContextmenu = function (e) { + _this.handleContextmenu = function (e) { var $div = jQuery(e.target).closest("ul.jqtree-tree .jqtree-element"); if ($div.length) { - var node = _this._getNode($div); + var node = _this.getNode($div); if (node) { e.preventDefault(); e.stopPropagation(); @@ -885,7 +902,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return this.tree; }; JqTreeWidget.prototype.selectNode = function (node, optionsParam) { - this._selectNode(node, optionsParam); + this.doSelectNode(node, optionsParam); return this.element; }; JqTreeWidget.prototype.getSelectedNode = function () { @@ -900,7 +917,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return JSON.stringify(this.tree.getData()); }; JqTreeWidget.prototype.loadData = function (data, parentNode) { - this._loadData(data, parentNode); + this.doLoadData(data, parentNode); return this.element; }; /* @@ -920,16 +937,16 @@ var JqTreeWidget = /** @class */ (function (_super) { JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) { if (typeof param1 === "string") { // first parameter is url - this._loadDataFromUrl(param1, param2, param3); + this.doLoadDataFromUrl(param1, param2, param3); } else { // first parameter is not url - this._loadDataFromUrl(null, param1, param2); + this.doLoadDataFromUrl(null, param1, param2); } return this.element; }; JqTreeWidget.prototype.reload = function (onFinished) { - this._loadDataFromUrl(null, null, onFinished); + this.doLoadDataFromUrl(null, null, onFinished); return this.element; }; JqTreeWidget.prototype.getNodeById = function (nodeId) { @@ -942,7 +959,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return this.tree.getNodesByProperty(key, value); }; JqTreeWidget.prototype.getNodeByHtmlElement = function (element) { - return this._getNode(jQuery(element)); + return this.getNode(jQuery(element)); }; JqTreeWidget.prototype.getNodeByCallback = function (callback) { return this.tree.getNodeByCallback(callback); @@ -978,8 +995,8 @@ var JqTreeWidget = /** @class */ (function (_super) { } var slide = slideParam == null ? this.options.slide : slideParam; if (node.isFolder() || node.isEmptyFolder) { - new node_element_1.FolderElement(node, this).close(slide, this.options.animationSpeed); - this._saveState(); + new nodeElement_1.FolderElement(node, this).close(slide, this.options.animationSpeed); + this.saveState(); } return this.element; }; @@ -1044,7 +1061,9 @@ var JqTreeWidget = /** @class */ (function (_super) { return node; }; JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) { - var parentNode = !parentNodeParam ? this.tree : parentNodeParam; + var parentNode = !parentNodeParam + ? this.tree + : parentNodeParam; var node = parentNode.prepend(newNodeInfo); this._refreshElements(parentNode); return node; @@ -1068,7 +1087,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } } this._refreshElements(node); - this._selectCurrentNode(); + this.selectCurrentNode(); return this.element; }; JqTreeWidget.prototype.moveNode = function (node, targetNode, position) { @@ -1096,7 +1115,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (this.selectNodeHandler) { this.selectNodeHandler.addToSelection(node); this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus); - this._saveState(); + this.saveState(); } return this.element; }; @@ -1126,7 +1145,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (this.selectNodeHandler) { this.selectNodeHandler.removeFromSelection(node); this._getNodeElementForNode(node).deselect(); - this._saveState(); + this.saveState(); } return this.element; }; @@ -1195,12 +1214,12 @@ var JqTreeWidget = /** @class */ (function (_super) { var _this = this; if (slide === void 0) { slide = true; } var doOpenNode = function (_node, _slide, _onFinished) { - var folderElement = new node_element_1.FolderElement(_node, _this); + var folderElement = new nodeElement_1.FolderElement(_node, _this); folderElement.open(_onFinished, _slide, _this.options.animationSpeed); }; if (node.isFolder() || node.isEmptyFolder) { if (node.load_on_demand) { - this._loadFolderOnDemand(node, slide, onFinished); + this.loadFolderOnDemand(node, slide, onFinished); } else { var parent_2 = node.parent; @@ -1212,7 +1231,7 @@ var JqTreeWidget = /** @class */ (function (_super) { parent_2 = parent_2.parent; } doOpenNode(node, slide, onFinished); - this._saveState(); + this.saveState(); } } }; @@ -1226,14 +1245,14 @@ var JqTreeWidget = /** @class */ (function (_super) { }; JqTreeWidget.prototype._getNodeElementForNode = function (node) { if (node.isFolder()) { - return new node_element_1.FolderElement(node, this); + return new nodeElement_1.FolderElement(node, this); } else { - return new node_element_1.NodeElement(node, this); + return new nodeElement_1.NodeElement(node, this); } }; JqTreeWidget.prototype._getNodeElement = function ($element) { - var node = this._getNode($element); + var node = this.getNode($element); if (node) { return this._getNodeElementForNode(node); } @@ -1242,61 +1261,62 @@ var JqTreeWidget = /** @class */ (function (_super) { } }; JqTreeWidget.prototype._containsElement = function (element) { - var node = this._getNode(jQuery(element)); + var node = this.getNode(jQuery(element)); return node != null && node.tree === this.tree; }; JqTreeWidget.prototype._getScrollLeft = function () { - return (this.scrollHandler && this.scrollHandler.getScrollLeft()) || 0; + var _a, _b; + return ((_b = (_a = this) === null || _a === void 0 ? void 0 : _a.scrollHandler) === null || _b === void 0 ? void 0 : _b.getScrollLeft()) || 0; }; - JqTreeWidget.prototype._init = function () { - _super.prototype._init.call(this); + JqTreeWidget.prototype.init = function () { + _super.prototype.init.call(this); this.element = this.$el; this.mouseDelay = 300; this.isInitialized = false; - this.options.rtl = this._getRtlOption(); + this.options.rtl = this.getRtlOption(); if (this.options.closedIcon === null) { - this.options.closedIcon = this._getDefaultClosedIcon(); + this.options.closedIcon = this.getDefaultClosedIcon(); } - this.renderer = new elements_renderer_1["default"](this); - this.dataLoader = new data_loader_1["default"](this); - if (save_state_handler_1["default"] != null) { - this.saveStateHandler = new save_state_handler_1["default"](this); + this.renderer = new elementsRenderer_1["default"](this); + this.dataLoader = new dataLoader_1["default"](this); + if (saveStateHandler_1["default"] != null) { + this.saveStateHandler = new saveStateHandler_1["default"](this); } else { this.options.saveState = false; } - if (select_node_handler_1["default"] != null) { - this.selectNodeHandler = new select_node_handler_1["default"](this); + if (selectNodeHandler_1["default"] != null) { + this.selectNodeHandler = new selectNodeHandler_1["default"](this); } - if (drag_and_drop_handler_1.DragAndDropHandler != null) { - this.dndHandler = new drag_and_drop_handler_1.DragAndDropHandler(this); + if (dragAndDropHandler_1.DragAndDropHandler != null) { + this.dndHandler = new dragAndDropHandler_1.DragAndDropHandler(this); } else { this.options.dragAndDrop = false; } - if (scroll_handler_1["default"] != null) { - this.scrollHandler = new scroll_handler_1["default"](this); + if (scrollHandler_1["default"] != null) { + this.scrollHandler = new scrollHandler_1["default"](this); } - if (key_handler_1["default"] != null && select_node_handler_1["default"] != null) { - this.keyHandler = new key_handler_1["default"](this); + if (keyHandler_1["default"] != null && selectNodeHandler_1["default"] != null) { + this.keyHandler = new keyHandler_1["default"](this); } - this._initData(); - this.element.click(this._handleClick); - this.element.dblclick(this._handleDblclick); + this.initData(); + this.element.click(this.handleClick); + this.element.dblclick(this.handleDblclick); if (this.options.useContextMenu) { - this.element.on("contextmenu", this._handleContextmenu); + this.element.on("contextmenu", this.handleContextmenu); } }; - JqTreeWidget.prototype._deinit = function () { + JqTreeWidget.prototype.deinit = function () { this.element.empty(); this.element.off(); if (this.keyHandler) { this.keyHandler.deinit(); } this.tree = new node_1.Node({}, true); - _super.prototype._deinit.call(this); + _super.prototype.deinit.call(this); }; - JqTreeWidget.prototype._mouseCapture = function (positionInfo) { + JqTreeWidget.prototype.mouseCapture = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseCapture(positionInfo); } @@ -1304,7 +1324,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseStart = function (positionInfo) { + JqTreeWidget.prototype.mouseStart = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStart(positionInfo); } @@ -1312,7 +1332,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseDrag = function (positionInfo) { + JqTreeWidget.prototype.mouseDrag = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { var result = this.dndHandler.mouseDrag(positionInfo); if (this.scrollHandler) { @@ -1324,7 +1344,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseStop = function (positionInfo) { + JqTreeWidget.prototype.mouseStop = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStop(positionInfo); } @@ -1332,21 +1352,21 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._initData = function () { + JqTreeWidget.prototype.initData = function () { if (this.options.data) { - this._loadData(this.options.data, null); + this.doLoadData(this.options.data, null); } else { - var dataUrl = this._getDataUrlInfo(null); + var dataUrl = this.getDataUrlInfo(null); if (dataUrl) { - this._loadDataFromUrl(null, null, null); + this.doLoadDataFromUrl(null, null, null); } else { - this._loadData([], null); + this.doLoadData([], null); } } }; - JqTreeWidget.prototype._getDataUrlInfo = function (node) { + JqTreeWidget.prototype.getDataUrlInfo = function (node) { var _this = this; var dataUrl = this.options.dataUrl || this.element.data("url"); var getUrlFromString = function () { @@ -1355,14 +1375,15 @@ var JqTreeWidget = /** @class */ (function (_super) { return urlInfo; }; var setUrlInfoData = function (urlInfo) { - if (node && node.id) { + var _a; + if ((_a = node) === null || _a === void 0 ? void 0 : _a.id) { // Load on demand of a subtree; add node parameter var data = { node: node.id }; urlInfo["data"] = data; } else { // Add selected_node parameter - var selectedNodeId = _this._getNodeIdToBeSelected(); + var selectedNodeId = _this.getNodeIdToBeSelected(); if (selectedNodeId) { var data = { selected_node: selectedNodeId }; // eslint-disable-line @typescript-eslint/camelcase urlInfo["data"] = data; @@ -1383,7 +1404,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return dataUrl; } }; - JqTreeWidget.prototype._getNodeIdToBeSelected = function () { + JqTreeWidget.prototype.getNodeIdToBeSelected = function () { if (this.options.saveState && this.saveStateHandler) { return this.saveStateHandler.getNodeIdToBeSelected(); } @@ -1391,7 +1412,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return null; } }; - JqTreeWidget.prototype._initTree = function (data) { + JqTreeWidget.prototype.initTree = function (data) { var _this = this; var doInit = function () { if (!_this.isInitialized) { @@ -1404,19 +1425,19 @@ var JqTreeWidget = /** @class */ (function (_super) { this.selectNodeHandler.clear(); } this.tree.loadFromData(data); - var mustLoadOnDemand = this._setInitialState(); + var mustLoadOnDemand = this.setInitialState(); this._refreshElements(null); if (!mustLoadOnDemand) { doInit(); } else { // Load data on demand and then init the tree - this._setInitialStateOnDemand(doInit); + this.setInitialStateOnDemand(doInit); } }; // Set initial state, either by restoring the state or auto-opening nodes // result: must load nodes on demand? - JqTreeWidget.prototype._setInitialState = function () { + JqTreeWidget.prototype.setInitialState = function () { var _this = this; var restoreState = function () { // result: is state restored, must load on demand? @@ -1440,7 +1461,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (_this.options.autoOpen === false) { return false; } - var maxLevel = _this._getAutoOpenMaxLevel(); + var maxLevel = _this.getAutoOpenMaxLevel(); var mustLoadOnDemand = false; _this.tree.iterate(function (node, level) { if (node.load_on_demand) { @@ -1465,7 +1486,7 @@ var JqTreeWidget = /** @class */ (function (_super) { }; // Set the initial state for nodes that are loaded on demand // Call cb_finished when done - JqTreeWidget.prototype._setInitialStateOnDemand = function (cbFinished) { + JqTreeWidget.prototype.setInitialStateOnDemand = function (cbFinished) { var _this = this; var restoreState = function () { if (!(_this.options.saveState && _this.saveStateHandler)) { @@ -1483,7 +1504,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } }; var autoOpenNodes = function () { - var maxLevel = _this._getAutoOpenMaxLevel(); + var maxLevel = _this.getAutoOpenMaxLevel(); var loadingCount = 0; var loadAndOpenNode = function (node) { loadingCount += 1; @@ -1515,7 +1536,7 @@ var JqTreeWidget = /** @class */ (function (_super) { autoOpenNodes(); } }; - JqTreeWidget.prototype._getAutoOpenMaxLevel = function () { + JqTreeWidget.prototype.getAutoOpenMaxLevel = function () { if (this.options.autoOpen === true) { return -1; } @@ -1523,11 +1544,11 @@ var JqTreeWidget = /** @class */ (function (_super) { return parseInt(this.options.autoOpen, 10); } }; - JqTreeWidget.prototype._getClickTarget = function (element) { + JqTreeWidget.prototype.getClickTarget = function (element) { var $target = jQuery(element); var $button = $target.closest(".jqtree-toggler"); if ($button.length) { - var node = this._getNode($button); + var node = this.getNode($button); if (node) { return { type: "button", @@ -1538,7 +1559,7 @@ var JqTreeWidget = /** @class */ (function (_super) { else { var $el = $target.closest(".jqtree-element"); if ($el.length) { - var node = this._getNode($el); + var node = this.getNode($el); if (node) { return { type: "label", @@ -1549,7 +1570,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } return null; }; - JqTreeWidget.prototype._getNode = function ($element) { + JqTreeWidget.prototype.getNode = function ($element) { var $li = $element.closest("li.jqtree_common"); if ($li.length === 0) { return null; @@ -1558,12 +1579,12 @@ var JqTreeWidget = /** @class */ (function (_super) { return $li.data("node"); } }; - JqTreeWidget.prototype._saveState = function () { + JqTreeWidget.prototype.saveState = function () { if (this.options.saveState && this.saveStateHandler) { this.saveStateHandler.saveState(); } }; - JqTreeWidget.prototype._selectCurrentNode = function () { + JqTreeWidget.prototype.selectCurrentNode = function () { var node = this.getSelectedNode(); if (node) { var nodeElement = this._getNodeElementForNode(node); @@ -1572,13 +1593,13 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._deselectCurrentNode = function () { + JqTreeWidget.prototype.deselectCurrentNode = function () { var node = this.getSelectedNode(); if (node) { this.removeFromSelection(node); } }; - JqTreeWidget.prototype._getDefaultClosedIcon = function () { + JqTreeWidget.prototype.getDefaultClosedIcon = function () { if (this.options.rtl) { // triangle to the left return "◀"; @@ -1588,13 +1609,13 @@ var JqTreeWidget = /** @class */ (function (_super) { return "►"; } }; - JqTreeWidget.prototype._getRtlOption = function () { + JqTreeWidget.prototype.getRtlOption = function () { if (this.options.rtl != null) { return this.options.rtl; } else { var dataRtl = this.element.data("rtl"); - if (dataRtl != null && dataRtl !== false) { + if (dataRtl !== null && dataRtl !== false) { return true; } else { @@ -1602,7 +1623,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._selectNode = function (inode, optionsParam) { + JqTreeWidget.prototype.doSelectNode = function (inode, optionsParam) { var _this = this; if (!this.selectNodeHandler) { return; @@ -1611,7 +1632,8 @@ var JqTreeWidget = /** @class */ (function (_super) { var selectOptions = __assign(__assign({}, defaultOptions), (optionsParam || {})); var canSelect = function () { if (_this.options.onCanSelectNode) { - return _this.options.selectable && _this.options.onCanSelectNode(inode); + return (_this.options.selectable && + _this.options.onCanSelectNode(inode)); } else { return _this.options.selectable; @@ -1630,7 +1652,7 @@ var JqTreeWidget = /** @class */ (function (_super) { }; if (!inode) { // Called with empty node -> deselect current node - this._deselectCurrentNode(); + this.deselectCurrentNode(); saveState(); return; } @@ -1640,7 +1662,7 @@ var JqTreeWidget = /** @class */ (function (_super) { var node = inode; if (this.selectNodeHandler.isNodeSelected(node)) { if (selectOptions.mustToggle) { - this._deselectCurrentNode(); + this.deselectCurrentNode(); this._triggerEvent("tree.select", { node: null, previous_node: node // eslint-disable-line @typescript-eslint/camelcase @@ -1649,7 +1671,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } else { var deselectedNode = this.getSelectedNode(); - this._deselectCurrentNode(); + this.deselectCurrentNode(); this.addToSelection(node, selectOptions.mustSetFocus); this._triggerEvent("tree.select", { node: node, @@ -1659,25 +1681,25 @@ var JqTreeWidget = /** @class */ (function (_super) { } saveState(); }; - JqTreeWidget.prototype._loadData = function (data, parentNode) { + JqTreeWidget.prototype.doLoadData = function (data, parentNode) { if (!data) { return; } else { this._triggerEvent("tree.load_data", { tree_data: data }); // eslint-disable-line @typescript-eslint/camelcase if (parentNode) { - this._deselectNodes(parentNode); - this._loadSubtree(data, parentNode); + this.deselectNodes(parentNode); + this.loadSubtree(data, parentNode); } else { - this._initTree(data); + this.initTree(data); } if (this.isDragging() && this.dndHandler) { this.dndHandler.refresh(); } } }; - JqTreeWidget.prototype._deselectNodes = function (parentNode) { + JqTreeWidget.prototype.deselectNodes = function (parentNode) { if (this.selectNodeHandler) { var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode); for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) { @@ -1686,21 +1708,21 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._loadSubtree = function (data, parentNode) { + JqTreeWidget.prototype.loadSubtree = function (data, parentNode) { parentNode.loadFromData(data); parentNode.load_on_demand = false; // eslint-disable-line @typescript-eslint/camelcase parentNode.is_loading = false; // eslint-disable-line @typescript-eslint/camelcase this._refreshElements(parentNode); }; - JqTreeWidget.prototype._loadDataFromUrl = function (urlInfoParam, parentNode, onFinished) { - var urlInfo = urlInfoParam || this._getDataUrlInfo(parentNode); + JqTreeWidget.prototype.doLoadDataFromUrl = function (urlInfoParam, parentNode, onFinished) { + var urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode); this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished); }; - JqTreeWidget.prototype._loadFolderOnDemand = function (node, slide, onFinished) { + JqTreeWidget.prototype.loadFolderOnDemand = function (node, slide, onFinished) { var _this = this; if (slide === void 0) { slide = true; } node.is_loading = true; // eslint-disable-line @typescript-eslint/camelcase - this._loadDataFromUrl(null, node, function () { + this.doLoadDataFromUrl(null, node, function () { _this._openNode(node, slide, onFinished); }); }; @@ -1795,7 +1817,8 @@ var DragAndDropHandler = /** @class */ (function () { if (!this.mustCaptureElement($element)) { return null; } - if (this.treeWidget.options.onIsMoveHandle && !this.treeWidget.options.onIsMoveHandle($element)) { + if (this.treeWidget.options.onIsMoveHandle && + !this.treeWidget.options.onIsMoveHandle($element)) { return null; } var nodeElement = this.treeWidget._getNodeElement($element); @@ -1817,7 +1840,9 @@ var DragAndDropHandler = /** @class */ (function () { } }; DragAndDropHandler.prototype.mouseStart = function (positionInfo) { - if (!this.currentItem || positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (!this.currentItem || + positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return false; } else { @@ -1826,7 +1851,9 @@ var DragAndDropHandler = /** @class */ (function () { var left = offset ? offset.left : 0; var top_1 = offset ? offset.top : 0; var node = this.currentItem.node; - var nodeName = this.treeWidget.options.autoEscape ? util_1.htmlEscape(node.name) : node.name; + var nodeName = this.treeWidget.options.autoEscape + ? util_1.htmlEscape(node.name) + : node.name; this.dragElement = new DragElement(nodeName, positionInfo.pageX - left, positionInfo.pageY - top_1, this.treeWidget.element); this.isDragging = true; this.positionInfo = positionInfo; @@ -1939,7 +1966,10 @@ var DragAndDropHandler = /** @class */ (function () { }; DragAndDropHandler.prototype.findHoveredArea = function (x, y) { var dimensions = this.getTreeDimensions(); - if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) { + if (x < dimensions.left || + y < dimensions.top || + x > dimensions.right || + y > dimensions.bottom) { return null; } var low = 0; @@ -1961,7 +1991,9 @@ var DragAndDropHandler = /** @class */ (function () { }; DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) { var node = area.node; - return node.isFolder() && !node.is_open && area.position === node_1.Position.Inside; + return (node.isFolder() && + !node.is_open && + area.position === node_1.Position.Inside); }; DragAndDropHandler.prototype.updateDropHint = function () { if (!this.hoveredArea) { @@ -2323,8 +2355,10 @@ var ElementsRenderer = /** @class */ (function () { return ul; }; ElementsRenderer.prototype.createLi = function (node, level) { - var isSelected = Boolean(this.treeWidget.selectNodeHandler && this.treeWidget.selectNodeHandler.isNodeSelected(node)); - var mustShowFolder = node.isFolder() || (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); + var isSelected = Boolean(this.treeWidget.selectNodeHandler && + this.treeWidget.selectNodeHandler.isNodeSelected(node)); + var mustShowFolder = node.isFolder() || + (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); var li = mustShowFolder ? this.createFolderLi(node, level, isSelected) : this.createNodeLi(node, level, isSelected); @@ -2336,7 +2370,9 @@ var ElementsRenderer = /** @class */ (function () { ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) { var buttonClasses = this.getButtonClasses(node); var folderClasses = this.getFolderClasses(node, isSelected); - var iconElement = node.is_open ? this.openedIconElement : this.closedIconElement; + var iconElement = node.is_open + ? this.openedIconElement + : this.closedIconElement; // li var li = document.createElement("li"); li.className = "jqtree_common " + folderClasses; @@ -2528,7 +2564,11 @@ var DataLoader = /** @class */ (function () { }; DataLoader.prototype.parseData = function (data) { var dataFilter = this.treeWidget.options.dataFilter; - var parsedData = data instanceof Array || typeof data === "object" ? data : data != null ? jQuery.parseJSON(data) : []; + var parsedData = data instanceof Array || typeof data === "object" + ? data + : data != null + ? jQuery.parseJSON(data) + : []; return dataFilter ? dataFilter(parsedData) : parsedData; }; return DataLoader; @@ -2642,11 +2682,15 @@ var KeyHandler = /** @class */ (function () { } }; KeyHandler.prototype.canHandleKeyboard = function () { - return (this.treeWidget.options.keyboardSupport && this.isFocusOnTree() && this.treeWidget.getSelectedNode() != null); + return (this.treeWidget.options.keyboardSupport && + this.isFocusOnTree() && + this.treeWidget.getSelectedNode() != null); }; KeyHandler.prototype.isFocusOnTree = function () { var activeElement = document.activeElement; - return Boolean(activeElement && activeElement.tagName === "SPAN" && this.treeWidget._containsElement(activeElement)); + return Boolean(activeElement && + activeElement.tagName === "SPAN" && + this.treeWidget._containsElement(activeElement)); }; KeyHandler.LEFT = 37; KeyHandler.UP = 38; @@ -2690,21 +2734,25 @@ var MouseWidget = /** @class */ (function (_super) { if (e.which !== 1) { return; } - var result = _this._handleMouseDown(_this._getPositionInfo(e)); + var result = _this.handleMouseDown(_this.getPositionInfo(e)); if (result) { e.preventDefault(); } return result; }; - _this.mouseMove = function (e) { return _this._handleMouseMove(e, _this._getPositionInfo(e)); }; - _this.mouseUp = function (e) { return _this._handleMouseUp(_this._getPositionInfo(e)); }; + _this.mouseMove = function (e) { + return _this.handleMouseMove(e, _this.getPositionInfo(e)); + }; + _this.mouseUp = function (e) { + return _this.handleMouseUp(_this.getPositionInfo(e)); + }; _this.touchStart = function (e) { var touchEvent = e.originalEvent; if (touchEvent.touches.length > 1) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseDown(_this._getPositionInfo(touch)); + return _this.handleMouseDown(_this.getPositionInfo(touch)); }; _this.touchMove = function (e) { var touchEvent = e.originalEvent; @@ -2712,7 +2760,7 @@ var MouseWidget = /** @class */ (function (_super) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseMove(e, _this._getPositionInfo(touch)); + return _this.handleMouseMove(e, _this.getPositionInfo(touch)); }; _this.touchEnd = function (e) { var touchEvent = e.originalEvent; @@ -2720,14 +2768,14 @@ var MouseWidget = /** @class */ (function (_super) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseUp(_this._getPositionInfo(touch)); + return _this.handleMouseUp(_this.getPositionInfo(touch)); }; return _this; } MouseWidget.prototype.setMouseDelay = function (mouseDelay) { this.mouseDelay = mouseDelay; }; - MouseWidget.prototype._init = function () { + MouseWidget.prototype.init = function () { this.$el.on("mousedown.mousewidget", this.mouseDown); this.$el.on("touchstart.mousewidget", this.touchStart); this.isMouseStarted = false; @@ -2736,36 +2784,36 @@ var MouseWidget = /** @class */ (function (_super) { this.isMouseDelayMet = true; this.mouseDownInfo = null; }; - MouseWidget.prototype._deinit = function () { + MouseWidget.prototype.deinit = function () { this.$el.off("mousedown.mousewidget"); this.$el.off("touchstart.mousewidget"); var $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("mouseup.mousewidget"); }; - MouseWidget.prototype._handleMouseDown = function (positionInfo) { + MouseWidget.prototype.handleMouseDown = function (positionInfo) { // We may have missed mouseup (out of window) if (this.isMouseStarted) { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } this.mouseDownInfo = positionInfo; - if (!this._mouseCapture(positionInfo)) { + if (!this.mouseCapture(positionInfo)) { return; } - this._handleStartMouse(); + this.handleStartMouse(); return true; }; - MouseWidget.prototype._handleStartMouse = function () { + MouseWidget.prototype.handleStartMouse = function () { var $document = jQuery(document); $document.on("mousemove.mousewidget", this.mouseMove); $document.on("touchmove.mousewidget", this.touchMove); $document.on("mouseup.mousewidget", this.mouseUp); $document.on("touchend.mousewidget", this.touchEnd); if (this.mouseDelay) { - this._startMouseDelayTimer(); + this.startMouseDelayTimer(); } }; - MouseWidget.prototype._startMouseDelayTimer = function () { + MouseWidget.prototype.startMouseDelayTimer = function () { var _this = this; if (this.mouseDelayTimer) { clearTimeout(this.mouseDelayTimer); @@ -2775,26 +2823,26 @@ var MouseWidget = /** @class */ (function (_super) { }, this.mouseDelay); this.isMouseDelayMet = false; }; - MouseWidget.prototype._handleMouseMove = function (e, positionInfo) { + MouseWidget.prototype.handleMouseMove = function (e, positionInfo) { if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); return e.preventDefault(); } if (this.mouseDelay && !this.isMouseDelayMet) { return true; } if (this.mouseDownInfo) { - this.isMouseStarted = this._mouseStart(this.mouseDownInfo) !== false; + this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false; } if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); } else { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } return !this.isMouseStarted; }; - MouseWidget.prototype._getPositionInfo = function (e) { + MouseWidget.prototype.getPositionInfo = function (e) { return { pageX: e.pageX, pageY: e.pageY, @@ -2802,7 +2850,7 @@ var MouseWidget = /** @class */ (function (_super) { originalEvent: e }; }; - MouseWidget.prototype._handleMouseUp = function (positionInfo) { + MouseWidget.prototype.handleMouseUp = function (positionInfo) { var $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("touchmove.mousewidget"); @@ -2810,7 +2858,7 @@ var MouseWidget = /** @class */ (function (_super) { $document.off("touchend.mousewidget"); if (this.isMouseStarted) { this.isMouseStarted = false; - this._mouseStop(positionInfo); + this.mouseStop(positionInfo); } }; return MouseWidget; @@ -2840,9 +2888,9 @@ var SaveStateHandler = /** @class */ (function () { } }; SaveStateHandler.prototype.getStateFromStorage = function () { - var jsonData = this._loadFromStorage(); + var jsonData = this.loadFromStorage(); if (jsonData) { - return this._parseState(jsonData); + return this.parseState(jsonData); } else { return null; @@ -2860,7 +2908,9 @@ var SaveStateHandler = /** @class */ (function () { }); return openNodes; }; - var getSelectedNodeIds = function () { return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; }); }; + var getSelectedNodeIds = function () { + return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; }); + }; /* eslint-disable @typescript-eslint/camelcase */ return { open_nodes: getOpenNodeIds(), @@ -2881,18 +2931,18 @@ var SaveStateHandler = /** @class */ (function () { else { var mustLoadOnDemand = false; if (state.open_nodes) { - mustLoadOnDemand = this._openInitialNodes(state.open_nodes); + mustLoadOnDemand = this.openInitialNodes(state.open_nodes); } if (state.selected_node) { - this._resetSelection(); - this._selectInitialNodes(state.selected_node); + this.resetSelection(); + this.selectInitialNodes(state.selected_node); } return mustLoadOnDemand; } }; SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cbFinished) { if (state) { - this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); + this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); } else { cbFinished(); @@ -2907,7 +2957,7 @@ var SaveStateHandler = /** @class */ (function () { return null; } }; - SaveStateHandler.prototype._parseState = function (jsonData) { + SaveStateHandler.prototype.parseState = function (jsonData) { var state = jQuery.parseJSON(jsonData); // Check if selected_node is an int (instead of an array) if (state && state.selected_node && util_1.isInt(state.selected_node)) { @@ -2916,7 +2966,7 @@ var SaveStateHandler = /** @class */ (function () { } return state; }; - SaveStateHandler.prototype._loadFromStorage = function () { + SaveStateHandler.prototype.loadFromStorage = function () { if (this.treeWidget.options.onGetStateFromStorage) { return this.treeWidget.options.onGetStateFromStorage(); } @@ -2924,7 +2974,7 @@ var SaveStateHandler = /** @class */ (function () { return localStorage.getItem(this.getKeyName()); } }; - SaveStateHandler.prototype._openInitialNodes = function (nodeIds) { + SaveStateHandler.prototype.openInitialNodes = function (nodeIds) { var mustLoadOnDemand = false; for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) { var nodeDd = nodeIds_1[_i]; @@ -2940,7 +2990,7 @@ var SaveStateHandler = /** @class */ (function () { } return mustLoadOnDemand; }; - SaveStateHandler.prototype._selectInitialNodes = function (nodeIds) { + SaveStateHandler.prototype.selectInitialNodes = function (nodeIds) { var selectCount = 0; for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) { var nodeId = nodeIds_2[_i]; @@ -2954,7 +3004,7 @@ var SaveStateHandler = /** @class */ (function () { } return selectCount !== 0; }; - SaveStateHandler.prototype._resetSelection = function () { + SaveStateHandler.prototype.resetSelection = function () { var selectNodeHandler = this.treeWidget.selectNodeHandler; if (selectNodeHandler) { var selectedNodes = selectNodeHandler.getSelectedNodes(); @@ -2963,7 +3013,7 @@ var SaveStateHandler = /** @class */ (function () { }); } }; - SaveStateHandler.prototype._setInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) { + SaveStateHandler.prototype.doSetInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) { var _this = this; var loadingCount = 0; var nodeIds = nodeIdsParam; @@ -2987,7 +3037,7 @@ var SaveStateHandler = /** @class */ (function () { } } nodeIds = newNodesIds; - if (_this._selectInitialNodes(selectedNodes)) { + if (_this.selectInitialNodes(selectedNodes)) { _this.treeWidget._refreshElements(null); } if (loadingCount === 0) { @@ -3110,7 +3160,8 @@ var ScrollHandler = /** @class */ (function () { for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) { var attr = cssAttributes_1[_i]; var overflowValue = $el.css(attr); - if (overflowValue === "auto" || overflowValue === "scroll") { + if (overflowValue === "auto" || + overflowValue === "scroll") { return true; } } @@ -3136,7 +3187,9 @@ var ScrollHandler = /** @class */ (function () { setDocumentAsScrollParent(); } var $scrollParent = getParentWithOverflow(); - if ($scrollParent && $scrollParent.length && $scrollParent[0].tagName !== "HTML") { + if ($scrollParent && + $scrollParent.length && + $scrollParent[0].tagName !== "HTML") { this.$scrollParent = $scrollParent; var offset = this.$scrollParent.offset(); this.scrollParentTop = offset ? offset.top : 0; @@ -3182,7 +3235,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.checkVerticalScrolling = function () { - var hoveredArea = this.treeWidget.dndHandler && this.treeWidget.dndHandler.hoveredArea; + var hoveredArea = this.treeWidget.dndHandler && + this.treeWidget.dndHandler.hoveredArea; if (hoveredArea && hoveredArea.top !== this.previousTop) { this.previousTop = hoveredArea.top; if (this.$scrollParent) { @@ -3194,7 +3248,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.checkHorizontalScrolling = function () { - var positionInfo = this.treeWidget.dndHandler && this.treeWidget.dndHandler.positionInfo; + var positionInfo = this.treeWidget.dndHandler && + this.treeWidget.dndHandler.positionInfo; if (!positionInfo) { return; } @@ -3206,7 +3261,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return; } var $scrollParent = this.$scrollParent; @@ -3215,7 +3271,8 @@ var ScrollHandler = /** @class */ (function () { return; } var scrollParent = $scrollParent[0]; - var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < scrollParent.scrollWidth; + var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < + scrollParent.scrollWidth; var canScrollLeft = scrollParent.scrollLeft > 0; var rightEdge = scrollParentOffset.left + scrollParent.clientWidth; var leftEdge = scrollParentOffset.left; @@ -3229,7 +3286,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return; } var $document = jQuery(document); @@ -3337,7 +3395,8 @@ var SelectNodeHandler = /** @class */ (function () { var _this = this; if (includeChildren === void 0) { includeChildren = false; } if (node.id == null) { - if (this.selectedSingleNode && node.element === this.selectedSingleNode.element) { + if (this.selectedSingleNode && + node.element === this.selectedSingleNode.element) { this.selectedSingleNode = null; } } @@ -3427,7 +3486,9 @@ var NodeElement = /** @class */ (function () { return this.$element.children("ul:first"); }; NodeElement.prototype.getSpan = function () { - return this.$element.children(".jqtree-element").find("span.jqtree-title"); + return this.$element + .children(".jqtree-element") + .find("span.jqtree-title"); }; NodeElement.prototype.getLi = function () { return this.$element; @@ -3516,7 +3577,9 @@ var FolderElement = /** @class */ (function (_super) { return !this.node.is_open && position === node_1.Position.Inside; }; FolderElement.prototype.getButton = function () { - return this.$element.children(".jqtree-element").find("a.jqtree-toggler"); + return this.$element + .children(".jqtree-element") + .find("a.jqtree-toggler"); }; return FolderElement; }(NodeElement)); @@ -3587,4 +3650,5 @@ module.exports = __webpack_require__(4); /***/ }) -/******/ ]); \ No newline at end of file +/******/ ]); +//# sourceMappingURL=tree.jquery.js.map \ No newline at end of file diff --git a/build/tree.jquery.js.map b/build/tree.jquery.js.map index 5c6b734b..d4dee1e0 100644 --- a/build/tree.jquery.js.map +++ b/build/tree.jquery.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/node.ts","webpack:///./src/util.ts","webpack:///external \"jQuery\"","webpack:///./src/simple.widget.ts","webpack:///./src/tree.jquery.ts","webpack:///./src/version.ts","webpack:///./src/drag_and_drop_handler.ts","webpack:///./src/elements_renderer.ts","webpack:///./src/data_loader.ts","webpack:///./src/key_handler.ts","webpack:///./src/mouse.widget.ts","webpack:///./src/save_state_handler.ts","webpack:///./src/scroll_handler.ts","webpack:///./src/select_node_handler.ts","webpack:///./src/node_element.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;AClFa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,uDAAuD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,4BAA4B;AACnE;AACA;AACA,gCAAgC,gBAAgB;AAChD,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,sBAAsB;;AAEvC,iBAAiB,sCAAsC;;AAEvD,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,gBAAgB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,2BAA2B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,4BAA4B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACrhBa;AACb;AACA,8BAA8B,6CAA6C;AAC3E,mCAAmC,gCAAgC;AACnE,0CAA0C;AAC1C;AACA;AACA,6BAA6B;AAC7B,4BAA4B;AAC5B,4BAA4B;AAC5B,8BAA8B;AAC9B,8BAA8B;AAC9B,+BAA+B;AAC/B;AACA,0CAA0C,mCAAmC;;;;;;;ACd7E,wB;;;;;;;ACAa;AACb;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,sCAAsC,sCAAsC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AClGa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,CAAW;AACnC,aAAa,mBAAO,CAAC,CAAQ;AAC7B,8BAA8B,mBAAO,CAAC,CAAyB;AAC/D,0BAA0B,mBAAO,CAAC,CAAqB;AACvD,oBAAoB,mBAAO,CAAC,CAAe;AAC3C,oBAAoB,mBAAO,CAAC,CAAe;AAC3C,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C,2BAA2B,mBAAO,CAAC,EAAsB;AACzD,uBAAuB,mBAAO,CAAC,EAAkB;AACjD,4BAA4B,mBAAO,CAAC,EAAuB;AAC3D,sBAAsB,mBAAO,CAAC,CAAiB;AAC/C,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,yBAAyB,EAAE;AAClF,sDAAsD,yBAAyB,EAAE;;AAEjF;AACA;AACA;AACA,0CAA0C,yBAAyB,EAAE;AACrE,2CAA2C,yBAAyB,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,uCAAuC,qCAAqC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,kBAAkB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAwC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC78Ba;AACb;AACA;AACA;;;;;;;;ACHa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,yBAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACveY;AACb;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACtMa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,0CAA0C,gBAAgB,iCAAiC,eAAe;AAC1G;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpFa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACrHa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,CAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC9Ja;AACb;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yEAAyE,aAAa,EAAE;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACtNa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,gBAAgB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AClNa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC3Ga;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","file":"tree.jquery.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 16);\n","\"use strict\";\nexports.__esModule = true;\nvar Position;\n(function (Position) {\n Position[Position[\"Before\"] = 1] = \"Before\";\n Position[Position[\"After\"] = 2] = \"After\";\n Position[Position[\"Inside\"] = 3] = \"Inside\";\n Position[Position[\"None\"] = 4] = \"None\";\n})(Position = exports.Position || (exports.Position = {}));\nvar positionNames = {\n before: Position.Before,\n after: Position.After,\n inside: Position.Inside,\n none: Position.None\n};\nexports.getPositionName = function (position) {\n for (var name_1 in positionNames) {\n if (positionNames.hasOwnProperty(name_1)) {\n if (positionNames[name_1] === position) {\n return name_1;\n }\n }\n }\n return \"\";\n};\nexports.getPosition = function (name) { return positionNames[name]; };\nvar Node = /** @class */ (function () {\n function Node(o, isRoot, nodeClass) {\n if (isRoot === void 0) { isRoot = false; }\n if (nodeClass === void 0) { nodeClass = Node; }\n this.name = \"\";\n this.setData(o);\n this.children = [];\n this.parent = null;\n if (isRoot) {\n this.idMapping = {};\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setdata(object): set attributes of the node\n\n Examples:\n setdata('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n Node.prototype.setData = function (o) {\n var _this = this;\n var setName = function (name) {\n if (name != null) {\n _this.name = name;\n }\n };\n if (!o) {\n return;\n }\n else if (typeof o !== \"object\") {\n setName(o);\n }\n else {\n for (var key in o) {\n if (o.hasOwnProperty(key)) {\n var value = o[key];\n if (key === \"label\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n setName(value);\n }\n else if (key !== \"children\") {\n // You can't update the children using this function\n this[key] = value;\n }\n }\n }\n }\n };\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n Node.prototype.loadFromData = function (data) {\n this.removeChildren();\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var o = data_1[_i];\n var node = new this.tree.nodeClass(o);\n this.addChild(node);\n if (typeof o === \"object\" && o[\"children\"]) {\n node.loadFromData(o[\"children\"]);\n }\n }\n };\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n Node.prototype.addChild = function (node) {\n this.children.push(node);\n node._setParent(this);\n };\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n Node.prototype.addChildAtPosition = function (node, index) {\n this.children.splice(index, 0, node);\n node._setParent(this);\n };\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n Node.prototype.removeChild = function (node) {\n // remove children from the index\n node.removeChildren();\n this._removeChild(node);\n };\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n Node.prototype.getChildIndex = function (node) {\n return jQuery.inArray(node, this.children);\n };\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n Node.prototype.hasChildren = function () {\n return this.children.length !== 0;\n };\n Node.prototype.isFolder = function () {\n return this.hasChildren() || this.load_on_demand;\n };\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n Node.prototype.iterate = function (callback) {\n var _iterate = function (node, level) {\n if (node.children) {\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var result = callback(child, level);\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n }\n };\n _iterate(this, 0);\n };\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n Node.prototype.moveNode = function (movedNode, targetNode, position) {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return;\n }\n else {\n movedNode.parent._removeChild(movedNode);\n if (position === Position.After) {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1);\n }\n }\n else if (position === Position.Before) {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode));\n }\n }\n else if (position === Position.Inside) {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n }\n }\n };\n /*\n Get the tree as data.\n */\n Node.prototype.getData = function (includeParent) {\n if (includeParent === void 0) { includeParent = false; }\n function getDataFromNodes(nodes) {\n return nodes.map(function (node) {\n var tmpNode = {};\n for (var k in node) {\n if ([\"parent\", \"children\", \"element\", \"tree\"].indexOf(k) ===\n -1 &&\n Object.prototype.hasOwnProperty.call(node, k)) {\n var v = node[k];\n tmpNode[k] = v;\n }\n }\n if (node.hasChildren()) {\n tmpNode[\"children\"] = getDataFromNodes(node.children);\n }\n return tmpNode;\n });\n }\n if (includeParent) {\n return getDataFromNodes([this]);\n }\n else {\n return getDataFromNodes(this.children);\n }\n };\n Node.prototype.getNodeByName = function (name) {\n return this.getNodeByCallback(function (node) { return node.name === name; });\n };\n Node.prototype.getNodeByCallback = function (callback) {\n var result = null;\n this.iterate(function (node) {\n if (callback(node)) {\n result = node;\n return false;\n }\n else {\n return true;\n }\n });\n return result;\n };\n Node.prototype.addAfter = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var node = new this.tree.nodeClass(nodeInfo);\n var child_index = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, child_index + 1);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n }\n };\n Node.prototype.addBefore = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var node = new this.tree.nodeClass(nodeInfo);\n var child_index = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, child_index);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n }\n };\n Node.prototype.addParent = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var newParent = new this.tree.nodeClass(nodeInfo);\n newParent._setParent(this.tree);\n var originalParent = this.parent;\n for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) {\n var child = _a[_i];\n newParent.addChild(child);\n }\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n };\n Node.prototype.remove = function () {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n };\n Node.prototype.append = function (nodeInfo) {\n var node = new this.tree.nodeClass(nodeInfo);\n this.addChild(node);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n };\n Node.prototype.prepend = function (nodeInfo) {\n var node = new this.tree.nodeClass(nodeInfo);\n this.addChildAtPosition(node, 0);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n };\n Node.prototype.isParentOf = function (node) {\n var parent = node.parent;\n while (parent) {\n if (parent === this) {\n return true;\n }\n parent = parent.parent;\n }\n return false;\n };\n Node.prototype.getLevel = function () {\n var level = 0;\n var node = this;\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n return level;\n };\n Node.prototype.getNodeById = function (nodeId) {\n return this.idMapping[nodeId];\n };\n Node.prototype.addNodeToIndex = function (node) {\n if (node.id != null) {\n this.idMapping[node.id] = node;\n }\n };\n Node.prototype.removeNodeFromIndex = function (node) {\n if (node.id != null) {\n delete this.idMapping[node.id];\n }\n };\n Node.prototype.removeChildren = function () {\n var _this = this;\n this.iterate(function (child) {\n _this.tree.removeNodeFromIndex(child);\n return true;\n });\n this.children = [];\n };\n Node.prototype.getPreviousSibling = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex];\n }\n else {\n return null;\n }\n }\n };\n Node.prototype.getNextSibling = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex];\n }\n else {\n return null;\n }\n }\n };\n Node.prototype.getNodesByProperty = function (key, value) {\n return this.filter(function (node) { return node[key] === value; });\n };\n Node.prototype.filter = function (f) {\n var result = [];\n this.iterate(function (node) {\n if (f(node)) {\n result.push(node);\n }\n return true;\n });\n return result;\n };\n Node.prototype.getNextNode = function (includeChildren) {\n if (includeChildren === void 0) { includeChildren = true; }\n if (includeChildren && this.hasChildren() && this.is_open) {\n // First child\n return this.children[0];\n }\n else {\n if (!this.parent) {\n return null;\n }\n else {\n var nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n }\n else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n };\n Node.prototype.getPreviousNode = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var previousSibling = this.getPreviousSibling();\n if (previousSibling) {\n if (!previousSibling.hasChildren() ||\n !previousSibling.is_open) {\n // Previous sibling\n return previousSibling;\n }\n else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n else {\n return this.getParent();\n }\n }\n };\n Node.prototype.getParent = function () {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n }\n else if (!this.parent.parent) {\n // Root node -> null\n return null;\n }\n else {\n return this.parent;\n }\n };\n Node.prototype.getLastChild = function () {\n if (!this.hasChildren()) {\n return null;\n }\n else {\n var lastChild = this.children[this.children.length - 1];\n if (!lastChild.hasChildren() || !lastChild.is_open) {\n return lastChild;\n }\n else {\n return lastChild.getLastChild();\n }\n }\n };\n // Init Node from data without making it the root of the tree\n Node.prototype.initFromData = function (data) {\n var _this = this;\n var addNode = function (nodeData) {\n _this.setData(nodeData);\n if (nodeData[\"children\"]) {\n addChildren(nodeData[\"children\"]);\n }\n };\n var addChildren = function (childrenData) {\n for (var _i = 0, childrenData_1 = childrenData; _i < childrenData_1.length; _i++) {\n var child = childrenData_1[_i];\n var node = new _this.tree.nodeClass(\"\");\n node.initFromData(child);\n _this.addChild(node);\n }\n };\n addNode(data);\n };\n Node.prototype._setParent = function (parent) {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree.addNodeToIndex(this);\n };\n Node.prototype._removeChild = function (node) {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree.removeNodeFromIndex(node);\n };\n return Node;\n}());\nexports.Node = Node;\n","\"use strict\";\nexports.__esModule = true;\nexports.isInt = function (n) { return typeof n === \"number\" && n % 1 === 0; };\nexports.isFunction = function (v) { return typeof v === \"function\"; };\n// Escape a string for HTML interpolation; copied from underscore js\nexports.htmlEscape = function (text) {\n return (\"\" + text)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\")\n .replace(/\\//g, \"/\");\n};\nexports.getBoolString = function (value) { return (value ? \"true\" : \"false\"); };\n","module.exports = jQuery;","\"use strict\";\nexports.__esModule = true;\nvar SimpleWidget = /** @class */ (function () {\n function SimpleWidget(el, options) {\n this.$el = jQuery(el);\n var defaults = this.constructor.defaults;\n this.options = jQuery.extend({}, defaults, options);\n }\n SimpleWidget.register = function (widgetClass, widgetName) {\n var getDataKey = function () { return \"simple_widget_\" + widgetName; };\n function getWidgetData(el, dataKey) {\n var widget = jQuery.data(el, dataKey);\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n }\n else {\n return null;\n }\n }\n function createWidget($el, options) {\n var dataKey = getDataKey();\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var existingWidget = getWidgetData(el, dataKey);\n if (!existingWidget) {\n var widget = new widgetClass(el, options);\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n // Call init after setting data, so we can call methods\n widget._init();\n }\n }\n return $el;\n }\n function destroyWidget($el) {\n var dataKey = getDataKey();\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var widget = getWidgetData(el, dataKey);\n if (widget) {\n widget.destroy();\n }\n jQuery.removeData(el, dataKey);\n }\n }\n function callFunction($el, functionName, args) {\n var result = null;\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var widget = jQuery.data(el, getDataKey());\n if (widget && widget instanceof SimpleWidget) {\n var widgetFunction = widget[functionName];\n if (widgetFunction &&\n typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args);\n }\n }\n }\n return result;\n }\n // tslint:disable-next-line: only-arrow-functions\n jQuery.fn[widgetName] = function (argument1) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var $el = this;\n if (argument1 === undefined || typeof argument1 === \"object\") {\n var options = argument1;\n return createWidget($el, options);\n }\n else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n var functionName = argument1;\n if (functionName === \"destroy\") {\n return destroyWidget($el);\n }\n else if (functionName === \"get_widget_class\") {\n return widgetClass;\n }\n else {\n return callFunction($el, functionName, args);\n }\n }\n };\n };\n SimpleWidget.prototype.destroy = function () {\n this._deinit();\n };\n SimpleWidget.prototype._init = function () {\n //\n };\n SimpleWidget.prototype._deinit = function () {\n //\n };\n SimpleWidget.defaults = {};\n return SimpleWidget;\n}());\nexports[\"default\"] = SimpleWidget;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nexports.__esModule = true;\nvar version_1 = require(\"./version\");\nvar jQuery = require(\"jquery\");\nvar drag_and_drop_handler_1 = require(\"./drag_and_drop_handler\");\nvar elements_renderer_1 = require(\"./elements_renderer\");\nvar data_loader_1 = require(\"./data_loader\");\nvar key_handler_1 = require(\"./key_handler\");\nvar mouse_widget_1 = require(\"./mouse.widget\");\nvar save_state_handler_1 = require(\"./save_state_handler\");\nvar scroll_handler_1 = require(\"./scroll_handler\");\nvar select_node_handler_1 = require(\"./select_node_handler\");\nvar simple_widget_1 = require(\"./simple.widget\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar node_element_1 = require(\"./node_element\");\nvar NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nvar PARAM_IS_EMPTY = \"Parameter is empty: \";\nvar JqTreeWidget = /** @class */ (function (_super) {\n __extends(JqTreeWidget, _super);\n function JqTreeWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._handleClick = function (e) {\n var clickTarget = _this._getClickTarget(e.target);\n if (clickTarget) {\n if (clickTarget.type === \"button\") {\n _this.toggle(clickTarget.node, _this.options.slide);\n e.preventDefault();\n e.stopPropagation();\n }\n else if (clickTarget.type === \"label\") {\n var node = clickTarget.node;\n var event_1 = _this._triggerEvent(\"tree.click\", {\n node: node,\n click_event: e\n });\n if (!event_1.isDefaultPrevented()) {\n _this._selectNode(node);\n }\n }\n }\n };\n _this._handleDblclick = function (e) {\n var clickTarget = _this._getClickTarget(e.target);\n if (clickTarget && clickTarget.type === \"label\") {\n _this._triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n click_event: e\n });\n }\n };\n _this._handleContextmenu = function (e) {\n var $div = jQuery(e.target).closest(\"ul.jqtree-tree .jqtree-element\");\n if ($div.length) {\n var node = _this._getNode($div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n _this._triggerEvent(\"tree.contextmenu\", {\n node: node,\n click_event: e\n });\n return false;\n }\n }\n return null;\n };\n return _this;\n }\n JqTreeWidget.prototype.toggle = function (node, slideParam) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var slide = slideParam == null ? this.options.slide : slideParam;\n if (node.is_open) {\n this.closeNode(node, slide);\n }\n else {\n this.openNode(node, slide);\n }\n return this.element;\n };\n JqTreeWidget.prototype.getTree = function () {\n return this.tree;\n };\n JqTreeWidget.prototype.selectNode = function (node, optionsParam) {\n this._selectNode(node, optionsParam);\n return this.element;\n };\n JqTreeWidget.prototype.getSelectedNode = function () {\n if (this.selectNodeHandler) {\n return this.selectNodeHandler.getSelectedNode();\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.toJson = function () {\n return JSON.stringify(this.tree.getData());\n };\n JqTreeWidget.prototype.loadData = function (data, parent_node) {\n this._loadData(data, parent_node);\n return this.element;\n };\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this._loadDataFromUrl(param1, param2, param3);\n }\n else {\n // first parameter is not url\n this._loadDataFromUrl(null, param1, param2);\n }\n return this.element;\n };\n JqTreeWidget.prototype.reload = function (onFinished) {\n this._loadDataFromUrl(null, null, onFinished);\n return this.element;\n };\n JqTreeWidget.prototype.getNodeById = function (nodeId) {\n return this.tree.getNodeById(nodeId);\n };\n JqTreeWidget.prototype.getNodeByName = function (name) {\n return this.tree.getNodeByName(name);\n };\n JqTreeWidget.prototype.getNodesByProperty = function (key, value) {\n return this.tree.getNodesByProperty(key, value);\n };\n JqTreeWidget.prototype.getNodeByHtmlElement = function (element) {\n return this._getNode(jQuery(element));\n };\n JqTreeWidget.prototype.getNodeByCallback = function (callback) {\n return this.tree.getNodeByCallback(callback);\n };\n JqTreeWidget.prototype.openNode = function (node, param1, param2) {\n var _this = this;\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var parseParams = function () {\n var onFinished;\n var slide;\n if (util_1.isFunction(param1)) {\n onFinished = param1;\n slide = null;\n }\n else {\n slide = param1;\n onFinished = param2;\n }\n if (slide == null) {\n slide = _this.options.slide;\n }\n return [slide, onFinished];\n };\n var _a = parseParams(), slide = _a[0], onFinished = _a[1];\n this._openNode(node, slide, onFinished);\n return this.element;\n };\n JqTreeWidget.prototype.closeNode = function (node, slideParam) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var slide = slideParam == null ? this.options.slide : slideParam;\n if (node.isFolder()) {\n new node_element_1.FolderElement(node, this).close(slide, this.options.animationSpeed);\n this._saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.isDragging = function () {\n if (this.dndHandler) {\n return this.dndHandler.isDragging;\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.refreshHitAreas = function () {\n if (this.dndHandler) {\n this.dndHandler.refresh();\n }\n return this.element;\n };\n JqTreeWidget.prototype.addNodeAfter = function (newNodeInfo, existingNode) {\n var newNode = existingNode.addAfter(newNodeInfo);\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.addNodeBefore = function (newNodeInfo, existingNode) {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n var newNode = existingNode.addBefore(newNodeInfo);\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.addParentNode = function (newNodeInfo, existingNode) {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n var newNode = existingNode.addParent(newNodeInfo);\n if (newNode) {\n this._refreshElements(newNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.removeNode = function (inode) {\n if (!inode) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var node = inode;\n if (node.parent && this.selectNodeHandler) {\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n node.remove();\n this._refreshElements(node.parent);\n }\n return this.element;\n };\n JqTreeWidget.prototype.appendNode = function (newNodeInfo, parentNodeParam) {\n var parentNode = parentNodeParam || this.tree;\n var node = parentNode.append(newNodeInfo);\n this._refreshElements(parentNode);\n return node;\n };\n JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) {\n var parentNode = !parentNodeParam\n ? this.tree\n : parentNodeParam;\n var node = parentNode.prepend(newNodeInfo);\n this._refreshElements(parentNode);\n return node;\n };\n JqTreeWidget.prototype.updateNode = function (node, data) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var id_is_changed = data.id && data.id !== node.id;\n if (id_is_changed) {\n this.tree.removeNodeFromIndex(node);\n }\n node.setData(data);\n if (id_is_changed) {\n this.tree.addNodeToIndex(node);\n }\n if (typeof data === \"object\" && data.children) {\n node.removeChildren();\n if (data.children.length) {\n node.loadFromData(data.children);\n }\n }\n this._refreshElements(node);\n this._selectCurrentNode();\n return this.element;\n };\n JqTreeWidget.prototype.moveNode = function (node, targetNode, position) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n var positionIndex = node_1.getPosition(position);\n this.tree.moveNode(node, targetNode, positionIndex);\n this._refreshElements(null);\n return this.element;\n };\n JqTreeWidget.prototype.getStateFromStorage = function () {\n if (this.saveStateHandler) {\n return this.saveStateHandler.getStateFromStorage();\n }\n };\n JqTreeWidget.prototype.addToSelection = function (inode, mustSetFocus) {\n if (!inode) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var node = inode;\n if (this.selectNodeHandler) {\n this.selectNodeHandler.addToSelection(node);\n this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus);\n this._saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.getSelectedNodes = function () {\n if (!this.selectNodeHandler) {\n return [];\n }\n else {\n return this.selectNodeHandler.getSelectedNodes();\n }\n };\n JqTreeWidget.prototype.isNodeSelected = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (!this.selectNodeHandler) {\n return false;\n }\n else {\n return this.selectNodeHandler.isNodeSelected(node);\n }\n };\n JqTreeWidget.prototype.removeFromSelection = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (this.selectNodeHandler) {\n this.selectNodeHandler.removeFromSelection(node);\n this._getNodeElementForNode(node).deselect();\n this._saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.scrollToNode = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (this.scrollHandler) {\n var node_offset = jQuery(node.element).offset();\n var node_top = node_offset ? node_offset.top : 0;\n var tree_offset = this.$el.offset();\n var tree_top = tree_offset ? tree_offset.top : 0;\n var top_1 = node_top - tree_top;\n this.scrollHandler.scrollToY(top_1);\n }\n return this.element;\n };\n JqTreeWidget.prototype.getState = function () {\n if (this.saveStateHandler) {\n return this.saveStateHandler.getState();\n }\n };\n JqTreeWidget.prototype.setState = function (state) {\n if (this.saveStateHandler) {\n this.saveStateHandler.setInitialState(state);\n this._refreshElements(null);\n }\n return this.element;\n };\n JqTreeWidget.prototype.setOption = function (option, value) {\n this.options[option] = value;\n return this.element;\n };\n JqTreeWidget.prototype.moveDown = function () {\n if (this.keyHandler) {\n this.keyHandler.moveDown();\n }\n return this.element;\n };\n JqTreeWidget.prototype.moveUp = function () {\n if (this.keyHandler) {\n this.keyHandler.moveUp();\n }\n return this.element;\n };\n JqTreeWidget.prototype.getVersion = function () {\n return version_1[\"default\"];\n };\n JqTreeWidget.prototype.testGenerateHitAreas = function (movingNode) {\n if (!this.dndHandler) {\n return [];\n }\n else {\n this.dndHandler.currentItem = this._getNodeElementForNode(movingNode);\n this.dndHandler.generateHitAreas();\n return this.dndHandler.hitAreas;\n }\n };\n JqTreeWidget.prototype._triggerEvent = function (eventName, values) {\n var event = jQuery.Event(eventName);\n jQuery.extend(event, values);\n this.element.trigger(event);\n return event;\n };\n JqTreeWidget.prototype._openNode = function (node, slide, onFinished) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n var doOpenNode = function (_node, _slide, _onFinished) {\n var folder_element = new node_element_1.FolderElement(_node, _this);\n folder_element.open(_onFinished, _slide, _this.options.animationSpeed);\n };\n if (node.isFolder()) {\n if (node.load_on_demand) {\n this._loadFolderOnDemand(node, slide, onFinished);\n }\n else {\n var parent_1 = node.parent;\n while (parent_1) {\n // nb: do not open root element\n if (parent_1.parent) {\n doOpenNode(parent_1, false, null);\n }\n parent_1 = parent_1.parent;\n }\n doOpenNode(node, slide, onFinished);\n this._saveState();\n }\n }\n };\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n JqTreeWidget.prototype._refreshElements = function (fromNode) {\n this.renderer.render(fromNode);\n this._triggerEvent(\"tree.refresh\");\n };\n JqTreeWidget.prototype._getNodeElementForNode = function (node) {\n if (node.isFolder()) {\n return new node_element_1.FolderElement(node, this);\n }\n else {\n return new node_element_1.NodeElement(node, this);\n }\n };\n JqTreeWidget.prototype._getNodeElement = function ($element) {\n var node = this._getNode($element);\n if (node) {\n return this._getNodeElementForNode(node);\n }\n else {\n return null;\n }\n };\n JqTreeWidget.prototype._containsElement = function (element) {\n var node = this._getNode(jQuery(element));\n return node != null && node.tree === this.tree;\n };\n JqTreeWidget.prototype._getScrollLeft = function () {\n return (this.scrollHandler && this.scrollHandler.getScrollLeft()) || 0;\n };\n JqTreeWidget.prototype._init = function () {\n _super.prototype._init.call(this);\n this.element = this.$el;\n this.mouseDelay = 300;\n this.isInitialized = false;\n this.options.rtl = this._getRtlOption();\n if (this.options.closedIcon === null) {\n this.options.closedIcon = this._getDefaultClosedIcon();\n }\n this.renderer = new elements_renderer_1[\"default\"](this);\n this.dataLoader = new data_loader_1[\"default\"](this);\n if (save_state_handler_1[\"default\"] != null) {\n this.saveStateHandler = new save_state_handler_1[\"default\"](this);\n }\n else {\n this.options.saveState = false;\n }\n if (select_node_handler_1[\"default\"] != null) {\n this.selectNodeHandler = new select_node_handler_1[\"default\"](this);\n }\n if (drag_and_drop_handler_1.DragAndDropHandler != null) {\n this.dndHandler = new drag_and_drop_handler_1.DragAndDropHandler(this);\n }\n else {\n this.options.dragAndDrop = false;\n }\n if (scroll_handler_1[\"default\"] != null) {\n this.scrollHandler = new scroll_handler_1[\"default\"](this);\n }\n if (key_handler_1[\"default\"] != null && select_node_handler_1[\"default\"] != null) {\n this.keyHandler = new key_handler_1[\"default\"](this);\n }\n this._initData();\n this.element.click(this._handleClick);\n this.element.dblclick(this._handleDblclick);\n if (this.options.useContextMenu) {\n this.element.on(\"contextmenu\", this._handleContextmenu);\n }\n };\n JqTreeWidget.prototype._deinit = function () {\n this.element.empty();\n this.element.off();\n if (this.keyHandler) {\n this.keyHandler.deinit();\n }\n this.tree = new node_1.Node({}, true);\n _super.prototype._deinit.call(this);\n };\n JqTreeWidget.prototype._mouseCapture = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseCapture(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype._mouseStart = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseStart(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype._mouseDrag = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n var result = this.dndHandler.mouseDrag(positionInfo);\n if (this.scrollHandler) {\n this.scrollHandler.checkScrolling();\n }\n return result;\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype._mouseStop = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseStop(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype._initData = function () {\n if (this.options.data) {\n this._loadData(this.options.data, null);\n }\n else {\n var data_url = this._getDataUrlInfo(null);\n if (data_url) {\n this._loadDataFromUrl(null, null, null);\n }\n else {\n this._loadData([], null);\n }\n }\n };\n JqTreeWidget.prototype._getDataUrlInfo = function (node) {\n var _this = this;\n var data_url = this.options.dataUrl || this.element.data(\"url\");\n var getUrlFromString = function () {\n var url_info = { url: data_url };\n setUrlInfoData(url_info);\n return url_info;\n };\n var setUrlInfoData = function (url_info) {\n if (node && node.id) {\n // Load on demand of a subtree; add node parameter\n var data = { node: node.id };\n // tslint:disable-next-line: no-string-literal\n url_info[\"data\"] = data;\n }\n else {\n // Add selected_node parameter\n var selected_node_id = _this._getNodeIdToBeSelected();\n if (selected_node_id) {\n var data = { selected_node: selected_node_id };\n // tslint:disable-next-line: no-string-literal\n url_info[\"data\"] = data;\n }\n }\n };\n if (typeof data_url === \"function\") {\n return data_url(node);\n }\n else if (typeof data_url === \"string\") {\n return getUrlFromString();\n }\n else if (typeof data_url === \"object\") {\n setUrlInfoData(data_url);\n return data_url;\n }\n else {\n return data_url;\n }\n };\n JqTreeWidget.prototype._getNodeIdToBeSelected = function () {\n if (this.options.saveState && this.saveStateHandler) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n }\n else {\n return null;\n }\n };\n JqTreeWidget.prototype._initTree = function (data) {\n var _this = this;\n var doInit = function () {\n if (!_this.isInitialized) {\n _this.isInitialized = true;\n _this._triggerEvent(\"tree.init\");\n }\n };\n this.tree = new this.options.nodeClass(null, true, this.options.nodeClass);\n if (this.selectNodeHandler) {\n this.selectNodeHandler.clear();\n }\n this.tree.loadFromData(data);\n var mustLoadOnDemand = this._setInitialState();\n this._refreshElements(null);\n if (!mustLoadOnDemand) {\n doInit();\n }\n else {\n // Load data on demand and then init the tree\n this._setInitialStateOnDemand(doInit);\n }\n };\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n JqTreeWidget.prototype._setInitialState = function () {\n var _this = this;\n var restoreState = function () {\n // result: is state restored, must load on demand?\n if (!(_this.options.saveState && _this.saveStateHandler)) {\n return [false, false];\n }\n else {\n var state = _this.saveStateHandler.getStateFromStorage();\n if (!state) {\n return [false, false];\n }\n else {\n var mustLoadOnDemand_1 = _this.saveStateHandler.setInitialState(state);\n // return true: the state is restored\n return [true, mustLoadOnDemand_1];\n }\n }\n };\n var autoOpenNodes = function () {\n // result: must load on demand?\n if (_this.options.autoOpen === false) {\n return false;\n }\n var max_level = _this._getAutoOpenMaxLevel();\n var mustLoadOnDemand = false;\n _this.tree.iterate(function (node, level) {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n }\n else if (!node.hasChildren()) {\n return false;\n }\n else {\n node.is_open = true;\n return level !== max_level;\n }\n });\n return mustLoadOnDemand;\n };\n // tslint:disable-next-line: prefer-const\n var _a = restoreState(), isRestored = _a[0], mustLoadOnDemand = _a[1];\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n return mustLoadOnDemand;\n };\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n JqTreeWidget.prototype._setInitialStateOnDemand = function (cbFinished) {\n var _this = this;\n var restoreState = function () {\n if (!(_this.options.saveState && _this.saveStateHandler)) {\n return false;\n }\n else {\n var state = _this.saveStateHandler.getStateFromStorage();\n if (!state) {\n return false;\n }\n else {\n _this.saveStateHandler.setInitialStateOnDemand(state, cbFinished);\n return true;\n }\n }\n };\n var autoOpenNodes = function () {\n var maxLevel = _this._getAutoOpenMaxLevel();\n var loadingCount = 0;\n var loadAndOpenNode = function (node) {\n loadingCount += 1;\n _this._openNode(node, false, function () {\n loadingCount -= 1;\n openNodes();\n });\n };\n var openNodes = function () {\n _this.tree.iterate(function (node, level) {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n return false;\n }\n else {\n _this._openNode(node, false, null);\n return level !== maxLevel;\n }\n });\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n openNodes();\n };\n if (!restoreState()) {\n autoOpenNodes();\n }\n };\n JqTreeWidget.prototype._getAutoOpenMaxLevel = function () {\n if (this.options.autoOpen === true) {\n return -1;\n }\n else {\n return parseInt(this.options.autoOpen, 10);\n }\n };\n JqTreeWidget.prototype._getClickTarget = function (element) {\n var $target = jQuery(element);\n var $button = $target.closest(\".jqtree-toggler\");\n if ($button.length) {\n var node = this._getNode($button);\n if (node) {\n return {\n type: \"button\",\n node: node\n };\n }\n }\n else {\n var $el = $target.closest(\".jqtree-element\");\n if ($el.length) {\n var node = this._getNode($el);\n if (node) {\n return {\n type: \"label\",\n node: node\n };\n }\n }\n }\n return null;\n };\n JqTreeWidget.prototype._getNode = function ($element) {\n var $li = $element.closest(\"li.jqtree_common\");\n if ($li.length === 0) {\n return null;\n }\n else {\n return $li.data(\"node\");\n }\n };\n JqTreeWidget.prototype._saveState = function () {\n if (this.options.saveState && this.saveStateHandler) {\n this.saveStateHandler.saveState();\n }\n };\n JqTreeWidget.prototype._selectCurrentNode = function () {\n var node = this.getSelectedNode();\n if (node) {\n var node_element = this._getNodeElementForNode(node);\n if (node_element) {\n node_element.select(true);\n }\n }\n };\n JqTreeWidget.prototype._deselectCurrentNode = function () {\n var node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n };\n JqTreeWidget.prototype._getDefaultClosedIcon = function () {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n }\n else {\n // triangle to the right\n return \"►\";\n }\n };\n JqTreeWidget.prototype._getRtlOption = function () {\n if (this.options.rtl != null) {\n return this.options.rtl;\n }\n else {\n var data_rtl = this.element.data(\"rtl\");\n if (data_rtl != null && data_rtl !== false) {\n return true;\n }\n else {\n return false;\n }\n }\n };\n JqTreeWidget.prototype._selectNode = function (inode, optionsParam) {\n var _this = this;\n if (!this.selectNodeHandler) {\n return;\n }\n var defaultOptions = { mustSetFocus: true, mustToggle: true };\n var selectOptions = __assign({}, defaultOptions, (optionsParam || {}));\n var canSelect = function () {\n if (_this.options.onCanSelectNode) {\n return (_this.options.selectable &&\n _this.options.onCanSelectNode(inode));\n }\n else {\n return _this.options.selectable;\n }\n };\n var openParents = function () {\n var parent = inode.parent;\n if (parent && parent.parent && !parent.is_open) {\n _this.openNode(parent, false);\n }\n };\n var saveState = function () {\n if (_this.options.saveState && _this.saveStateHandler) {\n _this.saveStateHandler.saveState();\n }\n };\n if (!inode) {\n // Called with empty node -> deselect current node\n this._deselectCurrentNode();\n saveState();\n return;\n }\n if (!canSelect()) {\n return;\n }\n var node = inode;\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this._deselectCurrentNode();\n this._triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node\n });\n }\n }\n else {\n var deselected_node = this.getSelectedNode();\n this._deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n this._triggerEvent(\"tree.select\", {\n node: node,\n deselected_node: deselected_node\n });\n openParents();\n }\n saveState();\n };\n JqTreeWidget.prototype._loadData = function (data, parentNode) {\n if (!data) {\n return;\n }\n else {\n this._triggerEvent(\"tree.load_data\", { tree_data: data });\n if (parentNode) {\n this._deselectNodes(parentNode);\n this._loadSubtree(data, parentNode);\n }\n else {\n this._initTree(data);\n }\n if (this.isDragging() && this.dndHandler) {\n this.dndHandler.refresh();\n }\n }\n };\n JqTreeWidget.prototype._deselectNodes = function (parentNode) {\n if (this.selectNodeHandler) {\n var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) {\n var n = selectedNodesUnderParent_1[_i];\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n };\n JqTreeWidget.prototype._loadSubtree = function (data, parentNode) {\n parentNode.loadFromData(data);\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n this._refreshElements(parentNode);\n };\n JqTreeWidget.prototype._loadDataFromUrl = function (urlInfoParam, parentNode, onFinished) {\n var urlInfo = urlInfoParam || this._getDataUrlInfo(parentNode);\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n };\n JqTreeWidget.prototype._loadFolderOnDemand = function (node, slide, on_finished) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n node.is_loading = true;\n this._loadDataFromUrl(null, node, function () {\n _this._openNode(node, slide, on_finished);\n });\n };\n JqTreeWidget.defaults = {\n animationSpeed: \"fast\",\n autoOpen: false,\n saveState: false,\n dragAndDrop: false,\n selectable: true,\n useContextMenu: true,\n onCanSelectNode: null,\n onSetStateFromStorage: null,\n onGetStateFromStorage: null,\n onCreateLi: null,\n onIsMoveHandle: null,\n // Can this node be moved?\n onCanMove: null,\n // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanMoveTo: null,\n onLoadFailed: null,\n autoEscape: true,\n dataUrl: null,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: null,\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n openedIcon: \"▼\",\n slide: true,\n nodeClass: node_1.Node,\n dataFilter: null,\n keyboardSupport: true,\n openFolderDelay: 500,\n rtl: false,\n onDragMove: null,\n onDragStop: null,\n buttonLeft: true,\n onLoading: null,\n tabIndex: 0\n };\n return JqTreeWidget;\n}(mouse_widget_1[\"default\"]));\nsimple_widget_1[\"default\"].register(JqTreeWidget, \"tree\");\n","\"use strict\";\nexports.__esModule = true;\nvar version = \"1.4.10\";\nexports[\"default\"] = version;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\nvar jQuery = require(\"jquery\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar DragAndDropHandler = /** @class */ (function () {\n function DragAndDropHandler(treeWidget) {\n this.treeWidget = treeWidget;\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n this.positionInfo = null;\n }\n DragAndDropHandler.prototype.mouseCapture = function (positionInfo) {\n var $element = jQuery(positionInfo.target);\n if (!this.mustCaptureElement($element)) {\n return null;\n }\n if (this.treeWidget.options.onIsMoveHandle &&\n !this.treeWidget.options.onIsMoveHandle($element)) {\n return null;\n }\n var nodeElement = this.treeWidget._getNodeElement($element);\n if (nodeElement && this.treeWidget.options.onCanMove) {\n if (!this.treeWidget.options.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n this.currentItem = nodeElement;\n return this.currentItem != null;\n };\n DragAndDropHandler.prototype.generateHitAreas = function () {\n if (!this.currentItem) {\n this.hitAreas = [];\n }\n else {\n var hitAreasGenerator = new HitAreasGenerator(this.treeWidget.tree, this.currentItem.node, this.getTreeDimensions().bottom);\n this.hitAreas = hitAreasGenerator.generate();\n }\n };\n DragAndDropHandler.prototype.mouseStart = function (positionInfo) {\n if (!this.currentItem ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return false;\n }\n else {\n this.refresh();\n var offset = jQuery(positionInfo.target).offset();\n var left = offset ? offset.left : 0;\n var top_1 = offset ? offset.top : 0;\n var node = this.currentItem.node;\n var nodeName = this.treeWidget.options.autoEscape\n ? util_1.htmlEscape(node.name)\n : node.name;\n this.dragElement = new DragElement(nodeName, positionInfo.pageX - left, positionInfo.pageY - top_1, this.treeWidget.element);\n this.isDragging = true;\n this.positionInfo = positionInfo;\n this.currentItem.$element.addClass(\"jqtree-moving\");\n return true;\n }\n };\n DragAndDropHandler.prototype.mouseDrag = function (positionInfo) {\n if (!this.currentItem ||\n !this.dragElement ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return false;\n }\n else {\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n this.positionInfo = positionInfo;\n var area = this.findHoveredArea(positionInfo.pageX, positionInfo.pageY);\n var canMoveTo = this.canMoveToArea(area);\n if (canMoveTo && area) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n }\n else {\n this.stopOpenFolderTimer();\n }\n this.updateDropHint();\n }\n }\n else {\n this.removeHover();\n this.removeDropHint();\n this.stopOpenFolderTimer();\n }\n if (!area) {\n if (this.treeWidget.options.onDragMove) {\n this.treeWidget.options.onDragMove(this.currentItem.node, positionInfo.originalEvent);\n }\n }\n return true;\n }\n };\n DragAndDropHandler.prototype.mouseStop = function (positionInfo) {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n var currentItem = this.currentItem;\n if (this.currentItem) {\n this.currentItem.$element.removeClass(\"jqtree-moving\");\n this.currentItem = null;\n }\n this.isDragging = false;\n this.positionInfo = null;\n if (!this.hoveredArea && currentItem) {\n if (this.treeWidget.options.onDragStop) {\n this.treeWidget.options.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n return false;\n };\n DragAndDropHandler.prototype.refresh = function () {\n this.removeHitAreas();\n if (this.currentItem) {\n this.generateHitAreas();\n this.currentItem = this.treeWidget._getNodeElementForNode(this.currentItem.node);\n if (this.isDragging) {\n this.currentItem.$element.addClass(\"jqtree-moving\");\n }\n }\n };\n DragAndDropHandler.prototype.mustCaptureElement = function ($element) {\n return !$element.is(\"input,select,textarea\");\n };\n DragAndDropHandler.prototype.canMoveToArea = function (area) {\n if (!area || !this.currentItem) {\n return false;\n }\n else if (this.treeWidget.options.onCanMoveTo) {\n var position_name = node_1.getPositionName(area.position);\n return this.treeWidget.options.onCanMoveTo(this.currentItem.node, area.node, position_name);\n }\n else {\n return true;\n }\n };\n DragAndDropHandler.prototype.removeHitAreas = function () {\n this.hitAreas = [];\n };\n DragAndDropHandler.prototype.clear = function () {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n };\n DragAndDropHandler.prototype.removeDropHint = function () {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n };\n DragAndDropHandler.prototype.removeHover = function () {\n this.hoveredArea = null;\n };\n DragAndDropHandler.prototype.findHoveredArea = function (x, y) {\n var dimensions = this.getTreeDimensions();\n if (x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom) {\n return null;\n }\n var low = 0;\n var high = this.hitAreas.length;\n while (low < high) {\n // tslint:disable-next-line: no-bitwise\n var mid = (low + high) >> 1;\n var area = this.hitAreas[mid];\n if (y < area.top) {\n high = mid;\n }\n else if (y > area.bottom) {\n low = mid + 1;\n }\n else {\n return area;\n }\n }\n return null;\n };\n DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) {\n var node = area.node;\n return (node.isFolder() &&\n !node.is_open &&\n area.position === node_1.Position.Inside);\n };\n DragAndDropHandler.prototype.updateDropHint = function () {\n if (!this.hoveredArea) {\n return;\n }\n // remove previous drop hint\n this.removeDropHint();\n // add new drop hint\n var node_element = this.treeWidget._getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = node_element.addDropHint(this.hoveredArea.position);\n };\n DragAndDropHandler.prototype.startOpenFolderTimer = function (folder) {\n var _this = this;\n var openFolder = function () {\n _this.treeWidget._openNode(folder, _this.treeWidget.options.slide, function () {\n _this.refresh();\n _this.updateDropHint();\n });\n };\n this.stopOpenFolderTimer();\n this.openFolderTimer = window.setTimeout(openFolder, this.treeWidget.options.openFolderDelay);\n };\n DragAndDropHandler.prototype.stopOpenFolderTimer = function () {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n };\n DragAndDropHandler.prototype.moveItem = function (positionInfo) {\n var _this = this;\n if (this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== node_1.Position.None &&\n this.canMoveToArea(this.hoveredArea)) {\n var moved_node_1 = this.currentItem.node;\n var target_node_1 = this.hoveredArea.node;\n var position_1 = this.hoveredArea.position;\n var previous_parent = moved_node_1.parent;\n if (position_1 === node_1.Position.Inside) {\n this.hoveredArea.node.is_open = true;\n }\n var doMove = function () {\n _this.treeWidget.tree.moveNode(moved_node_1, target_node_1, position_1);\n _this.treeWidget.element.empty();\n _this.treeWidget._refreshElements(null);\n };\n var event_1 = this.treeWidget._triggerEvent(\"tree.move\", {\n move_info: {\n moved_node: moved_node_1,\n target_node: target_node_1,\n position: node_1.getPositionName(position_1),\n previous_parent: previous_parent,\n do_move: doMove,\n original_event: positionInfo.originalEvent\n }\n });\n if (!event_1.isDefaultPrevented()) {\n doMove();\n }\n }\n };\n DragAndDropHandler.prototype.getTreeDimensions = function () {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n var offset = this.treeWidget.element.offset();\n if (!offset) {\n return { left: 0, top: 0, right: 0, bottom: 0 };\n }\n else {\n var el = this.treeWidget.element;\n var width = el.width() || 0;\n var height = el.height() || 0;\n var left = offset.left + this.treeWidget._getScrollLeft();\n return {\n left: left,\n top: offset.top,\n right: left + width,\n bottom: offset.top + height + 16\n };\n }\n };\n return DragAndDropHandler;\n}());\nexports.DragAndDropHandler = DragAndDropHandler;\nvar VisibleNodeIterator = /** @class */ (function () {\n function VisibleNodeIterator(tree) {\n this.tree = tree;\n }\n VisibleNodeIterator.prototype.iterate = function () {\n var _this = this;\n var isFirstNode = true;\n var _iterateNode = function (node, nextNode) {\n var mustIterateInside = (node.is_open || !node.element) && node.hasChildren();\n var $element = null;\n if (node.element) {\n $element = jQuery(node.element);\n if (!$element.is(\":visible\")) {\n return;\n }\n if (isFirstNode) {\n _this.handleFirstNode(node);\n isFirstNode = false;\n }\n if (!node.hasChildren()) {\n _this.handleNode(node, nextNode, $element);\n }\n else if (node.is_open) {\n if (!_this.handleOpenFolder(node, $element)) {\n mustIterateInside = false;\n }\n }\n else {\n _this.handleClosedFolder(node, nextNode, $element);\n }\n }\n if (mustIterateInside) {\n var children_length_1 = node.children.length;\n node.children.forEach(function (_, i) {\n if (i === children_length_1 - 1) {\n _iterateNode(node.children[i], null);\n }\n else {\n _iterateNode(node.children[i], node.children[i + 1]);\n }\n });\n if (node.is_open && $element) {\n _this.handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n _iterateNode(this.tree, null);\n };\n return VisibleNodeIterator;\n}());\nvar HitAreasGenerator = /** @class */ (function (_super) {\n __extends(HitAreasGenerator, _super);\n function HitAreasGenerator(tree, currentNode, treeBottom) {\n var _this = _super.call(this, tree) || this;\n _this.currentNode = currentNode;\n _this.treeBottom = treeBottom;\n return _this;\n }\n HitAreasGenerator.prototype.generate = function () {\n this.positions = [];\n this.lastTop = 0;\n this.iterate();\n return this.generateHitAreas(this.positions);\n };\n HitAreasGenerator.prototype.generateHitAreas = function (positions) {\n var previousTop = -1;\n var group = [];\n var hitAreas = [];\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n if (position.top !== previousTop && group.length) {\n if (group.length) {\n this.generateHitAreasForGroup(hitAreas, group, previousTop, position.top);\n }\n previousTop = position.top;\n group = [];\n }\n group.push(position);\n }\n this.generateHitAreasForGroup(hitAreas, group, previousTop, this.treeBottom);\n return hitAreas;\n };\n HitAreasGenerator.prototype.handleOpenFolder = function (node, $element) {\n if (node === this.currentNode) {\n // Cannot move inside current item\n // Stop iterating\n return false;\n }\n // Cannot move before current item\n if (node.children[0] !== this.currentNode) {\n this.addPosition(node, node_1.Position.Inside, this.getTop($element));\n }\n // Continue iterating\n return true;\n };\n HitAreasGenerator.prototype.handleClosedFolder = function (node, nextNode, $element) {\n var top = this.getTop($element);\n if (node === this.currentNode) {\n // Cannot move after current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.Inside, top);\n // Cannot move before current item\n if (nextNode !== this.currentNode) {\n this.addPosition(node, node_1.Position.After, top);\n }\n }\n };\n HitAreasGenerator.prototype.handleFirstNode = function (node) {\n if (node !== this.currentNode) {\n this.addPosition(node, node_1.Position.Before, this.getTop(jQuery(node.element)));\n }\n };\n HitAreasGenerator.prototype.handleAfterOpenFolder = function (node, next_node) {\n if (node === this.currentNode || next_node === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, node_1.Position.None, this.lastTop);\n }\n else {\n this.addPosition(node, node_1.Position.After, this.lastTop);\n }\n };\n HitAreasGenerator.prototype.handleNode = function (node, nextNode, $element) {\n var top = this.getTop($element);\n if (node === this.currentNode) {\n // Cannot move inside current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.Inside, top);\n }\n if (nextNode === this.currentNode || node === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.After, top);\n }\n };\n HitAreasGenerator.prototype.getTop = function ($element) {\n var offset = $element.offset();\n return offset ? offset.top : 0;\n };\n HitAreasGenerator.prototype.addPosition = function (node, position, top) {\n var area = {\n top: top,\n bottom: 0,\n node: node,\n position: position\n };\n this.positions.push(area);\n this.lastTop = top;\n };\n HitAreasGenerator.prototype.generateHitAreasForGroup = function (hitAreas, positionsInGroup, top, bottom) {\n // limit positions in group\n var position_count = Math.min(positionsInGroup.length, 4);\n var area_height = Math.round((bottom - top) / position_count);\n var area_top = top;\n var i = 0;\n while (i < position_count) {\n var position = positionsInGroup[i];\n hitAreas.push({\n top: area_top,\n bottom: area_top + area_height,\n node: position.node,\n position: position.position\n });\n area_top += area_height;\n i += 1;\n }\n };\n return HitAreasGenerator;\n}(VisibleNodeIterator));\nexports.HitAreasGenerator = HitAreasGenerator;\nvar DragElement = /** @class */ (function () {\n function DragElement(node_name, offset_x, offset_y, $tree) {\n this.offsetX = offset_x;\n this.offsetY = offset_y;\n this.$element = jQuery(\"\" + node_name + \"\");\n this.$element.css(\"position\", \"absolute\");\n $tree.append(this.$element);\n }\n DragElement.prototype.move = function (pageX, pageY) {\n this.$element.offset({\n left: pageX - this.offsetX,\n top: pageY - this.offsetY\n });\n };\n DragElement.prototype.remove = function () {\n this.$element.remove();\n };\n return DragElement;\n}());\n","\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar ElementsRenderer = /** @class */ (function () {\n function ElementsRenderer(treeWidget) {\n this.treeWidget = treeWidget;\n this.openedIconElement = this.createButtonElement(treeWidget.options.openedIcon);\n this.closedIconElement = this.createButtonElement(treeWidget.options.closedIcon);\n }\n ElementsRenderer.prototype.render = function (fromNode) {\n if (fromNode && fromNode.parent) {\n this.renderFromNode(fromNode);\n }\n else {\n this.renderFromRoot();\n }\n };\n ElementsRenderer.prototype.renderFromRoot = function () {\n var $element = this.treeWidget.element;\n $element.empty();\n this.createDomElements($element[0], this.treeWidget.tree.children, true, 1);\n };\n ElementsRenderer.prototype.renderFromNode = function (node) {\n // remember current li\n var $previousLi = jQuery(node.element);\n // create element\n var li = this.createLi(node, node.getLevel());\n this.attachNodeData(node, li);\n // add element to dom\n $previousLi.after(li);\n // remove previous li\n $previousLi.remove();\n // create children\n if (node.children) {\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n };\n ElementsRenderer.prototype.createDomElements = function (element, children, isRootNode, level) {\n var ul = this.createUl(isRootNode);\n element.appendChild(ul);\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var child = children_1[_i];\n var li = this.createLi(child, level);\n ul.appendChild(li);\n this.attachNodeData(child, li);\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n };\n ElementsRenderer.prototype.attachNodeData = function (node, li) {\n node.element = li;\n jQuery(li).data(\"node\", node);\n };\n ElementsRenderer.prototype.createUl = function (isRootNode) {\n var classString;\n var role;\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n }\n else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n if (this.treeWidget.options.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n var ul = document.createElement(\"ul\");\n ul.className = \"jqtree_common \" + classString;\n ul.setAttribute(\"role\", role);\n return ul;\n };\n ElementsRenderer.prototype.createLi = function (node, level) {\n var isSelected = Boolean(this.treeWidget.selectNodeHandler &&\n this.treeWidget.selectNodeHandler.isNodeSelected(node));\n var li = node.isFolder()\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n if (this.treeWidget.options.onCreateLi) {\n this.treeWidget.options.onCreateLi(node, jQuery(li), isSelected);\n }\n return li;\n };\n ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) {\n var buttonClasses = this.getButtonClasses(node);\n var folderClasses = this.getFolderClasses(node, isSelected);\n var iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n // li\n var li = document.createElement(\"li\");\n li.className = \"jqtree_common \" + folderClasses;\n li.setAttribute(\"role\", \"presentation\");\n // div\n var div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n li.appendChild(div);\n // button link\n var buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n buttonLink.appendChild(iconElement.cloneNode(true));\n buttonLink.setAttribute(\"role\", \"presentation\");\n buttonLink.setAttribute(\"aria-hidden\", \"true\");\n if (this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n // title span\n div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, true));\n if (!this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n return li;\n };\n ElementsRenderer.prototype.createNodeLi = function (node, level, isSelected) {\n var liClasses = [\"jqtree_common\"];\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n var classString = liClasses.join(\" \");\n // li\n var li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"presentation\");\n // div\n var div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n li.appendChild(div);\n // title span\n div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, false));\n return li;\n };\n ElementsRenderer.prototype.createTitleSpan = function (nodeName, level, isSelected, isOpen, isFolder) {\n var titleSpan = document.createElement(\"span\");\n var classes = \"jqtree-title jqtree_common\";\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n titleSpan.className = classes;\n titleSpan.setAttribute(\"role\", \"treeitem\");\n titleSpan.setAttribute(\"aria-level\", \"\" + level);\n titleSpan.setAttribute(\"aria-selected\", util_1.getBoolString(isSelected));\n titleSpan.setAttribute(\"aria-expanded\", util_1.getBoolString(isOpen));\n if (isSelected) {\n titleSpan.setAttribute(\"tabindex\", this.treeWidget.options.tabIndex);\n }\n titleSpan.innerHTML = this.escapeIfNecessary(nodeName);\n return titleSpan;\n };\n ElementsRenderer.prototype.getButtonClasses = function (node) {\n var classes = [\"jqtree-toggler\", \"jqtree_common\"];\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n if (this.treeWidget.options.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n }\n else {\n classes.push(\"jqtree-toggler-right\");\n }\n return classes.join(\" \");\n };\n ElementsRenderer.prototype.getFolderClasses = function (node, isSelected) {\n var classes = [\"jqtree-folder\"];\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n return classes.join(\" \");\n };\n ElementsRenderer.prototype.escapeIfNecessary = function (value) {\n if (this.treeWidget.options.autoEscape) {\n return util_1.htmlEscape(value);\n }\n else {\n return value;\n }\n };\n ElementsRenderer.prototype.createButtonElement = function (value) {\n if (typeof value === \"string\") {\n // convert value to html\n var div = document.createElement(\"div\");\n div.innerHTML = value;\n return document.createTextNode(div.innerHTML);\n }\n else {\n return jQuery(value)[0];\n }\n };\n return ElementsRenderer;\n}());\nexports[\"default\"] = ElementsRenderer;\n","\"use strict\";\nexports.__esModule = true;\nvar DataLoader = /** @class */ (function () {\n function DataLoader(treeWidget) {\n this.treeWidget = treeWidget;\n }\n DataLoader.prototype.loadFromUrl = function (urlInfo, parentNode, onFinished) {\n var _this = this;\n if (!urlInfo) {\n return;\n }\n var $el = this.getDomElement(parentNode);\n this.addLoadingClass($el);\n this.notifyLoading(true, parentNode, $el);\n var stopLoading = function () {\n _this.removeLoadingClass($el);\n _this.notifyLoading(false, parentNode, $el);\n };\n var handleSuccess = function (data) {\n stopLoading();\n _this.treeWidget.loadData(_this.parseData(data), parentNode);\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n var handleError = function (jqXHR) {\n stopLoading();\n var onLoadFailed = _this.treeWidget.options.onLoadFailed;\n if (onLoadFailed) {\n onLoadFailed(jqXHR);\n }\n };\n this.submitRequest(urlInfo, handleSuccess, handleError);\n };\n DataLoader.prototype.addLoadingClass = function ($el) {\n if ($el) {\n $el.addClass(\"jqtree-loading\");\n }\n };\n DataLoader.prototype.removeLoadingClass = function ($el) {\n if ($el) {\n $el.removeClass(\"jqtree-loading\");\n }\n };\n DataLoader.prototype.getDomElement = function (parentNode) {\n if (parentNode) {\n return jQuery(parentNode.element);\n }\n else {\n return this.treeWidget.element;\n }\n };\n DataLoader.prototype.notifyLoading = function (isLoading, node, $el) {\n var onLoading = this.treeWidget.options.onLoading;\n if (onLoading) {\n onLoading(isLoading, node, $el);\n }\n this.treeWidget._triggerEvent(\"tree.loading_data\", {\n isLoading: isLoading,\n node: node,\n $el: $el\n });\n };\n DataLoader.prototype.submitRequest = function (urlInfo, handleSuccess, handleError) {\n var ajaxSettings = jQuery.extend({ method: \"GET\" }, typeof urlInfo === \"string\" ? { url: urlInfo } : urlInfo, {\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError\n });\n ajaxSettings.method = ajaxSettings.method.toUpperCase();\n jQuery.ajax(ajaxSettings);\n };\n DataLoader.prototype.parseData = function (data) {\n var dataFilter = this.treeWidget.options.dataFilter;\n var parsedData = data instanceof Array || typeof data === \"object\"\n ? data\n : data != null\n ? jQuery.parseJSON(data)\n : [];\n return dataFilter ? dataFilter(parsedData) : parsedData;\n };\n return DataLoader;\n}());\nexports[\"default\"] = DataLoader;\n","\"use strict\";\nexports.__esModule = true;\nvar KeyHandler = /** @class */ (function () {\n function KeyHandler(treeWidget) {\n var _this = this;\n this.handleKeyDown = function (e) {\n if (!_this.canHandleKeyboard()) {\n return true;\n }\n else {\n var key = e.which;\n switch (key) {\n case KeyHandler.DOWN:\n return _this.moveDown();\n case KeyHandler.UP:\n return _this.moveUp();\n case KeyHandler.RIGHT:\n return _this.moveRight();\n case KeyHandler.LEFT:\n return _this.moveLeft();\n default:\n return true;\n }\n }\n };\n this.treeWidget = treeWidget;\n if (treeWidget.options.keyboardSupport) {\n jQuery(document).on(\"keydown.jqtree\", this.handleKeyDown);\n }\n }\n KeyHandler.prototype.deinit = function () {\n jQuery(document).off(\"keydown.jqtree\");\n };\n KeyHandler.prototype.moveDown = function () {\n var node = this.treeWidget.getSelectedNode();\n if (node) {\n return this.selectNode(node.getNextNode());\n }\n else {\n return false;\n }\n };\n KeyHandler.prototype.moveUp = function () {\n var node = this.treeWidget.getSelectedNode();\n if (node) {\n return this.selectNode(node.getPreviousNode());\n }\n else {\n return false;\n }\n };\n KeyHandler.prototype.moveRight = function () {\n var node = this.treeWidget.getSelectedNode();\n if (!node) {\n return true;\n }\n else if (!node.isFolder()) {\n return true;\n }\n else {\n // folder node\n if (node.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(node.getNextNode());\n }\n else {\n // Right expands a closed node\n this.treeWidget.openNode(node);\n return false;\n }\n }\n };\n KeyHandler.prototype.moveLeft = function () {\n var node = this.treeWidget.getSelectedNode();\n if (!node) {\n return true;\n }\n else if (node.isFolder() && node.is_open) {\n // Left on an open node closes the node\n this.treeWidget.closeNode(node);\n return false;\n }\n else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(node.getParent());\n }\n };\n KeyHandler.prototype.selectNode = function (node) {\n if (!node) {\n return true;\n }\n else {\n this.treeWidget.selectNode(node);\n if (this.treeWidget.scrollHandler &&\n !this.treeWidget.scrollHandler.isScrolledIntoView(jQuery(node.element).find(\".jqtree-element\"))) {\n this.treeWidget.scrollToNode(node);\n }\n return false;\n }\n };\n KeyHandler.prototype.canHandleKeyboard = function () {\n return (this.treeWidget.options.keyboardSupport &&\n this.isFocusOnTree() &&\n this.treeWidget.getSelectedNode() != null);\n };\n KeyHandler.prototype.isFocusOnTree = function () {\n var activeElement = document.activeElement;\n return Boolean(activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.treeWidget._containsElement(activeElement));\n };\n KeyHandler.LEFT = 37;\n KeyHandler.UP = 38;\n KeyHandler.RIGHT = 39;\n KeyHandler.DOWN = 40;\n return KeyHandler;\n}());\nexports[\"default\"] = KeyHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\n/*\nThis widget does the same a the mouse widget in jqueryui.\n*/\nvar simple_widget_1 = require(\"./simple.widget\");\nvar MouseWidget = /** @class */ (function (_super) {\n __extends(MouseWidget, _super);\n function MouseWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.mouseDown = function (e) {\n // Is left mouse button?\n if (e.which !== 1) {\n return;\n }\n var result = _this._handleMouseDown(_this._getPositionInfo(e));\n if (result) {\n e.preventDefault();\n }\n return result;\n };\n _this.mouseMove = function (e) {\n return _this._handleMouseMove(e, _this._getPositionInfo(e));\n };\n _this.mouseUp = function (e) {\n return _this._handleMouseUp(_this._getPositionInfo(e));\n };\n _this.touchStart = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this._handleMouseDown(_this._getPositionInfo(touch));\n };\n _this.touchMove = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this._handleMouseMove(e, _this._getPositionInfo(touch));\n };\n _this.touchEnd = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this._handleMouseUp(_this._getPositionInfo(touch));\n };\n return _this;\n }\n MouseWidget.prototype.setMouseDelay = function (mouseDelay) {\n this.mouseDelay = mouseDelay;\n };\n MouseWidget.prototype._init = function () {\n this.$el.on(\"mousedown.mousewidget\", this.mouseDown);\n this.$el.on(\"touchstart.mousewidget\", this.touchStart);\n this.isMouseStarted = false;\n this.mouseDelay = 0;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = true;\n this.mouseDownInfo = null;\n };\n MouseWidget.prototype._deinit = function () {\n this.$el.off(\"mousedown.mousewidget\");\n this.$el.off(\"touchstart.mousewidget\");\n var $document = jQuery(document);\n $document.off(\"mousemove.mousewidget\");\n $document.off(\"mouseup.mousewidget\");\n };\n MouseWidget.prototype._handleMouseDown = function (positionInfo) {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this._handleMouseUp(positionInfo);\n }\n this.mouseDownInfo = positionInfo;\n if (!this._mouseCapture(positionInfo)) {\n return;\n }\n this._handleStartMouse();\n return true;\n };\n MouseWidget.prototype._handleStartMouse = function () {\n var $document = jQuery(document);\n $document.on(\"mousemove.mousewidget\", this.mouseMove);\n $document.on(\"touchmove.mousewidget\", this.touchMove);\n $document.on(\"mouseup.mousewidget\", this.mouseUp);\n $document.on(\"touchend.mousewidget\", this.touchEnd);\n if (this.mouseDelay) {\n this._startMouseDelayTimer();\n }\n };\n MouseWidget.prototype._startMouseDelayTimer = function () {\n var _this = this;\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n this.mouseDelayTimer = window.setTimeout(function () {\n _this.isMouseDelayMet = true;\n }, this.mouseDelay);\n this.isMouseDelayMet = false;\n };\n MouseWidget.prototype._handleMouseMove = function (e, positionInfo) {\n if (this.isMouseStarted) {\n this._mouseDrag(positionInfo);\n return e.preventDefault();\n }\n if (this.mouseDelay && !this.isMouseDelayMet) {\n return true;\n }\n if (this.mouseDownInfo) {\n this.isMouseStarted =\n this._mouseStart(this.mouseDownInfo) !== false;\n }\n if (this.isMouseStarted) {\n this._mouseDrag(positionInfo);\n }\n else {\n this._handleMouseUp(positionInfo);\n }\n return !this.isMouseStarted;\n };\n MouseWidget.prototype._getPositionInfo = function (e) {\n return {\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target,\n originalEvent: e\n };\n };\n MouseWidget.prototype._handleMouseUp = function (positionInfo) {\n var $document = jQuery(document);\n $document.off(\"mousemove.mousewidget\");\n $document.off(\"touchmove.mousewidget\");\n $document.off(\"mouseup.mousewidget\");\n $document.off(\"touchend.mousewidget\");\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this._mouseStop(positionInfo);\n }\n };\n return MouseWidget;\n}(simple_widget_1[\"default\"]));\nexports[\"default\"] = MouseWidget;\n","\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar SaveStateHandler = /** @class */ (function () {\n function SaveStateHandler(treeWidget) {\n this.treeWidget = treeWidget;\n }\n SaveStateHandler.prototype.saveState = function () {\n var state = JSON.stringify(this.getState());\n if (this.treeWidget.options.onSetStateFromStorage) {\n this.treeWidget.options.onSetStateFromStorage(state);\n }\n else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n };\n SaveStateHandler.prototype.getStateFromStorage = function () {\n var jsonData = this._loadFromStorage();\n if (jsonData) {\n return this._parseState(jsonData);\n }\n else {\n return null;\n }\n };\n SaveStateHandler.prototype.getState = function () {\n var _this = this;\n var getOpenNodeIds = function () {\n var openNodes = [];\n _this.treeWidget.tree.iterate(function (node) {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n return openNodes;\n };\n var getSelectedNodeIds = function () {\n return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; });\n };\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds()\n };\n };\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n SaveStateHandler.prototype.setInitialState = function (state) {\n if (!state) {\n return false;\n }\n else {\n var mustLoadOnDemand = false;\n if (state.open_nodes) {\n mustLoadOnDemand = this._openInitialNodes(state.open_nodes);\n }\n if (state.selected_node) {\n this._resetSelection();\n this._selectInitialNodes(state.selected_node);\n }\n return mustLoadOnDemand;\n }\n };\n SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cb_finished) {\n if (state) {\n this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cb_finished);\n }\n else {\n cb_finished();\n }\n };\n SaveStateHandler.prototype.getNodeIdToBeSelected = function () {\n var state = this.getStateFromStorage();\n if (state && state.selected_node) {\n return state.selected_node[0];\n }\n else {\n return null;\n }\n };\n SaveStateHandler.prototype._parseState = function (jsonData) {\n var state = jQuery.parseJSON(jsonData);\n // Check if selected_node is an int (instead of an array)\n if (state && state.selected_node && util_1.isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n return state;\n };\n SaveStateHandler.prototype._loadFromStorage = function () {\n if (this.treeWidget.options.onGetStateFromStorage) {\n return this.treeWidget.options.onGetStateFromStorage();\n }\n else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n }\n };\n SaveStateHandler.prototype._openInitialNodes = function (nodeIds) {\n var mustLoadOnDemand = false;\n for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) {\n var node_id = nodeIds_1[_i];\n var node = this.treeWidget.getNodeById(node_id);\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n }\n else {\n mustLoadOnDemand = true;\n }\n }\n }\n return mustLoadOnDemand;\n };\n SaveStateHandler.prototype._selectInitialNodes = function (nodeIds) {\n var select_count = 0;\n for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) {\n var node_id = nodeIds_2[_i];\n var node = this.treeWidget.getNodeById(node_id);\n if (node) {\n select_count += 1;\n if (this.treeWidget.selectNodeHandler) {\n this.treeWidget.selectNodeHandler.addToSelection(node);\n }\n }\n }\n return select_count !== 0;\n };\n SaveStateHandler.prototype._resetSelection = function () {\n var selectNodeHandler = this.treeWidget.selectNodeHandler;\n if (selectNodeHandler) {\n var selectedNodes = selectNodeHandler.getSelectedNodes();\n selectedNodes.forEach(function (node) {\n selectNodeHandler.removeFromSelection(node);\n });\n }\n };\n SaveStateHandler.prototype._setInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) {\n var _this = this;\n var loadingCount = 0;\n var nodeIds = nodeIdsParam;\n var openNodes = function () {\n var newNodesIds = [];\n for (var _i = 0, nodeIds_3 = nodeIds; _i < nodeIds_3.length; _i++) {\n var node_id = nodeIds_3[_i];\n var node = _this.treeWidget.getNodeById(node_id);\n if (!node) {\n newNodesIds.push(node_id);\n }\n else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n }\n else {\n _this.treeWidget._openNode(node, false, null);\n }\n }\n }\n }\n nodeIds = newNodesIds;\n if (_this._selectInitialNodes(selectedNodes)) {\n _this.treeWidget._refreshElements(null);\n }\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n var loadAndOpenNode = function (node) {\n loadingCount += 1;\n _this.treeWidget._openNode(node, false, function () {\n loadingCount -= 1;\n openNodes();\n });\n };\n openNodes();\n };\n SaveStateHandler.prototype.getKeyName = function () {\n if (typeof this.treeWidget.options.saveState === \"string\") {\n return this.treeWidget.options.saveState;\n }\n else {\n return \"tree\";\n }\n };\n SaveStateHandler.prototype.supportsLocalStorage = function () {\n var testSupport = function () {\n // Is local storage supported?\n if (localStorage == null) {\n return false;\n }\n else {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n var key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n }\n catch (error) {\n return false;\n }\n return true;\n }\n };\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n return this._supportsLocalStorage;\n };\n return SaveStateHandler;\n}());\nexports[\"default\"] = SaveStateHandler;\n","\"use strict\";\nexports.__esModule = true;\nvar ScrollHandler = /** @class */ (function () {\n function ScrollHandler(tree_widget) {\n this.treeWidget = tree_widget;\n this.previousTop = -1;\n this.isInitialized = false;\n }\n ScrollHandler.prototype.checkScrolling = function () {\n this.ensureInit();\n this.checkVerticalScrolling();\n this.checkHorizontalScrolling();\n };\n ScrollHandler.prototype.scrollToY = function (top) {\n this.ensureInit();\n if (this.$scrollParent) {\n this.$scrollParent[0].scrollTop = top;\n }\n else {\n var offset = this.treeWidget.$el.offset();\n var treeTop = offset ? offset.top : 0;\n jQuery(document).scrollTop(top + treeTop);\n }\n };\n ScrollHandler.prototype.isScrolledIntoView = function ($element) {\n this.ensureInit();\n var elementBottom;\n var viewBottom;\n var elementTop;\n var viewTop;\n var elHeight = $element.height() || 0;\n if (this.$scrollParent) {\n viewTop = 0;\n viewBottom = this.$scrollParent.height() || 0;\n var offset = $element.offset();\n var originalTop = offset ? offset.top : 0;\n elementTop = originalTop - this.scrollParentTop;\n elementBottom = elementTop + elHeight;\n }\n else {\n viewTop = jQuery(window).scrollTop() || 0;\n var windowHeight = jQuery(window).height() || 0;\n viewBottom = viewTop + windowHeight;\n var offset = $element.offset();\n elementTop = offset ? offset.top : 0;\n elementBottom = elementTop + elHeight;\n }\n return elementBottom <= viewBottom && elementTop >= viewTop;\n };\n ScrollHandler.prototype.getScrollLeft = function () {\n if (!this.$scrollParent) {\n return 0;\n }\n else {\n return this.$scrollParent.scrollLeft() || 0;\n }\n };\n ScrollHandler.prototype.initScrollParent = function () {\n var _this = this;\n var getParentWithOverflow = function () {\n var cssAttributes = [\"overflow\", \"overflow-y\"];\n var hasOverFlow = function ($el) {\n for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) {\n var attr = cssAttributes_1[_i];\n var overflowValue = $el.css(attr);\n if (overflowValue === \"auto\" ||\n overflowValue === \"scroll\") {\n return true;\n }\n }\n return false;\n };\n if (hasOverFlow(_this.treeWidget.$el)) {\n return _this.treeWidget.$el;\n }\n for (var _i = 0, _a = _this.treeWidget.$el.parents().get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var $el = jQuery(el);\n if (hasOverFlow($el)) {\n return $el;\n }\n }\n return null;\n };\n var setDocumentAsScrollParent = function () {\n _this.scrollParentTop = 0;\n _this.$scrollParent = null;\n };\n if (this.treeWidget.$el.css(\"position\") === \"fixed\") {\n setDocumentAsScrollParent();\n }\n var $scrollParent = getParentWithOverflow();\n if ($scrollParent &&\n $scrollParent.length &&\n $scrollParent[0].tagName !== \"HTML\") {\n this.$scrollParent = $scrollParent;\n var offset = this.$scrollParent.offset();\n this.scrollParentTop = offset ? offset.top : 0;\n }\n else {\n setDocumentAsScrollParent();\n }\n this.isInitialized = true;\n };\n ScrollHandler.prototype.ensureInit = function () {\n if (!this.isInitialized) {\n this.initScrollParent();\n }\n };\n ScrollHandler.prototype.handleVerticalScrollingWithScrollParent = function (area) {\n var scrollParent = this.$scrollParent && this.$scrollParent[0];\n if (!scrollParent) {\n return;\n }\n var distanceBottom = this.scrollParentTop + scrollParent.offsetHeight - area.bottom;\n if (distanceBottom < 20) {\n scrollParent.scrollTop += 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n else if (area.top - this.scrollParentTop < 20) {\n scrollParent.scrollTop -= 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n };\n ScrollHandler.prototype.handleVerticalScrollingWithDocument = function (area) {\n var scrollTop = jQuery(document).scrollTop() || 0;\n var distanceTop = area.top - scrollTop;\n if (distanceTop < 20) {\n jQuery(document).scrollTop(scrollTop - 20);\n }\n else {\n var windowHeight = jQuery(window).height() || 0;\n if (windowHeight - (area.bottom - scrollTop) < 20) {\n jQuery(document).scrollTop(scrollTop + 20);\n }\n }\n };\n ScrollHandler.prototype.checkVerticalScrolling = function () {\n var hoveredArea = this.treeWidget.dndHandler &&\n this.treeWidget.dndHandler.hoveredArea;\n if (hoveredArea && hoveredArea.top !== this.previousTop) {\n this.previousTop = hoveredArea.top;\n if (this.$scrollParent) {\n this.handleVerticalScrollingWithScrollParent(hoveredArea);\n }\n else {\n this.handleVerticalScrollingWithDocument(hoveredArea);\n }\n }\n };\n ScrollHandler.prototype.checkHorizontalScrolling = function () {\n var positionInfo = this.treeWidget.dndHandler &&\n this.treeWidget.dndHandler.positionInfo;\n if (!positionInfo) {\n return;\n }\n if (this.$scrollParent) {\n this.handleHorizontalScrollingWithParent(positionInfo);\n }\n else {\n this.handleHorizontalScrollingWithDocument(positionInfo);\n }\n };\n ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) {\n if (positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return;\n }\n var $scrollParent = this.$scrollParent;\n var scrollParentOffset = $scrollParent && $scrollParent.offset();\n if (!($scrollParent && scrollParentOffset)) {\n return;\n }\n var scrollParent = $scrollParent[0];\n var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth <\n scrollParent.scrollWidth;\n var canScrollLeft = scrollParent.scrollLeft > 0;\n var rightEdge = scrollParentOffset.left + scrollParent.clientWidth;\n var leftEdge = scrollParentOffset.left;\n var isNearRightEdge = positionInfo.pageX > rightEdge - 20;\n var isNearLeftEdge = positionInfo.pageX < leftEdge + 20;\n if (isNearRightEdge && canScrollRight) {\n scrollParent.scrollLeft = Math.min(scrollParent.scrollLeft + 20, scrollParent.scrollWidth);\n }\n else if (isNearLeftEdge && canScrollLeft) {\n scrollParent.scrollLeft = Math.max(scrollParent.scrollLeft - 20, 0);\n }\n };\n ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) {\n if (positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return;\n }\n var $document = jQuery(document);\n var scrollLeft = $document.scrollLeft() || 0;\n var windowWidth = jQuery(window).width() || 0;\n var canScrollLeft = scrollLeft > 0;\n var isNearRightEdge = positionInfo.pageX > windowWidth - 20;\n var isNearLeftEdge = positionInfo.pageX - scrollLeft < 20;\n if (isNearRightEdge) {\n $document.scrollLeft(scrollLeft + 20);\n }\n else if (isNearLeftEdge && canScrollLeft) {\n $document.scrollLeft(Math.max(scrollLeft - 20, 0));\n }\n };\n return ScrollHandler;\n}());\nexports[\"default\"] = ScrollHandler;\n","\"use strict\";\nexports.__esModule = true;\nvar SelectNodeHandler = /** @class */ (function () {\n function SelectNodeHandler(tree_widget) {\n this.treeWidget = tree_widget;\n this.clear();\n }\n SelectNodeHandler.prototype.getSelectedNode = function () {\n var selectedNodes = this.getSelectedNodes();\n if (selectedNodes.length) {\n return selectedNodes[0];\n }\n else {\n return false;\n }\n };\n SelectNodeHandler.prototype.getSelectedNodes = function () {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n }\n else {\n var selectedNodes = [];\n for (var id in this.selectedNodes) {\n if (this.selectedNodes.hasOwnProperty(id)) {\n var node = this.treeWidget.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n }\n }\n return selectedNodes;\n }\n };\n SelectNodeHandler.prototype.getSelectedNodesUnder = function (parent) {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n }\n else {\n return [];\n }\n }\n else {\n var selectedNodes = [];\n for (var id in this.selectedNodes) {\n if (this.selectedNodes.hasOwnProperty(id)) {\n var node = this.treeWidget.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n return selectedNodes;\n }\n };\n SelectNodeHandler.prototype.isNodeSelected = function (node) {\n if (!node) {\n return false;\n }\n else if (node.id != null) {\n if (this.selectedNodes[node.id]) {\n return true;\n }\n else {\n return false;\n }\n }\n else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n }\n else {\n return false;\n }\n };\n SelectNodeHandler.prototype.clear = function () {\n this.selectedNodes = {};\n this.selectedSingleNode = null;\n };\n SelectNodeHandler.prototype.removeFromSelection = function (node, includeChildren) {\n var _this = this;\n if (includeChildren === void 0) { includeChildren = false; }\n if (node.id == null) {\n if (this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element) {\n this.selectedSingleNode = null;\n }\n }\n else {\n delete this.selectedNodes[node.id];\n if (includeChildren) {\n node.iterate(function () {\n delete _this.selectedNodes[node.id];\n return true;\n });\n }\n }\n };\n SelectNodeHandler.prototype.addToSelection = function (node) {\n if (node.id != null) {\n this.selectedNodes[node.id] = true;\n }\n else {\n this.selectedSingleNode = node;\n }\n };\n return SelectNodeHandler;\n}());\nexports[\"default\"] = SelectNodeHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\nvar node_1 = require(\"./node\");\nvar NodeElement = /** @class */ (function () {\n function NodeElement(node, treeWidget) {\n this.init(node, treeWidget);\n }\n NodeElement.prototype.init = function (node, treeWidget) {\n this.node = node;\n this.treeWidget = treeWidget;\n if (!node.element) {\n node.element = this.treeWidget.element.get(0);\n }\n this.$element = jQuery(node.element);\n };\n NodeElement.prototype.addDropHint = function (position) {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.$element, this.treeWidget._getScrollLeft());\n }\n else {\n return new GhostDropHint(this.node, this.$element, position);\n }\n };\n NodeElement.prototype.select = function (mustSetFocus) {\n var $li = this.getLi();\n $li.addClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"true\");\n var $span = this.getSpan();\n $span.attr(\"tabindex\", this.treeWidget.options.tabIndex);\n if (mustSetFocus) {\n $span.focus();\n }\n };\n NodeElement.prototype.deselect = function () {\n var $li = this.getLi();\n $li.removeClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"false\");\n var $span = this.getSpan();\n $span.removeAttr(\"tabindex\");\n $span.blur();\n };\n NodeElement.prototype.getUl = function () {\n return this.$element.children(\"ul:first\");\n };\n NodeElement.prototype.getSpan = function () {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"span.jqtree-title\");\n };\n NodeElement.prototype.getLi = function () {\n return this.$element;\n };\n NodeElement.prototype.mustShowBorderDropHint = function (position) {\n return position === node_1.Position.Inside;\n };\n return NodeElement;\n}());\nexports.NodeElement = NodeElement;\nvar FolderElement = /** @class */ (function (_super) {\n __extends(FolderElement, _super);\n function FolderElement() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FolderElement.prototype.open = function (onFinished, slide, animationSpeed) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n if (this.node.is_open) {\n return;\n }\n this.node.is_open = true;\n var $button = this.getButton();\n $button.removeClass(\"jqtree-closed\");\n $button.html(\"\");\n var button_el = $button.get(0);\n if (button_el) {\n var icon = this.treeWidget.renderer.openedIconElement.cloneNode(true);\n button_el.appendChild(icon);\n }\n var doOpen = function () {\n var $li = _this.getLi();\n $li.removeClass(\"jqtree-closed\");\n var $span = _this.getSpan();\n $span.attr(\"aria-expanded\", \"true\");\n if (onFinished) {\n onFinished(_this.node);\n }\n _this.treeWidget._triggerEvent(\"tree.open\", {\n node: _this.node\n });\n };\n if (slide) {\n this.getUl().slideDown(animationSpeed, doOpen);\n }\n else {\n this.getUl().show();\n doOpen();\n }\n };\n FolderElement.prototype.close = function (slide, animationSpeed) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n if (!this.node.is_open) {\n return;\n }\n this.node.is_open = false;\n var $button = this.getButton();\n $button.addClass(\"jqtree-closed\");\n $button.html(\"\");\n var button_el = $button.get(0);\n if (button_el) {\n var icon = this.treeWidget.renderer.closedIconElement.cloneNode(true);\n button_el.appendChild(icon);\n }\n var doClose = function () {\n var $li = _this.getLi();\n $li.addClass(\"jqtree-closed\");\n var $span = _this.getSpan();\n $span.attr(\"aria-expanded\", \"false\");\n _this.treeWidget._triggerEvent(\"tree.close\", {\n node: _this.node\n });\n };\n if (slide) {\n this.getUl().slideUp(animationSpeed, doClose);\n }\n else {\n this.getUl().hide();\n doClose();\n }\n };\n FolderElement.prototype.mustShowBorderDropHint = function (position) {\n return !this.node.is_open && position === node_1.Position.Inside;\n };\n FolderElement.prototype.getButton = function () {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"a.jqtree-toggler\");\n };\n return FolderElement;\n}(NodeElement));\nexports.FolderElement = FolderElement;\nvar BorderDropHint = /** @class */ (function () {\n function BorderDropHint($element, scrollLeft) {\n var $div = $element.children(\".jqtree-element\");\n var elWidth = $element.width() || 0;\n var width = Math.max(elWidth + scrollLeft - 4, 0);\n var elHeight = $div.outerHeight() || 0;\n var height = Math.max(elHeight - 4, 0);\n this.$hint = jQuery('');\n $div.append(this.$hint);\n this.$hint.css({ width: width, height: height });\n }\n BorderDropHint.prototype.remove = function () {\n this.$hint.remove();\n };\n return BorderDropHint;\n}());\nexports.BorderDropHint = BorderDropHint;\nvar GhostDropHint = /** @class */ (function () {\n function GhostDropHint(node, $element, position) {\n this.$element = $element;\n this.node = node;\n this.$ghost = jQuery(\"
  • \\n
  • \");\n if (position === node_1.Position.After) {\n this.moveAfter();\n }\n else if (position === node_1.Position.Before) {\n this.moveBefore();\n }\n else if (position === node_1.Position.Inside) {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n }\n else {\n this.moveInside();\n }\n }\n }\n GhostDropHint.prototype.remove = function () {\n this.$ghost.remove();\n };\n GhostDropHint.prototype.moveAfter = function () {\n this.$element.after(this.$ghost);\n };\n GhostDropHint.prototype.moveBefore = function () {\n this.$element.before(this.$ghost);\n };\n GhostDropHint.prototype.moveInsideOpenFolder = function () {\n jQuery(this.node.children[0].element).before(this.$ghost);\n };\n GhostDropHint.prototype.moveInside = function () {\n this.$element.after(this.$ghost);\n this.$ghost.addClass(\"jqtree-inside\");\n };\n return GhostDropHint;\n}());\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/node.ts","webpack:///./src/util.ts","webpack:///external \"jQuery\"","webpack:///./src/simple.widget.ts","webpack:///./src/tree.jquery.ts","webpack:///./src/version.ts","webpack:///./src/dragAndDropHandler.ts","webpack:///./src/elementsRenderer.ts","webpack:///./src/dataLoader.ts","webpack:///./src/keyHandler.ts","webpack:///./src/mouse.widget.ts","webpack:///./src/saveStateHandler.ts","webpack:///./src/scrollHandler.ts","webpack:///./src/selectNodeHandler.ts","webpack:///./src/nodeElement.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;AClFa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,uDAAuD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,4BAA4B;AACnE;AACA;AACA,gCAAgC,gBAAgB;AAChD,mCAAmC,kBAAkB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,sBAAsB;;AAEvC,iBAAiB,sCAAsC;;AAEvD,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oBAAoB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,gBAAgB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,2BAA2B,EAAE;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,gBAAgB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,4BAA4B,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yCAAyC,wBAAwB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,4BAA4B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AChiBa;AACb;AACA,8BAA8B,6CAA6C;AAC3E,mCAAmC,gCAAgC;AACnE,0CAA0C;AAC1C;AACA;AACA,6BAA6B;AAC7B,4BAA4B;AAC5B,4BAA4B;AAC5B,8BAA8B;AAC9B,8BAA8B;AAC9B,+BAA+B;AAC/B;AACA,0CAA0C,mCAAmC;;;;;;;ACd7E,wB;;;;;;;ACAa;AACb;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,sCAAsC,sCAAsC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,gBAAgB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AChGa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,CAAW;AACnC,aAAa,mBAAO,CAAC,CAAQ;AAC7B,2BAA2B,mBAAO,CAAC,CAAsB;AACzD,yBAAyB,mBAAO,CAAC,CAAoB;AACrD,mBAAmB,mBAAO,CAAC,CAAc;AACzC,mBAAmB,mBAAO,CAAC,CAAc;AACzC,qBAAqB,mBAAO,CAAC,EAAgB;AAC7C,yBAAyB,mBAAO,CAAC,EAAoB;AACrD,sBAAsB,mBAAO,CAAC,EAAiB;AAC/C,0BAA0B,mBAAO,CAAC,EAAqB;AACvD,sBAAsB,mBAAO,CAAC,CAAiB;AAC/C,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B,oBAAoB,mBAAO,CAAC,EAAe;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,yBAAyB,EAAE;AAClF,sDAAsD,yBAAyB,EAAE;;AAEjF;AACA;AACA;AACA,0CAA0C,yBAAyB,EAAE;AACrE,2CAA2C,yBAAyB,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,iCAAiC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,aAAa;AACb;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,gDAAgD,sCAAsC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,kBAAkB,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,wCAAwC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,+BAA+B;AAC/B;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC/8Ba;AACb;AACA;AACA;;;;;;;;ACHa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,yBAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACxeY;AACb;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACxMa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,0CAA0C,gBAAgB,iCAAiC,eAAe;AAC1G;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACpFa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACrHa;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,CAAiB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC7Ja;AACb;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yEAAyE,aAAa,EAAE;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,uBAAuB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;ACxNa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,6BAA6B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,gBAAgB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AClNa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;AC3Ga;AACb;AACA;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD;AACA,aAAa,mBAAO,CAAC,CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C,wCAAwC,yBAAyB;AACjE;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+BAA+B;AACvD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","file":"tree.jquery.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 16);\n","\"use strict\";\nexports.__esModule = true;\nvar Position;\n(function (Position) {\n Position[Position[\"Before\"] = 1] = \"Before\";\n Position[Position[\"After\"] = 2] = \"After\";\n Position[Position[\"Inside\"] = 3] = \"Inside\";\n Position[Position[\"None\"] = 4] = \"None\";\n})(Position = exports.Position || (exports.Position = {}));\nvar positionNames = {\n before: Position.Before,\n after: Position.After,\n inside: Position.Inside,\n none: Position.None\n};\nexports.getPositionName = function (position) {\n for (var name_1 in positionNames) {\n if (positionNames.hasOwnProperty(name_1)) {\n if (positionNames[name_1] === position) {\n return name_1;\n }\n }\n }\n return \"\";\n};\nexports.getPosition = function (name) { return positionNames[name]; };\nvar Node = /** @class */ (function () {\n function Node(o, isRoot, nodeClass) {\n if (isRoot === void 0) { isRoot = false; }\n if (nodeClass === void 0) { nodeClass = Node; }\n this.name = \"\";\n this.isEmptyFolder = false;\n this.setData(o);\n this.children = [];\n this.parent = null;\n if (isRoot) {\n this.idMapping = {};\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setdata(object): set attributes of the node\n\n Examples:\n setdata('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n Node.prototype.setData = function (o) {\n var _this = this;\n var setName = function (name) {\n if (name != null) {\n _this.name = name;\n }\n };\n if (!o) {\n return;\n }\n else if (typeof o !== \"object\") {\n setName(o);\n }\n else {\n for (var key in o) {\n if (o.hasOwnProperty(key)) {\n var value = o[key];\n if (key === \"label\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n setName(value);\n }\n else if (key !== \"children\") {\n // You can't update the children using this function\n this[key] = value;\n }\n }\n }\n }\n };\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n Node.prototype.loadFromData = function (data) {\n this.removeChildren();\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var o = data_1[_i];\n var node = new this.tree.nodeClass(o);\n this.addChild(node);\n if (typeof o === \"object\" && o[\"children\"]) {\n if (o[\"children\"].length === 0) {\n node.isEmptyFolder = true;\n }\n else {\n node.loadFromData(o[\"children\"]);\n }\n }\n }\n };\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n Node.prototype.addChild = function (node) {\n this.children.push(node);\n node.setParent(this);\n };\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n Node.prototype.addChildAtPosition = function (node, index) {\n this.children.splice(index, 0, node);\n node.setParent(this);\n };\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n Node.prototype.removeChild = function (node) {\n // remove children from the index\n node.removeChildren();\n this.doRemoveChild(node);\n };\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n Node.prototype.getChildIndex = function (node) {\n return jQuery.inArray(node, this.children);\n };\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n Node.prototype.hasChildren = function () {\n return this.children.length !== 0;\n };\n Node.prototype.isFolder = function () {\n return this.hasChildren() || this.load_on_demand;\n };\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n Node.prototype.iterate = function (callback) {\n var _iterate = function (node, level) {\n if (node.children) {\n for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n var child = _a[_i];\n var result = callback(child, level);\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n }\n };\n _iterate(this, 0);\n };\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n Node.prototype.moveNode = function (movedNode, targetNode, position) {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return;\n }\n else {\n movedNode.parent.doRemoveChild(movedNode);\n if (position === Position.After) {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1);\n }\n }\n else if (position === Position.Before) {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode));\n }\n }\n else if (position === Position.Inside) {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n }\n }\n };\n /*\n Get the tree as data.\n */\n Node.prototype.getData = function (includeParent) {\n if (includeParent === void 0) { includeParent = false; }\n function getDataFromNodes(nodes) {\n return nodes.map(function (node) {\n var tmpNode = {};\n for (var k in node) {\n if ([\n \"parent\",\n \"children\",\n \"element\",\n \"tree\",\n \"isEmptyFolder\"\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)) {\n var v = node[k];\n tmpNode[k] = v;\n }\n }\n if (node.hasChildren()) {\n tmpNode[\"children\"] = getDataFromNodes(node.children);\n }\n return tmpNode;\n });\n }\n if (includeParent) {\n return getDataFromNodes([this]);\n }\n else {\n return getDataFromNodes(this.children);\n }\n };\n Node.prototype.getNodeByName = function (name) {\n return this.getNodeByCallback(function (node) { return node.name === name; });\n };\n Node.prototype.getNodeByCallback = function (callback) {\n var result = null;\n this.iterate(function (node) {\n if (callback(node)) {\n result = node;\n return false;\n }\n else {\n return true;\n }\n });\n return result;\n };\n Node.prototype.addAfter = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var node = new this.tree.nodeClass(nodeInfo);\n var childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n }\n };\n Node.prototype.addBefore = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var node = new this.tree.nodeClass(nodeInfo);\n var childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n }\n };\n Node.prototype.addParent = function (nodeInfo) {\n if (!this.parent) {\n return null;\n }\n else {\n var newParent = new this.tree.nodeClass(nodeInfo);\n newParent.setParent(this.tree);\n var originalParent = this.parent;\n for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) {\n var child = _a[_i];\n newParent.addChild(child);\n }\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n };\n Node.prototype.remove = function () {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n };\n Node.prototype.append = function (nodeInfo) {\n var node = new this.tree.nodeClass(nodeInfo);\n this.addChild(node);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n };\n Node.prototype.prepend = function (nodeInfo) {\n var node = new this.tree.nodeClass(nodeInfo);\n this.addChildAtPosition(node, 0);\n if (typeof nodeInfo === \"object\" &&\n nodeInfo[\"children\"] &&\n nodeInfo[\"children\"].length) {\n node.loadFromData(nodeInfo[\"children\"]);\n }\n return node;\n };\n Node.prototype.isParentOf = function (node) {\n var parent = node.parent;\n while (parent) {\n if (parent === this) {\n return true;\n }\n parent = parent.parent;\n }\n return false;\n };\n Node.prototype.getLevel = function () {\n var level = 0;\n var node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n return level;\n };\n Node.prototype.getNodeById = function (nodeId) {\n return this.idMapping[nodeId];\n };\n Node.prototype.addNodeToIndex = function (node) {\n if (node.id != null) {\n this.idMapping[node.id] = node;\n }\n };\n Node.prototype.removeNodeFromIndex = function (node) {\n if (node.id != null) {\n delete this.idMapping[node.id];\n }\n };\n Node.prototype.removeChildren = function () {\n var _this = this;\n this.iterate(function (child) {\n _this.tree.removeNodeFromIndex(child);\n return true;\n });\n this.children = [];\n };\n Node.prototype.getPreviousSibling = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex];\n }\n else {\n return null;\n }\n }\n };\n Node.prototype.getNextSibling = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex];\n }\n else {\n return null;\n }\n }\n };\n Node.prototype.getNodesByProperty = function (key, value) {\n return this.filter(function (node) { return node[key] === value; });\n };\n Node.prototype.filter = function (f) {\n var result = [];\n this.iterate(function (node) {\n if (f(node)) {\n result.push(node);\n }\n return true;\n });\n return result;\n };\n Node.prototype.getNextNode = function (includeChildren) {\n if (includeChildren === void 0) { includeChildren = true; }\n if (includeChildren && this.hasChildren() && this.is_open) {\n // First child\n return this.children[0];\n }\n else {\n if (!this.parent) {\n return null;\n }\n else {\n var nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n }\n else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n };\n Node.prototype.getPreviousNode = function () {\n if (!this.parent) {\n return null;\n }\n else {\n var previousSibling = this.getPreviousSibling();\n if (previousSibling) {\n if (!previousSibling.hasChildren() ||\n !previousSibling.is_open) {\n // Previous sibling\n return previousSibling;\n }\n else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n else {\n return this.getParent();\n }\n }\n };\n Node.prototype.getParent = function () {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n }\n else if (!this.parent.parent) {\n // Root node -> null\n return null;\n }\n else {\n return this.parent;\n }\n };\n Node.prototype.getLastChild = function () {\n if (!this.hasChildren()) {\n return null;\n }\n else {\n var lastChild = this.children[this.children.length - 1];\n if (!lastChild.hasChildren() || !lastChild.is_open) {\n return lastChild;\n }\n else {\n return lastChild.getLastChild();\n }\n }\n };\n // Init Node from data without making it the root of the tree\n Node.prototype.initFromData = function (data) {\n var _this = this;\n var addNode = function (nodeData) {\n _this.setData(nodeData);\n if (nodeData[\"children\"]) {\n addChildren(nodeData[\"children\"]);\n }\n };\n var addChildren = function (childrenData) {\n for (var _i = 0, childrenData_1 = childrenData; _i < childrenData_1.length; _i++) {\n var child = childrenData_1[_i];\n var node = new _this.tree.nodeClass(\"\");\n node.initFromData(child);\n _this.addChild(node);\n }\n };\n addNode(data);\n };\n Node.prototype.setParent = function (parent) {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree.addNodeToIndex(this);\n };\n Node.prototype.doRemoveChild = function (node) {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree.removeNodeFromIndex(node);\n };\n return Node;\n}());\nexports.Node = Node;\n","\"use strict\";\nexports.__esModule = true;\nexports.isInt = function (n) { return typeof n === \"number\" && n % 1 === 0; };\nexports.isFunction = function (v) { return typeof v === \"function\"; };\n// Escape a string for HTML interpolation; copied from underscore js\nexports.htmlEscape = function (text) {\n return (\"\" + text)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\")\n .replace(/\\//g, \"/\");\n};\nexports.getBoolString = function (value) { return (value ? \"true\" : \"false\"); };\n","module.exports = jQuery;","\"use strict\";\nexports.__esModule = true;\nvar SimpleWidget = /** @class */ (function () {\n function SimpleWidget(el, options) {\n this.$el = jQuery(el);\n var defaults = this.constructor.defaults;\n this.options = jQuery.extend({}, defaults, options);\n }\n SimpleWidget.register = function (widgetClass, widgetName) {\n var getDataKey = function () { return \"simple_widget_\" + widgetName; };\n function getWidgetData(el, dataKey) {\n var widget = jQuery.data(el, dataKey);\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n }\n else {\n return null;\n }\n }\n function createWidget($el, options) {\n var dataKey = getDataKey();\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var existingWidget = getWidgetData(el, dataKey);\n if (!existingWidget) {\n var widget = new widgetClass(el, options);\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n return $el;\n }\n function destroyWidget($el) {\n var dataKey = getDataKey();\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var widget = getWidgetData(el, dataKey);\n if (widget) {\n widget.destroy();\n }\n jQuery.removeData(el, dataKey);\n }\n }\n function callFunction($el, functionName, args) {\n var result = null;\n for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var widget = jQuery.data(el, getDataKey());\n if (widget && widget instanceof SimpleWidget) {\n var widgetFunction = widget[functionName];\n if (widgetFunction &&\n typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args);\n }\n }\n }\n return result;\n }\n jQuery.fn[widgetName] = function (argument1) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (argument1 === undefined || typeof argument1 === \"object\") {\n var options = argument1;\n return createWidget(this, options);\n }\n else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n var functionName = argument1;\n if (functionName === \"destroy\") {\n return destroyWidget(this);\n }\n else if (functionName === \"get_widget_class\") {\n return widgetClass;\n }\n else {\n return callFunction(this, functionName, args);\n }\n }\n };\n };\n SimpleWidget.prototype.destroy = function () {\n this.deinit();\n };\n SimpleWidget.prototype.init = function () {\n //\n };\n SimpleWidget.prototype.deinit = function () {\n //\n };\n SimpleWidget.defaults = {};\n return SimpleWidget;\n}());\nexports[\"default\"] = SimpleWidget;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nexports.__esModule = true;\nvar version_1 = require(\"./version\");\nvar jQuery = require(\"jquery\");\nvar dragAndDropHandler_1 = require(\"./dragAndDropHandler\");\nvar elementsRenderer_1 = require(\"./elementsRenderer\");\nvar dataLoader_1 = require(\"./dataLoader\");\nvar keyHandler_1 = require(\"./keyHandler\");\nvar mouse_widget_1 = require(\"./mouse.widget\");\nvar saveStateHandler_1 = require(\"./saveStateHandler\");\nvar scrollHandler_1 = require(\"./scrollHandler\");\nvar selectNodeHandler_1 = require(\"./selectNodeHandler\");\nvar simple_widget_1 = require(\"./simple.widget\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar nodeElement_1 = require(\"./nodeElement\");\nvar NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nvar PARAM_IS_EMPTY = \"Parameter is empty: \";\nvar JqTreeWidget = /** @class */ (function (_super) {\n __extends(JqTreeWidget, _super);\n function JqTreeWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handleClick = function (e) {\n var clickTarget = _this.getClickTarget(e.target);\n if (clickTarget) {\n if (clickTarget.type === \"button\") {\n _this.toggle(clickTarget.node, _this.options.slide);\n e.preventDefault();\n e.stopPropagation();\n }\n else if (clickTarget.type === \"label\") {\n var node = clickTarget.node;\n var event_1 = _this._triggerEvent(\"tree.click\", {\n node: node,\n click_event: e // eslint-disable-line @typescript-eslint/camelcase\n });\n if (!event_1.isDefaultPrevented()) {\n _this.doSelectNode(node);\n }\n }\n }\n };\n _this.handleDblclick = function (e) {\n var _a;\n var clickTarget = _this.getClickTarget(e.target);\n if (((_a = clickTarget) === null || _a === void 0 ? void 0 : _a.type) === \"label\") {\n _this._triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n click_event: e // eslint-disable-line @typescript-eslint/camelcase\n });\n }\n };\n _this.handleContextmenu = function (e) {\n var $div = jQuery(e.target).closest(\"ul.jqtree-tree .jqtree-element\");\n if ($div.length) {\n var node = _this.getNode($div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n _this._triggerEvent(\"tree.contextmenu\", {\n node: node,\n click_event: e // eslint-disable-line @typescript-eslint/camelcase\n });\n return false;\n }\n }\n return null;\n };\n return _this;\n }\n JqTreeWidget.prototype.toggle = function (node, slideParam) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var slide = slideParam == null ? this.options.slide : slideParam;\n if (node.is_open) {\n this.closeNode(node, slide);\n }\n else {\n this.openNode(node, slide);\n }\n return this.element;\n };\n JqTreeWidget.prototype.getTree = function () {\n return this.tree;\n };\n JqTreeWidget.prototype.selectNode = function (node, optionsParam) {\n this.doSelectNode(node, optionsParam);\n return this.element;\n };\n JqTreeWidget.prototype.getSelectedNode = function () {\n if (this.selectNodeHandler) {\n return this.selectNodeHandler.getSelectedNode();\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.toJson = function () {\n return JSON.stringify(this.tree.getData());\n };\n JqTreeWidget.prototype.loadData = function (data, parentNode) {\n this.doLoadData(data, parentNode);\n return this.element;\n };\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(param1, param2, param3);\n }\n else {\n // first parameter is not url\n this.doLoadDataFromUrl(null, param1, param2);\n }\n return this.element;\n };\n JqTreeWidget.prototype.reload = function (onFinished) {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n };\n JqTreeWidget.prototype.getNodeById = function (nodeId) {\n return this.tree.getNodeById(nodeId);\n };\n JqTreeWidget.prototype.getNodeByName = function (name) {\n return this.tree.getNodeByName(name);\n };\n JqTreeWidget.prototype.getNodesByProperty = function (key, value) {\n return this.tree.getNodesByProperty(key, value);\n };\n JqTreeWidget.prototype.getNodeByHtmlElement = function (element) {\n return this.getNode(jQuery(element));\n };\n JqTreeWidget.prototype.getNodeByCallback = function (callback) {\n return this.tree.getNodeByCallback(callback);\n };\n JqTreeWidget.prototype.openNode = function (node, param1, param2) {\n var _this = this;\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var parseParams = function () {\n var onFinished;\n var slide;\n if (util_1.isFunction(param1)) {\n onFinished = param1;\n slide = null;\n }\n else {\n slide = param1;\n onFinished = param2;\n }\n if (slide == null) {\n slide = _this.options.slide;\n }\n return [slide, onFinished];\n };\n var _a = parseParams(), slide = _a[0], onFinished = _a[1];\n this._openNode(node, slide, onFinished);\n return this.element;\n };\n JqTreeWidget.prototype.closeNode = function (node, slideParam) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var slide = slideParam == null ? this.options.slide : slideParam;\n if (node.isFolder() || node.isEmptyFolder) {\n new nodeElement_1.FolderElement(node, this).close(slide, this.options.animationSpeed);\n this.saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.isDragging = function () {\n if (this.dndHandler) {\n return this.dndHandler.isDragging;\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.refreshHitAreas = function () {\n if (this.dndHandler) {\n this.dndHandler.refresh();\n }\n return this.element;\n };\n JqTreeWidget.prototype.addNodeAfter = function (newNodeInfo, existingNode) {\n var newNode = existingNode.addAfter(newNodeInfo);\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.addNodeBefore = function (newNodeInfo, existingNode) {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n var newNode = existingNode.addBefore(newNodeInfo);\n if (newNode) {\n this._refreshElements(existingNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.addParentNode = function (newNodeInfo, existingNode) {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n var newNode = existingNode.addParent(newNodeInfo);\n if (newNode) {\n this._refreshElements(newNode.parent);\n }\n return newNode;\n };\n JqTreeWidget.prototype.removeNode = function (inode) {\n if (!inode) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var node = inode;\n if (node.parent && this.selectNodeHandler) {\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n var parent_1 = node.parent;\n node.remove();\n this._refreshElements(parent_1);\n }\n return this.element;\n };\n JqTreeWidget.prototype.appendNode = function (newNodeInfo, parentNodeParam) {\n var parentNode = parentNodeParam || this.tree;\n var node = parentNode.append(newNodeInfo);\n this._refreshElements(parentNode);\n return node;\n };\n JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) {\n var parentNode = !parentNodeParam\n ? this.tree\n : parentNodeParam;\n var node = parentNode.prepend(newNodeInfo);\n this._refreshElements(parentNode);\n return node;\n };\n JqTreeWidget.prototype.updateNode = function (node, data) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var idIsChanged = data.id && data.id !== node.id;\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n node.setData(data);\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n if (typeof data === \"object\" && data.children) {\n node.removeChildren();\n if (data.children.length) {\n node.loadFromData(data.children);\n }\n }\n this._refreshElements(node);\n this.selectCurrentNode();\n return this.element;\n };\n JqTreeWidget.prototype.moveNode = function (node, targetNode, position) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n var positionIndex = node_1.getPosition(position);\n this.tree.moveNode(node, targetNode, positionIndex);\n this._refreshElements(null);\n return this.element;\n };\n JqTreeWidget.prototype.getStateFromStorage = function () {\n if (this.saveStateHandler) {\n return this.saveStateHandler.getStateFromStorage();\n }\n };\n JqTreeWidget.prototype.addToSelection = function (inode, mustSetFocus) {\n if (!inode) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n var node = inode;\n if (this.selectNodeHandler) {\n this.selectNodeHandler.addToSelection(node);\n this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus);\n this.saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.getSelectedNodes = function () {\n if (!this.selectNodeHandler) {\n return [];\n }\n else {\n return this.selectNodeHandler.getSelectedNodes();\n }\n };\n JqTreeWidget.prototype.isNodeSelected = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (!this.selectNodeHandler) {\n return false;\n }\n else {\n return this.selectNodeHandler.isNodeSelected(node);\n }\n };\n JqTreeWidget.prototype.removeFromSelection = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (this.selectNodeHandler) {\n this.selectNodeHandler.removeFromSelection(node);\n this._getNodeElementForNode(node).deselect();\n this.saveState();\n }\n return this.element;\n };\n JqTreeWidget.prototype.scrollToNode = function (node) {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n if (this.scrollHandler) {\n var nodeOffset = jQuery(node.element).offset();\n var nodeTop = nodeOffset ? nodeOffset.top : 0;\n var treeOffset = this.$el.offset();\n var treeTop = treeOffset ? treeOffset.top : 0;\n var top_1 = nodeTop - treeTop;\n this.scrollHandler.scrollToY(top_1);\n }\n return this.element;\n };\n JqTreeWidget.prototype.getState = function () {\n if (this.saveStateHandler) {\n return this.saveStateHandler.getState();\n }\n };\n JqTreeWidget.prototype.setState = function (state) {\n if (this.saveStateHandler) {\n this.saveStateHandler.setInitialState(state);\n this._refreshElements(null);\n }\n return this.element;\n };\n JqTreeWidget.prototype.setOption = function (option, value) {\n this.options[option] = value;\n return this.element;\n };\n JqTreeWidget.prototype.moveDown = function () {\n if (this.keyHandler) {\n this.keyHandler.moveDown();\n }\n return this.element;\n };\n JqTreeWidget.prototype.moveUp = function () {\n if (this.keyHandler) {\n this.keyHandler.moveUp();\n }\n return this.element;\n };\n JqTreeWidget.prototype.getVersion = function () {\n return version_1[\"default\"];\n };\n JqTreeWidget.prototype.testGenerateHitAreas = function (movingNode) {\n if (!this.dndHandler) {\n return [];\n }\n else {\n this.dndHandler.currentItem = this._getNodeElementForNode(movingNode);\n this.dndHandler.generateHitAreas();\n return this.dndHandler.hitAreas;\n }\n };\n JqTreeWidget.prototype._triggerEvent = function (eventName, values) {\n var event = jQuery.Event(eventName);\n jQuery.extend(event, values);\n this.element.trigger(event);\n return event;\n };\n JqTreeWidget.prototype._openNode = function (node, slide, onFinished) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n var doOpenNode = function (_node, _slide, _onFinished) {\n var folderElement = new nodeElement_1.FolderElement(_node, _this);\n folderElement.open(_onFinished, _slide, _this.options.animationSpeed);\n };\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n }\n else {\n var parent_2 = node.parent;\n while (parent_2) {\n // nb: do not open root element\n if (parent_2.parent) {\n doOpenNode(parent_2, false, null);\n }\n parent_2 = parent_2.parent;\n }\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n };\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n JqTreeWidget.prototype._refreshElements = function (fromNode) {\n this.renderer.render(fromNode);\n this._triggerEvent(\"tree.refresh\");\n };\n JqTreeWidget.prototype._getNodeElementForNode = function (node) {\n if (node.isFolder()) {\n return new nodeElement_1.FolderElement(node, this);\n }\n else {\n return new nodeElement_1.NodeElement(node, this);\n }\n };\n JqTreeWidget.prototype._getNodeElement = function ($element) {\n var node = this.getNode($element);\n if (node) {\n return this._getNodeElementForNode(node);\n }\n else {\n return null;\n }\n };\n JqTreeWidget.prototype._containsElement = function (element) {\n var node = this.getNode(jQuery(element));\n return node != null && node.tree === this.tree;\n };\n JqTreeWidget.prototype._getScrollLeft = function () {\n var _a, _b;\n return ((_b = (_a = this) === null || _a === void 0 ? void 0 : _a.scrollHandler) === null || _b === void 0 ? void 0 : _b.getScrollLeft()) || 0;\n };\n JqTreeWidget.prototype.init = function () {\n _super.prototype.init.call(this);\n this.element = this.$el;\n this.mouseDelay = 300;\n this.isInitialized = false;\n this.options.rtl = this.getRtlOption();\n if (this.options.closedIcon === null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n this.renderer = new elementsRenderer_1[\"default\"](this);\n this.dataLoader = new dataLoader_1[\"default\"](this);\n if (saveStateHandler_1[\"default\"] != null) {\n this.saveStateHandler = new saveStateHandler_1[\"default\"](this);\n }\n else {\n this.options.saveState = false;\n }\n if (selectNodeHandler_1[\"default\"] != null) {\n this.selectNodeHandler = new selectNodeHandler_1[\"default\"](this);\n }\n if (dragAndDropHandler_1.DragAndDropHandler != null) {\n this.dndHandler = new dragAndDropHandler_1.DragAndDropHandler(this);\n }\n else {\n this.options.dragAndDrop = false;\n }\n if (scrollHandler_1[\"default\"] != null) {\n this.scrollHandler = new scrollHandler_1[\"default\"](this);\n }\n if (keyHandler_1[\"default\"] != null && selectNodeHandler_1[\"default\"] != null) {\n this.keyHandler = new keyHandler_1[\"default\"](this);\n }\n this.initData();\n this.element.click(this.handleClick);\n this.element.dblclick(this.handleDblclick);\n if (this.options.useContextMenu) {\n this.element.on(\"contextmenu\", this.handleContextmenu);\n }\n };\n JqTreeWidget.prototype.deinit = function () {\n this.element.empty();\n this.element.off();\n if (this.keyHandler) {\n this.keyHandler.deinit();\n }\n this.tree = new node_1.Node({}, true);\n _super.prototype.deinit.call(this);\n };\n JqTreeWidget.prototype.mouseCapture = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseCapture(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.mouseStart = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseStart(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.mouseDrag = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n var result = this.dndHandler.mouseDrag(positionInfo);\n if (this.scrollHandler) {\n this.scrollHandler.checkScrolling();\n }\n return result;\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.mouseStop = function (positionInfo) {\n if (this.options.dragAndDrop && this.dndHandler) {\n return this.dndHandler.mouseStop(positionInfo);\n }\n else {\n return false;\n }\n };\n JqTreeWidget.prototype.initData = function () {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n }\n else {\n var dataUrl = this.getDataUrlInfo(null);\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n }\n else {\n this.doLoadData([], null);\n }\n }\n };\n JqTreeWidget.prototype.getDataUrlInfo = function (node) {\n var _this = this;\n var dataUrl = this.options.dataUrl || this.element.data(\"url\");\n var getUrlFromString = function () {\n var urlInfo = { url: dataUrl };\n setUrlInfoData(urlInfo);\n return urlInfo;\n };\n var setUrlInfoData = function (urlInfo) {\n var _a;\n if ((_a = node) === null || _a === void 0 ? void 0 : _a.id) {\n // Load on demand of a subtree; add node parameter\n var data = { node: node.id };\n urlInfo[\"data\"] = data;\n }\n else {\n // Add selected_node parameter\n var selectedNodeId = _this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n var data = { selected_node: selectedNodeId }; // eslint-disable-line @typescript-eslint/camelcase\n urlInfo[\"data\"] = data;\n }\n }\n };\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n }\n else if (typeof dataUrl === \"string\") {\n return getUrlFromString();\n }\n else if (typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n }\n else {\n return dataUrl;\n }\n };\n JqTreeWidget.prototype.getNodeIdToBeSelected = function () {\n if (this.options.saveState && this.saveStateHandler) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n }\n else {\n return null;\n }\n };\n JqTreeWidget.prototype.initTree = function (data) {\n var _this = this;\n var doInit = function () {\n if (!_this.isInitialized) {\n _this.isInitialized = true;\n _this._triggerEvent(\"tree.init\");\n }\n };\n this.tree = new this.options.nodeClass(null, true, this.options.nodeClass);\n if (this.selectNodeHandler) {\n this.selectNodeHandler.clear();\n }\n this.tree.loadFromData(data);\n var mustLoadOnDemand = this.setInitialState();\n this._refreshElements(null);\n if (!mustLoadOnDemand) {\n doInit();\n }\n else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n };\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n JqTreeWidget.prototype.setInitialState = function () {\n var _this = this;\n var restoreState = function () {\n // result: is state restored, must load on demand?\n if (!(_this.options.saveState && _this.saveStateHandler)) {\n return [false, false];\n }\n else {\n var state = _this.saveStateHandler.getStateFromStorage();\n if (!state) {\n return [false, false];\n }\n else {\n var mustLoadOnDemand_1 = _this.saveStateHandler.setInitialState(state);\n // return true: the state is restored\n return [true, mustLoadOnDemand_1];\n }\n }\n };\n var autoOpenNodes = function () {\n // result: must load on demand?\n if (_this.options.autoOpen === false) {\n return false;\n }\n var maxLevel = _this.getAutoOpenMaxLevel();\n var mustLoadOnDemand = false;\n _this.tree.iterate(function (node, level) {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n }\n else if (!node.hasChildren()) {\n return false;\n }\n else {\n node.is_open = true; // eslint-disable-line @typescript-eslint/camelcase\n return level !== maxLevel;\n }\n });\n return mustLoadOnDemand;\n };\n var _a = restoreState(), isRestored = _a[0], mustLoadOnDemand = _a[1]; // eslint-disable-line prefer-const\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n return mustLoadOnDemand;\n };\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n JqTreeWidget.prototype.setInitialStateOnDemand = function (cbFinished) {\n var _this = this;\n var restoreState = function () {\n if (!(_this.options.saveState && _this.saveStateHandler)) {\n return false;\n }\n else {\n var state = _this.saveStateHandler.getStateFromStorage();\n if (!state) {\n return false;\n }\n else {\n _this.saveStateHandler.setInitialStateOnDemand(state, cbFinished);\n return true;\n }\n }\n };\n var autoOpenNodes = function () {\n var maxLevel = _this.getAutoOpenMaxLevel();\n var loadingCount = 0;\n var loadAndOpenNode = function (node) {\n loadingCount += 1;\n _this._openNode(node, false, function () {\n loadingCount -= 1;\n openNodes();\n });\n };\n var openNodes = function () {\n _this.tree.iterate(function (node, level) {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n return false;\n }\n else {\n _this._openNode(node, false, null);\n return level !== maxLevel;\n }\n });\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n openNodes();\n };\n if (!restoreState()) {\n autoOpenNodes();\n }\n };\n JqTreeWidget.prototype.getAutoOpenMaxLevel = function () {\n if (this.options.autoOpen === true) {\n return -1;\n }\n else {\n return parseInt(this.options.autoOpen, 10);\n }\n };\n JqTreeWidget.prototype.getClickTarget = function (element) {\n var $target = jQuery(element);\n var $button = $target.closest(\".jqtree-toggler\");\n if ($button.length) {\n var node = this.getNode($button);\n if (node) {\n return {\n type: \"button\",\n node: node\n };\n }\n }\n else {\n var $el = $target.closest(\".jqtree-element\");\n if ($el.length) {\n var node = this.getNode($el);\n if (node) {\n return {\n type: \"label\",\n node: node\n };\n }\n }\n }\n return null;\n };\n JqTreeWidget.prototype.getNode = function ($element) {\n var $li = $element.closest(\"li.jqtree_common\");\n if ($li.length === 0) {\n return null;\n }\n else {\n return $li.data(\"node\");\n }\n };\n JqTreeWidget.prototype.saveState = function () {\n if (this.options.saveState && this.saveStateHandler) {\n this.saveStateHandler.saveState();\n }\n };\n JqTreeWidget.prototype.selectCurrentNode = function () {\n var node = this.getSelectedNode();\n if (node) {\n var nodeElement = this._getNodeElementForNode(node);\n if (nodeElement) {\n nodeElement.select(true);\n }\n }\n };\n JqTreeWidget.prototype.deselectCurrentNode = function () {\n var node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n };\n JqTreeWidget.prototype.getDefaultClosedIcon = function () {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n }\n else {\n // triangle to the right\n return \"►\";\n }\n };\n JqTreeWidget.prototype.getRtlOption = function () {\n if (this.options.rtl != null) {\n return this.options.rtl;\n }\n else {\n var dataRtl = this.element.data(\"rtl\");\n if (dataRtl !== null && dataRtl !== false) {\n return true;\n }\n else {\n return false;\n }\n }\n };\n JqTreeWidget.prototype.doSelectNode = function (inode, optionsParam) {\n var _this = this;\n if (!this.selectNodeHandler) {\n return;\n }\n var defaultOptions = { mustSetFocus: true, mustToggle: true };\n var selectOptions = __assign(__assign({}, defaultOptions), (optionsParam || {}));\n var canSelect = function () {\n if (_this.options.onCanSelectNode) {\n return (_this.options.selectable &&\n _this.options.onCanSelectNode(inode));\n }\n else {\n return _this.options.selectable;\n }\n };\n var openParents = function () {\n var parent = inode.parent;\n if (parent && parent.parent && !parent.is_open) {\n _this.openNode(parent, false);\n }\n };\n var saveState = function () {\n if (_this.options.saveState && _this.saveStateHandler) {\n _this.saveStateHandler.saveState();\n }\n };\n if (!inode) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n if (!canSelect()) {\n return;\n }\n var node = inode;\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this._triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node // eslint-disable-line @typescript-eslint/camelcase\n });\n }\n }\n else {\n var deselectedNode = this.getSelectedNode();\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n this._triggerEvent(\"tree.select\", {\n node: node,\n deselected_node: deselectedNode // eslint-disable-line @typescript-eslint/camelcase\n });\n openParents();\n }\n saveState();\n };\n JqTreeWidget.prototype.doLoadData = function (data, parentNode) {\n if (!data) {\n return;\n }\n else {\n this._triggerEvent(\"tree.load_data\", { tree_data: data }); // eslint-disable-line @typescript-eslint/camelcase\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n }\n else {\n this.initTree(data);\n }\n if (this.isDragging() && this.dndHandler) {\n this.dndHandler.refresh();\n }\n }\n };\n JqTreeWidget.prototype.deselectNodes = function (parentNode) {\n if (this.selectNodeHandler) {\n var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) {\n var n = selectedNodesUnderParent_1[_i];\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n };\n JqTreeWidget.prototype.loadSubtree = function (data, parentNode) {\n parentNode.loadFromData(data);\n parentNode.load_on_demand = false; // eslint-disable-line @typescript-eslint/camelcase\n parentNode.is_loading = false; // eslint-disable-line @typescript-eslint/camelcase\n this._refreshElements(parentNode);\n };\n JqTreeWidget.prototype.doLoadDataFromUrl = function (urlInfoParam, parentNode, onFinished) {\n var urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode);\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n };\n JqTreeWidget.prototype.loadFolderOnDemand = function (node, slide, onFinished) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n node.is_loading = true; // eslint-disable-line @typescript-eslint/camelcase\n this.doLoadDataFromUrl(null, node, function () {\n _this._openNode(node, slide, onFinished);\n });\n };\n JqTreeWidget.defaults = {\n animationSpeed: \"fast\",\n autoOpen: false,\n saveState: false,\n dragAndDrop: false,\n selectable: true,\n useContextMenu: true,\n onCanSelectNode: null,\n onSetStateFromStorage: null,\n onGetStateFromStorage: null,\n onCreateLi: null,\n onIsMoveHandle: null,\n // Can this node be moved?\n onCanMove: null,\n // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanMoveTo: null,\n onLoadFailed: null,\n autoEscape: true,\n dataUrl: null,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: null,\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n openedIcon: \"▼\",\n slide: true,\n nodeClass: node_1.Node,\n dataFilter: null,\n keyboardSupport: true,\n openFolderDelay: 500,\n rtl: false,\n onDragMove: null,\n onDragStop: null,\n buttonLeft: true,\n onLoading: null,\n showEmptyFolder: false,\n tabIndex: 0\n };\n return JqTreeWidget;\n}(mouse_widget_1[\"default\"]));\nsimple_widget_1[\"default\"].register(JqTreeWidget, \"tree\");\n","\"use strict\";\nexports.__esModule = true;\nvar version = \"1.4.12\";\nexports[\"default\"] = version;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\nvar jQuery = require(\"jquery\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar DragAndDropHandler = /** @class */ (function () {\n function DragAndDropHandler(treeWidget) {\n this.treeWidget = treeWidget;\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n this.positionInfo = null;\n }\n DragAndDropHandler.prototype.mouseCapture = function (positionInfo) {\n var $element = jQuery(positionInfo.target);\n if (!this.mustCaptureElement($element)) {\n return null;\n }\n if (this.treeWidget.options.onIsMoveHandle &&\n !this.treeWidget.options.onIsMoveHandle($element)) {\n return null;\n }\n var nodeElement = this.treeWidget._getNodeElement($element);\n if (nodeElement && this.treeWidget.options.onCanMove) {\n if (!this.treeWidget.options.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n this.currentItem = nodeElement;\n return this.currentItem != null;\n };\n DragAndDropHandler.prototype.generateHitAreas = function () {\n if (!this.currentItem) {\n this.hitAreas = [];\n }\n else {\n var hitAreasGenerator = new HitAreasGenerator(this.treeWidget.tree, this.currentItem.node, this.getTreeDimensions().bottom);\n this.hitAreas = hitAreasGenerator.generate();\n }\n };\n DragAndDropHandler.prototype.mouseStart = function (positionInfo) {\n if (!this.currentItem ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return false;\n }\n else {\n this.refresh();\n var offset = jQuery(positionInfo.target).offset();\n var left = offset ? offset.left : 0;\n var top_1 = offset ? offset.top : 0;\n var node = this.currentItem.node;\n var nodeName = this.treeWidget.options.autoEscape\n ? util_1.htmlEscape(node.name)\n : node.name;\n this.dragElement = new DragElement(nodeName, positionInfo.pageX - left, positionInfo.pageY - top_1, this.treeWidget.element);\n this.isDragging = true;\n this.positionInfo = positionInfo;\n this.currentItem.$element.addClass(\"jqtree-moving\");\n return true;\n }\n };\n DragAndDropHandler.prototype.mouseDrag = function (positionInfo) {\n if (!this.currentItem ||\n !this.dragElement ||\n positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return false;\n }\n else {\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n this.positionInfo = positionInfo;\n var area = this.findHoveredArea(positionInfo.pageX, positionInfo.pageY);\n var canMoveTo = this.canMoveToArea(area);\n if (canMoveTo && area) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n }\n else {\n this.stopOpenFolderTimer();\n }\n this.updateDropHint();\n }\n }\n else {\n this.removeHover();\n this.removeDropHint();\n this.stopOpenFolderTimer();\n }\n if (!area) {\n if (this.treeWidget.options.onDragMove) {\n this.treeWidget.options.onDragMove(this.currentItem.node, positionInfo.originalEvent);\n }\n }\n return true;\n }\n };\n DragAndDropHandler.prototype.mouseStop = function (positionInfo) {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n var currentItem = this.currentItem;\n if (this.currentItem) {\n this.currentItem.$element.removeClass(\"jqtree-moving\");\n this.currentItem = null;\n }\n this.isDragging = false;\n this.positionInfo = null;\n if (!this.hoveredArea && currentItem) {\n if (this.treeWidget.options.onDragStop) {\n this.treeWidget.options.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n return false;\n };\n DragAndDropHandler.prototype.refresh = function () {\n this.removeHitAreas();\n if (this.currentItem) {\n this.generateHitAreas();\n this.currentItem = this.treeWidget._getNodeElementForNode(this.currentItem.node);\n if (this.isDragging) {\n this.currentItem.$element.addClass(\"jqtree-moving\");\n }\n }\n };\n DragAndDropHandler.prototype.mustCaptureElement = function ($element) {\n return !$element.is(\"input,select,textarea\");\n };\n DragAndDropHandler.prototype.canMoveToArea = function (area) {\n if (!area || !this.currentItem) {\n return false;\n }\n else if (this.treeWidget.options.onCanMoveTo) {\n var positionName = node_1.getPositionName(area.position);\n return this.treeWidget.options.onCanMoveTo(this.currentItem.node, area.node, positionName);\n }\n else {\n return true;\n }\n };\n DragAndDropHandler.prototype.removeHitAreas = function () {\n this.hitAreas = [];\n };\n DragAndDropHandler.prototype.clear = function () {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n };\n DragAndDropHandler.prototype.removeDropHint = function () {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n };\n DragAndDropHandler.prototype.removeHover = function () {\n this.hoveredArea = null;\n };\n DragAndDropHandler.prototype.findHoveredArea = function (x, y) {\n var dimensions = this.getTreeDimensions();\n if (x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom) {\n return null;\n }\n var low = 0;\n var high = this.hitAreas.length;\n while (low < high) {\n var mid = (low + high) >> 1;\n var area = this.hitAreas[mid];\n if (y < area.top) {\n high = mid;\n }\n else if (y > area.bottom) {\n low = mid + 1;\n }\n else {\n return area;\n }\n }\n return null;\n };\n DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) {\n var node = area.node;\n return (node.isFolder() &&\n !node.is_open &&\n area.position === node_1.Position.Inside);\n };\n DragAndDropHandler.prototype.updateDropHint = function () {\n if (!this.hoveredArea) {\n return;\n }\n // remove previous drop hint\n this.removeDropHint();\n // add new drop hint\n var nodeElement = this.treeWidget._getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n };\n DragAndDropHandler.prototype.startOpenFolderTimer = function (folder) {\n var _this = this;\n var openFolder = function () {\n _this.treeWidget._openNode(folder, _this.treeWidget.options.slide, function () {\n _this.refresh();\n _this.updateDropHint();\n });\n };\n this.stopOpenFolderTimer();\n this.openFolderTimer = window.setTimeout(openFolder, this.treeWidget.options.openFolderDelay);\n };\n DragAndDropHandler.prototype.stopOpenFolderTimer = function () {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n };\n DragAndDropHandler.prototype.moveItem = function (positionInfo) {\n var _this = this;\n if (this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== node_1.Position.None &&\n this.canMoveToArea(this.hoveredArea)) {\n var movedNode_1 = this.currentItem.node;\n var targetNode_1 = this.hoveredArea.node;\n var position_1 = this.hoveredArea.position;\n var previousParent = movedNode_1.parent;\n if (position_1 === node_1.Position.Inside) {\n this.hoveredArea.node.is_open = true; // eslint-disable-line @typescript-eslint/camelcase\n }\n var doMove = function () {\n _this.treeWidget.tree.moveNode(movedNode_1, targetNode_1, position_1);\n _this.treeWidget.element.empty();\n _this.treeWidget._refreshElements(null);\n };\n /* eslint-disable @typescript-eslint/camelcase */\n var event_1 = this.treeWidget._triggerEvent(\"tree.move\", {\n move_info: {\n moved_node: movedNode_1,\n target_node: targetNode_1,\n position: node_1.getPositionName(position_1),\n previous_parent: previousParent,\n do_move: doMove,\n original_event: positionInfo.originalEvent\n }\n });\n /* eslint-enable @typescript-eslint/camelcase */\n if (!event_1.isDefaultPrevented()) {\n doMove();\n }\n }\n };\n DragAndDropHandler.prototype.getTreeDimensions = function () {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n var offset = this.treeWidget.element.offset();\n if (!offset) {\n return { left: 0, top: 0, right: 0, bottom: 0 };\n }\n else {\n var el = this.treeWidget.element;\n var width = el.width() || 0;\n var height = el.height() || 0;\n var left = offset.left + this.treeWidget._getScrollLeft();\n return {\n left: left,\n top: offset.top,\n right: left + width,\n bottom: offset.top + height + 16\n };\n }\n };\n return DragAndDropHandler;\n}());\nexports.DragAndDropHandler = DragAndDropHandler;\nvar VisibleNodeIterator = /** @class */ (function () {\n function VisibleNodeIterator(tree) {\n this.tree = tree;\n }\n VisibleNodeIterator.prototype.iterate = function () {\n var _this = this;\n var isFirstNode = true;\n var _iterateNode = function (node, nextNode) {\n var mustIterateInside = (node.is_open || !node.element) && node.hasChildren();\n var $element = null;\n if (node.element) {\n $element = jQuery(node.element);\n if (!$element.is(\":visible\")) {\n return;\n }\n if (isFirstNode) {\n _this.handleFirstNode(node);\n isFirstNode = false;\n }\n if (!node.hasChildren()) {\n _this.handleNode(node, nextNode, $element);\n }\n else if (node.is_open) {\n if (!_this.handleOpenFolder(node, $element)) {\n mustIterateInside = false;\n }\n }\n else {\n _this.handleClosedFolder(node, nextNode, $element);\n }\n }\n if (mustIterateInside) {\n var childrenLength_1 = node.children.length;\n node.children.forEach(function (_, i) {\n if (i === childrenLength_1 - 1) {\n _iterateNode(node.children[i], null);\n }\n else {\n _iterateNode(node.children[i], node.children[i + 1]);\n }\n });\n if (node.is_open && $element) {\n _this.handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n _iterateNode(this.tree, null);\n };\n return VisibleNodeIterator;\n}());\nvar HitAreasGenerator = /** @class */ (function (_super) {\n __extends(HitAreasGenerator, _super);\n function HitAreasGenerator(tree, currentNode, treeBottom) {\n var _this = _super.call(this, tree) || this;\n _this.currentNode = currentNode;\n _this.treeBottom = treeBottom;\n return _this;\n }\n HitAreasGenerator.prototype.generate = function () {\n this.positions = [];\n this.lastTop = 0;\n this.iterate();\n return this.generateHitAreas(this.positions);\n };\n HitAreasGenerator.prototype.generateHitAreas = function (positions) {\n var previousTop = -1;\n var group = [];\n var hitAreas = [];\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n var position = positions_1[_i];\n if (position.top !== previousTop && group.length) {\n if (group.length) {\n this.generateHitAreasForGroup(hitAreas, group, previousTop, position.top);\n }\n previousTop = position.top;\n group = [];\n }\n group.push(position);\n }\n this.generateHitAreasForGroup(hitAreas, group, previousTop, this.treeBottom);\n return hitAreas;\n };\n HitAreasGenerator.prototype.handleOpenFolder = function (node, $element) {\n if (node === this.currentNode) {\n // Cannot move inside current item\n // Stop iterating\n return false;\n }\n // Cannot move before current item\n if (node.children[0] !== this.currentNode) {\n this.addPosition(node, node_1.Position.Inside, this.getTop($element));\n }\n // Continue iterating\n return true;\n };\n HitAreasGenerator.prototype.handleClosedFolder = function (node, nextNode, $element) {\n var top = this.getTop($element);\n if (node === this.currentNode) {\n // Cannot move after current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.Inside, top);\n // Cannot move before current item\n if (nextNode !== this.currentNode) {\n this.addPosition(node, node_1.Position.After, top);\n }\n }\n };\n HitAreasGenerator.prototype.handleFirstNode = function (node) {\n if (node !== this.currentNode) {\n this.addPosition(node, node_1.Position.Before, this.getTop(jQuery(node.element)));\n }\n };\n HitAreasGenerator.prototype.handleAfterOpenFolder = function (node, nextNode) {\n if (node === this.currentNode || nextNode === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, node_1.Position.None, this.lastTop);\n }\n else {\n this.addPosition(node, node_1.Position.After, this.lastTop);\n }\n };\n HitAreasGenerator.prototype.handleNode = function (node, nextNode, $element) {\n var top = this.getTop($element);\n if (node === this.currentNode) {\n // Cannot move inside current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.Inside, top);\n }\n if (nextNode === this.currentNode || node === this.currentNode) {\n // Cannot move before or after current item\n this.addPosition(node, node_1.Position.None, top);\n }\n else {\n this.addPosition(node, node_1.Position.After, top);\n }\n };\n HitAreasGenerator.prototype.getTop = function ($element) {\n var offset = $element.offset();\n return offset ? offset.top : 0;\n };\n HitAreasGenerator.prototype.addPosition = function (node, position, top) {\n var area = {\n top: top,\n bottom: 0,\n node: node,\n position: position\n };\n this.positions.push(area);\n this.lastTop = top;\n };\n HitAreasGenerator.prototype.generateHitAreasForGroup = function (hitAreas, positionsInGroup, top, bottom) {\n // limit positions in group\n var positionCount = Math.min(positionsInGroup.length, 4);\n var areaHeight = Math.round((bottom - top) / positionCount);\n var areaTop = top;\n var i = 0;\n while (i < positionCount) {\n var position = positionsInGroup[i];\n hitAreas.push({\n top: areaTop,\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position\n });\n areaTop += areaHeight;\n i += 1;\n }\n };\n return HitAreasGenerator;\n}(VisibleNodeIterator));\nexports.HitAreasGenerator = HitAreasGenerator;\nvar DragElement = /** @class */ (function () {\n function DragElement(nodeName, offsetX, offsetY, $tree) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.$element = jQuery(\"\" + nodeName + \"\");\n this.$element.css(\"position\", \"absolute\");\n $tree.append(this.$element);\n }\n DragElement.prototype.move = function (pageX, pageY) {\n this.$element.offset({\n left: pageX - this.offsetX,\n top: pageY - this.offsetY\n });\n };\n DragElement.prototype.remove = function () {\n this.$element.remove();\n };\n return DragElement;\n}());\n","\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar ElementsRenderer = /** @class */ (function () {\n function ElementsRenderer(treeWidget) {\n this.treeWidget = treeWidget;\n this.openedIconElement = this.createButtonElement(treeWidget.options.openedIcon);\n this.closedIconElement = this.createButtonElement(treeWidget.options.closedIcon);\n }\n ElementsRenderer.prototype.render = function (fromNode) {\n if (fromNode && fromNode.parent) {\n this.renderFromNode(fromNode);\n }\n else {\n this.renderFromRoot();\n }\n };\n ElementsRenderer.prototype.renderFromRoot = function () {\n var $element = this.treeWidget.element;\n $element.empty();\n this.createDomElements($element[0], this.treeWidget.tree.children, true, 1);\n };\n ElementsRenderer.prototype.renderFromNode = function (node) {\n // remember current li\n var $previousLi = jQuery(node.element);\n // create element\n var li = this.createLi(node, node.getLevel());\n this.attachNodeData(node, li);\n // add element to dom\n $previousLi.after(li);\n // remove previous li\n $previousLi.remove();\n // create children\n if (node.children) {\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n };\n ElementsRenderer.prototype.createDomElements = function (element, children, isRootNode, level) {\n var ul = this.createUl(isRootNode);\n element.appendChild(ul);\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var child = children_1[_i];\n var li = this.createLi(child, level);\n ul.appendChild(li);\n this.attachNodeData(child, li);\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n };\n ElementsRenderer.prototype.attachNodeData = function (node, li) {\n node.element = li;\n jQuery(li).data(\"node\", node);\n };\n ElementsRenderer.prototype.createUl = function (isRootNode) {\n var classString;\n var role;\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n }\n else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n if (this.treeWidget.options.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n var ul = document.createElement(\"ul\");\n ul.className = \"jqtree_common \" + classString;\n ul.setAttribute(\"role\", role);\n return ul;\n };\n ElementsRenderer.prototype.createLi = function (node, level) {\n var isSelected = Boolean(this.treeWidget.selectNodeHandler &&\n this.treeWidget.selectNodeHandler.isNodeSelected(node));\n var mustShowFolder = node.isFolder() ||\n (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder);\n var li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n if (this.treeWidget.options.onCreateLi) {\n this.treeWidget.options.onCreateLi(node, jQuery(li), isSelected);\n }\n return li;\n };\n ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) {\n var buttonClasses = this.getButtonClasses(node);\n var folderClasses = this.getFolderClasses(node, isSelected);\n var iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n // li\n var li = document.createElement(\"li\");\n li.className = \"jqtree_common \" + folderClasses;\n li.setAttribute(\"role\", \"presentation\");\n // div\n var div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n li.appendChild(div);\n // button link\n var buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n buttonLink.appendChild(iconElement.cloneNode(true));\n buttonLink.setAttribute(\"role\", \"presentation\");\n buttonLink.setAttribute(\"aria-hidden\", \"true\");\n if (this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n // title span\n div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, true));\n if (!this.treeWidget.options.buttonLeft) {\n div.appendChild(buttonLink);\n }\n return li;\n };\n ElementsRenderer.prototype.createNodeLi = function (node, level, isSelected) {\n var liClasses = [\"jqtree_common\"];\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n var classString = liClasses.join(\" \");\n // li\n var li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"presentation\");\n // div\n var div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"presentation\");\n li.appendChild(div);\n // title span\n div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, false));\n return li;\n };\n ElementsRenderer.prototype.createTitleSpan = function (nodeName, level, isSelected, isOpen, isFolder) {\n var titleSpan = document.createElement(\"span\");\n var classes = \"jqtree-title jqtree_common\";\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n titleSpan.className = classes;\n titleSpan.setAttribute(\"role\", \"treeitem\");\n titleSpan.setAttribute(\"aria-level\", \"\" + level);\n titleSpan.setAttribute(\"aria-selected\", util_1.getBoolString(isSelected));\n titleSpan.setAttribute(\"aria-expanded\", util_1.getBoolString(isOpen));\n if (isSelected) {\n titleSpan.setAttribute(\"tabindex\", this.treeWidget.options.tabIndex);\n }\n titleSpan.innerHTML = this.escapeIfNecessary(nodeName);\n return titleSpan;\n };\n ElementsRenderer.prototype.getButtonClasses = function (node) {\n var classes = [\"jqtree-toggler\", \"jqtree_common\"];\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n if (this.treeWidget.options.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n }\n else {\n classes.push(\"jqtree-toggler-right\");\n }\n return classes.join(\" \");\n };\n ElementsRenderer.prototype.getFolderClasses = function (node, isSelected) {\n var classes = [\"jqtree-folder\"];\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n return classes.join(\" \");\n };\n ElementsRenderer.prototype.escapeIfNecessary = function (value) {\n if (this.treeWidget.options.autoEscape) {\n return util_1.htmlEscape(value);\n }\n else {\n return value;\n }\n };\n ElementsRenderer.prototype.createButtonElement = function (value) {\n if (typeof value === \"string\") {\n // convert value to html\n var div = document.createElement(\"div\");\n div.innerHTML = value;\n return document.createTextNode(div.innerHTML);\n }\n else {\n return jQuery(value)[0];\n }\n };\n return ElementsRenderer;\n}());\nexports[\"default\"] = ElementsRenderer;\n","\"use strict\";\nexports.__esModule = true;\nvar DataLoader = /** @class */ (function () {\n function DataLoader(treeWidget) {\n this.treeWidget = treeWidget;\n }\n DataLoader.prototype.loadFromUrl = function (urlInfo, parentNode, onFinished) {\n var _this = this;\n if (!urlInfo) {\n return;\n }\n var $el = this.getDomElement(parentNode);\n this.addLoadingClass($el);\n this.notifyLoading(true, parentNode, $el);\n var stopLoading = function () {\n _this.removeLoadingClass($el);\n _this.notifyLoading(false, parentNode, $el);\n };\n var handleSuccess = function (data) {\n stopLoading();\n _this.treeWidget.loadData(_this.parseData(data), parentNode);\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n var handleError = function (jqXHR) {\n stopLoading();\n var onLoadFailed = _this.treeWidget.options.onLoadFailed;\n if (onLoadFailed) {\n onLoadFailed(jqXHR);\n }\n };\n this.submitRequest(urlInfo, handleSuccess, handleError);\n };\n DataLoader.prototype.addLoadingClass = function ($el) {\n if ($el) {\n $el.addClass(\"jqtree-loading\");\n }\n };\n DataLoader.prototype.removeLoadingClass = function ($el) {\n if ($el) {\n $el.removeClass(\"jqtree-loading\");\n }\n };\n DataLoader.prototype.getDomElement = function (parentNode) {\n if (parentNode) {\n return jQuery(parentNode.element);\n }\n else {\n return this.treeWidget.element;\n }\n };\n DataLoader.prototype.notifyLoading = function (isLoading, node, $el) {\n var onLoading = this.treeWidget.options.onLoading;\n if (onLoading) {\n onLoading(isLoading, node, $el);\n }\n this.treeWidget._triggerEvent(\"tree.loading_data\", {\n isLoading: isLoading,\n node: node,\n $el: $el\n });\n };\n DataLoader.prototype.submitRequest = function (urlInfo, handleSuccess, handleError) {\n var ajaxSettings = jQuery.extend({ method: \"GET\" }, typeof urlInfo === \"string\" ? { url: urlInfo } : urlInfo, {\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError\n });\n ajaxSettings.method = ajaxSettings.method.toUpperCase();\n jQuery.ajax(ajaxSettings);\n };\n DataLoader.prototype.parseData = function (data) {\n var dataFilter = this.treeWidget.options.dataFilter;\n var parsedData = data instanceof Array || typeof data === \"object\"\n ? data\n : data != null\n ? jQuery.parseJSON(data)\n : [];\n return dataFilter ? dataFilter(parsedData) : parsedData;\n };\n return DataLoader;\n}());\nexports[\"default\"] = DataLoader;\n","\"use strict\";\nexports.__esModule = true;\nvar KeyHandler = /** @class */ (function () {\n function KeyHandler(treeWidget) {\n var _this = this;\n this.handleKeyDown = function (e) {\n if (!_this.canHandleKeyboard()) {\n return true;\n }\n else {\n var key = e.which;\n switch (key) {\n case KeyHandler.DOWN:\n return _this.moveDown();\n case KeyHandler.UP:\n return _this.moveUp();\n case KeyHandler.RIGHT:\n return _this.moveRight();\n case KeyHandler.LEFT:\n return _this.moveLeft();\n default:\n return true;\n }\n }\n };\n this.treeWidget = treeWidget;\n if (treeWidget.options.keyboardSupport) {\n jQuery(document).on(\"keydown.jqtree\", this.handleKeyDown);\n }\n }\n KeyHandler.prototype.deinit = function () {\n jQuery(document).off(\"keydown.jqtree\");\n };\n KeyHandler.prototype.moveDown = function () {\n var node = this.treeWidget.getSelectedNode();\n if (node) {\n return this.selectNode(node.getNextNode());\n }\n else {\n return false;\n }\n };\n KeyHandler.prototype.moveUp = function () {\n var node = this.treeWidget.getSelectedNode();\n if (node) {\n return this.selectNode(node.getPreviousNode());\n }\n else {\n return false;\n }\n };\n KeyHandler.prototype.moveRight = function () {\n var node = this.treeWidget.getSelectedNode();\n if (!node) {\n return true;\n }\n else if (!node.isFolder()) {\n return true;\n }\n else {\n // folder node\n if (node.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(node.getNextNode());\n }\n else {\n // Right expands a closed node\n this.treeWidget.openNode(node);\n return false;\n }\n }\n };\n KeyHandler.prototype.moveLeft = function () {\n var node = this.treeWidget.getSelectedNode();\n if (!node) {\n return true;\n }\n else if (node.isFolder() && node.is_open) {\n // Left on an open node closes the node\n this.treeWidget.closeNode(node);\n return false;\n }\n else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(node.getParent());\n }\n };\n KeyHandler.prototype.selectNode = function (node) {\n if (!node) {\n return true;\n }\n else {\n this.treeWidget.selectNode(node);\n if (this.treeWidget.scrollHandler &&\n !this.treeWidget.scrollHandler.isScrolledIntoView(jQuery(node.element).find(\".jqtree-element\"))) {\n this.treeWidget.scrollToNode(node);\n }\n return false;\n }\n };\n KeyHandler.prototype.canHandleKeyboard = function () {\n return (this.treeWidget.options.keyboardSupport &&\n this.isFocusOnTree() &&\n this.treeWidget.getSelectedNode() != null);\n };\n KeyHandler.prototype.isFocusOnTree = function () {\n var activeElement = document.activeElement;\n return Boolean(activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.treeWidget._containsElement(activeElement));\n };\n KeyHandler.LEFT = 37;\n KeyHandler.UP = 38;\n KeyHandler.RIGHT = 39;\n KeyHandler.DOWN = 40;\n return KeyHandler;\n}());\nexports[\"default\"] = KeyHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\n/*\nThis widget does the same a the mouse widget in jqueryui.\n*/\nvar simple_widget_1 = require(\"./simple.widget\");\nvar MouseWidget = /** @class */ (function (_super) {\n __extends(MouseWidget, _super);\n function MouseWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.mouseDown = function (e) {\n // Is left mouse button?\n if (e.which !== 1) {\n return;\n }\n var result = _this.handleMouseDown(_this.getPositionInfo(e));\n if (result) {\n e.preventDefault();\n }\n return result;\n };\n _this.mouseMove = function (e) {\n return _this.handleMouseMove(e, _this.getPositionInfo(e));\n };\n _this.mouseUp = function (e) {\n return _this.handleMouseUp(_this.getPositionInfo(e));\n };\n _this.touchStart = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this.handleMouseDown(_this.getPositionInfo(touch));\n };\n _this.touchMove = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this.handleMouseMove(e, _this.getPositionInfo(touch));\n };\n _this.touchEnd = function (e) {\n var touchEvent = e.originalEvent;\n if (touchEvent.touches.length > 1) {\n return;\n }\n var touch = touchEvent.changedTouches[0];\n return _this.handleMouseUp(_this.getPositionInfo(touch));\n };\n return _this;\n }\n MouseWidget.prototype.setMouseDelay = function (mouseDelay) {\n this.mouseDelay = mouseDelay;\n };\n MouseWidget.prototype.init = function () {\n this.$el.on(\"mousedown.mousewidget\", this.mouseDown);\n this.$el.on(\"touchstart.mousewidget\", this.touchStart);\n this.isMouseStarted = false;\n this.mouseDelay = 0;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = true;\n this.mouseDownInfo = null;\n };\n MouseWidget.prototype.deinit = function () {\n this.$el.off(\"mousedown.mousewidget\");\n this.$el.off(\"touchstart.mousewidget\");\n var $document = jQuery(document);\n $document.off(\"mousemove.mousewidget\");\n $document.off(\"mouseup.mousewidget\");\n };\n MouseWidget.prototype.handleMouseDown = function (positionInfo) {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n this.mouseDownInfo = positionInfo;\n if (!this.mouseCapture(positionInfo)) {\n return;\n }\n this.handleStartMouse();\n return true;\n };\n MouseWidget.prototype.handleStartMouse = function () {\n var $document = jQuery(document);\n $document.on(\"mousemove.mousewidget\", this.mouseMove);\n $document.on(\"touchmove.mousewidget\", this.touchMove);\n $document.on(\"mouseup.mousewidget\", this.mouseUp);\n $document.on(\"touchend.mousewidget\", this.touchEnd);\n if (this.mouseDelay) {\n this.startMouseDelayTimer();\n }\n };\n MouseWidget.prototype.startMouseDelayTimer = function () {\n var _this = this;\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n this.mouseDelayTimer = window.setTimeout(function () {\n _this.isMouseDelayMet = true;\n }, this.mouseDelay);\n this.isMouseDelayMet = false;\n };\n MouseWidget.prototype.handleMouseMove = function (e, positionInfo) {\n if (this.isMouseStarted) {\n this.mouseDrag(positionInfo);\n return e.preventDefault();\n }\n if (this.mouseDelay && !this.isMouseDelayMet) {\n return true;\n }\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false;\n }\n if (this.isMouseStarted) {\n this.mouseDrag(positionInfo);\n }\n else {\n this.handleMouseUp(positionInfo);\n }\n return !this.isMouseStarted;\n };\n MouseWidget.prototype.getPositionInfo = function (e) {\n return {\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target,\n originalEvent: e\n };\n };\n MouseWidget.prototype.handleMouseUp = function (positionInfo) {\n var $document = jQuery(document);\n $document.off(\"mousemove.mousewidget\");\n $document.off(\"touchmove.mousewidget\");\n $document.off(\"mouseup.mousewidget\");\n $document.off(\"touchend.mousewidget\");\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.mouseStop(positionInfo);\n }\n };\n return MouseWidget;\n}(simple_widget_1[\"default\"]));\nexports[\"default\"] = MouseWidget;\n","\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar SaveStateHandler = /** @class */ (function () {\n function SaveStateHandler(treeWidget) {\n this.treeWidget = treeWidget;\n }\n SaveStateHandler.prototype.saveState = function () {\n var state = JSON.stringify(this.getState());\n if (this.treeWidget.options.onSetStateFromStorage) {\n this.treeWidget.options.onSetStateFromStorage(state);\n }\n else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n };\n SaveStateHandler.prototype.getStateFromStorage = function () {\n var jsonData = this.loadFromStorage();\n if (jsonData) {\n return this.parseState(jsonData);\n }\n else {\n return null;\n }\n };\n SaveStateHandler.prototype.getState = function () {\n var _this = this;\n var getOpenNodeIds = function () {\n var openNodes = [];\n _this.treeWidget.tree.iterate(function (node) {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n return openNodes;\n };\n var getSelectedNodeIds = function () {\n return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; });\n };\n /* eslint-disable @typescript-eslint/camelcase */\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds()\n };\n /* eslint-enable @typescript-eslint/camelcase */\n };\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n SaveStateHandler.prototype.setInitialState = function (state) {\n if (!state) {\n return false;\n }\n else {\n var mustLoadOnDemand = false;\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n if (state.selected_node) {\n this.resetSelection();\n this.selectInitialNodes(state.selected_node);\n }\n return mustLoadOnDemand;\n }\n };\n SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cbFinished) {\n if (state) {\n this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished);\n }\n else {\n cbFinished();\n }\n };\n SaveStateHandler.prototype.getNodeIdToBeSelected = function () {\n var state = this.getStateFromStorage();\n if (state && state.selected_node) {\n return state.selected_node[0];\n }\n else {\n return null;\n }\n };\n SaveStateHandler.prototype.parseState = function (jsonData) {\n var state = jQuery.parseJSON(jsonData);\n // Check if selected_node is an int (instead of an array)\n if (state && state.selected_node && util_1.isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node]; // eslint-disable-line @typescript-eslint/camelcase\n }\n return state;\n };\n SaveStateHandler.prototype.loadFromStorage = function () {\n if (this.treeWidget.options.onGetStateFromStorage) {\n return this.treeWidget.options.onGetStateFromStorage();\n }\n else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n }\n };\n SaveStateHandler.prototype.openInitialNodes = function (nodeIds) {\n var mustLoadOnDemand = false;\n for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) {\n var nodeDd = nodeIds_1[_i];\n var node = this.treeWidget.getNodeById(nodeDd);\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true; // eslint-disable-line @typescript-eslint/camelcase\n }\n else {\n mustLoadOnDemand = true;\n }\n }\n }\n return mustLoadOnDemand;\n };\n SaveStateHandler.prototype.selectInitialNodes = function (nodeIds) {\n var selectCount = 0;\n for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) {\n var nodeId = nodeIds_2[_i];\n var node = this.treeWidget.getNodeById(nodeId);\n if (node) {\n selectCount += 1;\n if (this.treeWidget.selectNodeHandler) {\n this.treeWidget.selectNodeHandler.addToSelection(node);\n }\n }\n }\n return selectCount !== 0;\n };\n SaveStateHandler.prototype.resetSelection = function () {\n var selectNodeHandler = this.treeWidget.selectNodeHandler;\n if (selectNodeHandler) {\n var selectedNodes = selectNodeHandler.getSelectedNodes();\n selectedNodes.forEach(function (node) {\n selectNodeHandler.removeFromSelection(node);\n });\n }\n };\n SaveStateHandler.prototype.doSetInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) {\n var _this = this;\n var loadingCount = 0;\n var nodeIds = nodeIdsParam;\n var openNodes = function () {\n var newNodesIds = [];\n for (var _i = 0, nodeIds_3 = nodeIds; _i < nodeIds_3.length; _i++) {\n var nodeId = nodeIds_3[_i];\n var node = _this.treeWidget.getNodeById(nodeId);\n if (!node) {\n newNodesIds.push(nodeId);\n }\n else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n }\n else {\n _this.treeWidget._openNode(node, false, null);\n }\n }\n }\n }\n nodeIds = newNodesIds;\n if (_this.selectInitialNodes(selectedNodes)) {\n _this.treeWidget._refreshElements(null);\n }\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n var loadAndOpenNode = function (node) {\n loadingCount += 1;\n _this.treeWidget._openNode(node, false, function () {\n loadingCount -= 1;\n openNodes();\n });\n };\n openNodes();\n };\n SaveStateHandler.prototype.getKeyName = function () {\n if (typeof this.treeWidget.options.saveState === \"string\") {\n return this.treeWidget.options.saveState;\n }\n else {\n return \"tree\";\n }\n };\n SaveStateHandler.prototype.supportsLocalStorage = function () {\n var testSupport = function () {\n // Is local storage supported?\n if (localStorage == null) {\n return false;\n }\n else {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n var key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n }\n catch (error) {\n return false;\n }\n return true;\n }\n };\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n return this._supportsLocalStorage;\n };\n return SaveStateHandler;\n}());\nexports[\"default\"] = SaveStateHandler;\n","\"use strict\";\nexports.__esModule = true;\nvar ScrollHandler = /** @class */ (function () {\n function ScrollHandler(treeWidget) {\n this.treeWidget = treeWidget;\n this.previousTop = -1;\n this.isInitialized = false;\n }\n ScrollHandler.prototype.checkScrolling = function () {\n this.ensureInit();\n this.checkVerticalScrolling();\n this.checkHorizontalScrolling();\n };\n ScrollHandler.prototype.scrollToY = function (top) {\n this.ensureInit();\n if (this.$scrollParent) {\n this.$scrollParent[0].scrollTop = top;\n }\n else {\n var offset = this.treeWidget.$el.offset();\n var treeTop = offset ? offset.top : 0;\n jQuery(document).scrollTop(top + treeTop);\n }\n };\n ScrollHandler.prototype.isScrolledIntoView = function ($element) {\n this.ensureInit();\n var elementBottom;\n var viewBottom;\n var elementTop;\n var viewTop;\n var elHeight = $element.height() || 0;\n if (this.$scrollParent) {\n viewTop = 0;\n viewBottom = this.$scrollParent.height() || 0;\n var offset = $element.offset();\n var originalTop = offset ? offset.top : 0;\n elementTop = originalTop - this.scrollParentTop;\n elementBottom = elementTop + elHeight;\n }\n else {\n viewTop = jQuery(window).scrollTop() || 0;\n var windowHeight = jQuery(window).height() || 0;\n viewBottom = viewTop + windowHeight;\n var offset = $element.offset();\n elementTop = offset ? offset.top : 0;\n elementBottom = elementTop + elHeight;\n }\n return elementBottom <= viewBottom && elementTop >= viewTop;\n };\n ScrollHandler.prototype.getScrollLeft = function () {\n if (!this.$scrollParent) {\n return 0;\n }\n else {\n return this.$scrollParent.scrollLeft() || 0;\n }\n };\n ScrollHandler.prototype.initScrollParent = function () {\n var _this = this;\n var getParentWithOverflow = function () {\n var cssAttributes = [\"overflow\", \"overflow-y\"];\n var hasOverFlow = function ($el) {\n for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) {\n var attr = cssAttributes_1[_i];\n var overflowValue = $el.css(attr);\n if (overflowValue === \"auto\" ||\n overflowValue === \"scroll\") {\n return true;\n }\n }\n return false;\n };\n if (hasOverFlow(_this.treeWidget.$el)) {\n return _this.treeWidget.$el;\n }\n for (var _i = 0, _a = _this.treeWidget.$el.parents().get(); _i < _a.length; _i++) {\n var el = _a[_i];\n var $el = jQuery(el);\n if (hasOverFlow($el)) {\n return $el;\n }\n }\n return null;\n };\n var setDocumentAsScrollParent = function () {\n _this.scrollParentTop = 0;\n _this.$scrollParent = null;\n };\n if (this.treeWidget.$el.css(\"position\") === \"fixed\") {\n setDocumentAsScrollParent();\n }\n var $scrollParent = getParentWithOverflow();\n if ($scrollParent &&\n $scrollParent.length &&\n $scrollParent[0].tagName !== \"HTML\") {\n this.$scrollParent = $scrollParent;\n var offset = this.$scrollParent.offset();\n this.scrollParentTop = offset ? offset.top : 0;\n }\n else {\n setDocumentAsScrollParent();\n }\n this.isInitialized = true;\n };\n ScrollHandler.prototype.ensureInit = function () {\n if (!this.isInitialized) {\n this.initScrollParent();\n }\n };\n ScrollHandler.prototype.handleVerticalScrollingWithScrollParent = function (area) {\n var scrollParent = this.$scrollParent && this.$scrollParent[0];\n if (!scrollParent) {\n return;\n }\n var distanceBottom = this.scrollParentTop + scrollParent.offsetHeight - area.bottom;\n if (distanceBottom < 20) {\n scrollParent.scrollTop += 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n else if (area.top - this.scrollParentTop < 20) {\n scrollParent.scrollTop -= 20;\n this.treeWidget.refreshHitAreas();\n this.previousTop = -1;\n }\n };\n ScrollHandler.prototype.handleVerticalScrollingWithDocument = function (area) {\n var scrollTop = jQuery(document).scrollTop() || 0;\n var distanceTop = area.top - scrollTop;\n if (distanceTop < 20) {\n jQuery(document).scrollTop(scrollTop - 20);\n }\n else {\n var windowHeight = jQuery(window).height() || 0;\n if (windowHeight - (area.bottom - scrollTop) < 20) {\n jQuery(document).scrollTop(scrollTop + 20);\n }\n }\n };\n ScrollHandler.prototype.checkVerticalScrolling = function () {\n var hoveredArea = this.treeWidget.dndHandler &&\n this.treeWidget.dndHandler.hoveredArea;\n if (hoveredArea && hoveredArea.top !== this.previousTop) {\n this.previousTop = hoveredArea.top;\n if (this.$scrollParent) {\n this.handleVerticalScrollingWithScrollParent(hoveredArea);\n }\n else {\n this.handleVerticalScrollingWithDocument(hoveredArea);\n }\n }\n };\n ScrollHandler.prototype.checkHorizontalScrolling = function () {\n var positionInfo = this.treeWidget.dndHandler &&\n this.treeWidget.dndHandler.positionInfo;\n if (!positionInfo) {\n return;\n }\n if (this.$scrollParent) {\n this.handleHorizontalScrollingWithParent(positionInfo);\n }\n else {\n this.handleHorizontalScrollingWithDocument(positionInfo);\n }\n };\n ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) {\n if (positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return;\n }\n var $scrollParent = this.$scrollParent;\n var scrollParentOffset = $scrollParent && $scrollParent.offset();\n if (!($scrollParent && scrollParentOffset)) {\n return;\n }\n var scrollParent = $scrollParent[0];\n var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth <\n scrollParent.scrollWidth;\n var canScrollLeft = scrollParent.scrollLeft > 0;\n var rightEdge = scrollParentOffset.left + scrollParent.clientWidth;\n var leftEdge = scrollParentOffset.left;\n var isNearRightEdge = positionInfo.pageX > rightEdge - 20;\n var isNearLeftEdge = positionInfo.pageX < leftEdge + 20;\n if (isNearRightEdge && canScrollRight) {\n scrollParent.scrollLeft = Math.min(scrollParent.scrollLeft + 20, scrollParent.scrollWidth);\n }\n else if (isNearLeftEdge && canScrollLeft) {\n scrollParent.scrollLeft = Math.max(scrollParent.scrollLeft - 20, 0);\n }\n };\n ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) {\n if (positionInfo.pageX === undefined ||\n positionInfo.pageY === undefined) {\n return;\n }\n var $document = jQuery(document);\n var scrollLeft = $document.scrollLeft() || 0;\n var windowWidth = jQuery(window).width() || 0;\n var canScrollLeft = scrollLeft > 0;\n var isNearRightEdge = positionInfo.pageX > windowWidth - 20;\n var isNearLeftEdge = positionInfo.pageX - scrollLeft < 20;\n if (isNearRightEdge) {\n $document.scrollLeft(scrollLeft + 20);\n }\n else if (isNearLeftEdge && canScrollLeft) {\n $document.scrollLeft(Math.max(scrollLeft - 20, 0));\n }\n };\n return ScrollHandler;\n}());\nexports[\"default\"] = ScrollHandler;\n","\"use strict\";\nexports.__esModule = true;\nvar SelectNodeHandler = /** @class */ (function () {\n function SelectNodeHandler(treeWidget) {\n this.treeWidget = treeWidget;\n this.clear();\n }\n SelectNodeHandler.prototype.getSelectedNode = function () {\n var selectedNodes = this.getSelectedNodes();\n if (selectedNodes.length) {\n return selectedNodes[0];\n }\n else {\n return false;\n }\n };\n SelectNodeHandler.prototype.getSelectedNodes = function () {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n }\n else {\n var selectedNodes = [];\n for (var id in this.selectedNodes) {\n if (this.selectedNodes.hasOwnProperty(id)) {\n var node = this.treeWidget.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n }\n }\n return selectedNodes;\n }\n };\n SelectNodeHandler.prototype.getSelectedNodesUnder = function (parent) {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n }\n else {\n return [];\n }\n }\n else {\n var selectedNodes = [];\n for (var id in this.selectedNodes) {\n if (this.selectedNodes.hasOwnProperty(id)) {\n var node = this.treeWidget.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n return selectedNodes;\n }\n };\n SelectNodeHandler.prototype.isNodeSelected = function (node) {\n if (!node) {\n return false;\n }\n else if (node.id != null) {\n if (this.selectedNodes[node.id]) {\n return true;\n }\n else {\n return false;\n }\n }\n else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n }\n else {\n return false;\n }\n };\n SelectNodeHandler.prototype.clear = function () {\n this.selectedNodes = {};\n this.selectedSingleNode = null;\n };\n SelectNodeHandler.prototype.removeFromSelection = function (node, includeChildren) {\n var _this = this;\n if (includeChildren === void 0) { includeChildren = false; }\n if (node.id == null) {\n if (this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element) {\n this.selectedSingleNode = null;\n }\n }\n else {\n delete this.selectedNodes[node.id];\n if (includeChildren) {\n node.iterate(function () {\n delete _this.selectedNodes[node.id];\n return true;\n });\n }\n }\n };\n SelectNodeHandler.prototype.addToSelection = function (node) {\n if (node.id != null) {\n this.selectedNodes[node.id] = true;\n }\n else {\n this.selectedSingleNode = node;\n }\n };\n return SelectNodeHandler;\n}());\nexports[\"default\"] = SelectNodeHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexports.__esModule = true;\nvar node_1 = require(\"./node\");\nvar NodeElement = /** @class */ (function () {\n function NodeElement(node, treeWidget) {\n this.init(node, treeWidget);\n }\n NodeElement.prototype.init = function (node, treeWidget) {\n this.node = node;\n this.treeWidget = treeWidget;\n if (!node.element) {\n node.element = this.treeWidget.element.get(0);\n }\n this.$element = jQuery(node.element);\n };\n NodeElement.prototype.addDropHint = function (position) {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.$element, this.treeWidget._getScrollLeft());\n }\n else {\n return new GhostDropHint(this.node, this.$element, position);\n }\n };\n NodeElement.prototype.select = function (mustSetFocus) {\n var $li = this.getLi();\n $li.addClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"true\");\n var $span = this.getSpan();\n $span.attr(\"tabindex\", this.treeWidget.options.tabIndex);\n if (mustSetFocus) {\n $span.focus();\n }\n };\n NodeElement.prototype.deselect = function () {\n var $li = this.getLi();\n $li.removeClass(\"jqtree-selected\");\n $li.attr(\"aria-selected\", \"false\");\n var $span = this.getSpan();\n $span.removeAttr(\"tabindex\");\n $span.blur();\n };\n NodeElement.prototype.getUl = function () {\n return this.$element.children(\"ul:first\");\n };\n NodeElement.prototype.getSpan = function () {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"span.jqtree-title\");\n };\n NodeElement.prototype.getLi = function () {\n return this.$element;\n };\n NodeElement.prototype.mustShowBorderDropHint = function (position) {\n return position === node_1.Position.Inside;\n };\n return NodeElement;\n}());\nexports.NodeElement = NodeElement;\nvar FolderElement = /** @class */ (function (_super) {\n __extends(FolderElement, _super);\n function FolderElement() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FolderElement.prototype.open = function (onFinished, slide, animationSpeed) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n if (this.node.is_open) {\n return;\n }\n this.node.is_open = true; // eslint-disable-line @typescript-eslint/camelcase\n var $button = this.getButton();\n $button.removeClass(\"jqtree-closed\");\n $button.html(\"\");\n var buttonEl = $button.get(0);\n if (buttonEl) {\n var icon = this.treeWidget.renderer.openedIconElement.cloneNode(true);\n buttonEl.appendChild(icon);\n }\n var doOpen = function () {\n var $li = _this.getLi();\n $li.removeClass(\"jqtree-closed\");\n var $span = _this.getSpan();\n $span.attr(\"aria-expanded\", \"true\");\n if (onFinished) {\n onFinished(_this.node);\n }\n _this.treeWidget._triggerEvent(\"tree.open\", {\n node: _this.node\n });\n };\n if (slide) {\n this.getUl().slideDown(animationSpeed, doOpen);\n }\n else {\n this.getUl().show();\n doOpen();\n }\n };\n FolderElement.prototype.close = function (slide, animationSpeed) {\n var _this = this;\n if (slide === void 0) { slide = true; }\n if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n if (!this.node.is_open) {\n return;\n }\n this.node.is_open = false; // eslint-disable-line @typescript-eslint/camelcase\n var $button = this.getButton();\n $button.addClass(\"jqtree-closed\");\n $button.html(\"\");\n var buttonEl = $button.get(0);\n if (buttonEl) {\n var icon = this.treeWidget.renderer.closedIconElement.cloneNode(true);\n buttonEl.appendChild(icon);\n }\n var doClose = function () {\n var $li = _this.getLi();\n $li.addClass(\"jqtree-closed\");\n var $span = _this.getSpan();\n $span.attr(\"aria-expanded\", \"false\");\n _this.treeWidget._triggerEvent(\"tree.close\", {\n node: _this.node\n });\n };\n if (slide) {\n this.getUl().slideUp(animationSpeed, doClose);\n }\n else {\n this.getUl().hide();\n doClose();\n }\n };\n FolderElement.prototype.mustShowBorderDropHint = function (position) {\n return !this.node.is_open && position === node_1.Position.Inside;\n };\n FolderElement.prototype.getButton = function () {\n return this.$element\n .children(\".jqtree-element\")\n .find(\"a.jqtree-toggler\");\n };\n return FolderElement;\n}(NodeElement));\nexports.FolderElement = FolderElement;\nvar BorderDropHint = /** @class */ (function () {\n function BorderDropHint($element, scrollLeft) {\n var $div = $element.children(\".jqtree-element\");\n var elWidth = $element.width() || 0;\n var width = Math.max(elWidth + scrollLeft - 4, 0);\n var elHeight = $div.outerHeight() || 0;\n var height = Math.max(elHeight - 4, 0);\n this.$hint = jQuery('');\n $div.append(this.$hint);\n this.$hint.css({ width: width, height: height });\n }\n BorderDropHint.prototype.remove = function () {\n this.$hint.remove();\n };\n return BorderDropHint;\n}());\nexports.BorderDropHint = BorderDropHint;\nvar GhostDropHint = /** @class */ (function () {\n function GhostDropHint(node, $element, position) {\n this.$element = $element;\n this.node = node;\n this.$ghost = jQuery(\"
  • \\n
  • \");\n if (position === node_1.Position.After) {\n this.moveAfter();\n }\n else if (position === node_1.Position.Before) {\n this.moveBefore();\n }\n else if (position === node_1.Position.Inside) {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n }\n else {\n this.moveInside();\n }\n }\n }\n GhostDropHint.prototype.remove = function () {\n this.$ghost.remove();\n };\n GhostDropHint.prototype.moveAfter = function () {\n this.$element.after(this.$ghost);\n };\n GhostDropHint.prototype.moveBefore = function () {\n this.$element.before(this.$ghost);\n };\n GhostDropHint.prototype.moveInsideOpenFolder = function () {\n jQuery(this.node.children[0].element).before(this.$ghost);\n };\n GhostDropHint.prototype.moveInside = function () {\n this.$element.after(this.$ghost);\n this.$ghost.addClass(\"jqtree-inside\");\n };\n return GhostDropHint;\n}());\n"],"sourceRoot":""} \ No newline at end of file diff --git a/lib/data_loader.js b/lib/dataLoader.js similarity index 95% rename from lib/data_loader.js rename to lib/dataLoader.js index 5402a129..3aea8f5a 100644 --- a/lib/data_loader.js +++ b/lib/dataLoader.js @@ -73,7 +73,11 @@ var DataLoader = /** @class */ (function () { }; DataLoader.prototype.parseData = function (data) { var dataFilter = this.treeWidget.options.dataFilter; - var parsedData = data instanceof Array || typeof data === "object" ? data : data != null ? jQuery.parseJSON(data) : []; + var parsedData = data instanceof Array || typeof data === "object" + ? data + : data != null + ? jQuery.parseJSON(data) + : []; return dataFilter ? dataFilter(parsedData) : parsedData; }; return DataLoader; diff --git a/lib/drag_and_drop_handler.js b/lib/dragAndDropHandler.js similarity index 96% rename from lib/drag_and_drop_handler.js rename to lib/dragAndDropHandler.js index 7883b956..142d88a9 100644 --- a/lib/drag_and_drop_handler.js +++ b/lib/dragAndDropHandler.js @@ -30,7 +30,8 @@ var DragAndDropHandler = /** @class */ (function () { if (!this.mustCaptureElement($element)) { return null; } - if (this.treeWidget.options.onIsMoveHandle && !this.treeWidget.options.onIsMoveHandle($element)) { + if (this.treeWidget.options.onIsMoveHandle && + !this.treeWidget.options.onIsMoveHandle($element)) { return null; } var nodeElement = this.treeWidget._getNodeElement($element); @@ -52,7 +53,9 @@ var DragAndDropHandler = /** @class */ (function () { } }; DragAndDropHandler.prototype.mouseStart = function (positionInfo) { - if (!this.currentItem || positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (!this.currentItem || + positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return false; } else { @@ -61,7 +64,9 @@ var DragAndDropHandler = /** @class */ (function () { var left = offset ? offset.left : 0; var top_1 = offset ? offset.top : 0; var node = this.currentItem.node; - var nodeName = this.treeWidget.options.autoEscape ? util_1.htmlEscape(node.name) : node.name; + var nodeName = this.treeWidget.options.autoEscape + ? util_1.htmlEscape(node.name) + : node.name; this.dragElement = new DragElement(nodeName, positionInfo.pageX - left, positionInfo.pageY - top_1, this.treeWidget.element); this.isDragging = true; this.positionInfo = positionInfo; @@ -174,7 +179,10 @@ var DragAndDropHandler = /** @class */ (function () { }; DragAndDropHandler.prototype.findHoveredArea = function (x, y) { var dimensions = this.getTreeDimensions(); - if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) { + if (x < dimensions.left || + y < dimensions.top || + x > dimensions.right || + y > dimensions.bottom) { return null; } var low = 0; @@ -196,7 +204,9 @@ var DragAndDropHandler = /** @class */ (function () { }; DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) { var node = area.node; - return node.isFolder() && !node.is_open && area.position === node_1.Position.Inside; + return (node.isFolder() && + !node.is_open && + area.position === node_1.Position.Inside); }; DragAndDropHandler.prototype.updateDropHint = function () { if (!this.hoveredArea) { diff --git a/lib/elements_renderer.js b/lib/elementsRenderer.js similarity index 95% rename from lib/elements_renderer.js rename to lib/elementsRenderer.js index 4a7748f4..2edd3107 100644 --- a/lib/elements_renderer.js +++ b/lib/elementsRenderer.js @@ -72,8 +72,10 @@ var ElementsRenderer = /** @class */ (function () { return ul; }; ElementsRenderer.prototype.createLi = function (node, level) { - var isSelected = Boolean(this.treeWidget.selectNodeHandler && this.treeWidget.selectNodeHandler.isNodeSelected(node)); - var mustShowFolder = node.isFolder() || (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); + var isSelected = Boolean(this.treeWidget.selectNodeHandler && + this.treeWidget.selectNodeHandler.isNodeSelected(node)); + var mustShowFolder = node.isFolder() || + (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); var li = mustShowFolder ? this.createFolderLi(node, level, isSelected) : this.createNodeLi(node, level, isSelected); @@ -85,7 +87,9 @@ var ElementsRenderer = /** @class */ (function () { ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) { var buttonClasses = this.getButtonClasses(node); var folderClasses = this.getFolderClasses(node, isSelected); - var iconElement = node.is_open ? this.openedIconElement : this.closedIconElement; + var iconElement = node.is_open + ? this.openedIconElement + : this.closedIconElement; // li var li = document.createElement("li"); li.className = "jqtree_common " + folderClasses; diff --git a/lib/imouse_widget.js b/lib/imouseWidget.js similarity index 100% rename from lib/imouse_widget.js rename to lib/imouseWidget.js diff --git a/lib/itree_widget.js b/lib/itreeWidget.js similarity index 100% rename from lib/itree_widget.js rename to lib/itreeWidget.js diff --git a/lib/key_handler.js b/lib/keyHandler.js similarity index 92% rename from lib/key_handler.js rename to lib/keyHandler.js index eda7e2e2..e7a12ad6 100644 --- a/lib/key_handler.js +++ b/lib/keyHandler.js @@ -99,11 +99,15 @@ var KeyHandler = /** @class */ (function () { } }; KeyHandler.prototype.canHandleKeyboard = function () { - return (this.treeWidget.options.keyboardSupport && this.isFocusOnTree() && this.treeWidget.getSelectedNode() != null); + return (this.treeWidget.options.keyboardSupport && + this.isFocusOnTree() && + this.treeWidget.getSelectedNode() != null); }; KeyHandler.prototype.isFocusOnTree = function () { var activeElement = document.activeElement; - return Boolean(activeElement && activeElement.tagName === "SPAN" && this.treeWidget._containsElement(activeElement)); + return Boolean(activeElement && + activeElement.tagName === "SPAN" && + this.treeWidget._containsElement(activeElement)); }; KeyHandler.LEFT = 37; KeyHandler.UP = 38; diff --git a/lib/mouse.widget.js b/lib/mouse.widget.js index 8039a044..84866134 100644 --- a/lib/mouse.widget.js +++ b/lib/mouse.widget.js @@ -26,21 +26,25 @@ var MouseWidget = /** @class */ (function (_super) { if (e.which !== 1) { return; } - var result = _this._handleMouseDown(_this._getPositionInfo(e)); + var result = _this.handleMouseDown(_this.getPositionInfo(e)); if (result) { e.preventDefault(); } return result; }; - _this.mouseMove = function (e) { return _this._handleMouseMove(e, _this._getPositionInfo(e)); }; - _this.mouseUp = function (e) { return _this._handleMouseUp(_this._getPositionInfo(e)); }; + _this.mouseMove = function (e) { + return _this.handleMouseMove(e, _this.getPositionInfo(e)); + }; + _this.mouseUp = function (e) { + return _this.handleMouseUp(_this.getPositionInfo(e)); + }; _this.touchStart = function (e) { var touchEvent = e.originalEvent; if (touchEvent.touches.length > 1) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseDown(_this._getPositionInfo(touch)); + return _this.handleMouseDown(_this.getPositionInfo(touch)); }; _this.touchMove = function (e) { var touchEvent = e.originalEvent; @@ -48,7 +52,7 @@ var MouseWidget = /** @class */ (function (_super) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseMove(e, _this._getPositionInfo(touch)); + return _this.handleMouseMove(e, _this.getPositionInfo(touch)); }; _this.touchEnd = function (e) { var touchEvent = e.originalEvent; @@ -56,14 +60,14 @@ var MouseWidget = /** @class */ (function (_super) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseUp(_this._getPositionInfo(touch)); + return _this.handleMouseUp(_this.getPositionInfo(touch)); }; return _this; } MouseWidget.prototype.setMouseDelay = function (mouseDelay) { this.mouseDelay = mouseDelay; }; - MouseWidget.prototype._init = function () { + MouseWidget.prototype.init = function () { this.$el.on("mousedown.mousewidget", this.mouseDown); this.$el.on("touchstart.mousewidget", this.touchStart); this.isMouseStarted = false; @@ -72,36 +76,36 @@ var MouseWidget = /** @class */ (function (_super) { this.isMouseDelayMet = true; this.mouseDownInfo = null; }; - MouseWidget.prototype._deinit = function () { + MouseWidget.prototype.deinit = function () { this.$el.off("mousedown.mousewidget"); this.$el.off("touchstart.mousewidget"); var $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("mouseup.mousewidget"); }; - MouseWidget.prototype._handleMouseDown = function (positionInfo) { + MouseWidget.prototype.handleMouseDown = function (positionInfo) { // We may have missed mouseup (out of window) if (this.isMouseStarted) { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } this.mouseDownInfo = positionInfo; - if (!this._mouseCapture(positionInfo)) { + if (!this.mouseCapture(positionInfo)) { return; } - this._handleStartMouse(); + this.handleStartMouse(); return true; }; - MouseWidget.prototype._handleStartMouse = function () { + MouseWidget.prototype.handleStartMouse = function () { var $document = jQuery(document); $document.on("mousemove.mousewidget", this.mouseMove); $document.on("touchmove.mousewidget", this.touchMove); $document.on("mouseup.mousewidget", this.mouseUp); $document.on("touchend.mousewidget", this.touchEnd); if (this.mouseDelay) { - this._startMouseDelayTimer(); + this.startMouseDelayTimer(); } }; - MouseWidget.prototype._startMouseDelayTimer = function () { + MouseWidget.prototype.startMouseDelayTimer = function () { var _this = this; if (this.mouseDelayTimer) { clearTimeout(this.mouseDelayTimer); @@ -111,26 +115,26 @@ var MouseWidget = /** @class */ (function (_super) { }, this.mouseDelay); this.isMouseDelayMet = false; }; - MouseWidget.prototype._handleMouseMove = function (e, positionInfo) { + MouseWidget.prototype.handleMouseMove = function (e, positionInfo) { if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); return e.preventDefault(); } if (this.mouseDelay && !this.isMouseDelayMet) { return true; } if (this.mouseDownInfo) { - this.isMouseStarted = this._mouseStart(this.mouseDownInfo) !== false; + this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false; } if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); } else { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } return !this.isMouseStarted; }; - MouseWidget.prototype._getPositionInfo = function (e) { + MouseWidget.prototype.getPositionInfo = function (e) { return { pageX: e.pageX, pageY: e.pageY, @@ -138,7 +142,7 @@ var MouseWidget = /** @class */ (function (_super) { originalEvent: e }; }; - MouseWidget.prototype._handleMouseUp = function (positionInfo) { + MouseWidget.prototype.handleMouseUp = function (positionInfo) { var $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("touchmove.mousewidget"); @@ -146,7 +150,7 @@ var MouseWidget = /** @class */ (function (_super) { $document.off("touchend.mousewidget"); if (this.isMouseStarted) { this.isMouseStarted = false; - this._mouseStop(positionInfo); + this.mouseStop(positionInfo); } }; return MouseWidget; diff --git a/lib/node.js b/lib/node.js index 84445e44..88ada718 100644 --- a/lib/node.js +++ b/lib/node.js @@ -126,7 +126,7 @@ var Node = /** @class */ (function () { */ Node.prototype.addChild = function (node) { this.children.push(node); - node._setParent(this); + node.setParent(this); }; /* Add child at position. Index starts at 0. @@ -138,7 +138,7 @@ var Node = /** @class */ (function () { */ Node.prototype.addChildAtPosition = function (node, index) { this.children.splice(index, 0, node); - node._setParent(this); + node.setParent(this); }; /* Remove child. This also removes the children of the node. @@ -148,7 +148,7 @@ var Node = /** @class */ (function () { Node.prototype.removeChild = function (node) { // remove children from the index node.removeChildren(); - this._removeChild(node); + this.doRemoveChild(node); }; /* Get child index. @@ -217,7 +217,7 @@ var Node = /** @class */ (function () { return; } else { - movedNode.parent._removeChild(movedNode); + movedNode.parent.doRemoveChild(movedNode); if (position === Position.After) { if (targetNode.parent) { targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1); @@ -243,7 +243,13 @@ var Node = /** @class */ (function () { return nodes.map(function (node) { var tmpNode = {}; for (var k in node) { - if (["parent", "children", "element", "tree", "isEmptyFolder"].indexOf(k) === -1 && + if ([ + "parent", + "children", + "element", + "tree", + "isEmptyFolder" + ].indexOf(k) === -1 && Object.prototype.hasOwnProperty.call(node, k)) { var v = node[k]; tmpNode[k] = v; @@ -286,7 +292,9 @@ var Node = /** @class */ (function () { var node = new this.tree.nodeClass(nodeInfo); var childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex + 1); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -300,7 +308,9 @@ var Node = /** @class */ (function () { var node = new this.tree.nodeClass(nodeInfo); var childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -312,7 +322,7 @@ var Node = /** @class */ (function () { } else { var newParent = new this.tree.nodeClass(nodeInfo); - newParent._setParent(this.tree); + newParent.setParent(this.tree); var originalParent = this.parent; for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) { var child = _a[_i]; @@ -332,7 +342,9 @@ var Node = /** @class */ (function () { Node.prototype.append = function (nodeInfo) { var node = new this.tree.nodeClass(nodeInfo); this.addChild(node); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -340,7 +352,9 @@ var Node = /** @class */ (function () { Node.prototype.prepend = function (nodeInfo) { var node = new this.tree.nodeClass(nodeInfo); this.addChildAtPosition(node, 0); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -456,7 +470,8 @@ var Node = /** @class */ (function () { else { var previousSibling = this.getPreviousSibling(); if (previousSibling) { - if (!previousSibling.hasChildren() || !previousSibling.is_open) { + if (!previousSibling.hasChildren() || + !previousSibling.is_open) { // Previous sibling return previousSibling; } @@ -516,12 +531,12 @@ var Node = /** @class */ (function () { }; addNode(data); }; - Node.prototype._setParent = function (parent) { + Node.prototype.setParent = function (parent) { this.parent = parent; this.tree = parent.tree; this.tree.addNodeToIndex(this); }; - Node.prototype._removeChild = function (node) { + Node.prototype.doRemoveChild = function (node) { this.children.splice(this.getChildIndex(node), 1); this.tree.removeNodeFromIndex(node); }; diff --git a/lib/node_element.js b/lib/nodeElement.js similarity index 97% rename from lib/node_element.js rename to lib/nodeElement.js index a523560d..8535ad18 100644 --- a/lib/node_element.js +++ b/lib/nodeElement.js @@ -56,7 +56,9 @@ var NodeElement = /** @class */ (function () { return this.$element.children("ul:first"); }; NodeElement.prototype.getSpan = function () { - return this.$element.children(".jqtree-element").find("span.jqtree-title"); + return this.$element + .children(".jqtree-element") + .find("span.jqtree-title"); }; NodeElement.prototype.getLi = function () { return this.$element; @@ -145,7 +147,9 @@ var FolderElement = /** @class */ (function (_super) { return !this.node.is_open && position === node_1.Position.Inside; }; FolderElement.prototype.getButton = function () { - return this.$element.children(".jqtree-element").find("a.jqtree-toggler"); + return this.$element + .children(".jqtree-element") + .find("a.jqtree-toggler"); }; return FolderElement; }(NodeElement)); diff --git a/lib/save_state_handler.js b/lib/saveStateHandler.js similarity index 86% rename from lib/save_state_handler.js rename to lib/saveStateHandler.js index 6a5796f8..50d1e5a6 100644 --- a/lib/save_state_handler.js +++ b/lib/saveStateHandler.js @@ -15,9 +15,9 @@ var SaveStateHandler = /** @class */ (function () { } }; SaveStateHandler.prototype.getStateFromStorage = function () { - var jsonData = this._loadFromStorage(); + var jsonData = this.loadFromStorage(); if (jsonData) { - return this._parseState(jsonData); + return this.parseState(jsonData); } else { return null; @@ -35,7 +35,9 @@ var SaveStateHandler = /** @class */ (function () { }); return openNodes; }; - var getSelectedNodeIds = function () { return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; }); }; + var getSelectedNodeIds = function () { + return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; }); + }; /* eslint-disable @typescript-eslint/camelcase */ return { open_nodes: getOpenNodeIds(), @@ -56,18 +58,18 @@ var SaveStateHandler = /** @class */ (function () { else { var mustLoadOnDemand = false; if (state.open_nodes) { - mustLoadOnDemand = this._openInitialNodes(state.open_nodes); + mustLoadOnDemand = this.openInitialNodes(state.open_nodes); } if (state.selected_node) { - this._resetSelection(); - this._selectInitialNodes(state.selected_node); + this.resetSelection(); + this.selectInitialNodes(state.selected_node); } return mustLoadOnDemand; } }; SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cbFinished) { if (state) { - this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); + this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); } else { cbFinished(); @@ -82,7 +84,7 @@ var SaveStateHandler = /** @class */ (function () { return null; } }; - SaveStateHandler.prototype._parseState = function (jsonData) { + SaveStateHandler.prototype.parseState = function (jsonData) { var state = jQuery.parseJSON(jsonData); // Check if selected_node is an int (instead of an array) if (state && state.selected_node && util_1.isInt(state.selected_node)) { @@ -91,7 +93,7 @@ var SaveStateHandler = /** @class */ (function () { } return state; }; - SaveStateHandler.prototype._loadFromStorage = function () { + SaveStateHandler.prototype.loadFromStorage = function () { if (this.treeWidget.options.onGetStateFromStorage) { return this.treeWidget.options.onGetStateFromStorage(); } @@ -99,7 +101,7 @@ var SaveStateHandler = /** @class */ (function () { return localStorage.getItem(this.getKeyName()); } }; - SaveStateHandler.prototype._openInitialNodes = function (nodeIds) { + SaveStateHandler.prototype.openInitialNodes = function (nodeIds) { var mustLoadOnDemand = false; for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) { var nodeDd = nodeIds_1[_i]; @@ -115,7 +117,7 @@ var SaveStateHandler = /** @class */ (function () { } return mustLoadOnDemand; }; - SaveStateHandler.prototype._selectInitialNodes = function (nodeIds) { + SaveStateHandler.prototype.selectInitialNodes = function (nodeIds) { var selectCount = 0; for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) { var nodeId = nodeIds_2[_i]; @@ -129,7 +131,7 @@ var SaveStateHandler = /** @class */ (function () { } return selectCount !== 0; }; - SaveStateHandler.prototype._resetSelection = function () { + SaveStateHandler.prototype.resetSelection = function () { var selectNodeHandler = this.treeWidget.selectNodeHandler; if (selectNodeHandler) { var selectedNodes = selectNodeHandler.getSelectedNodes(); @@ -138,7 +140,7 @@ var SaveStateHandler = /** @class */ (function () { }); } }; - SaveStateHandler.prototype._setInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) { + SaveStateHandler.prototype.doSetInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) { var _this = this; var loadingCount = 0; var nodeIds = nodeIdsParam; @@ -162,7 +164,7 @@ var SaveStateHandler = /** @class */ (function () { } } nodeIds = newNodesIds; - if (_this._selectInitialNodes(selectedNodes)) { + if (_this.selectInitialNodes(selectedNodes)) { _this.treeWidget._refreshElements(null); } if (loadingCount === 0) { diff --git a/lib/scroll_handler.js b/lib/scrollHandler.js similarity index 91% rename from lib/scroll_handler.js rename to lib/scrollHandler.js index b63eb4ae..f7889900 100644 --- a/lib/scroll_handler.js +++ b/lib/scrollHandler.js @@ -63,7 +63,8 @@ var ScrollHandler = /** @class */ (function () { for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) { var attr = cssAttributes_1[_i]; var overflowValue = $el.css(attr); - if (overflowValue === "auto" || overflowValue === "scroll") { + if (overflowValue === "auto" || + overflowValue === "scroll") { return true; } } @@ -89,7 +90,9 @@ var ScrollHandler = /** @class */ (function () { setDocumentAsScrollParent(); } var $scrollParent = getParentWithOverflow(); - if ($scrollParent && $scrollParent.length && $scrollParent[0].tagName !== "HTML") { + if ($scrollParent && + $scrollParent.length && + $scrollParent[0].tagName !== "HTML") { this.$scrollParent = $scrollParent; var offset = this.$scrollParent.offset(); this.scrollParentTop = offset ? offset.top : 0; @@ -135,7 +138,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.checkVerticalScrolling = function () { - var hoveredArea = this.treeWidget.dndHandler && this.treeWidget.dndHandler.hoveredArea; + var hoveredArea = this.treeWidget.dndHandler && + this.treeWidget.dndHandler.hoveredArea; if (hoveredArea && hoveredArea.top !== this.previousTop) { this.previousTop = hoveredArea.top; if (this.$scrollParent) { @@ -147,7 +151,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.checkHorizontalScrolling = function () { - var positionInfo = this.treeWidget.dndHandler && this.treeWidget.dndHandler.positionInfo; + var positionInfo = this.treeWidget.dndHandler && + this.treeWidget.dndHandler.positionInfo; if (!positionInfo) { return; } @@ -159,7 +164,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return; } var $scrollParent = this.$scrollParent; @@ -168,7 +174,8 @@ var ScrollHandler = /** @class */ (function () { return; } var scrollParent = $scrollParent[0]; - var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < scrollParent.scrollWidth; + var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < + scrollParent.scrollWidth; var canScrollLeft = scrollParent.scrollLeft > 0; var rightEdge = scrollParentOffset.left + scrollParent.clientWidth; var leftEdge = scrollParentOffset.left; @@ -182,7 +189,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return; } var $document = jQuery(document); diff --git a/lib/select_node_handler.js b/lib/selectNodeHandler.js similarity index 96% rename from lib/select_node_handler.js rename to lib/selectNodeHandler.js index 2e8a2dce..72af57cb 100644 --- a/lib/select_node_handler.js +++ b/lib/selectNodeHandler.js @@ -80,7 +80,8 @@ var SelectNodeHandler = /** @class */ (function () { var _this = this; if (includeChildren === void 0) { includeChildren = false; } if (node.id == null) { - if (this.selectedSingleNode && node.element === this.selectedSingleNode.element) { + if (this.selectedSingleNode && + node.element === this.selectedSingleNode.element) { this.selectedSingleNode = null; } } diff --git a/lib/simple.widget.js b/lib/simple.widget.js index 6d667a53..5e257cae 100644 --- a/lib/simple.widget.js +++ b/lib/simple.widget.js @@ -28,7 +28,7 @@ var SimpleWidget = /** @class */ (function () { jQuery.data(el, dataKey, widget); } // Call init after setting data, so we can call methods - widget._init(); + widget.init(); } } return $el; @@ -51,7 +51,8 @@ var SimpleWidget = /** @class */ (function () { var widget = jQuery.data(el, getDataKey()); if (widget && widget instanceof SimpleWidget) { var widgetFunction = widget[functionName]; - if (widgetFunction && typeof widgetFunction === "function") { + if (widgetFunction && + typeof widgetFunction === "function") { result = widgetFunction.apply(widget, args); } } @@ -82,12 +83,12 @@ var SimpleWidget = /** @class */ (function () { }; }; SimpleWidget.prototype.destroy = function () { - this._deinit(); + this.deinit(); }; - SimpleWidget.prototype._init = function () { + SimpleWidget.prototype.init = function () { // }; - SimpleWidget.prototype._deinit = function () { + SimpleWidget.prototype.deinit = function () { // }; SimpleWidget.defaults = {}; diff --git a/lib/tree.jquery.js b/lib/tree.jquery.js index 40f00e79..48f00f7d 100644 --- a/lib/tree.jquery.js +++ b/lib/tree.jquery.js @@ -26,26 +26,26 @@ var __assign = (this && this.__assign) || function () { exports.__esModule = true; var version_1 = require("./version"); var jQuery = require("jquery"); -var drag_and_drop_handler_1 = require("./drag_and_drop_handler"); -var elements_renderer_1 = require("./elements_renderer"); -var data_loader_1 = require("./data_loader"); -var key_handler_1 = require("./key_handler"); +var dragAndDropHandler_1 = require("./dragAndDropHandler"); +var elementsRenderer_1 = require("./elementsRenderer"); +var dataLoader_1 = require("./dataLoader"); +var keyHandler_1 = require("./keyHandler"); var mouse_widget_1 = require("./mouse.widget"); -var save_state_handler_1 = require("./save_state_handler"); -var scroll_handler_1 = require("./scroll_handler"); -var select_node_handler_1 = require("./select_node_handler"); +var saveStateHandler_1 = require("./saveStateHandler"); +var scrollHandler_1 = require("./scrollHandler"); +var selectNodeHandler_1 = require("./selectNodeHandler"); var simple_widget_1 = require("./simple.widget"); var node_1 = require("./node"); var util_1 = require("./util"); -var node_element_1 = require("./node_element"); +var nodeElement_1 = require("./nodeElement"); var NODE_PARAM_IS_EMPTY = "Node parameter is empty"; var PARAM_IS_EMPTY = "Parameter is empty: "; var JqTreeWidget = /** @class */ (function (_super) { __extends(JqTreeWidget, _super); function JqTreeWidget() { var _this = _super !== null && _super.apply(this, arguments) || this; - _this._handleClick = function (e) { - var clickTarget = _this._getClickTarget(e.target); + _this.handleClick = function (e) { + var clickTarget = _this.getClickTarget(e.target); if (clickTarget) { if (clickTarget.type === "button") { _this.toggle(clickTarget.node, _this.options.slide); @@ -59,24 +59,25 @@ var JqTreeWidget = /** @class */ (function (_super) { click_event: e // eslint-disable-line @typescript-eslint/camelcase }); if (!event_1.isDefaultPrevented()) { - _this._selectNode(node); + _this.doSelectNode(node); } } } }; - _this._handleDblclick = function (e) { - var clickTarget = _this._getClickTarget(e.target); - if (clickTarget && clickTarget.type === "label") { + _this.handleDblclick = function (e) { + var _a; + var clickTarget = _this.getClickTarget(e.target); + if (((_a = clickTarget) === null || _a === void 0 ? void 0 : _a.type) === "label") { _this._triggerEvent("tree.dblclick", { node: clickTarget.node, click_event: e // eslint-disable-line @typescript-eslint/camelcase }); } }; - _this._handleContextmenu = function (e) { + _this.handleContextmenu = function (e) { var $div = jQuery(e.target).closest("ul.jqtree-tree .jqtree-element"); if ($div.length) { - var node = _this._getNode($div); + var node = _this.getNode($div); if (node) { e.preventDefault(); e.stopPropagation(); @@ -108,7 +109,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return this.tree; }; JqTreeWidget.prototype.selectNode = function (node, optionsParam) { - this._selectNode(node, optionsParam); + this.doSelectNode(node, optionsParam); return this.element; }; JqTreeWidget.prototype.getSelectedNode = function () { @@ -123,7 +124,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return JSON.stringify(this.tree.getData()); }; JqTreeWidget.prototype.loadData = function (data, parentNode) { - this._loadData(data, parentNode); + this.doLoadData(data, parentNode); return this.element; }; /* @@ -143,16 +144,16 @@ var JqTreeWidget = /** @class */ (function (_super) { JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) { if (typeof param1 === "string") { // first parameter is url - this._loadDataFromUrl(param1, param2, param3); + this.doLoadDataFromUrl(param1, param2, param3); } else { // first parameter is not url - this._loadDataFromUrl(null, param1, param2); + this.doLoadDataFromUrl(null, param1, param2); } return this.element; }; JqTreeWidget.prototype.reload = function (onFinished) { - this._loadDataFromUrl(null, null, onFinished); + this.doLoadDataFromUrl(null, null, onFinished); return this.element; }; JqTreeWidget.prototype.getNodeById = function (nodeId) { @@ -165,7 +166,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return this.tree.getNodesByProperty(key, value); }; JqTreeWidget.prototype.getNodeByHtmlElement = function (element) { - return this._getNode(jQuery(element)); + return this.getNode(jQuery(element)); }; JqTreeWidget.prototype.getNodeByCallback = function (callback) { return this.tree.getNodeByCallback(callback); @@ -201,8 +202,8 @@ var JqTreeWidget = /** @class */ (function (_super) { } var slide = slideParam == null ? this.options.slide : slideParam; if (node.isFolder() || node.isEmptyFolder) { - new node_element_1.FolderElement(node, this).close(slide, this.options.animationSpeed); - this._saveState(); + new nodeElement_1.FolderElement(node, this).close(slide, this.options.animationSpeed); + this.saveState(); } return this.element; }; @@ -267,7 +268,9 @@ var JqTreeWidget = /** @class */ (function (_super) { return node; }; JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) { - var parentNode = !parentNodeParam ? this.tree : parentNodeParam; + var parentNode = !parentNodeParam + ? this.tree + : parentNodeParam; var node = parentNode.prepend(newNodeInfo); this._refreshElements(parentNode); return node; @@ -291,7 +294,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } } this._refreshElements(node); - this._selectCurrentNode(); + this.selectCurrentNode(); return this.element; }; JqTreeWidget.prototype.moveNode = function (node, targetNode, position) { @@ -319,7 +322,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (this.selectNodeHandler) { this.selectNodeHandler.addToSelection(node); this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus); - this._saveState(); + this.saveState(); } return this.element; }; @@ -349,7 +352,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (this.selectNodeHandler) { this.selectNodeHandler.removeFromSelection(node); this._getNodeElementForNode(node).deselect(); - this._saveState(); + this.saveState(); } return this.element; }; @@ -418,12 +421,12 @@ var JqTreeWidget = /** @class */ (function (_super) { var _this = this; if (slide === void 0) { slide = true; } var doOpenNode = function (_node, _slide, _onFinished) { - var folderElement = new node_element_1.FolderElement(_node, _this); + var folderElement = new nodeElement_1.FolderElement(_node, _this); folderElement.open(_onFinished, _slide, _this.options.animationSpeed); }; if (node.isFolder() || node.isEmptyFolder) { if (node.load_on_demand) { - this._loadFolderOnDemand(node, slide, onFinished); + this.loadFolderOnDemand(node, slide, onFinished); } else { var parent_2 = node.parent; @@ -435,7 +438,7 @@ var JqTreeWidget = /** @class */ (function (_super) { parent_2 = parent_2.parent; } doOpenNode(node, slide, onFinished); - this._saveState(); + this.saveState(); } } }; @@ -449,14 +452,14 @@ var JqTreeWidget = /** @class */ (function (_super) { }; JqTreeWidget.prototype._getNodeElementForNode = function (node) { if (node.isFolder()) { - return new node_element_1.FolderElement(node, this); + return new nodeElement_1.FolderElement(node, this); } else { - return new node_element_1.NodeElement(node, this); + return new nodeElement_1.NodeElement(node, this); } }; JqTreeWidget.prototype._getNodeElement = function ($element) { - var node = this._getNode($element); + var node = this.getNode($element); if (node) { return this._getNodeElementForNode(node); } @@ -465,61 +468,62 @@ var JqTreeWidget = /** @class */ (function (_super) { } }; JqTreeWidget.prototype._containsElement = function (element) { - var node = this._getNode(jQuery(element)); + var node = this.getNode(jQuery(element)); return node != null && node.tree === this.tree; }; JqTreeWidget.prototype._getScrollLeft = function () { - return (this.scrollHandler && this.scrollHandler.getScrollLeft()) || 0; + var _a, _b; + return ((_b = (_a = this) === null || _a === void 0 ? void 0 : _a.scrollHandler) === null || _b === void 0 ? void 0 : _b.getScrollLeft()) || 0; }; - JqTreeWidget.prototype._init = function () { - _super.prototype._init.call(this); + JqTreeWidget.prototype.init = function () { + _super.prototype.init.call(this); this.element = this.$el; this.mouseDelay = 300; this.isInitialized = false; - this.options.rtl = this._getRtlOption(); + this.options.rtl = this.getRtlOption(); if (this.options.closedIcon === null) { - this.options.closedIcon = this._getDefaultClosedIcon(); + this.options.closedIcon = this.getDefaultClosedIcon(); } - this.renderer = new elements_renderer_1["default"](this); - this.dataLoader = new data_loader_1["default"](this); - if (save_state_handler_1["default"] != null) { - this.saveStateHandler = new save_state_handler_1["default"](this); + this.renderer = new elementsRenderer_1["default"](this); + this.dataLoader = new dataLoader_1["default"](this); + if (saveStateHandler_1["default"] != null) { + this.saveStateHandler = new saveStateHandler_1["default"](this); } else { this.options.saveState = false; } - if (select_node_handler_1["default"] != null) { - this.selectNodeHandler = new select_node_handler_1["default"](this); + if (selectNodeHandler_1["default"] != null) { + this.selectNodeHandler = new selectNodeHandler_1["default"](this); } - if (drag_and_drop_handler_1.DragAndDropHandler != null) { - this.dndHandler = new drag_and_drop_handler_1.DragAndDropHandler(this); + if (dragAndDropHandler_1.DragAndDropHandler != null) { + this.dndHandler = new dragAndDropHandler_1.DragAndDropHandler(this); } else { this.options.dragAndDrop = false; } - if (scroll_handler_1["default"] != null) { - this.scrollHandler = new scroll_handler_1["default"](this); + if (scrollHandler_1["default"] != null) { + this.scrollHandler = new scrollHandler_1["default"](this); } - if (key_handler_1["default"] != null && select_node_handler_1["default"] != null) { - this.keyHandler = new key_handler_1["default"](this); + if (keyHandler_1["default"] != null && selectNodeHandler_1["default"] != null) { + this.keyHandler = new keyHandler_1["default"](this); } - this._initData(); - this.element.click(this._handleClick); - this.element.dblclick(this._handleDblclick); + this.initData(); + this.element.click(this.handleClick); + this.element.dblclick(this.handleDblclick); if (this.options.useContextMenu) { - this.element.on("contextmenu", this._handleContextmenu); + this.element.on("contextmenu", this.handleContextmenu); } }; - JqTreeWidget.prototype._deinit = function () { + JqTreeWidget.prototype.deinit = function () { this.element.empty(); this.element.off(); if (this.keyHandler) { this.keyHandler.deinit(); } this.tree = new node_1.Node({}, true); - _super.prototype._deinit.call(this); + _super.prototype.deinit.call(this); }; - JqTreeWidget.prototype._mouseCapture = function (positionInfo) { + JqTreeWidget.prototype.mouseCapture = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseCapture(positionInfo); } @@ -527,7 +531,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseStart = function (positionInfo) { + JqTreeWidget.prototype.mouseStart = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStart(positionInfo); } @@ -535,7 +539,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseDrag = function (positionInfo) { + JqTreeWidget.prototype.mouseDrag = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { var result = this.dndHandler.mouseDrag(positionInfo); if (this.scrollHandler) { @@ -547,7 +551,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseStop = function (positionInfo) { + JqTreeWidget.prototype.mouseStop = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStop(positionInfo); } @@ -555,21 +559,21 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._initData = function () { + JqTreeWidget.prototype.initData = function () { if (this.options.data) { - this._loadData(this.options.data, null); + this.doLoadData(this.options.data, null); } else { - var dataUrl = this._getDataUrlInfo(null); + var dataUrl = this.getDataUrlInfo(null); if (dataUrl) { - this._loadDataFromUrl(null, null, null); + this.doLoadDataFromUrl(null, null, null); } else { - this._loadData([], null); + this.doLoadData([], null); } } }; - JqTreeWidget.prototype._getDataUrlInfo = function (node) { + JqTreeWidget.prototype.getDataUrlInfo = function (node) { var _this = this; var dataUrl = this.options.dataUrl || this.element.data("url"); var getUrlFromString = function () { @@ -578,14 +582,15 @@ var JqTreeWidget = /** @class */ (function (_super) { return urlInfo; }; var setUrlInfoData = function (urlInfo) { - if (node && node.id) { + var _a; + if ((_a = node) === null || _a === void 0 ? void 0 : _a.id) { // Load on demand of a subtree; add node parameter var data = { node: node.id }; urlInfo["data"] = data; } else { // Add selected_node parameter - var selectedNodeId = _this._getNodeIdToBeSelected(); + var selectedNodeId = _this.getNodeIdToBeSelected(); if (selectedNodeId) { var data = { selected_node: selectedNodeId }; // eslint-disable-line @typescript-eslint/camelcase urlInfo["data"] = data; @@ -606,7 +611,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return dataUrl; } }; - JqTreeWidget.prototype._getNodeIdToBeSelected = function () { + JqTreeWidget.prototype.getNodeIdToBeSelected = function () { if (this.options.saveState && this.saveStateHandler) { return this.saveStateHandler.getNodeIdToBeSelected(); } @@ -614,7 +619,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return null; } }; - JqTreeWidget.prototype._initTree = function (data) { + JqTreeWidget.prototype.initTree = function (data) { var _this = this; var doInit = function () { if (!_this.isInitialized) { @@ -627,19 +632,19 @@ var JqTreeWidget = /** @class */ (function (_super) { this.selectNodeHandler.clear(); } this.tree.loadFromData(data); - var mustLoadOnDemand = this._setInitialState(); + var mustLoadOnDemand = this.setInitialState(); this._refreshElements(null); if (!mustLoadOnDemand) { doInit(); } else { // Load data on demand and then init the tree - this._setInitialStateOnDemand(doInit); + this.setInitialStateOnDemand(doInit); } }; // Set initial state, either by restoring the state or auto-opening nodes // result: must load nodes on demand? - JqTreeWidget.prototype._setInitialState = function () { + JqTreeWidget.prototype.setInitialState = function () { var _this = this; var restoreState = function () { // result: is state restored, must load on demand? @@ -663,7 +668,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (_this.options.autoOpen === false) { return false; } - var maxLevel = _this._getAutoOpenMaxLevel(); + var maxLevel = _this.getAutoOpenMaxLevel(); var mustLoadOnDemand = false; _this.tree.iterate(function (node, level) { if (node.load_on_demand) { @@ -688,7 +693,7 @@ var JqTreeWidget = /** @class */ (function (_super) { }; // Set the initial state for nodes that are loaded on demand // Call cb_finished when done - JqTreeWidget.prototype._setInitialStateOnDemand = function (cbFinished) { + JqTreeWidget.prototype.setInitialStateOnDemand = function (cbFinished) { var _this = this; var restoreState = function () { if (!(_this.options.saveState && _this.saveStateHandler)) { @@ -706,7 +711,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } }; var autoOpenNodes = function () { - var maxLevel = _this._getAutoOpenMaxLevel(); + var maxLevel = _this.getAutoOpenMaxLevel(); var loadingCount = 0; var loadAndOpenNode = function (node) { loadingCount += 1; @@ -738,7 +743,7 @@ var JqTreeWidget = /** @class */ (function (_super) { autoOpenNodes(); } }; - JqTreeWidget.prototype._getAutoOpenMaxLevel = function () { + JqTreeWidget.prototype.getAutoOpenMaxLevel = function () { if (this.options.autoOpen === true) { return -1; } @@ -746,11 +751,11 @@ var JqTreeWidget = /** @class */ (function (_super) { return parseInt(this.options.autoOpen, 10); } }; - JqTreeWidget.prototype._getClickTarget = function (element) { + JqTreeWidget.prototype.getClickTarget = function (element) { var $target = jQuery(element); var $button = $target.closest(".jqtree-toggler"); if ($button.length) { - var node = this._getNode($button); + var node = this.getNode($button); if (node) { return { type: "button", @@ -761,7 +766,7 @@ var JqTreeWidget = /** @class */ (function (_super) { else { var $el = $target.closest(".jqtree-element"); if ($el.length) { - var node = this._getNode($el); + var node = this.getNode($el); if (node) { return { type: "label", @@ -772,7 +777,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } return null; }; - JqTreeWidget.prototype._getNode = function ($element) { + JqTreeWidget.prototype.getNode = function ($element) { var $li = $element.closest("li.jqtree_common"); if ($li.length === 0) { return null; @@ -781,12 +786,12 @@ var JqTreeWidget = /** @class */ (function (_super) { return $li.data("node"); } }; - JqTreeWidget.prototype._saveState = function () { + JqTreeWidget.prototype.saveState = function () { if (this.options.saveState && this.saveStateHandler) { this.saveStateHandler.saveState(); } }; - JqTreeWidget.prototype._selectCurrentNode = function () { + JqTreeWidget.prototype.selectCurrentNode = function () { var node = this.getSelectedNode(); if (node) { var nodeElement = this._getNodeElementForNode(node); @@ -795,13 +800,13 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._deselectCurrentNode = function () { + JqTreeWidget.prototype.deselectCurrentNode = function () { var node = this.getSelectedNode(); if (node) { this.removeFromSelection(node); } }; - JqTreeWidget.prototype._getDefaultClosedIcon = function () { + JqTreeWidget.prototype.getDefaultClosedIcon = function () { if (this.options.rtl) { // triangle to the left return "◀"; @@ -811,13 +816,13 @@ var JqTreeWidget = /** @class */ (function (_super) { return "►"; } }; - JqTreeWidget.prototype._getRtlOption = function () { + JqTreeWidget.prototype.getRtlOption = function () { if (this.options.rtl != null) { return this.options.rtl; } else { var dataRtl = this.element.data("rtl"); - if (dataRtl != null && dataRtl !== false) { + if (dataRtl !== null && dataRtl !== false) { return true; } else { @@ -825,7 +830,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._selectNode = function (inode, optionsParam) { + JqTreeWidget.prototype.doSelectNode = function (inode, optionsParam) { var _this = this; if (!this.selectNodeHandler) { return; @@ -834,7 +839,8 @@ var JqTreeWidget = /** @class */ (function (_super) { var selectOptions = __assign(__assign({}, defaultOptions), (optionsParam || {})); var canSelect = function () { if (_this.options.onCanSelectNode) { - return _this.options.selectable && _this.options.onCanSelectNode(inode); + return (_this.options.selectable && + _this.options.onCanSelectNode(inode)); } else { return _this.options.selectable; @@ -853,7 +859,7 @@ var JqTreeWidget = /** @class */ (function (_super) { }; if (!inode) { // Called with empty node -> deselect current node - this._deselectCurrentNode(); + this.deselectCurrentNode(); saveState(); return; } @@ -863,7 +869,7 @@ var JqTreeWidget = /** @class */ (function (_super) { var node = inode; if (this.selectNodeHandler.isNodeSelected(node)) { if (selectOptions.mustToggle) { - this._deselectCurrentNode(); + this.deselectCurrentNode(); this._triggerEvent("tree.select", { node: null, previous_node: node // eslint-disable-line @typescript-eslint/camelcase @@ -872,7 +878,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } else { var deselectedNode = this.getSelectedNode(); - this._deselectCurrentNode(); + this.deselectCurrentNode(); this.addToSelection(node, selectOptions.mustSetFocus); this._triggerEvent("tree.select", { node: node, @@ -882,25 +888,25 @@ var JqTreeWidget = /** @class */ (function (_super) { } saveState(); }; - JqTreeWidget.prototype._loadData = function (data, parentNode) { + JqTreeWidget.prototype.doLoadData = function (data, parentNode) { if (!data) { return; } else { this._triggerEvent("tree.load_data", { tree_data: data }); // eslint-disable-line @typescript-eslint/camelcase if (parentNode) { - this._deselectNodes(parentNode); - this._loadSubtree(data, parentNode); + this.deselectNodes(parentNode); + this.loadSubtree(data, parentNode); } else { - this._initTree(data); + this.initTree(data); } if (this.isDragging() && this.dndHandler) { this.dndHandler.refresh(); } } }; - JqTreeWidget.prototype._deselectNodes = function (parentNode) { + JqTreeWidget.prototype.deselectNodes = function (parentNode) { if (this.selectNodeHandler) { var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode); for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) { @@ -909,21 +915,21 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._loadSubtree = function (data, parentNode) { + JqTreeWidget.prototype.loadSubtree = function (data, parentNode) { parentNode.loadFromData(data); parentNode.load_on_demand = false; // eslint-disable-line @typescript-eslint/camelcase parentNode.is_loading = false; // eslint-disable-line @typescript-eslint/camelcase this._refreshElements(parentNode); }; - JqTreeWidget.prototype._loadDataFromUrl = function (urlInfoParam, parentNode, onFinished) { - var urlInfo = urlInfoParam || this._getDataUrlInfo(parentNode); + JqTreeWidget.prototype.doLoadDataFromUrl = function (urlInfoParam, parentNode, onFinished) { + var urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode); this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished); }; - JqTreeWidget.prototype._loadFolderOnDemand = function (node, slide, onFinished) { + JqTreeWidget.prototype.loadFolderOnDemand = function (node, slide, onFinished) { var _this = this; if (slide === void 0) { slide = true; } node.is_loading = true; // eslint-disable-line @typescript-eslint/camelcase - this._loadDataFromUrl(null, node, function () { + this.doLoadDataFromUrl(null, node, function () { _this._openNode(node, slide, onFinished); }); }; diff --git a/package.json b/package.json index 95cf1528..29fbf27b 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "jekyll-serve": "bundle exec jekyll serve", "devserver": "webpack-dev-server --mode development", "prettier": "prettier src/*.ts src_test/*.ts --write --tab-width 4", - "coveralls": "coveralls < coverage/lcov.info" + "coveralls": "coveralls < coverage/lcov.info", + "tsc": "tsc --noEmit --project tsconfig.json" }, "dependencies": { "jquery": ">=1.9" @@ -36,7 +37,6 @@ "autoprefixer": "^9.7.0", "coveralls": "^3.0.7", "eslint": "^6.7.2", - "coveralls": "^3.0.6", "istanbul-instrumenter-loader": "^3.0.1", "jquery-mockjax": "^2.5.0", "jsonfile": "^5.0.0", @@ -56,7 +56,7 @@ "qunit": "^2.9.3", "ts-loader": "^6.2.1", "tslint": "^5.20.0", - "typescript": "^3.6.4", + "typescript": "^3.7.4", "webpack": "^4.41.2", "webpack-cli": "^3.3.9", "webpack-dev-server": "^3.9.0" diff --git a/production b/production index 374a3fbc..9d3639d1 100755 --- a/production +++ b/production @@ -2,6 +2,6 @@ webpack --config webpack.config.production --mode production && cp build/tree.jquery.js . && webpack --config webpack.config.production.debug --mode production && cp build/tree.jquery.js ./tree.jquery.debug.js && -tsc -p tsconfig.json && +tsc --project tsconfig.json && postcss -o jqtree.css jqtree.postcss postcss -o static/example.css static/example.postcss diff --git a/src/data_loader.ts b/src/dataLoader.ts similarity index 85% rename from src/data_loader.ts rename to src/dataLoader.ts index e01deee4..1a1248b7 100644 --- a/src/data_loader.ts +++ b/src/dataLoader.ts @@ -1,4 +1,4 @@ -import { ITreeWidget } from "./itree_widget"; +import { ITreeWidget } from "./itreeWidget"; import { Node } from "./node"; export type HandleFinishedLoading = () => void; @@ -10,7 +10,11 @@ export default class DataLoader { this.treeWidget = treeWidget; } - public loadFromUrl(urlInfo: any, parentNode: Node | null, onFinished: HandleFinishedLoading | null): void { + public loadFromUrl( + urlInfo: any, + parentNode: Node | null, + onFinished: HandleFinishedLoading | null + ): void { if (!urlInfo) { return; } @@ -66,7 +70,11 @@ export default class DataLoader { } } - private notifyLoading(isLoading: boolean, node: Node | null, $el: JQuery): void { + private notifyLoading( + isLoading: boolean, + node: Node | null, + $el: JQuery + ): void { const { onLoading } = this.treeWidget.options; if (onLoading) { @@ -105,7 +113,11 @@ export default class DataLoader { const { dataFilter } = this.treeWidget.options; const parsedData = - data instanceof Array || typeof data === "object" ? data : data != null ? jQuery.parseJSON(data) : []; + data instanceof Array || typeof data === "object" + ? data + : data != null + ? jQuery.parseJSON(data) + : []; return dataFilter ? dataFilter(parsedData) : parsedData; } diff --git a/src/drag_and_drop_handler.ts b/src/dragAndDropHandler.ts similarity index 83% rename from src/drag_and_drop_handler.ts rename to src/dragAndDropHandler.ts index 9979b65a..17de7151 100644 --- a/src/drag_and_drop_handler.ts +++ b/src/dragAndDropHandler.ts @@ -1,8 +1,8 @@ import * as jQuery from "jquery"; import { Position, Node, getPositionName } from "./node"; import { htmlEscape } from "./util"; -import { ITreeWidget, IHitArea, INodeElement, IDropHint } from "./itree_widget"; -import { IPositionInfo } from "./imouse_widget"; +import { ITreeWidget, IHitArea, INodeElement, IDropHint } from "./itreeWidget"; +import { IPositionInfo } from "./imouseWidget"; export class DragAndDropHandler { public hitAreas: IHitArea[]; @@ -33,7 +33,10 @@ export class DragAndDropHandler { return null; } - if (this.treeWidget.options.onIsMoveHandle && !this.treeWidget.options.onIsMoveHandle($element)) { + if ( + this.treeWidget.options.onIsMoveHandle && + !this.treeWidget.options.onIsMoveHandle($element) + ) { return null; } @@ -63,7 +66,11 @@ export class DragAndDropHandler { } public mouseStart(positionInfo: IPositionInfo): boolean { - if (!this.currentItem || positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if ( + !this.currentItem || + positionInfo.pageX === undefined || + positionInfo.pageY === undefined + ) { return false; } else { this.refresh(); @@ -74,7 +81,9 @@ export class DragAndDropHandler { const node = this.currentItem.node; - const nodeName: string = this.treeWidget.options.autoEscape ? htmlEscape(node.name) : node.name; + const nodeName: string = this.treeWidget.options.autoEscape + ? htmlEscape(node.name) + : node.name; this.dragElement = new DragElement( nodeName, @@ -102,7 +111,10 @@ export class DragAndDropHandler { this.dragElement.move(positionInfo.pageX, positionInfo.pageY); this.positionInfo = positionInfo; - const area = this.findHoveredArea(positionInfo.pageX, positionInfo.pageY); + const area = this.findHoveredArea( + positionInfo.pageX, + positionInfo.pageY + ); const canMoveTo = this.canMoveToArea(area); if (canMoveTo && area) { @@ -130,7 +142,10 @@ export class DragAndDropHandler { if (!area) { if (this.treeWidget.options.onDragMove) { - this.treeWidget.options.onDragMove(this.currentItem.node, positionInfo.originalEvent); + this.treeWidget.options.onDragMove( + this.currentItem.node, + positionInfo.originalEvent + ); } } @@ -157,7 +172,10 @@ export class DragAndDropHandler { if (!this.hoveredArea && currentItem) { if (this.treeWidget.options.onDragStop) { - this.treeWidget.options.onDragStop(currentItem.node, positionInfo.originalEvent); + this.treeWidget.options.onDragStop( + currentItem.node, + positionInfo.originalEvent + ); } } @@ -170,7 +188,9 @@ export class DragAndDropHandler { if (this.currentItem) { this.generateHitAreas(); - this.currentItem = this.treeWidget._getNodeElementForNode(this.currentItem.node); + this.currentItem = this.treeWidget._getNodeElementForNode( + this.currentItem.node + ); if (this.isDragging) { this.currentItem.$element.addClass("jqtree-moving"); @@ -188,7 +208,11 @@ export class DragAndDropHandler { } else if (this.treeWidget.options.onCanMoveTo) { const positionName = getPositionName(area.position); - return this.treeWidget.options.onCanMoveTo(this.currentItem.node, area.node, positionName); + return this.treeWidget.options.onCanMoveTo( + this.currentItem.node, + area.node, + positionName + ); } else { return true; } @@ -218,7 +242,12 @@ export class DragAndDropHandler { private findHoveredArea(x: number, y: number): IHitArea | null { const dimensions = this.getTreeDimensions(); - if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) { + if ( + x < dimensions.left || + y < dimensions.top || + x > dimensions.right || + y > dimensions.bottom + ) { return null; } @@ -243,7 +272,11 @@ export class DragAndDropHandler { private mustOpenFolderTimer(area: IHitArea): boolean { const node = area.node; - return node.isFolder() && !node.is_open && area.position === Position.Inside; + return ( + node.isFolder() && + !node.is_open && + area.position === Position.Inside + ); } private updateDropHint(): void { @@ -255,21 +288,30 @@ export class DragAndDropHandler { this.removeDropHint(); // add new drop hint - const nodeElement = this.treeWidget._getNodeElementForNode(this.hoveredArea.node); + const nodeElement = this.treeWidget._getNodeElementForNode( + this.hoveredArea.node + ); this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position); } private startOpenFolderTimer(folder: Node): void { const openFolder = (): void => { - this.treeWidget._openNode(folder, this.treeWidget.options.slide, () => { - this.refresh(); - this.updateDropHint(); - }); + this.treeWidget._openNode( + folder, + this.treeWidget.options.slide, + () => { + this.refresh(); + this.updateDropHint(); + } + ); }; this.stopOpenFolderTimer(); - this.openFolderTimer = window.setTimeout(openFolder, this.treeWidget.options.openFolderDelay); + this.openFolderTimer = window.setTimeout( + openFolder, + this.treeWidget.options.openFolderDelay + ); } private stopOpenFolderTimer(): void { @@ -354,7 +396,8 @@ abstract class VisibleNodeIterator { let isFirstNode = true; const _iterateNode = (node: Node, nextNode: Node | null): void => { - let mustIterateInside = (node.is_open || !node.element) && node.hasChildren(); + let mustIterateInside = + (node.is_open || !node.element) && node.hasChildren(); let $element: JQuery | null = null; @@ -400,7 +443,11 @@ abstract class VisibleNodeIterator { _iterateNode(this.tree, null); } - protected abstract handleNode(node: Node, nextNode: Node | null, $element: JQuery): void; + protected abstract handleNode( + node: Node, + nextNode: Node | null, + $element: JQuery + ): void; /* override @@ -410,9 +457,16 @@ abstract class VisibleNodeIterator { */ protected abstract handleOpenFolder(node: Node, $element: JQuery): boolean; - protected abstract handleClosedFolder(node: Node, nextNode: Node | null, $element: JQuery): void; + protected abstract handleClosedFolder( + node: Node, + nextNode: Node | null, + $element: JQuery + ): void; - protected abstract handleAfterOpenFolder(node: Node, nextNode: Node | null): void; + protected abstract handleAfterOpenFolder( + node: Node, + nextNode: Node | null + ): void; protected abstract handleFirstNode(node: Node): void; } @@ -447,7 +501,12 @@ export class HitAreasGenerator extends VisibleNodeIterator { for (const position of positions) { if (position.top !== previousTop && group.length) { if (group.length) { - this.generateHitAreasForGroup(hitAreas, group, previousTop, position.top); + this.generateHitAreasForGroup( + hitAreas, + group, + previousTop, + position.top + ); } previousTop = position.top; @@ -457,7 +516,12 @@ export class HitAreasGenerator extends VisibleNodeIterator { group.push(position); } - this.generateHitAreasForGroup(hitAreas, group, previousTop, this.treeBottom); + this.generateHitAreasForGroup( + hitAreas, + group, + previousTop, + this.treeBottom + ); return hitAreas; } @@ -478,7 +542,11 @@ export class HitAreasGenerator extends VisibleNodeIterator { return true; } - protected handleClosedFolder(node: Node, nextNode: Node, $element: JQuery): void { + protected handleClosedFolder( + node: Node, + nextNode: Node, + $element: JQuery + ): void { const top = this.getTop($element); if (node === this.currentNode) { @@ -496,7 +564,11 @@ export class HitAreasGenerator extends VisibleNodeIterator { protected handleFirstNode(node: Node): void { if (node !== this.currentNode) { - this.addPosition(node, Position.Before, this.getTop(jQuery(node.element))); + this.addPosition( + node, + Position.Before, + this.getTop(jQuery(node.element)) + ); } } @@ -579,11 +651,18 @@ class DragElement { private offsetY: number; private $element: JQuery; - constructor(nodeName: string, offsetX: number, offsetY: number, $tree: JQuery) { + constructor( + nodeName: string, + offsetX: number, + offsetY: number, + $tree: JQuery + ) { this.offsetX = offsetX; this.offsetY = offsetY; - this.$element = jQuery(`${nodeName}`); + this.$element = jQuery( + `${nodeName}` + ); this.$element.css("position", "absolute"); $tree.append(this.$element); } diff --git a/src/elements_renderer.ts b/src/elementsRenderer.ts similarity index 77% rename from src/elements_renderer.ts rename to src/elementsRenderer.ts index 2d9598bd..d61ddea6 100644 --- a/src/elements_renderer.ts +++ b/src/elementsRenderer.ts @@ -1,6 +1,6 @@ import { htmlEscape, getBoolString } from "./util"; import { Node } from "./node"; -import { ITreeWidget, IconElement } from "./itree_widget"; +import { ITreeWidget, IconElement } from "./itreeWidget"; export default class ElementsRenderer { public openedIconElement: IconElement; @@ -10,8 +10,12 @@ export default class ElementsRenderer { constructor(treeWidget: ITreeWidget) { this.treeWidget = treeWidget; - this.openedIconElement = this.createButtonElement(treeWidget.options.openedIcon); - this.closedIconElement = this.createButtonElement(treeWidget.options.closedIcon); + this.openedIconElement = this.createButtonElement( + treeWidget.options.openedIcon + ); + this.closedIconElement = this.createButtonElement( + treeWidget.options.closedIcon + ); } public render(fromNode: Node | null): void { @@ -26,7 +30,12 @@ export default class ElementsRenderer { const $element = this.treeWidget.element; $element.empty(); - this.createDomElements($element[0], this.treeWidget.tree.children, true, 1); + this.createDomElements( + $element[0], + this.treeWidget.tree.children, + true, + 1 + ); } public renderFromNode(node: Node): void { @@ -45,11 +54,21 @@ export default class ElementsRenderer { // create children if (node.children) { - this.createDomElements(li, node.children, false, node.getLevel() + 1); + this.createDomElements( + li, + node.children, + false, + node.getLevel() + 1 + ); } } - private createDomElements(element: Element, children: Node[], isRootNode: boolean, level: number): void { + private createDomElements( + element: Element, + children: Node[], + isRootNode: boolean, + level: number + ): void { const ul = this.createUl(isRootNode); element.appendChild(ul); @@ -96,10 +115,13 @@ export default class ElementsRenderer { private createLi(node: Node, level: number): HTMLLIElement { const isSelected = Boolean( - this.treeWidget.selectNodeHandler && this.treeWidget.selectNodeHandler.isNodeSelected(node) + this.treeWidget.selectNodeHandler && + this.treeWidget.selectNodeHandler.isNodeSelected(node) ); - const mustShowFolder = node.isFolder() || (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); + const mustShowFolder = + node.isFolder() || + (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); const li = mustShowFolder ? this.createFolderLi(node, level, isSelected) @@ -112,11 +134,17 @@ export default class ElementsRenderer { return li; } - private createFolderLi(node: Node, level: number, isSelected: boolean): HTMLLIElement { + private createFolderLi( + node: Node, + level: number, + isSelected: boolean + ): HTMLLIElement { const buttonClasses = this.getButtonClasses(node); const folderClasses = this.getFolderClasses(node, isSelected); - const iconElement = node.is_open ? this.openedIconElement : this.closedIconElement; + const iconElement = node.is_open + ? this.openedIconElement + : this.closedIconElement; // li const li = document.createElement("li"); @@ -144,7 +172,15 @@ export default class ElementsRenderer { } // title span - div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, true)); + div.appendChild( + this.createTitleSpan( + node.name, + level, + isSelected, + node.is_open, + true + ) + ); if (!this.treeWidget.options.buttonLeft) { div.appendChild(buttonLink); @@ -153,7 +189,11 @@ export default class ElementsRenderer { return li; } - private createNodeLi(node: Node, level: number, isSelected: boolean): HTMLLIElement { + private createNodeLi( + node: Node, + level: number, + isSelected: boolean + ): HTMLLIElement { const liClasses = ["jqtree_common"]; if (isSelected) { @@ -175,7 +215,15 @@ export default class ElementsRenderer { li.appendChild(div); // title span - div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, false)); + div.appendChild( + this.createTitleSpan( + node.name, + level, + isSelected, + node.is_open, + false + ) + ); return li; } @@ -204,7 +252,10 @@ export default class ElementsRenderer { titleSpan.setAttribute("aria-expanded", getBoolString(isOpen)); if (isSelected) { - titleSpan.setAttribute("tabindex", this.treeWidget.options.tabIndex); + titleSpan.setAttribute( + "tabindex", + this.treeWidget.options.tabIndex + ); } titleSpan.innerHTML = this.escapeIfNecessary(nodeName); diff --git a/src/imouse_widget.ts b/src/imouseWidget.ts similarity index 100% rename from src/imouse_widget.ts rename to src/imouseWidget.ts diff --git a/src/itree_widget.ts b/src/itreeWidget.ts similarity index 97% rename from src/itree_widget.ts rename to src/itreeWidget.ts index 5b4c9877..c4b555df 100644 --- a/src/itree_widget.ts +++ b/src/itreeWidget.ts @@ -1,5 +1,5 @@ import { Node, NodeId, Position } from "./node"; -import { IPositionInfo } from "./imouse_widget"; +import { IPositionInfo } from "./imouseWidget"; export type IconElement = Text | Element; diff --git a/src/key_handler.ts b/src/keyHandler.ts similarity index 88% rename from src/key_handler.ts rename to src/keyHandler.ts index 7fc9c5d0..ec80e39d 100644 --- a/src/key_handler.ts +++ b/src/keyHandler.ts @@ -1,5 +1,5 @@ import { Node } from "./node"; -import { ITreeWidget } from "./itree_widget"; +import { ITreeWidget } from "./itreeWidget"; export default class KeyHandler { private static LEFT = 37; @@ -84,7 +84,9 @@ export default class KeyHandler { if ( this.treeWidget.scrollHandler && - !this.treeWidget.scrollHandler.isScrolledIntoView(jQuery(node.element).find(".jqtree-element")) + !this.treeWidget.scrollHandler.isScrolledIntoView( + jQuery(node.element).find(".jqtree-element") + ) ) { this.treeWidget.scrollToNode(node); } @@ -120,7 +122,9 @@ export default class KeyHandler { private canHandleKeyboard(): boolean { return ( - this.treeWidget.options.keyboardSupport && this.isFocusOnTree() && this.treeWidget.getSelectedNode() != null + this.treeWidget.options.keyboardSupport && + this.isFocusOnTree() && + this.treeWidget.getSelectedNode() != null ); } @@ -128,7 +132,9 @@ export default class KeyHandler { const activeElement = document.activeElement; return Boolean( - activeElement && activeElement.tagName === "SPAN" && this.treeWidget._containsElement(activeElement) + activeElement && + activeElement.tagName === "SPAN" && + this.treeWidget._containsElement(activeElement) ); } } diff --git a/src/mouse.widget.ts b/src/mouse.widget.ts index 2de4b317..cc787872 100644 --- a/src/mouse.widget.ts +++ b/src/mouse.widget.ts @@ -2,7 +2,7 @@ This widget does the same a the mouse widget in jqueryui. */ import SimpleWidget from "./simple.widget"; -import { IPositionInfo } from "./imouse_widget"; +import { IPositionInfo } from "./imouseWidget"; abstract class MouseWidget extends SimpleWidget { public $el: JQuery; @@ -16,7 +16,7 @@ abstract class MouseWidget extends SimpleWidget { this.mouseDelay = mouseDelay; } - protected _init(): void { + protected init(): void { this.$el.on("mousedown.mousewidget", this.mouseDown); this.$el.on("touchstart.mousewidget", this.touchStart); @@ -27,7 +27,7 @@ abstract class MouseWidget extends SimpleWidget { this.mouseDownInfo = null; } - protected _deinit(): void { + protected deinit(): void { this.$el.off("mousedown.mousewidget"); this.$el.off("touchstart.mousewidget"); @@ -36,13 +36,15 @@ abstract class MouseWidget extends SimpleWidget { $document.off("mouseup.mousewidget"); } - protected abstract _mouseCapture(positionInfo: IPositionInfo): boolean | null; + protected abstract mouseCapture( + positionInfo: IPositionInfo + ): boolean | null; - protected abstract _mouseStart(positionInfo: IPositionInfo): boolean; + protected abstract mouseStart(positionInfo: IPositionInfo): boolean; - protected abstract _mouseDrag(positionInfo: IPositionInfo): void; + protected abstract mouseDrag(positionInfo: IPositionInfo): void; - protected abstract _mouseStop(positionInfo: IPositionInfo): void; + protected abstract mouseStop(positionInfo: IPositionInfo): void; private mouseDown = (e: JQuery.Event): boolean | undefined => { // Is left mouse button? @@ -50,7 +52,7 @@ abstract class MouseWidget extends SimpleWidget { return; } - const result = this._handleMouseDown(this._getPositionInfo(e)); + const result = this.handleMouseDown(this.getPositionInfo(e)); if (result) { e.preventDefault(); @@ -59,24 +61,24 @@ abstract class MouseWidget extends SimpleWidget { return result; }; - private _handleMouseDown(positionInfo: IPositionInfo): true | undefined { + private handleMouseDown(positionInfo: IPositionInfo): true | undefined { // We may have missed mouseup (out of window) if (this.isMouseStarted) { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } this.mouseDownInfo = positionInfo; - if (!this._mouseCapture(positionInfo)) { + if (!this.mouseCapture(positionInfo)) { return; } - this._handleStartMouse(); + this.handleStartMouse(); return true; } - private _handleStartMouse(): void { + private handleStartMouse(): void { const $document = jQuery(document); $document.on("mousemove.mousewidget", this.mouseMove); $document.on("touchmove.mousewidget", this.touchMove); @@ -84,11 +86,11 @@ abstract class MouseWidget extends SimpleWidget { $document.on("touchend.mousewidget", this.touchEnd); if (this.mouseDelay) { - this._startMouseDelayTimer(); + this.startMouseDelayTimer(); } } - private _startMouseDelayTimer(): void { + private startMouseDelayTimer(): void { if (this.mouseDelayTimer) { clearTimeout(this.mouseDelayTimer); } @@ -100,11 +102,12 @@ abstract class MouseWidget extends SimpleWidget { this.isMouseDelayMet = false; } - private mouseMove = (e: JQuery.Event) => this._handleMouseMove(e, this._getPositionInfo(e)); + private mouseMove = (e: JQuery.Event) => + this.handleMouseMove(e, this.getPositionInfo(e)); - private _handleMouseMove(e: JQuery.Event, positionInfo: IPositionInfo) { + private handleMouseMove(e: JQuery.Event, positionInfo: IPositionInfo) { if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); return e.preventDefault(); } @@ -113,19 +116,19 @@ abstract class MouseWidget extends SimpleWidget { } if (this.mouseDownInfo) { - this.isMouseStarted = this._mouseStart(this.mouseDownInfo) !== false; + this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false; } if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); } else { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } return !this.isMouseStarted; } - private _getPositionInfo(e: JQuery.Event | Touch): IPositionInfo { + private getPositionInfo(e: JQuery.Event | Touch): IPositionInfo { return { pageX: e.pageX, pageY: e.pageY, @@ -134,9 +137,10 @@ abstract class MouseWidget extends SimpleWidget { }; } - private mouseUp = (e: JQuery.Event): void => this._handleMouseUp(this._getPositionInfo(e)); + private mouseUp = (e: JQuery.Event): void => + this.handleMouseUp(this.getPositionInfo(e)); - private _handleMouseUp(positionInfo: IPositionInfo): void { + private handleMouseUp(positionInfo: IPositionInfo): void { const $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("touchmove.mousewidget"); @@ -145,7 +149,7 @@ abstract class MouseWidget extends SimpleWidget { if (this.isMouseStarted) { this.isMouseStarted = false; - this._mouseStop(positionInfo); + this.mouseStop(positionInfo); } } @@ -158,7 +162,7 @@ abstract class MouseWidget extends SimpleWidget { const touch = touchEvent.changedTouches[0]; - return this._handleMouseDown(this._getPositionInfo(touch)); + return this.handleMouseDown(this.getPositionInfo(touch)); }; private touchMove = (e: JQuery.Event) => { @@ -170,7 +174,7 @@ abstract class MouseWidget extends SimpleWidget { const touch = touchEvent.changedTouches[0]; - return this._handleMouseMove(e, this._getPositionInfo(touch)); + return this.handleMouseMove(e, this.getPositionInfo(touch)); }; private touchEnd = (e: JQuery.Event) => { @@ -182,7 +186,7 @@ abstract class MouseWidget extends SimpleWidget { const touch = touchEvent.changedTouches[0]; - return this._handleMouseUp(this._getPositionInfo(touch)); + return this.handleMouseUp(this.getPositionInfo(touch)); }; } diff --git a/src/node.ts b/src/node.ts index ca03391f..433e05d1 100644 --- a/src/node.ts +++ b/src/node.ts @@ -153,7 +153,7 @@ export class Node { */ public addChild(node: Node): void { this.children.push(node); - node._setParent(this); + node.setParent(this); } /* @@ -166,7 +166,7 @@ export class Node { */ public addChildAtPosition(node: Node, index: number): void { this.children.splice(index, 0, node); - node._setParent(this); + node.setParent(this); } /* @@ -178,7 +178,7 @@ export class Node { // remove children from the index node.removeChildren(); - this._removeChild(node); + this.doRemoveChild(node); } /* @@ -252,15 +252,21 @@ export class Node { // - Or, parent is empty return; } else { - movedNode.parent._removeChild(movedNode); + movedNode.parent.doRemoveChild(movedNode); if (position === Position.After) { if (targetNode.parent) { - targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1); + targetNode.parent.addChildAtPosition( + movedNode, + targetNode.parent.getChildIndex(targetNode) + 1 + ); } } else if (position === Position.Before) { if (targetNode.parent) { - targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode)); + targetNode.parent.addChildAtPosition( + movedNode, + targetNode.parent.getChildIndex(targetNode) + ); } } else if (position === Position.Inside) { // move inside as first child @@ -279,7 +285,13 @@ export class Node { for (const k in node) { if ( - ["parent", "children", "element", "tree", "isEmptyFolder"].indexOf(k) === -1 && + [ + "parent", + "children", + "element", + "tree", + "isEmptyFolder" + ].indexOf(k) === -1 && Object.prototype.hasOwnProperty.call(node, k) ) { const v = node[k]; @@ -330,7 +342,11 @@ export class Node { const childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex + 1); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if ( + typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length + ) { node.loadFromData(nodeInfo["children"]); } @@ -347,7 +363,11 @@ export class Node { const childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if ( + typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length + ) { node.loadFromData(nodeInfo["children"]); } @@ -359,8 +379,8 @@ export class Node { if (!this.parent) { return null; } else { - const newParent = new this.tree.nodeClass(nodeInfo); - newParent._setParent(this.tree); + const newParent: Node = new this.tree.nodeClass(nodeInfo); + newParent.setParent(this.tree); const originalParent = this.parent; for (const child of originalParent.children) { @@ -384,7 +404,11 @@ export class Node { const node = new this.tree.nodeClass(nodeInfo); this.addChild(node); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if ( + typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length + ) { node.loadFromData(nodeInfo["children"]); } @@ -395,7 +419,11 @@ export class Node { const node = new this.tree.nodeClass(nodeInfo); this.addChildAtPosition(node, 0); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if ( + typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length + ) { node.loadFromData(nodeInfo["children"]); } @@ -523,7 +551,10 @@ export class Node { } else { const previousSibling = this.getPreviousSibling(); if (previousSibling) { - if (!previousSibling.hasChildren() || !previousSibling.is_open) { + if ( + !previousSibling.hasChildren() || + !previousSibling.is_open + ) { // Previous sibling return previousSibling; } else { @@ -582,13 +613,13 @@ export class Node { addNode(data); } - private _setParent(parent: Node): void { + private setParent(parent: Node): void { this.parent = parent; this.tree = parent.tree; this.tree.addNodeToIndex(this); } - private _removeChild(node: Node): void { + private doRemoveChild(node: Node): void { this.children.splice(this.getChildIndex(node), 1); this.tree.removeNodeFromIndex(node); } diff --git a/src/node_element.ts b/src/nodeElement.ts similarity index 89% rename from src/node_element.ts rename to src/nodeElement.ts index 1ff0f07a..fd6587bc 100644 --- a/src/node_element.ts +++ b/src/nodeElement.ts @@ -1,5 +1,10 @@ import { Position, Node } from "./node"; -import { ITreeWidget, IDropHint, INodeElement, OnFinishOpenNode } from "./itree_widget"; +import { + ITreeWidget, + IDropHint, + INodeElement, + OnFinishOpenNode +} from "./itreeWidget"; export class NodeElement implements INodeElement { public node: Node; @@ -23,7 +28,10 @@ export class NodeElement implements INodeElement { public addDropHint(position: number): IDropHint { if (this.mustShowBorderDropHint(position)) { - return new BorderDropHint(this.$element, this.treeWidget._getScrollLeft()); + return new BorderDropHint( + this.$element, + this.treeWidget._getScrollLeft() + ); } else { return new GhostDropHint(this.node, this.$element, position); } @@ -60,7 +68,9 @@ export class NodeElement implements INodeElement { } protected getSpan(): JQuery { - return this.$element.children(".jqtree-element").find("span.jqtree-title"); + return this.$element + .children(".jqtree-element") + .find("span.jqtree-title"); } protected getLi(): JQuery { @@ -73,7 +83,11 @@ export class NodeElement implements INodeElement { } export class FolderElement extends NodeElement { - public open(onFinished: OnFinishOpenNode | null, slide = true, animationSpeed = "fast"): void { + public open( + onFinished: OnFinishOpenNode | null, + slide = true, + animationSpeed = "fast" + ): void { if (this.node.is_open) { return; } @@ -87,7 +101,9 @@ export class FolderElement extends NodeElement { const buttonEl = $button.get(0); if (buttonEl) { - const icon = this.treeWidget.renderer.openedIconElement.cloneNode(true); + const icon = this.treeWidget.renderer.openedIconElement.cloneNode( + true + ); buttonEl.appendChild(icon); } @@ -130,7 +146,9 @@ export class FolderElement extends NodeElement { const buttonEl = $button.get(0); if (buttonEl) { - const icon = this.treeWidget.renderer.closedIconElement.cloneNode(true); + const icon = this.treeWidget.renderer.closedIconElement.cloneNode( + true + ); buttonEl.appendChild(icon); } @@ -160,7 +178,9 @@ export class FolderElement extends NodeElement { } private getButton(): JQuery { - return this.$element.children(".jqtree-element").find("a.jqtree-toggler"); + return this.$element + .children(".jqtree-element") + .find("a.jqtree-toggler"); } } diff --git a/src/save_state_handler.ts b/src/saveStateHandler.ts similarity index 85% rename from src/save_state_handler.ts rename to src/saveStateHandler.ts index de5000c1..48d132e4 100644 --- a/src/save_state_handler.ts +++ b/src/saveStateHandler.ts @@ -1,5 +1,5 @@ import { isInt } from "./util"; -import { ITreeWidget } from "./itree_widget"; +import { ITreeWidget } from "./itreeWidget"; import { Node, NodeId } from "./node"; export default class SaveStateHandler { @@ -21,10 +21,10 @@ export default class SaveStateHandler { } public getStateFromStorage(): any { - const jsonData = this._loadFromStorage(); + const jsonData = this.loadFromStorage(); if (jsonData) { - return this._parseState(jsonData); + return this.parseState(jsonData); } else { return null; } @@ -44,7 +44,8 @@ export default class SaveStateHandler { return openNodes; }; - const getSelectedNodeIds = (): NodeId[] => this.treeWidget.getSelectedNodes().map((n: Node) => n.id); + const getSelectedNodeIds = (): NodeId[] => + this.treeWidget.getSelectedNodes().map((n: Node) => n.id); /* eslint-disable @typescript-eslint/camelcase */ return { @@ -67,12 +68,12 @@ export default class SaveStateHandler { let mustLoadOnDemand = false; if (state.open_nodes) { - mustLoadOnDemand = this._openInitialNodes(state.open_nodes); + mustLoadOnDemand = this.openInitialNodes(state.open_nodes); } if (state.selected_node) { - this._resetSelection(); - this._selectInitialNodes(state.selected_node); + this.resetSelection(); + this.selectInitialNodes(state.selected_node); } return mustLoadOnDemand; @@ -81,7 +82,11 @@ export default class SaveStateHandler { public setInitialStateOnDemand(state: any, cbFinished: () => void): void { if (state) { - this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); + this.doSetInitialStateOnDemand( + state.open_nodes, + state.selected_node, + cbFinished + ); } else { cbFinished(); } @@ -97,7 +102,7 @@ export default class SaveStateHandler { } } - private _parseState(jsonData: any): any { + private parseState(jsonData: any): any { const state = jQuery.parseJSON(jsonData); // Check if selected_node is an int (instead of an array) @@ -109,7 +114,7 @@ export default class SaveStateHandler { return state; } - private _loadFromStorage(): any { + private loadFromStorage(): any { if (this.treeWidget.options.onGetStateFromStorage) { return this.treeWidget.options.onGetStateFromStorage(); } else if (this.supportsLocalStorage()) { @@ -117,7 +122,7 @@ export default class SaveStateHandler { } } - private _openInitialNodes(nodeIds: any[]): boolean { + private openInitialNodes(nodeIds: any[]): boolean { let mustLoadOnDemand = false; for (const nodeDd of nodeIds) { @@ -135,7 +140,7 @@ export default class SaveStateHandler { return mustLoadOnDemand; } - private _selectInitialNodes(nodeIds: NodeId[]): boolean { + private selectInitialNodes(nodeIds: NodeId[]): boolean { let selectCount = 0; for (const nodeId of nodeIds) { @@ -153,7 +158,7 @@ export default class SaveStateHandler { return selectCount !== 0; } - private _resetSelection(): void { + private resetSelection(): void { const selectNodeHandler = this.treeWidget.selectNodeHandler; if (selectNodeHandler) { @@ -165,7 +170,11 @@ export default class SaveStateHandler { } } - private _setInitialStateOnDemand(nodeIdsParam: NodeId[], selectedNodes: NodeId[], cbFinished: () => void): void { + private doSetInitialStateOnDemand( + nodeIdsParam: NodeId[], + selectedNodes: NodeId[], + cbFinished: () => void + ): void { let loadingCount = 0; let nodeIds = nodeIdsParam; @@ -190,7 +199,7 @@ export default class SaveStateHandler { nodeIds = newNodesIds; - if (this._selectInitialNodes(selectedNodes)) { + if (this.selectInitialNodes(selectedNodes)) { this.treeWidget._refreshElements(null); } diff --git a/src/scroll_handler.ts b/src/scrollHandler.ts similarity index 82% rename from src/scroll_handler.ts rename to src/scrollHandler.ts index eb7e4a7e..271bec4a 100644 --- a/src/scroll_handler.ts +++ b/src/scrollHandler.ts @@ -1,5 +1,5 @@ -import { ITreeWidget, IHitArea } from "./itree_widget"; -import { IPositionInfo } from "./imouse_widget"; +import { ITreeWidget, IHitArea } from "./itreeWidget"; +import { IPositionInfo } from "./imouseWidget"; export default class ScrollHandler { private treeWidget: ITreeWidget; @@ -82,7 +82,10 @@ export default class ScrollHandler { const hasOverFlow = ($el: JQuery): boolean => { for (const attr of cssAttributes) { const overflowValue = $el.css(attr); - if (overflowValue === "auto" || overflowValue === "scroll") { + if ( + overflowValue === "auto" || + overflowValue === "scroll" + ) { return true; } } @@ -115,7 +118,11 @@ export default class ScrollHandler { const $scrollParent = getParentWithOverflow(); - if ($scrollParent && $scrollParent.length && $scrollParent[0].tagName !== "HTML") { + if ( + $scrollParent && + $scrollParent.length && + $scrollParent[0].tagName !== "HTML" + ) { this.$scrollParent = $scrollParent; const offset = this.$scrollParent.offset(); @@ -140,7 +147,8 @@ export default class ScrollHandler { return; } - const distanceBottom = this.scrollParentTop + scrollParent.offsetHeight - area.bottom; + const distanceBottom = + this.scrollParentTop + scrollParent.offsetHeight - area.bottom; if (distanceBottom < 20) { scrollParent.scrollTop += 20; @@ -169,7 +177,9 @@ export default class ScrollHandler { } private checkVerticalScrolling(): void { - const hoveredArea = this.treeWidget.dndHandler && this.treeWidget.dndHandler.hoveredArea; + const hoveredArea = + this.treeWidget.dndHandler && + this.treeWidget.dndHandler.hoveredArea; if (hoveredArea && hoveredArea.top !== this.previousTop) { this.previousTop = hoveredArea.top; @@ -183,7 +193,9 @@ export default class ScrollHandler { } private checkHorizontalScrolling(): void { - const positionInfo = this.treeWidget.dndHandler && this.treeWidget.dndHandler.positionInfo; + const positionInfo = + this.treeWidget.dndHandler && + this.treeWidget.dndHandler.positionInfo; if (!positionInfo) { return; @@ -196,8 +208,13 @@ export default class ScrollHandler { } } - private handleHorizontalScrollingWithParent(positionInfo: IPositionInfo): void { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + private handleHorizontalScrollingWithParent( + positionInfo: IPositionInfo + ): void { + if ( + positionInfo.pageX === undefined || + positionInfo.pageY === undefined + ) { return; } @@ -210,7 +227,9 @@ export default class ScrollHandler { const scrollParent = $scrollParent[0]; - const canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < scrollParent.scrollWidth; + const canScrollRight = + scrollParent.scrollLeft + scrollParent.clientWidth < + scrollParent.scrollWidth; const canScrollLeft = scrollParent.scrollLeft > 0; const rightEdge = scrollParentOffset.left + scrollParent.clientWidth; @@ -219,14 +238,22 @@ export default class ScrollHandler { const isNearLeftEdge = positionInfo.pageX < leftEdge + 20; if (isNearRightEdge && canScrollRight) { - scrollParent.scrollLeft = Math.min(scrollParent.scrollLeft + 20, scrollParent.scrollWidth); + scrollParent.scrollLeft = Math.min( + scrollParent.scrollLeft + 20, + scrollParent.scrollWidth + ); } else if (isNearLeftEdge && canScrollLeft) { scrollParent.scrollLeft = Math.max(scrollParent.scrollLeft - 20, 0); } } - private handleHorizontalScrollingWithDocument(positionInfo: IPositionInfo): void { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + private handleHorizontalScrollingWithDocument( + positionInfo: IPositionInfo + ): void { + if ( + positionInfo.pageX === undefined || + positionInfo.pageY === undefined + ) { return; } diff --git a/src/select_node_handler.ts b/src/selectNodeHandler.ts similarity index 94% rename from src/select_node_handler.ts rename to src/selectNodeHandler.ts index 8ca39734..ca74bc7a 100644 --- a/src/select_node_handler.ts +++ b/src/selectNodeHandler.ts @@ -1,5 +1,5 @@ import { Node } from "./node"; -import { ITreeWidget } from "./itree_widget"; +import { ITreeWidget } from "./itreeWidget"; export default class SelectNodeHandler { private treeWidget: ITreeWidget; @@ -86,7 +86,10 @@ export default class SelectNodeHandler { public removeFromSelection(node: Node, includeChildren = false): void { if (node.id == null) { - if (this.selectedSingleNode && node.element === this.selectedSingleNode.element) { + if ( + this.selectedSingleNode && + node.element === this.selectedSingleNode.element + ) { this.selectedSingleNode = null; } } else { diff --git a/src/simple.widget.ts b/src/simple.widget.ts index d97047be..342637d6 100644 --- a/src/simple.widget.ts +++ b/src/simple.widget.ts @@ -1,10 +1,11 @@ export default class SimpleWidget { - [key: string]: any; - public static register(widgetClass: any, widgetName: string): void { const getDataKey = (): string => `simple_widget_${widgetName}`; - function getWidgetData(el: Element, dataKey: string): SimpleWidget | null { + function getWidgetData( + el: Element, + dataKey: string + ): SimpleWidget | null { const widget = jQuery.data(el, dataKey); if (widget && widget instanceof SimpleWidget) { @@ -21,14 +22,14 @@ export default class SimpleWidget { const existingWidget = getWidgetData(el, dataKey); if (!existingWidget) { - const widget = new widgetClass(el, options); + const widget: SimpleWidget = new widgetClass(el, options); if (!jQuery.data(el, dataKey)) { jQuery.data(el, dataKey, widget); } // Call init after setting data, so we can call methods - widget._init(); + widget.init(); } } @@ -49,16 +50,23 @@ export default class SimpleWidget { } } - function callFunction($el: JQuery, functionName: string, args: any[]): any { + function callFunction( + $el: JQuery, + functionName: string, + args: any[] + ): any { let result = null; for (const el of $el.get()) { const widget = jQuery.data(el, getDataKey()); if (widget && widget instanceof SimpleWidget) { - const widgetFunction = widget[functionName]; + const widgetFunction = (widget as any)[functionName]; - if (widgetFunction && typeof widgetFunction === "function") { + if ( + widgetFunction && + typeof widgetFunction === "function" + ) { result = widgetFunction.apply(widget, args); } } @@ -67,7 +75,11 @@ export default class SimpleWidget { return result; } - (jQuery.fn as any)[widgetName] = function(this: JQuery, argument1: any, ...args: any[]): any { + (jQuery.fn as any)[widgetName] = function( + this: JQuery, + argument1: any, + ...args: any[] + ): any { if (argument1 === undefined || typeof argument1 === "object") { const options = argument1; return createWidget(this, options); @@ -99,14 +111,14 @@ export default class SimpleWidget { } public destroy(): void { - this._deinit(); + this.deinit(); } - protected _init(): void { + protected init(): void { // } - protected _deinit(): void { + protected deinit(): void { // } } diff --git a/src/tree.jquery.ts b/src/tree.jquery.ts index 2c3bb855..5563519e 100644 --- a/src/tree.jquery.ts +++ b/src/tree.jquery.ts @@ -1,19 +1,19 @@ import __version__ from "./version"; import * as jQuery from "jquery"; -import { DragAndDropHandler } from "./drag_and_drop_handler"; -import ElementsRenderer from "./elements_renderer"; -import DataLoader, { HandleFinishedLoading } from "./data_loader"; -import KeyHandler from "./key_handler"; +import { DragAndDropHandler } from "./dragAndDropHandler"; +import ElementsRenderer from "./elementsRenderer"; +import DataLoader, { HandleFinishedLoading } from "./dataLoader"; +import KeyHandler from "./keyHandler"; import MouseWidget from "./mouse.widget"; -import { IPositionInfo } from "./imouse_widget"; -import SaveStateHandler from "./save_state_handler"; -import ScrollHandler from "./scroll_handler"; -import SelectNodeHandler from "./select_node_handler"; +import { IPositionInfo } from "./imouseWidget"; +import SaveStateHandler from "./saveStateHandler"; +import ScrollHandler from "./scrollHandler"; +import SelectNodeHandler from "./selectNodeHandler"; import SimpleWidget from "./simple.widget"; import { Node, NodeId, getPosition } from "./node"; import { isFunction } from "./util"; -import { FolderElement, NodeElement } from "./node_element"; -import { INodeElement, IHitArea, OnFinishOpenNode } from "./itree_widget"; +import { FolderElement, NodeElement } from "./nodeElement"; +import { INodeElement, IHitArea, OnFinishOpenNode } from "./itreeWidget"; type CanSelectNode = (node: INode) => boolean; type SetFromStorage = (data: string) => void; @@ -21,7 +21,11 @@ type GetFromStorage = () => any; type CreateLi = (node: INode, el: JQuery, isSelected: boolean) => void; type IsMoveHandler = (el: JQuery) => boolean; type CanMoveNode = CanSelectNode; -type CanMoveNodeTo = (node: INode, targetNode: INode, positionName: string) => void; +type CanMoveNodeTo = ( + node: INode, + targetNode: INode, + positionName: string +) => void; type HandleLoadFailed = (response: any) => void; type HandleDataFilter = (data: any) => any; type HandleDrag = (node: INode, event: JQueryEventObject | Touch) => void; @@ -111,8 +115,11 @@ class JqTreeWidget extends MouseWidget { return this.tree as INode; } - public selectNode(node: INode | null, optionsParam?: ISelectNodeOptions): JQuery { - this._selectNode(node, optionsParam); + public selectNode( + node: INode | null, + optionsParam?: ISelectNodeOptions + ): JQuery { + this.doSelectNode(node, optionsParam); return this.element; } @@ -129,7 +136,7 @@ class JqTreeWidget extends MouseWidget { } public loadData(data: any, parentNode: Node | null): JQuery { - this._loadData(data, parentNode); + this.doLoadData(data, parentNode); return this.element; } @@ -150,17 +157,17 @@ class JqTreeWidget extends MouseWidget { public loadDataFromUrl(param1?: any, param2?: any, param3?: any): JQuery { if (typeof param1 === "string") { // first parameter is url - this._loadDataFromUrl(param1, param2, param3); + this.doLoadDataFromUrl(param1, param2, param3); } else { // first parameter is not url - this._loadDataFromUrl(null, param1, param2); + this.doLoadDataFromUrl(null, param1, param2); } return this.element; } public reload(onFinished: HandleFinishedLoading | null): JQuery { - this._loadDataFromUrl(null, null, onFinished); + this.doLoadDataFromUrl(null, null, onFinished); return this.element; } @@ -177,7 +184,7 @@ class JqTreeWidget extends MouseWidget { } public getNodeByHtmlElement(element: Element | JQuery): Node | null { - return this._getNode(jQuery(element)); + return this.getNode(jQuery(element)); } public getNodeByCallback(callback: (node: Node) => boolean): Node | null { @@ -222,9 +229,12 @@ class JqTreeWidget extends MouseWidget { const slide = slideParam == null ? this.options.slide : slideParam; if (node.isFolder() || node.isEmptyFolder) { - new FolderElement(node as Node, this).close(slide, this.options.animationSpeed); + new FolderElement(node as Node, this).close( + slide, + this.options.animationSpeed + ); - this._saveState(); + this.saveState(); } return this.element; @@ -312,7 +322,9 @@ class JqTreeWidget extends MouseWidget { } public prependNode(newNodeInfo: any, parentNodeParam?: INode): INode { - const parentNode = !parentNodeParam ? this.tree : (parentNodeParam as Node); + const parentNode = !parentNodeParam + ? this.tree + : (parentNodeParam as Node); const node = parentNode.prepend(newNodeInfo); @@ -347,7 +359,7 @@ class JqTreeWidget extends MouseWidget { } this._refreshElements(node); - this._selectCurrentNode(); + this.selectCurrentNode(); return this.element; } @@ -384,9 +396,11 @@ class JqTreeWidget extends MouseWidget { if (this.selectNodeHandler) { this.selectNodeHandler.addToSelection(node); - this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus); + this._getNodeElementForNode(node).select( + mustSetFocus === undefined ? true : mustSetFocus + ); - this._saveState(); + this.saveState(); } return this.element; @@ -421,7 +435,7 @@ class JqTreeWidget extends MouseWidget { this.selectNodeHandler.removeFromSelection(node); this._getNodeElementForNode(node).deselect(); - this._saveState(); + this.saveState(); } return this.element; @@ -491,7 +505,9 @@ class JqTreeWidget extends MouseWidget { if (!this.dndHandler) { return []; } else { - this.dndHandler.currentItem = this._getNodeElementForNode(movingNode); + this.dndHandler.currentItem = this._getNodeElementForNode( + movingNode + ); this.dndHandler.generateHitAreas(); return this.dndHandler.hitAreas; } @@ -505,15 +521,27 @@ class JqTreeWidget extends MouseWidget { return event; } - public _openNode(node: Node, slide = true, onFinished: OnFinishOpenNode | null): void { - const doOpenNode = (_node: Node, _slide: any, _onFinished: OnFinishOpenNode | null): void => { + public _openNode( + node: Node, + slide = true, + onFinished: OnFinishOpenNode | null + ): void { + const doOpenNode = ( + _node: Node, + _slide: any, + _onFinished: OnFinishOpenNode | null + ): void => { const folderElement = new FolderElement(_node, this); - folderElement.open(_onFinished, _slide, this.options.animationSpeed); + folderElement.open( + _onFinished, + _slide, + this.options.animationSpeed + ); }; if (node.isFolder() || node.isEmptyFolder) { if (node.load_on_demand) { - this._loadFolderOnDemand(node, slide, onFinished); + this.loadFolderOnDemand(node, slide, onFinished); } else { let parent = node.parent; @@ -526,7 +554,7 @@ class JqTreeWidget extends MouseWidget { } doOpenNode(node, slide, onFinished); - this._saveState(); + this.saveState(); } } } @@ -550,7 +578,7 @@ class JqTreeWidget extends MouseWidget { } public _getNodeElement($element: JQuery): INodeElement | null { - const node = this._getNode($element); + const node = this.getNode($element); if (node) { return this._getNodeElementForNode(node); } else { @@ -559,26 +587,26 @@ class JqTreeWidget extends MouseWidget { } public _containsElement(element: Element): boolean { - const node = this._getNode(jQuery(element)); + const node = this.getNode(jQuery(element)); return node != null && node.tree === this.tree; } public _getScrollLeft(): number { - return (this.scrollHandler && this.scrollHandler.getScrollLeft()) || 0; + return this?.scrollHandler?.getScrollLeft() || 0; } - protected _init(): void { - super._init(); + protected init(): void { + super.init(); this.element = this.$el; this.mouseDelay = 300; this.isInitialized = false; - this.options.rtl = this._getRtlOption(); + this.options.rtl = this.getRtlOption(); if (this.options.closedIcon === null) { - this.options.closedIcon = this._getDefaultClosedIcon(); + this.options.closedIcon = this.getDefaultClosedIcon(); } this.renderer = new ElementsRenderer(this); @@ -608,17 +636,17 @@ class JqTreeWidget extends MouseWidget { this.keyHandler = new KeyHandler(this); } - this._initData(); + this.initData(); - this.element.click(this._handleClick); - this.element.dblclick(this._handleDblclick); + this.element.click(this.handleClick); + this.element.dblclick(this.handleDblclick); if (this.options.useContextMenu) { - this.element.on("contextmenu", this._handleContextmenu); + this.element.on("contextmenu", this.handleContextmenu); } } - protected _deinit(): void { + protected deinit(): void { this.element.empty(); this.element.off(); @@ -628,10 +656,10 @@ class JqTreeWidget extends MouseWidget { this.tree = new Node({}, true); - super._deinit(); + super.deinit(); } - protected _mouseCapture(positionInfo: IPositionInfo): boolean | null { + protected mouseCapture(positionInfo: IPositionInfo): boolean | null { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseCapture(positionInfo); } else { @@ -639,7 +667,7 @@ class JqTreeWidget extends MouseWidget { } } - protected _mouseStart(positionInfo: IPositionInfo): boolean { + protected mouseStart(positionInfo: IPositionInfo): boolean { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStart(positionInfo); } else { @@ -647,7 +675,7 @@ class JqTreeWidget extends MouseWidget { } } - protected _mouseDrag(positionInfo: IPositionInfo): boolean { + protected mouseDrag(positionInfo: IPositionInfo): boolean { if (this.options.dragAndDrop && this.dndHandler) { const result = this.dndHandler.mouseDrag(positionInfo); @@ -660,7 +688,7 @@ class JqTreeWidget extends MouseWidget { } } - protected _mouseStop(positionInfo: IPositionInfo): boolean { + protected mouseStop(positionInfo: IPositionInfo): boolean { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStop(positionInfo); } else { @@ -668,21 +696,21 @@ class JqTreeWidget extends MouseWidget { } } - private _initData(): void { + private initData(): void { if (this.options.data) { - this._loadData(this.options.data, null); + this.doLoadData(this.options.data, null); } else { - const dataUrl = this._getDataUrlInfo(null); + const dataUrl = this.getDataUrlInfo(null); if (dataUrl) { - this._loadDataFromUrl(null, null, null); + this.doLoadDataFromUrl(null, null, null); } else { - this._loadData([], null); + this.doLoadData([], null); } } } - private _getDataUrlInfo(node: Node | null): any { + private getDataUrlInfo(node: Node | null): any { const dataUrl = this.options.dataUrl || this.element.data("url"); const getUrlFromString = (): any => { @@ -694,13 +722,13 @@ class JqTreeWidget extends MouseWidget { }; const setUrlInfoData = (urlInfo: any): void => { - if (node && node.id) { + if (node?.id) { // Load on demand of a subtree; add node parameter const data = { node: node.id }; urlInfo["data"] = data; } else { // Add selected_node parameter - const selectedNodeId = this._getNodeIdToBeSelected(); + const selectedNodeId = this.getNodeIdToBeSelected(); if (selectedNodeId) { const data = { selected_node: selectedNodeId }; // eslint-disable-line @typescript-eslint/camelcase urlInfo["data"] = data; @@ -720,7 +748,7 @@ class JqTreeWidget extends MouseWidget { } } - private _getNodeIdToBeSelected(): NodeId | null { + private getNodeIdToBeSelected(): NodeId | null { if (this.options.saveState && this.saveStateHandler) { return this.saveStateHandler.getNodeIdToBeSelected(); } else { @@ -728,7 +756,7 @@ class JqTreeWidget extends MouseWidget { } } - private _initTree(data: any): void { + private initTree(data: any): void { const doInit = (): void => { if (!this.isInitialized) { this.isInitialized = true; @@ -736,7 +764,11 @@ class JqTreeWidget extends MouseWidget { } }; - this.tree = new this.options.nodeClass(null, true, this.options.nodeClass); + this.tree = new this.options.nodeClass( + null, + true, + this.options.nodeClass + ); if (this.selectNodeHandler) { this.selectNodeHandler.clear(); @@ -744,7 +776,7 @@ class JqTreeWidget extends MouseWidget { this.tree.loadFromData(data); - const mustLoadOnDemand = this._setInitialState(); + const mustLoadOnDemand = this.setInitialState(); this._refreshElements(null); @@ -752,13 +784,13 @@ class JqTreeWidget extends MouseWidget { doInit(); } else { // Load data on demand and then init the tree - this._setInitialStateOnDemand(doInit); + this.setInitialStateOnDemand(doInit); } } // Set initial state, either by restoring the state or auto-opening nodes // result: must load nodes on demand? - private _setInitialState(): boolean { + private setInitialState(): boolean { const restoreState = (): boolean[] => { // result: is state restored, must load on demand? if (!(this.options.saveState && this.saveStateHandler)) { @@ -769,7 +801,9 @@ class JqTreeWidget extends MouseWidget { if (!state) { return [false, false]; } else { - const mustLoadOnDemand = this.saveStateHandler.setInitialState(state); + const mustLoadOnDemand = this.saveStateHandler.setInitialState( + state + ); // return true: the state is restored return [true, mustLoadOnDemand]; @@ -783,7 +817,7 @@ class JqTreeWidget extends MouseWidget { return false; } - const maxLevel = this._getAutoOpenMaxLevel(); + const maxLevel = this.getAutoOpenMaxLevel(); let mustLoadOnDemand = false; this.tree.iterate((node: INode, level: number) => { @@ -812,7 +846,7 @@ class JqTreeWidget extends MouseWidget { // Set the initial state for nodes that are loaded on demand // Call cb_finished when done - private _setInitialStateOnDemand(cbFinished: () => void): void { + private setInitialStateOnDemand(cbFinished: () => void): void { const restoreState = (): boolean => { if (!(this.options.saveState && this.saveStateHandler)) { return false; @@ -822,7 +856,10 @@ class JqTreeWidget extends MouseWidget { if (!state) { return false; } else { - this.saveStateHandler.setInitialStateOnDemand(state, cbFinished); + this.saveStateHandler.setInitialStateOnDemand( + state, + cbFinished + ); return true; } @@ -830,7 +867,7 @@ class JqTreeWidget extends MouseWidget { }; const autoOpenNodes = (): void => { - const maxLevel = this._getAutoOpenMaxLevel(); + const maxLevel = this.getAutoOpenMaxLevel(); let loadingCount = 0; const loadAndOpenNode = (node: Node): void => { @@ -869,7 +906,7 @@ class JqTreeWidget extends MouseWidget { } } - private _getAutoOpenMaxLevel(): number { + private getAutoOpenMaxLevel(): number { if (this.options.autoOpen === true) { return -1; } else { @@ -877,8 +914,8 @@ class JqTreeWidget extends MouseWidget { } } - private _handleClick = (e: JQuery.Event): void => { - const clickTarget = this._getClickTarget((e as any).target); + private handleClick = (e: JQuery.Event): void => { + const clickTarget = this.getClickTarget((e as any).target); if (clickTarget) { if (clickTarget.type === "button") { @@ -894,16 +931,16 @@ class JqTreeWidget extends MouseWidget { }); if (!event.isDefaultPrevented()) { - this._selectNode(node); + this.doSelectNode(node); } } } }; - private _handleDblclick = (e: JQuery.Event): void => { - const clickTarget = this._getClickTarget((e as any).target); + private handleDblclick = (e: JQuery.Event): void => { + const clickTarget = this.getClickTarget((e as any).target); - if (clickTarget && clickTarget.type === "label") { + if (clickTarget?.type === "label") { this._triggerEvent("tree.dblclick", { node: clickTarget.node, click_event: e // eslint-disable-line @typescript-eslint/camelcase @@ -911,13 +948,13 @@ class JqTreeWidget extends MouseWidget { } }; - private _getClickTarget(element: EventTarget): any { + private getClickTarget(element: EventTarget): any { const $target = jQuery(element); const $button = $target.closest(".jqtree-toggler"); if ($button.length) { - const node = this._getNode($button); + const node = this.getNode($button); if (node) { return { @@ -928,7 +965,7 @@ class JqTreeWidget extends MouseWidget { } else { const $el = $target.closest(".jqtree-element"); if ($el.length) { - const node = this._getNode($el); + const node = this.getNode($el); if (node) { return { type: "label", @@ -941,7 +978,7 @@ class JqTreeWidget extends MouseWidget { return null; } - private _getNode($element: JQuery): any { + private getNode($element: JQuery): any { const $li = $element.closest("li.jqtree_common"); if ($li.length === 0) { return null; @@ -950,10 +987,12 @@ class JqTreeWidget extends MouseWidget { } } - private _handleContextmenu = (e: JQuery.Event) => { - const $div = jQuery((e as any).target).closest("ul.jqtree-tree .jqtree-element"); + private handleContextmenu = (e: JQuery.Event) => { + const $div = jQuery((e as any).target).closest( + "ul.jqtree-tree .jqtree-element" + ); if ($div.length) { - const node = this._getNode($div); + const node = this.getNode($div); if (node) { e.preventDefault(); e.stopPropagation(); @@ -969,13 +1008,13 @@ class JqTreeWidget extends MouseWidget { return null; }; - private _saveState(): void { + private saveState(): void { if (this.options.saveState && this.saveStateHandler) { this.saveStateHandler.saveState(); } } - private _selectCurrentNode(): void { + private selectCurrentNode(): void { const node = this.getSelectedNode(); if (node) { const nodeElement = this._getNodeElementForNode(node); @@ -985,14 +1024,14 @@ class JqTreeWidget extends MouseWidget { } } - private _deselectCurrentNode(): void { + private deselectCurrentNode(): void { const node = this.getSelectedNode(); if (node) { this.removeFromSelection(node); } } - private _getDefaultClosedIcon(): string { + private getDefaultClosedIcon(): string { if (this.options.rtl) { // triangle to the left return "◀"; @@ -1002,13 +1041,13 @@ class JqTreeWidget extends MouseWidget { } } - private _getRtlOption(): any { + private getRtlOption(): any { if (this.options.rtl != null) { return this.options.rtl; } else { const dataRtl = this.element.data("rtl"); - if (dataRtl != null && dataRtl !== false) { + if (dataRtl !== null && dataRtl !== false) { return true; } else { return false; @@ -1016,7 +1055,10 @@ class JqTreeWidget extends MouseWidget { } } - private _selectNode(inode: INode | null, optionsParam?: ISelectNodeOptions): void { + private doSelectNode( + inode: INode | null, + optionsParam?: ISelectNodeOptions + ): void { if (!this.selectNodeHandler) { return; } @@ -1026,7 +1068,10 @@ class JqTreeWidget extends MouseWidget { const canSelect = (): boolean => { if (this.options.onCanSelectNode) { - return this.options.selectable && this.options.onCanSelectNode(inode as Node); + return ( + this.options.selectable && + this.options.onCanSelectNode(inode as Node) + ); } else { return this.options.selectable; } @@ -1048,7 +1093,7 @@ class JqTreeWidget extends MouseWidget { if (!inode) { // Called with empty node -> deselect current node - this._deselectCurrentNode(); + this.deselectCurrentNode(); saveState(); return; } @@ -1061,7 +1106,7 @@ class JqTreeWidget extends MouseWidget { if (this.selectNodeHandler.isNodeSelected(node)) { if (selectOptions.mustToggle) { - this._deselectCurrentNode(); + this.deselectCurrentNode(); this._triggerEvent("tree.select", { node: null, previous_node: node // eslint-disable-line @typescript-eslint/camelcase @@ -1069,7 +1114,7 @@ class JqTreeWidget extends MouseWidget { } } else { const deselectedNode = this.getSelectedNode(); - this._deselectCurrentNode(); + this.deselectCurrentNode(); this.addToSelection(node, selectOptions.mustSetFocus); this._triggerEvent("tree.select", { @@ -1082,17 +1127,17 @@ class JqTreeWidget extends MouseWidget { saveState(); } - private _loadData(data: any[] | null, parentNode: Node | null): void { + private doLoadData(data: any[] | null, parentNode: Node | null): void { if (!data) { return; } else { this._triggerEvent("tree.load_data", { tree_data: data }); // eslint-disable-line @typescript-eslint/camelcase if (parentNode) { - this._deselectNodes(parentNode); - this._loadSubtree(data, parentNode); + this.deselectNodes(parentNode); + this.loadSubtree(data, parentNode); } else { - this._initTree(data); + this.initTree(data); } if (this.isDragging() && this.dndHandler) { @@ -1101,16 +1146,18 @@ class JqTreeWidget extends MouseWidget { } } - private _deselectNodes(parentNode: Node): void { + private deselectNodes(parentNode: Node): void { if (this.selectNodeHandler) { - const selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode); + const selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder( + parentNode + ); for (const n of selectedNodesUnderParent) { this.selectNodeHandler.removeFromSelection(n); } } } - private _loadSubtree(data: any[], parentNode: Node): void { + private loadSubtree(data: any[], parentNode: Node): void { parentNode.loadFromData(data); parentNode.load_on_demand = false; // eslint-disable-line @typescript-eslint/camelcase @@ -1119,20 +1166,24 @@ class JqTreeWidget extends MouseWidget { this._refreshElements(parentNode); } - private _loadDataFromUrl( + private doLoadDataFromUrl( urlInfoParam: any, parentNode: Node | null, onFinished: HandleFinishedLoading | null ): void { - const urlInfo = urlInfoParam || this._getDataUrlInfo(parentNode); + const urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode); this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished); } - private _loadFolderOnDemand(node: Node, slide = true, onFinished: OnFinishOpenNode | null): void { + private loadFolderOnDemand( + node: Node, + slide = true, + onFinished: OnFinishOpenNode | null + ): void { node.is_loading = true; // eslint-disable-line @typescript-eslint/camelcase - this._loadDataFromUrl(null, node, () => { + this.doLoadDataFromUrl(null, node, () => { this._openNode(node, slide, onFinished); }); } diff --git a/src_test/test.js b/src_test/test.js deleted file mode 100644 index 1f5bef04..00000000 --- a/src_test/test.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -exports.__esModule = true; -require("./test_jqtree"); -require("./test_node_util"); -require("./test_tree"); -require("./test_util"); -QUnit.config.testTimeout = 5000; diff --git a/src_test/test.js.map b/src_test/test.js.map new file mode 100644 index 00000000..1b38dd5f --- /dev/null +++ b/src_test/test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":";;AAAA,wBAAsB;AACtB,0BAAwB;AACxB,sBAAoB;AACpB,sBAAoB;AAEpB,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC"} \ No newline at end of file diff --git a/src_test/test.ts b/src_test/test.ts index 8bdf925b..8702c350 100644 --- a/src_test/test.ts +++ b/src_test/test.ts @@ -1,6 +1,6 @@ -import "./test_jqtree"; -import "./test_node_util"; -import "./test_tree"; -import "./test_util"; +import "./testJqtree"; +import "./testNodeUtil"; +import "./testTree"; +import "./testUtil"; QUnit.config.testTimeout = 5000; diff --git a/src_test/testJqtree.js.map b/src_test/testJqtree.js.map new file mode 100644 index 00000000..d9348339 --- /dev/null +++ b/src_test/testJqtree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"testJqtree.js","sourceRoot":"","sources":["testJqtree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src_test/test_jqtree.ts b/src_test/testJqtree.ts similarity index 91% rename from src_test/test_jqtree.ts rename to src_test/testJqtree.ts index 881b02ab..f5a1ac24 100644 --- a/src_test/test_jqtree.ts +++ b/src_test/testJqtree.ts @@ -1,8 +1,15 @@ import "../src/tree.jquery"; -import { exampleData, exampleData2, formatNodes, formatTitles, isNodeOpen, isNodeClosed } from "./utils_for_test"; +import { + exampleData, + exampleData2, + formatNodes, + formatTitles, + isNodeOpen, + isNodeClosed +} from "./utilsForTest"; import { getPositionName } from "../src/node"; -import "../src/itree_widget"; +import "../src/itreeWidget"; const { module, test } = QUnit; @@ -25,23 +32,40 @@ test("create jqtree from data", (assert: Assert) => { data: exampleData }); - assert.equal($("#tree1").children().length, 1, "number of children on level 0"); + assert.equal( + $("#tree1").children().length, + 1, + "number of children on level 0" + ); assert.ok( $("#tree1") .children() .is("ul.jqtree-tree"), "first element is ul.jqtree-tree" ); - assert.equal($("#tree1 ul.jqtree-tree > li").length, 2, "number of children on level 1"); + assert.equal( + $("#tree1 ul.jqtree-tree > li").length, + 2, + "number of children on level 1" + ); assert.ok( - $("#tree1 ul.jqtree-tree li:eq(0)").is("li.jqtree-folder.jqtree-closed"), + $("#tree1 ul.jqtree-tree li:eq(0)").is( + "li.jqtree-folder.jqtree-closed" + ), "first child is li.jqtree-folder.jqtree-closed" ); assert.ok( - $("#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element > a.jqtree-toggler").is("a.jqtree-toggler.jqtree-closed"), + $( + "#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element > a.jqtree-toggler" + ).is("a.jqtree-toggler.jqtree-closed"), "button in first folder" ); - assert.equal($("#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element span.jqtree-title").text(), "node1"); + assert.equal( + $( + "#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element span.jqtree-title" + ).text(), + "node1" + ); }); const nodeWithEmptyChildren = { @@ -208,7 +232,11 @@ test("saveState", (assert: Assert) => { $tree.tree("selectNode", tree.children[1]); // node2 is selected - assert.equal(($tree.tree("getSelectedNode") as INode).name, "node2", "getSelectedNode (1)"); + assert.equal( + ($tree.tree("getSelectedNode") as INode).name, + "node2", + "getSelectedNode (1)" + ); // create tree again $tree.tree("destroy"); @@ -219,7 +247,11 @@ test("saveState", (assert: Assert) => { assert.ok(!tree2.children[1].is_open, "node2 is closed"); // node2 is selected - assert.equal(($tree.tree("getSelectedNode") as INode).name, "node2", "getSelectedNode (2)"); + assert.equal( + ($tree.tree("getSelectedNode") as INode).name, + "node2", + "getSelectedNode (2)" + ); }); test("getSelectedNode", (assert: Assert) => { @@ -240,7 +272,11 @@ test("getSelectedNode", (assert: Assert) => { $tree.tree("selectNode", node1); // node1 is selected - assert.equal(($tree.tree("getSelectedNode") as INode).name, "node1", "getSelectedNode"); + assert.equal( + ($tree.tree("getSelectedNode") as INode).name, + "node1", + "getSelectedNode" + ); }); test("toJson", (assert: Assert) => { @@ -275,13 +311,19 @@ test("loadData", (assert: Assert) => { }); // first node is 'node1' - assert.equal($tree.find("> ul > li:first .jqtree-element:first > span").text(), "node1"); + assert.equal( + $tree.find("> ul > li:first .jqtree-element:first > span").text(), + "node1" + ); // - load new data $tree.tree("loadData", exampleData2); // first node is 'main' - assert.equal($tree.find("> ul > li:first .jqtree-element:first > span").text(), "main"); + assert.equal( + $tree.find("> ul > li:first .jqtree-element:first > span").text(), + "main" + ); // - load new data under node 'child3' $tree.tree("loadData", exampleData); @@ -320,7 +362,10 @@ test("loadData", (assert: Assert) => { ); // Node 'child3' must have toggler button - assert.ok($child3.prev().is("a.jqtree-toggler"), "node 'child3' must have toggler button"); + assert.ok( + $child3.prev().is("a.jqtree-toggler"), + "node 'child3' must have toggler button" + ); // - select node 'c5' and load new data under 'child3' const c5 = $tree.tree("getNodeByName", "c5"); @@ -406,7 +451,11 @@ test("openNode and closeNode", (assert: Assert) => { assert.equal(child1.is_open, true); }); -function testOpenNodeWithCallback(slide: boolean, includeSlideParam: boolean, assert: Assert): void { +function testOpenNodeWithCallback( + slide: boolean, + includeSlideParam: boolean, + assert: Assert +): void { // setup const $tree = $("#tree1"); $tree.tree({ @@ -528,7 +577,9 @@ test("click toggler", (assert: Assert) => { selectable: true }); - const $title = $tree.find("li:eq(0)").find("> .jqtree-element > span.jqtree-title"); + const $title = $tree + .find("li:eq(0)") + .find("> .jqtree-element > span.jqtree-title"); assert.equal($title.text(), "node1"); const $toggler = $title.prev(); assert.ok($toggler.is("a.jqtree-toggler.jqtree-closed")); @@ -801,14 +852,20 @@ test("appendNode", (assert: Assert) => { const child1 = $tree.tree("getNodeByName", "child1") as INode; // Node 'child1' does not have a toggler button - assert.equal($(child1.element).find("> .jqtree-element > .jqtree-toggler").length, 0); + assert.equal( + $(child1.element).find("> .jqtree-element > .jqtree-toggler").length, + 0 + ); $tree.tree("appendNode", "child4", child1); assert.equal(formatTitles($(child1.element)), "child1 child4"); // Node 'child1' must get a toggler button - assert.equal($(child1.element).find("> .jqtree-element > .jqtree-toggler").length, 1); + assert.equal( + $(child1.element).find("> .jqtree-element > .jqtree-toggler").length, + 1 + ); }); test("prependNode", (assert: Assert) => { @@ -834,7 +891,10 @@ test("init event for local data", (assert: Assert) => { $tree.on("tree.init", () => { // Check that we can call functions in 'tree.init' event - assert.equal(($tree.tree("getNodeByName", "node2") as INode).name, "node2"); + assert.equal( + ($tree.tree("getNodeByName", "node2") as INode).name, + "node2" + ); done(); }); @@ -858,7 +918,10 @@ test("init event for ajax", (assert: Assert) => { }); $tree.on("tree.init", () => { - assert.equal(($tree.tree("getNodeByName", "node2") as INode).name, "node2"); + assert.equal( + ($tree.tree("getNodeByName", "node2") as INode).name, + "node2" + ); done(); }); @@ -929,7 +992,10 @@ test("updateNode", (assert: Assert) => { children: [{ id: 5, name: "child1-1" }] }); - assert.equal(formatTitles($tree), "node1 child1 child1-1 child2 xyz child3"); + assert.equal( + formatTitles($tree), + "node1 child1 child1-1 child2 xyz child3" + ); // remove children $tree.tree("updateNode", child1, { @@ -1164,13 +1230,22 @@ test("getNodesByProperty", (assert: Assert) => { const node2 = $tree.tree("getNodeByName", "node2") as INode; // 1. get 'node1' by property - assert.equal($tree.tree("getNodesByProperty", "intProperty", 1)[0].name, "node1"); + assert.equal( + $tree.tree("getNodesByProperty", "intProperty", 1)[0].name, + "node1" + ); // 2. get property that does not exist in any node - assert.equal($tree.tree("getNodesByProperty", "intProperty", 123).length, 0); + assert.equal( + $tree.tree("getNodesByProperty", "intProperty", 123).length, + 0 + ); // 3. get string property - assert.equal($tree.tree("getNodesByProperty", "strProperty", "1")[0].name, "node1"); + assert.equal( + $tree.tree("getNodesByProperty", "strProperty", "1")[0].name, + "node1" + ); // 4. add node with string id; search by int $tree.tree("appendNode", { @@ -1180,8 +1255,14 @@ test("getNodesByProperty", (assert: Assert) => { intProperty: 111 }); - assert.equal($tree.tree("getNodesByProperty", "intProperty", 111)[0].name, "abc"); - assert.equal($tree.tree("getNodesByProperty", "strProperty", "111")[0].name, "abc"); + assert.equal( + $tree.tree("getNodesByProperty", "intProperty", 111)[0].name, + "abc" + ); + assert.equal( + $tree.tree("getNodesByProperty", "strProperty", "111")[0].name, + "abc" + ); // 5. load subtree in node2 const subtreeData = [ @@ -1196,8 +1277,14 @@ test("getNodesByProperty", (assert: Assert) => { const t = $tree.tree("getTree"); assert.notEqual(t, null); - assert.equal($tree.tree("getNodesByProperty", "intProperty", 222)[0].name, "sub1"); - assert.equal($tree.tree("getNodesByProperty", "intProperty", 444)[0].name, "sub2"); + assert.equal( + $tree.tree("getNodesByProperty", "intProperty", 222)[0].name, + "sub1" + ); + assert.equal( + $tree.tree("getNodesByProperty", "intProperty", 444)[0].name, + "sub2" + ); }); test("dataUrl extra options", (assert: Assert) => { diff --git a/src_test/testNodeUtil.js.map b/src_test/testNodeUtil.js.map new file mode 100644 index 00000000..ec8bb31a --- /dev/null +++ b/src_test/testNodeUtil.js.map @@ -0,0 +1 @@ +{"version":3,"file":"testNodeUtil.js","sourceRoot":"","sources":["testNodeUtil.ts"],"names":[],"mappings":";;AAAQ,IAAA,qBAAM,EAAE,iBAAI,CAAW;AAE/B,oCAAqE;AAErE,MAAM,CAAC,WAAW,CAAC,CAAC;AAEpB,IAAI,CAAC,iBAAiB,EAAE,UAAC,MAAc;IACnC,MAAM,CAAC,KAAK,CAAC,sBAAe,CAAC,eAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,sBAAe,CAAC,eAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CAAC,sBAAe,CAAC,eAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,sBAAe,CAAC,eAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,aAAa,EAAE,UAAC,MAAc;IAC/B,MAAM,CAAC,KAAK,CAAC,kBAAW,CAAC,QAAQ,CAAC,EAAE,eAAQ,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/src_test/test_node_util.ts b/src_test/testNodeUtil.ts similarity index 100% rename from src_test/test_node_util.ts rename to src_test/testNodeUtil.ts diff --git a/src_test/testTree.js.map b/src_test/testTree.js.map new file mode 100644 index 00000000..1062d333 --- /dev/null +++ b/src_test/testTree.js.map @@ -0,0 +1 @@ +{"version":3,"file":"testTree.js","sourceRoot":"","sources":["testTree.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src_test/test_tree.ts b/src_test/testTree.ts similarity index 91% rename from src_test/test_tree.ts rename to src_test/testTree.ts index 6147ff04..b43c9061 100644 --- a/src_test/test_tree.ts +++ b/src_test/testTree.ts @@ -1,6 +1,11 @@ const { module, test } = QUnit; -import { exampleData, formatNodes, doGetNodeByName, doGetNodeById } from "./utils_for_test"; +import { + exampleData, + formatNodes, + doGetNodeByName, + doGetNodeById +} from "./utilsForTest"; import { Node, Position } from "../src/node"; module("Tree"); @@ -31,9 +36,21 @@ test("constructor", (assert: Assert) => { test("create tree from data", (assert: Assert) => { function checkData(tree: Node): void { - assert.equal(formatNodes(tree.children), "node1 node2", "nodes on level 1"); - assert.equal(formatNodes(tree.children[0].children), "child1 child2", "children of node1"); - assert.equal(formatNodes(tree.children[1].children), "child3", "children of node2"); + assert.equal( + formatNodes(tree.children), + "node1 node2", + "nodes on level 1" + ); + assert.equal( + formatNodes(tree.children[0].children), + "child1 child2", + "children of node1" + ); + assert.equal( + formatNodes(tree.children[1].children), + "child3", + "children of node2" + ); assert.equal(tree.children[0].id, 123, "id"); } @@ -158,7 +175,11 @@ test("iterate", (assert: Assert) => { return true; }); - assert.equal(formatNodes(nodes), "node1 child1 child2 node2 child3", "all nodes"); + assert.equal( + formatNodes(nodes), + "node1 child1 child2 node2 child3", + "all nodes" + ); // iterate over nodes on first level const nodes2: INode[] = []; @@ -181,7 +202,10 @@ test("iterate", (assert: Assert) => { return true; }); - assert.equal(nodes3.join(","), "node1 0,child1 1,child2 1,node2 0,child3 1,child4 2"); + assert.equal( + nodes3.join(","), + "node1 0,child1 1,child2 1,node2 0,child3 1,child4 2" + ); }); test("moveNode", (assert: Assert) => { @@ -213,7 +237,11 @@ test("moveNode", (assert: Assert) => { ---child3 child2 */ - assert.equal(formatNodes(tree.children), "node1 node2 child2", "tree nodes at first level"); + assert.equal( + formatNodes(tree.children), + "node1 node2 child2", + "tree nodes at first level" + ); assert.equal(formatNodes(node1.children), "child1", "node1 children"); // move child1 inside node2 @@ -227,7 +255,11 @@ test("moveNode", (assert: Assert) => { ---child3 child2 */ - assert.equal(formatNodes(node2.children), "child1 child3", "node2 children"); + assert.equal( + formatNodes(node2.children), + "child1 child3", + "node2 children" + ); assert.equal(formatNodes(node1.children), "", "node1 has no children"); // move child2 before child1 @@ -240,8 +272,16 @@ test("moveNode", (assert: Assert) => { ---child1 ---child3 */ - assert.equal(formatNodes(node2.children), "child2 child1 child3", "node2 children"); - assert.equal(formatNodes(tree.children), "node1 node2", "tree nodes at first level"); + assert.equal( + formatNodes(node2.children), + "child2 child1 child3", + "node2 children" + ); + assert.equal( + formatNodes(tree.children), + "node1 node2", + "tree nodes at first level" + ); }); test("initFromData", (assert: Assert) => { @@ -342,7 +382,10 @@ test("addAfter", (assert: Assert) => { const nodeC = doGetNodeByName(tree, "node_c"); assert.equal(nodeC.id, 789); - assert.equal(formatNodes(tree.children), "node1 node_a node2 node_b node_c"); + assert.equal( + formatNodes(tree.children), + "node1 node_a node2 node_b node_c" + ); // - Add after root node; this is not possible assert.equal(tree.addAfter("node_x"), null); @@ -545,7 +588,10 @@ test("getPreviousSibling", (assert: Assert) => { tree.loadFromData(exampleData); // - getPreviousSibling - const previousSibling = doGetNodeByName(tree, "child2").getPreviousSibling(); + const previousSibling = doGetNodeByName( + tree, + "child2" + ).getPreviousSibling(); if (!previousSibling) { assert.ok(false, "Previous sibling not found"); diff --git a/src_test/testUtil.js.map b/src_test/testUtil.js.map new file mode 100644 index 00000000..c5ac52e0 --- /dev/null +++ b/src_test/testUtil.js.map @@ -0,0 +1 @@ +{"version":3,"file":"testUtil.js","sourceRoot":"","sources":["testUtil.ts"],"names":[],"mappings":";;AAAQ,IAAA,qBAAM,EAAE,iBAAI,CAAW;AAE/B,oCAA2E;AAE3E,MAAM,CAAC,MAAM,CAAC,CAAC;AAEf,IAAI,CAAC,OAAO,EAAE,UAAC,MAAc;IACzB,MAAM,CAAC,EAAE,CAAC,YAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,YAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,YAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,CAAC,KAAK,CAAC,YAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,YAAY,EAAE,UAAC,MAAc;IAC9B,MAAM,CAAC,EAAE,CAAC,iBAAU,CAAC,YAAK,CAAC,CAAC,CAAC;IAC7B,MAAM,CAAC,KAAK,CAAC,iBAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,YAAY,EAAE,UAAC,MAAc;IAC9B,MAAM,CAAC,KAAK,CAAC,iBAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,iBAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,iBAAU,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,eAAe,EAAE,UAAC,MAAc;IACjC,MAAM,CAAC,KAAK,CAAC,oBAAa,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,oBAAa,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,oBAAa,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,oBAAa,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/src_test/test_util.ts b/src_test/testUtil.ts similarity index 100% rename from src_test/test_util.ts rename to src_test/testUtil.ts diff --git a/src_test/test_jqtree.js b/src_test/test_jqtree.js deleted file mode 100644 index 244e5817..00000000 --- a/src_test/test_jqtree.js +++ /dev/null @@ -1,992 +0,0 @@ -"use strict"; -exports.__esModule = true; -require("../src/tree.jquery"); -var utils_for_test_1 = require("./utils_for_test"); -var node_1 = require("../src/node"); -require("../src/itree_widget"); -var module = QUnit.module, test = QUnit.test; -module("jqtree", { - beforeEach: function () { - $("body").append('
    '); - }, - afterEach: function () { - var $tree = $("#tree1"); - $tree.tree("destroy"); - $tree.remove(); - $.mockjax.clear(); - } -}); -test("create jqtree from data", function (assert) { - $("#tree1").tree({ - data: utils_for_test_1.exampleData - }); - assert.equal($("#tree1").children().length, 1, "number of children on level 0"); - assert.ok($("#tree1") - .children() - .is("ul.jqtree-tree"), "first element is ul.jqtree-tree"); - assert.equal($("#tree1 ul.jqtree-tree > li").length, 2, "number of children on level 1"); - assert.ok($("#tree1 ul.jqtree-tree li:eq(0)").is("li.jqtree-folder.jqtree-closed"), "first child is li.jqtree-folder.jqtree-closed"); - assert.ok($("#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element > a.jqtree-toggler").is("a.jqtree-toggler.jqtree-closed"), "button in first folder"); - assert.equal($("#tree1 ul.jqtree-tree li:eq(0) > .jqtree-element span.jqtree-title").text(), "node1"); -}); -var nodeWithEmptyChildren = { - id: 1, - name: "abc", - children: [] -}; -test("node with empty children is not a folder (with showEmptyFolder false)", function (assert) { - $("#tree1").tree({ - data: [nodeWithEmptyChildren], - showEmptyFolder: false - }); - assert.equal($(".jqtree-title").text(), "abc"); - assert.equal($(".jqtree-folder").length, 0); -}); -test("node with empty children is a folder (with showEmptyFolder true)", function (assert) { - $("#tree1").tree({ - data: [nodeWithEmptyChildren], - showEmptyFolder: true - }); - assert.equal($(".jqtree-title").text(), "abc"); - assert.equal($(".jqtree-folder").length, 1); -}); -test("node without children property is not a folder (with showEmptyFolder true)", function (assert) { - $("#tree1").tree({ - data: [{ id: 1, name: "abc" }], - showEmptyFolder: true - }); - assert.equal($(".jqtree-title").text(), "abc"); - assert.equal($(".jqtree-folder").length, 0); -}); -test("toggle", function (assert) { - // setup - var done = assert.async(); - // create tree - var $tree = $("#tree1"); - var $node1; // eslint-disable-line prefer-const - var node1; // eslint-disable-line prefer-const - $tree.tree({ - data: utils_for_test_1.exampleData - }); - $tree.on("tree.open", function () { - assert.ok(!utils_for_test_1.isNodeClosed($node1), "node1 is open"); - // 2. close node1 - $tree.tree("toggle", node1); - }); - $tree.on("tree.close", function () { - assert.ok(utils_for_test_1.isNodeClosed($node1), "node1 is closed"); - done(); - }); - var tree = $tree.tree("getTree"); - node1 = tree.children[0]; - $node1 = $tree.find("ul.jqtree-tree li:eq(0)"); - // node1 is initially closed - assert.ok(utils_for_test_1.isNodeClosed($node1), "node1 is closed"); - // 1. open node1 - $tree.tree("toggle", node1); -}); -test("click event", function (assert) { - var selectCount = 0; - // create tree - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - selectable: true - }); - var $node1 = $tree.find("ul.jqtree-tree li:first"); - var $textSpan = $node1.find("span:first"); - $tree.on("tree.click", function (e) { - assert.equal(e.node.name, "node1"); - }); - var done = assert.async(); - $tree.on("tree.select", function (e) { - selectCount += 1; - if (selectCount === 1) { - assert.equal(e.node.name, "node1"); - var selectedNode = $tree.tree("getSelectedNode"); - assert.ok(selectedNode); - if (selectedNode) { - assert.equal(selectedNode.name, "node1"); - } - // deselect - $textSpan.click(); - } - else { - assert.equal(e.node, null); - assert.equal(e.previous_node.name, "node1"); - assert.equal($tree.tree("getSelectedNode"), false); - done(); - } - }); - // click on node1 - $textSpan.click(); -}); -test("saveState", function (assert) { - var $tree = $("#tree1"); - var savedState; - function setState(state) { - savedState = state; - } - function getState() { - return savedState; - } - function createTree() { - $tree.tree({ - data: utils_for_test_1.exampleData, - saveState: true, - onSetStateFromStorage: setState, - onGetStateFromStorage: getState, - selectable: true - }); - } - // create tree - createTree(); - // nodes are initially closed - var tree = $tree.tree("getTree"); - tree.iterate(function (node) { - assert.ok(!node.is_open, "jqtree-closed"); - return true; - }); - // open node1 - $tree.tree("toggle", tree.children[0]); - // node1 is open - assert.ok(tree.children[0].is_open, "node1 is_open"); - // select node2 - $tree.tree("selectNode", tree.children[1]); - // node2 is selected - assert.equal($tree.tree("getSelectedNode").name, "node2", "getSelectedNode (1)"); - // create tree again - $tree.tree("destroy"); - createTree(); - var tree2 = $tree.tree("getTree"); - assert.ok(tree2.children[0].is_open, "node1 is_open"); - assert.ok(!tree2.children[1].is_open, "node2 is closed"); - // node2 is selected - assert.equal($tree.tree("getSelectedNode").name, "node2", "getSelectedNode (2)"); -}); -test("getSelectedNode", function (assert) { - var $tree = $("#tree1"); - // create tree - $tree.tree({ - data: utils_for_test_1.exampleData, - selectable: true - }); - // there is no node selected - assert.equal($tree.tree("getSelectedNode"), false, "getSelectedNode"); - // select node1 - var tree = $tree.tree("getTree"); - var node1 = tree.children[0]; - $tree.tree("selectNode", node1); - // node1 is selected - assert.equal($tree.tree("getSelectedNode").name, "node1", "getSelectedNode"); -}); -test("toJson", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - // 1. call toJson - assert.equal($tree.tree("toJson"), '[{"name":"node1","id":123,"intProperty":1,"strProperty":"1",' + - '"children":[{"name":"child1","id":125,"intProperty":2},{"name":' + - '"child2","id":126}]},{"name":"node2","id":124,"intProperty":3,' + - '"strProperty":"3","children":[{"name":"child3","id":127}]}]'); - // Check that properties 'children', 'parent' and 'element' still exist. - var tree = $tree.tree("getTree"); - assert.equal(tree.children.length, 2); - assert.ok(tree.children[0].parent !== undefined, "parent"); - assert.ok($(tree.children[0].element).is("li"), "element"); -}); -test("loadData", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - autoOpen: true - }); - // first node is 'node1' - assert.equal($tree.find("> ul > li:first .jqtree-element:first > span").text(), "node1"); - // - load new data - $tree.tree("loadData", utils_for_test_1.exampleData2); - // first node is 'main' - assert.equal($tree.find("> ul > li:first .jqtree-element:first > span").text(), "main"); - // - load new data under node 'child3' - $tree.tree("loadData", utils_for_test_1.exampleData); - var child3 = $tree.tree("getNodeByName", "child3"); - var data = [ - { name: "c4", id: 200 }, - { - name: "c5", - id: 201, - children: [{ name: "c6", id: 202 }] - } - ]; - $tree.tree("loadData", data, child3); - // first node in html is still 'node1' - assert.equal($tree - .find("li:eq(0)") - .find(".jqtree-element:eq(0) span.jqtree-title") - .text(), "node1"); - // Node 'child3' now has a children 'c4' and 'c5' - var $child3 = $tree.find("span:contains(child3)"); - var $li = $child3.closest("li"); - assert.equal($li - .children("ul") - .children("li:eq(0)") - .find(".jqtree-element span.jqtree-title") - .text(), "c4"); - // Node 'child3' must have toggler button - assert.ok($child3.prev().is("a.jqtree-toggler"), "node 'child3' must have toggler button"); - // - select node 'c5' and load new data under 'child3' - var c5 = $tree.tree("getNodeByName", "c5"); - $tree.tree("selectNode", c5); - var selectedNode = $tree.tree("getSelectedNode"); - assert.ok(selectedNode); - if (selectedNode) { - assert.equal(selectedNode.name, "c5"); - } - var data2 = [{ name: "c7" }, { name: "c8" }]; - $tree.tree("loadData", data2, child3); - // c5 must be deselected - assert.equal($tree.tree("getSelectedNode"), false); - // - select c7; load new data under child3; note that c7 has no id - $tree.tree("selectNode", $tree.tree("getNodeByName", "c7")); - selectedNode = $tree.tree("getSelectedNode"); - assert.ok(selectedNode); - if (selectedNode) { - assert.equal(selectedNode.name, "c7"); - } - $tree.tree("loadData", ["c9"], child3); - assert.equal($tree.tree("getSelectedNode"), false); - // - select c9 (which has no id); load new nodes under child2 - $tree.tree("selectNode", $tree.tree("getNodeByName", "c9")); - var child2 = $tree.tree("getNodeByName", "child2"); - $tree.tree("loadData", ["c10"], child2); - selectedNode = $tree.tree("getSelectedNode"); - assert.ok(selectedNode); - if (selectedNode) { - assert.equal(selectedNode.name, "c9"); - } -}); -test("openNode and closeNode", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - var node2 = $tree.tree("getNodeByName", "node2"); - assert.equal(node2.name, "node2"); - assert.equal(node2.is_open, undefined); - // 1. open node2 - $tree.tree("openNode", node2, false); - assert.equal(node2.is_open, true); - assert.equal(utils_for_test_1.isNodeOpen($(node2.element)), true); - // 2. close node2 - $tree.tree("closeNode", node2, false); - assert.equal(node2.is_open, false); - assert.equal(utils_for_test_1.isNodeClosed($(node2.element)), true); - // 3. open child1 - var node1 = $tree.tree("getNodeByName", "node1"); - var child1 = $tree.tree("getNodeByName", "child1"); - // add a child to child1 so it is a folder - $tree.tree("appendNode", "child1a", child1); - // node1 is initialy closed - assert.equal(node1.is_open, undefined); - // open child1 - $tree.tree("openNode", child1, false); - // node1 and child1 are now open1 - assert.equal(node1.is_open, true); - assert.equal(child1.is_open, true); -}); -function testOpenNodeWithCallback(slide, includeSlideParam, assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - var node2 = $tree.tree("getNodeByName", "node2"); - // open node2 - var done = assert.async(); - function handleOpenNode(node) { - assert.equal(node.name, "node2"); - assert.ok(node.is_open); - done(); - } - if (includeSlideParam) { - $tree.tree("openNode", node2, slide, handleOpenNode); - } - else { - $tree.tree("openNode", node2, handleOpenNode); - } -} -test("openNode with callback with slide true", function (assert) { - testOpenNodeWithCallback(true, true, assert); -}); -test("openNode with callback with slide false", function (assert) { - testOpenNodeWithCallback(false, true, assert); -}); -test("openNode with callback without slide param", function (assert) { - testOpenNodeWithCallback(false, false, assert); -}); -test("selectNode", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - selectable: true - }); - var node1 = $tree.tree("getTree").children[0]; - var node2 = $tree.tree("getTree").children[1]; - var child3 = node2.children[0]; - assert.equal(child3.name, "child3"); - assert.equal(node1.is_open, undefined); - assert.equal(node2.is_open, undefined); - assert.equal(child3.is_open, undefined); - // -- select node 'child3', which is a child of 'node2'; must_open_parents = true - $tree.tree("selectNode", child3); - assert.equal($tree.tree("getSelectedNode").name, "child3"); - assert.equal(node1.is_open, undefined); - assert.equal(node2.is_open, true); - assert.equal(child3.is_open, undefined); - // -- select node 'node1' - $tree.tree("selectNode", node1); - assert.equal($tree.tree("getSelectedNode").name, "node1"); - // -- is 'node1' selected? - assert.equal($tree.tree("isNodeSelected", node1), true); - // -- deselect - $tree.tree("selectNode", null); - assert.equal($tree.tree("getSelectedNode"), false); - // -- is 'node1' selected? - assert.equal($tree.tree("isNodeSelected", node1), false); -}); -test("selectNode when another node is selected", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - selectable: true - }); - var node1 = $tree.tree("getTree").children[0]; - var node2 = $tree.tree("getTree").children[1]; - // -- select node 'node2' - $tree.tree("selectNode", node2); - assert.equal($tree.tree("getSelectedNode").name, "node2"); - // -- setting event - // -- is node 'node2' named 'deselected_node' in object's attributes? - var isSelectEventFired = false; - $tree.on("tree.select", function (e) { - assert.equal(e.deselected_node, node2); - isSelectEventFired = true; - }); - // -- select node 'node1'; node 'node2' is selected before it - $tree.tree("selectNode", node1); - assert.equal($tree.tree("getSelectedNode").name, "node1"); - assert.equal($tree.tree("isNodeSelected", node1), true); - // event was fired - assert.ok(isSelectEventFired); -}); -test("click toggler", function (assert) { - // setup - var done = assert.async(); - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - selectable: true - }); - var $title = $tree.find("li:eq(0)").find("> .jqtree-element > span.jqtree-title"); - assert.equal($title.text(), "node1"); - var $toggler = $title.prev(); - assert.ok($toggler.is("a.jqtree-toggler.jqtree-closed")); - $tree.on("tree.open", function (e) { - // 2. handle 'open' event - assert.equal(e.node.name, "node1"); - // 3. click toggler again - $toggler.click(); - }); - $tree.on("tree.close", function (e) { - assert.equal(e.node.name, "node1"); - done(); - }); - // 1. click toggler of 'node1' - $toggler.click(); -}); -test("getNodeById", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - var node2 = $tree.tree("getNodeByName", "node2"); - // 1. get 'node2' by id - assert.equal($tree.tree("getNodeById", 124).name, "node2"); - // 2. get id that does not exist - assert.equal($tree.tree("getNodeById", 333), null); - // 3. get id by string - assert.equal($tree.tree("getNodeById", "124").name, "node2"); - // 4. add node with string id; search by int - $tree.tree("appendNode", { - name: "abc", - id: "234" - }); - assert.equal($tree.tree("getNodeById", 234).name, "abc"); - assert.equal($tree.tree("getNodeById", "234").name, "abc"); - // 5. load subtree in node2 - var subtreeData = [ - { - name: "sub1", - id: 200, - children: [{ name: "sub2", id: 201 }] - } - ]; - $tree.tree("loadData", subtreeData, node2); - var t = $tree.tree("getTree"); - assert.notEqual(t, null); - assert.equal($tree.tree("getNodeById", 200).name, "sub1"); - assert.equal($tree.tree("getNodeById", 201).name, "sub2"); -}); -test("autoOpen", function (assert) { - var $tree = $("#tree1"); - function formatOpenFolders() { - var openNodes = []; - $tree.find("li").each(function () { - var $li = $(this); - if ($li.is(".jqtree-folder") && !$li.is(".jqtree-closed")) { - var name_1 = $li - .children(".jqtree-element") - .find("span") - .text(); - openNodes.push(name_1); - } - }); - return openNodes.join(";"); - } - /* - -l1n1 (level 0) - ----l2n1 (1) - ----l2n2 (1) - -------l3n1 (2) - ----------l4n1 (3) - -l1n2 - */ - var data = [ - { - name: "l1n1", - children: [ - "l2n1", - { - name: "l2n2", - children: [ - { - name: "l3n1", - children: ["l4n1"] - } - ] - } - ] - }, - "l1n2" - ]; - // 1. autoOpen is false - $tree.tree({ - data: data, - autoOpen: false - }); - assert.equal(formatOpenFolders(), ""); - $tree.tree("destroy"); - // 2. autoOpen is true - $tree.tree({ - data: data, - autoOpen: true - }); - assert.equal(formatOpenFolders(), "l1n1;l2n2;l3n1"); - $tree.tree("destroy"); - // 3. autoOpen level 1 - $tree.tree({ - data: data, - autoOpen: 1 - }); - assert.equal(formatOpenFolders(), "l1n1;l2n2"); -}); -test("onCreateLi", function (assert) { - // 1. init tree with onCreateLi - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - onCreateLi: function (node, $li) { - var $span = $li.children(".jqtree-element").find("span"); - $span.html("_" + node.name + "_"); - } - }); - assert.equal($tree.find("span:eq(0)").text(), "_node1_"); -}); -test("save state", function (assert) { - // Remove state from localstorage - if (typeof localStorage !== "undefined") { - localStorage.setItem("my_tree", ""); - } - // 1. init tree - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - selectable: true, - saveState: "my_tree" - }); - var tree = $tree.tree("getTree"); - assert.equal($tree.tree("getSelectedNode"), false); - // 2. select node -> state is saved - $tree.tree("selectNode", tree.children[0]); - assert.equal($tree.tree("getSelectedNode").name, "node1"); - // 3. init tree again - $tree.tree("destroy"); - $tree.tree({ - data: utils_for_test_1.exampleData, - selectable: true, - saveState: "my_tree" - }); - assert.equal($tree.tree("getSelectedNode").name, "node1"); -}); -test("generate hit areas", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - // 1. get hit areas - var node = $tree.tree("getNodeById", 123); - var hitAreas = $tree.tree("testGenerateHitAreas", node); - var strings = $.map(hitAreas, function (hitArea) { - var positionName = node_1.getPositionName(hitArea.position); - return hitArea.node.name + " " + positionName; - }); - assert.equal(strings.join(";"), "node1 none;node2 inside;node2 after"); -}); -test("removeNode", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - selectable: true - }); - // 1. Remove selected node; node is 'child1' - var child1 = $tree.tree("getNodeByName", "child1"); - $tree.tree("selectNode", child1); - assert.equal($tree.tree("getSelectedNode").name, "child1"); - $tree.tree("removeNode", child1); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child2 node2 child3"); - // getSelectedNode must now return false - assert.equal($tree.tree("getSelectedNode"), false); - // 2. No node is selected; remove child3 - $tree.tree("loadData", utils_for_test_1.exampleData); - var child3 = $tree.tree("getNodeByName", "child3"); - $tree.tree("removeNode", child3); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 node2"); - assert.equal($tree.tree("getSelectedNode"), false); - // 3. Remove parent of selected node - $tree.tree("loadData", utils_for_test_1.exampleData); - var child1a = $tree.tree("getNodeByName", "child1"); - var node1 = $tree.tree("getNodeByName", "node1"); - $tree.tree("selectNode", child1a); - $tree.tree("removeNode", node1); - // node is unselected - assert.equal($tree.tree("getSelectedNode"), false); - // 4. Remove unselected node without an id - $tree.tree("loadData", utils_for_test_1.exampleData2); - var c1 = $tree.tree("getNodeByName", "c1"); - $tree.tree("removeNode", c1); - assert.equal(utils_for_test_1.formatTitles($tree), "main c2"); -}); -test("appendNode", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - var node1 = $tree.tree("getNodeByName", "node1"); - // 1. Add child3 to node1 - $tree.tree("appendNode", "child3", node1); - assert.equal(utils_for_test_1.formatTitles($(node1.element)), "node1 child1 child2 child3"); - // 2. Add child4 to child1 - var child1 = $tree.tree("getNodeByName", "child1"); - // Node 'child1' does not have a toggler button - assert.equal($(child1.element).find("> .jqtree-element > .jqtree-toggler").length, 0); - $tree.tree("appendNode", "child4", child1); - assert.equal(utils_for_test_1.formatTitles($(child1.element)), "child1 child4"); - // Node 'child1' must get a toggler button - assert.equal($(child1.element).find("> .jqtree-element > .jqtree-toggler").length, 1); -}); -test("prependNode", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - var node1 = $tree.tree("getNodeByName", "node1"); - // 1. Prepend child0 to node1 - $tree.tree("prependNode", "child0", node1); - assert.equal(utils_for_test_1.formatTitles($(node1.element)), "node1 child0 child1 child2"); -}); -test("init event for local data", function (assert) { - // setup - var done = assert.async(); - var $tree = $("#tree1"); - $tree.on("tree.init", function () { - // Check that we can call functions in 'tree.init' event - assert.equal($tree.tree("getNodeByName", "node2").name, "node2"); - done(); - }); - // init tree - $tree.tree({ - data: utils_for_test_1.exampleData - }); -}); -test("init event for ajax", function (assert) { - // setup - var done = assert.async(); - var $tree = $("#tree1"); - $.mockjax({ - url: "/tree/", - responseText: utils_for_test_1.exampleData, - logging: false - }); - $tree.on("tree.init", function () { - assert.equal($tree.tree("getNodeByName", "node2").name, "node2"); - done(); - }); - // init tree - $tree.tree({ - dataUrl: "/tree/" - }); -}); -test("updateNode", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 node2 child3"); - // -- update name - var node2 = $tree.tree("getNodeByName", "node2"); - $tree.tree("updateNode", node2, "CHANGED"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 CHANGED child3"); - assert.equal(node2.name, "CHANGED"); - // -- update data - $tree.tree("updateNode", node2, { - name: "xyz", - tag1: "abc" - }); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 xyz child3"); - assert.equal(node2.name, "xyz"); - assert.equal(node2.tag1, "abc"); - // - update id - assert.equal(node2.id, 124); - $tree.tree("updateNode", node2, { id: 555 }); - assert.equal(node2.id, 555); - assert.equal(node2.name, "xyz"); - // get node by id - var node555 = $tree.tree("getNodeById", 555); - assert.equal(node555.name, "xyz"); - var node124 = $tree.tree("getNodeById", 124); - assert.equal(node124, undefined); - // update child1 - var child1 = $tree.tree("getNodeByName", "child1"); - $tree.tree("updateNode", child1, "child1a"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1a child2 xyz child3"); - // select child1 - $tree.tree("selectNode", child1); - $tree.tree("updateNode", child1, "child1b"); - assert.ok($(child1.element).hasClass("jqtree-selected")); - // add children to child1 - $tree.tree("updateNode", child1, { - id: child1.id, - name: "child1", - children: [{ id: 5, name: "child1-1" }] - }); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child1-1 child2 xyz child3"); - // remove children - $tree.tree("updateNode", child1, { - id: child1.id, - name: "child1", - children: [] - }); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 xyz child3"); -}); -test("moveNode", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); - var child1 = $tree.tree("getNodeByName", "child1"); - var child2 = $tree.tree("getNodeByName", "child2"); - var node1 = $tree.tree("getNodeByName", "node1"); - var node2 = $tree.tree("getNodeByName", "node2"); - // -- Move child1 after node2 - $tree.tree("moveNode", child1, node2, "after"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child2 node2 child3 child1"); - // -- Check that illegal moves are skipped - $tree.tree("moveNode", node1, child2, "inside"); -}); -test("load on demand", function (assert) { - // setup - var done = assert.async(); - var $tree = $("#tree1"); - $tree.tree({ - data: [ - { - id: 1, - name: "node1", - load_on_demand: true // eslint-disable-line @typescript-eslint/camelcase - } - ], - dataUrl: "/tree/" - }); - function handleResponse(options) { - assert.equal(options.url, "/tree/", "2"); - assert.deepEqual(options.data, { node: 1 }, "3"); - this.responseText = [ - { - id: 2, - name: "child1" - } - ]; - } - $.mockjax({ - url: "*", - response: handleResponse, - logging: false - }); - // -- open node - function handleOpenNode(node) { - assert.equal(node.name, "node1"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1", "4"); - done(); - } - var node1 = $tree.tree("getNodeByName", "node1"); - assert.equal(utils_for_test_1.formatTitles($tree), "node1", "1"); - $tree.tree("openNode", node1, handleOpenNode); -}); -test("addNodeAfter", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); - var node1 = $tree.tree("getNodeByName", "node1"); - // -- add node after node1 - $tree.tree("addNodeAfter", "node3", node1); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 node3 node2 child3"); -}); -test("addNodeBefore", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); - var node1 = $tree.tree("getNodeByName", "node1"); - // -- add node before node1 - $tree.tree("addNodeBefore", "node3", node1); - assert.equal(utils_for_test_1.formatTitles($tree), "node3 node1 child1 child2 node2 child3"); -}); -test("addParentNode", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); - var child3 = $tree.tree("getNodeByName", "child3"); - // -- add parent to child3 - $tree.tree("addParentNode", "node3", child3); - assert.equal(utils_for_test_1.formatTitles($tree), "node1 child1 child2 node2 node3 child3"); -}); -test("mouse events", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData, - dragAndDrop: true, - autoOpen: true - }); - $tree.tree("setMouseDelay", 0); - function getTitleElement(nodeName) { - var node = $tree.tree("getNodeByName", nodeName); - var $el = $(node.element); - return $($el.find(".jqtree-title")); - } - var $node1 = getTitleElement("node1"); - var $child3 = getTitleElement("child3"); - // -- Move node1 inside child3 - // 1: trigger mousedown event on node1 - var node1Offset = $node1.offset() || { left: 0, top: 0 }; - $node1.trigger($.Event("mousedown", { - which: 1, - pageX: node1Offset.left, - pageY: node1Offset.top - })); - // 2: trigger mouse move to child3 - var child3Offset = $child3.offset() || { left: 0, top: 0 }; - $tree.trigger($.Event("mousemove", { - pageX: child3Offset.left, - pageY: child3Offset.top - })); - $tree.trigger("mouseup"); - assert.equal(utils_for_test_1.formatTitles($tree), "node2 child3 node1 child1 child2"); -}); -test("multiple select", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ data: utils_for_test_1.exampleData }); - var child1 = $tree.tree("getNodeByName", "child1"); - var child2 = $tree.tree("getNodeByName", "child2"); - // -- add nodes to selection - // todo: more nodes as parameters? - // todo: rename to 'selection.add' or 'selection' 'add'? - $tree.tree("addToSelection", child1); - $tree.tree("addToSelection", child2); - // -- get selected nodes - var selectedNodes = $tree.tree("getSelectedNodes"); - assert.equal(utils_for_test_1.formatNodes(selectedNodes), "child1 child2"); -}); -test("keyboard", function (assert) { - // setup - var $tree = $("#tree1"); - function keyDown(key) { - $tree.trigger($.Event("keydown", { which: key })); - } - $tree.tree({ data: utils_for_test_1.exampleData }); - var node1 = $tree.tree("getNodeByName", "node1"); - // select node1 - $tree.tree("selectNode", node1); - assert.equal(node1.is_open, undefined); - // - move down; -> node2 - keyDown(40); - assert.equal($tree.tree("getSelectedNode").name, "node2"); - // - move up; -> back to node1 - keyDown(38); - assert.equal($tree.tree("getSelectedNode").name, "node1"); - // - move right; open node1 - keyDown(39); - assert.equal(node1.is_open, true); - assert.equal($tree.tree("getSelectedNode").name, "node1"); - // - down -> child1 - keyDown(40); - assert.equal($tree.tree("getSelectedNode").name, "child1"); - // - up -> node1 - keyDown(38); - assert.equal($tree.tree("getSelectedNode").name, "node1"); - // - left -> close - keyDown(37); - assert.equal(node1.is_open, false); - assert.equal($tree.tree("getSelectedNode").name, "node1"); -}); -test("getNodesByProperty", function (assert) { - // setup - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - var node2 = $tree.tree("getNodeByName", "node2"); - // 1. get 'node1' by property - assert.equal($tree.tree("getNodesByProperty", "intProperty", 1)[0].name, "node1"); - // 2. get property that does not exist in any node - assert.equal($tree.tree("getNodesByProperty", "intProperty", 123).length, 0); - // 3. get string property - assert.equal($tree.tree("getNodesByProperty", "strProperty", "1")[0].name, "node1"); - // 4. add node with string id; search by int - $tree.tree("appendNode", { - name: "abc", - id: "234", - strProperty: "111", - intProperty: 111 - }); - assert.equal($tree.tree("getNodesByProperty", "intProperty", 111)[0].name, "abc"); - assert.equal($tree.tree("getNodesByProperty", "strProperty", "111")[0].name, "abc"); - // 5. load subtree in node2 - var subtreeData = [ - { - name: "sub1", - id: 200, - intProperty: 222, - children: [{ name: "sub2", id: 201, intProperty: 444 }] - } - ]; - $tree.tree("loadData", subtreeData, node2); - var t = $tree.tree("getTree"); - assert.notEqual(t, null); - assert.equal($tree.tree("getNodesByProperty", "intProperty", 222)[0].name, "sub1"); - assert.equal($tree.tree("getNodesByProperty", "intProperty", 444)[0].name, "sub2"); -}); -test("dataUrl extra options", function (assert) { - var done = assert.async(); - var $tree = $("#tree1"); - $.mockjax({ - url: "*", - response: function (options) { - // 2. handle ajax request - // expect 'headers' option - assert.equal(options.url, "/tree2/"); - assert.deepEqual(options.headers, { abc: "def" }); - done(); - }, - logging: false - }); - // 1. init tree - // dataUrl contains 'headers' option - $tree.tree({ - dataUrl: { - url: "/tree2/", - headers: { abc: "def" } - } - }); -}); -test("dataUrl is function", function (assert) { - var done = assert.async(); - var $tree = $("#tree1"); - $.mockjax({ - url: "*", - response: function (options) { - // 2. handle ajax request - // expect 'headers' option - assert.equal(options.url, "/tree3/"); - assert.deepEqual(options.headers, { abc: "def" }); - done(); - }, - logging: false - }); - // 1. init tree - // dataUrl is a function - $tree.tree({ - dataUrl: function () { - return { - url: "/tree3/", - headers: { abc: "def" } - }; - } - }); -}); -test("getNodeByHtmlElement", function (assert) { - var $tree = $("#tree1"); - $tree.tree({ - data: utils_for_test_1.exampleData - }); - var $el = $(".jqtree-title"); - // Get node for jquery element - var node = $tree.tree("getNodeByHtmlElement", $el); - assert.ok(node); - if (node) { - assert.equal(node.name, "node1"); - } - // Same for html element - var node2 = $tree.tree("getNodeByHtmlElement", $el[0]); - assert.ok(node2); - if (node2) { - assert.equal(node2.name, "node1"); - } -}); -test("onLoadFailed", function (assert) { - $.mockjax({ - url: "/tree/", - status: 500, - responseText: "test error", - logging: false - }); - var done = assert.async(); - function handleLoadFailed(e) { - assert.equal(e.responseText, "test error"); - done(); - } - var $tree = $("#tree1"); - $tree.tree({ - dataUrl: "/tree/", - onLoadFailed: handleLoadFailed - }); -}); diff --git a/src_test/test_node_util.js b/src_test/test_node_util.js deleted file mode 100644 index 0e766f52..00000000 --- a/src_test/test_node_util.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -exports.__esModule = true; -var module = QUnit.module, test = QUnit.test; -var node_1 = require("../src/node"); -module("node_util"); -test("getPositionName", function (assert) { - assert.equal(node_1.getPositionName(node_1.Position.Before), "before"); - assert.equal(node_1.getPositionName(node_1.Position.After), "after"); - assert.equal(node_1.getPositionName(node_1.Position.Inside), "inside"); - assert.equal(node_1.getPositionName(node_1.Position.None), "none"); -}); -test("getPosition", function (assert) { - assert.equal(node_1.getPosition("inside"), node_1.Position.Inside); -}); diff --git a/src_test/test_tree.js b/src_test/test_tree.js deleted file mode 100644 index 1ff473df..00000000 --- a/src_test/test_tree.js +++ /dev/null @@ -1,479 +0,0 @@ -"use strict"; -exports.__esModule = true; -var module = QUnit.module, test = QUnit.test; -var utils_for_test_1 = require("./utils_for_test"); -var node_1 = require("../src/node"); -module("Tree"); -test("constructor", function (assert) { - // 1. Create node from string - var node = new node_1.Node("n1"); - assert.equal(node.name, "n1"); - assert.equal(node.children.length, 0); - assert.equal(node.parent, null); - // 2. Create node from object - var node2 = new node_1.Node({ - label: "n2", - id: 123, - parent: "abc", - children: ["c"], - url: "/" - }); - assert.equal(node2.name, "n2"); - assert.equal(node2.id, 123); - assert.equal(node2["url"], "/"); - assert.equal(node2["label"], undefined); - assert.equal(node2.children.length, 0); - assert.equal(node2.parent, null); -}); -test("create tree from data", function (assert) { - function checkData(tree) { - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2", "nodes on level 1"); - assert.equal(utils_for_test_1.formatNodes(tree.children[0].children), "child1 child2", "children of node1"); - assert.equal(utils_for_test_1.formatNodes(tree.children[1].children), "child3", "children of node2"); - assert.equal(tree.children[0].id, 123, "id"); - } - // - create tree from example data - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - checkData(tree); - // - create tree from new data format - var data = [ - { - label: "node1", - id: 123, - children: ["child1", "child2"] // nodes are only defined by a string - }, - { - label: "node2", - id: 124, - children: ["child3"] - } - ]; - var tree2 = new node_1.Node({}, true); - tree2.loadFromData(data); - checkData(tree2); -}); -test("addChild", function (assert) { - var tree = new node_1.Node("tree1", true); - tree.addChild(new node_1.Node("abc")); - tree.addChild(new node_1.Node("def")); - assert.equal(utils_for_test_1.formatNodes(tree.children), "abc def", "children"); - var node = tree.children[0]; - if (!node.parent) { - assert.ok(false, "Node has no parent"); - } - else { - assert.equal(node.parent.name, "tree1", "parent of node"); - } -}); -test("addChildAtPosition", function (assert) { - var tree = new node_1.Node({}, true); - tree.addChildAtPosition(new node_1.Node("abc"), 0); // first - tree.addChildAtPosition(new node_1.Node("ghi"), 2); // index 2 does not exist - tree.addChildAtPosition(new node_1.Node("def"), 1); - tree.addChildAtPosition(new node_1.Node("123"), 0); - assert.equal(utils_for_test_1.formatNodes(tree.children), "123 abc def ghi", "children"); -}); -test("removeChild", function (assert) { - var tree = new node_1.Node({}, true); - var abc = new node_1.Node({ label: "abc", id: 1 }); - var def = new node_1.Node({ label: "def", id: 2 }); - var ghi = new node_1.Node({ label: "ghi", id: 3 }); - tree.addChild(abc); - tree.addChild(def); - tree.addChild(ghi); - var jkl = new node_1.Node({ label: "jkl", id: 4 }); - def.addChild(jkl); - assert.equal(utils_for_test_1.formatNodes(tree.children), "abc def ghi", "children"); - assert.equal(tree.idMapping[2].name, "def"); - assert.equal(tree.idMapping[4].name, "jkl"); - // remove 'def' - tree.removeChild(def); - assert.equal(utils_for_test_1.formatNodes(tree.children), "abc ghi", "children"); - assert.equal(tree.idMapping[2], null); - assert.equal(tree.idMapping[4], null); - // remove 'ghi' - tree.removeChild(ghi); - assert.equal(utils_for_test_1.formatNodes(tree.children), "abc", "children"); - // remove 'abc' - tree.removeChild(abc); - assert.equal(utils_for_test_1.formatNodes(tree.children), "", "children"); -}); -test("getChildIndex", function (assert) { - // setup - var tree = new node_1.Node({}, true); - var abc = new node_1.Node("abc"); - var def = new node_1.Node("def"); - var ghi = new node_1.Node("ghi"); - tree.addChild(abc); - tree.addChild(def); - tree.addChild(ghi); - // 1. Get child index of 'def' - assert.equal(tree.getChildIndex(def), 1); - // 2. Get child index of non-existing node - assert.equal(tree.getChildIndex(new node_1.Node("xyz")), -1); -}); -test("hasChildren", function (assert) { - var tree = new node_1.Node({}, true); - assert.equal(tree.hasChildren(), false, "tree without children"); - tree.addChild(new node_1.Node("abc")); - assert.equal(tree.hasChildren(), true, "tree has children"); -}); -test("iterate", function (assert) { - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - // iterate over all the nodes - var nodes = []; - tree.iterate(function (node) { - nodes.push(node); - return true; - }); - assert.equal(utils_for_test_1.formatNodes(nodes), "node1 child1 child2 node2 child3", "all nodes"); - // iterate over nodes on first level - var nodes2 = []; - tree.iterate(function (node) { - nodes2.push(node); - return false; - }); - assert.equal(utils_for_test_1.formatNodes(nodes2), "node1 node2", "nodes on first level"); - // add child 4 - var node124 = utils_for_test_1.doGetNodeById(tree, 124); - var node3 = node124.children[0]; - node3.addChild(new node_1.Node("child4")); - // test level parameter - var nodes3 = []; - tree.iterate(function (node, level) { - nodes3.push(node.name + " " + level); - return true; - }); - assert.equal(nodes3.join(","), "node1 0,child1 1,child2 1,node2 0,child3 1,child4 2"); -}); -test("moveNode", function (assert) { - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - /* - node1 - ---child1 - ---child2 - node2 - ---child3 - */ - var node1 = tree.children[0]; - var node2 = tree.children[1]; - var child1 = node1.children[0]; - var child2 = node1.children[1]; - assert.equal(node2.name, "node2", "node2 name"); - assert.equal(child2.name, "child2", "child2 name"); - // move child2 after node2 - tree.moveNode(child2, node2, node_1.Position.After); - /* - node1 - ---child1 - node2 - ---child3 - child2 - */ - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2 child2", "tree nodes at first level"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child1", "node1 children"); - // move child1 inside node2 - // this means it's the first child - tree.moveNode(child1, node2, node_1.Position.Inside); - /* - node1 - node2 - ---child1 - ---child3 - child2 - */ - assert.equal(utils_for_test_1.formatNodes(node2.children), "child1 child3", "node2 children"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "", "node1 has no children"); - // move child2 before child1 - tree.moveNode(child2, child1, node_1.Position.Before); - /* - node1 - node2 - ---child2 - ---child1 - ---child3 - */ - assert.equal(utils_for_test_1.formatNodes(node2.children), "child2 child1 child3", "node2 children"); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2", "tree nodes at first level"); -}); -test("initFromData", function (assert) { - var data = { - label: "main", - children: [ - "c1", - { - label: "c2", - id: 201 - } - ] - }; - var node = new node_1.Node({}, true); - node.initFromData(data); - assert.equal(node.name, "main"); - assert.equal(utils_for_test_1.formatNodes(node.children), "c1 c2", "children"); - assert.equal(node.children[1].id, 201); -}); -test("getData", function (assert) { - // 1. empty node - var node = new node_1.Node({}, true); - assert.deepEqual(node.getData(), []); - // 2.node with data - node.loadFromData([ - { - label: "n1", - children: [ - { - label: "c1" - } - ] - } - ]); - assert.deepEqual(node.getData(), [ - { - name: "n1", - children: [ - { - name: "c1" - } - ] - } - ]); - // 3. get data including parent - var n1 = utils_for_test_1.doGetNodeByName(node, "n1"); - assert.deepEqual(n1.getData(true), [ - { - name: "n1", - children: [{ name: "c1" }] - } - ]); -}); -test("addAfter", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - /* - -node1 - ---c1 - ---c2 - -node2 - ---c3 - */ - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2"); - // - Add 'node_b' after node2 - var node2 = utils_for_test_1.doGetNodeByName(tree, "node2"); - node2.addAfter("node_b"); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node2 node_b"); - var nodeB = utils_for_test_1.doGetNodeByName(tree, "node_b"); - assert.equal(nodeB.name, "node_b"); - // - Add 'node_a' after node1 - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); - node1.addAfter("node_a"); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node_a node2 node_b"); - // - Add 'node_c' after node_b; new node is an object - if (nodeB) { - nodeB.addAfter({ - label: "node_c", - id: 789 - }); - } - var nodeC = utils_for_test_1.doGetNodeByName(tree, "node_c"); - assert.equal(nodeC.id, 789); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node1 node_a node2 node_b node_c"); - // - Add after root node; this is not possible - assert.equal(tree.addAfter("node_x"), null); -}); -test("addBefore", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - // - Add 'node_0' before node1 - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); - node1.addBefore("node0"); - assert.equal(utils_for_test_1.formatNodes(tree.children), "node0 node1 node2"); - // - Add before root node; this is not possile - assert.equal(tree.addBefore("x"), null); -}); -test("addParent", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - // - Add node 'root' as parent of node1 - // Note that node also becomes a child of 'root' - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); - node1.addParent("root"); - var root = utils_for_test_1.doGetNodeByName(tree, "root"); - assert.equal(utils_for_test_1.formatNodes(root.children), "node1 node2"); - // - Add parent to root node; not possible - assert.equal(tree.addParent("x"), null); -}); -test("remove", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - var child1 = utils_for_test_1.doGetNodeByName(tree, "child1"); - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child1 child2"); - assert.equal(child1.parent, node1); - // 1. Remove child1 - child1.remove(); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child2"); - assert.equal(child1.parent, null); -}); -test("append", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); - // 1. Append child3 to node1 - node1.append("child3"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child1 child2 child3"); - // 2. Append subtree - node1.append({ - name: "child4", - children: [{ name: "child5" }] - }); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child1 child2 child3 child4"); - var child4 = utils_for_test_1.doGetNodeByName(node1, "child4"); - assert.equal(utils_for_test_1.formatNodes(child4.children), "child5"); -}); -test("prepend", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - var node1 = utils_for_test_1.doGetNodeByName(tree, "node1"); - // 1. Prepend child0 to node1 - node1.prepend("child0"); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child0 child1 child2"); - // 2. Prepend subtree - node1.prepend({ - name: "child3", - children: [{ name: "child4" }] - }); - assert.equal(utils_for_test_1.formatNodes(node1.children), "child3 child0 child1 child2"); - var child3 = utils_for_test_1.doGetNodeByName(node1, "child3"); - assert.equal(utils_for_test_1.formatNodes(child3.children), "child4"); -}); -test("getNodeById", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - // 1. Get node with id 124 - var node = utils_for_test_1.doGetNodeById(tree, 124); - assert.equal(node.name, "node2"); - // 2. Delete node with id 124 and search again - node.remove(); - assert.equal(tree.getNodeById(124), null); - // 3. Add node with id 456 and search for it - var child3 = utils_for_test_1.doGetNodeByName(tree, "child2"); - child3.append({ - id: 456, - label: "new node" - }); - var node2 = utils_for_test_1.doGetNodeById(tree, 456); - assert.equal(node2.name, "new node"); -}); -test("getLevel", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - // 1. get level for node1 and child1 - assert.equal(utils_for_test_1.doGetNodeByName(tree, "node1").getLevel(), 1); - assert.equal(utils_for_test_1.doGetNodeByName(tree, "child1").getLevel(), 2); -}); -test("loadFromData and id mapping", function (assert) { - // - get node from empty tree - var tree = new node_1.Node({}, true); - assert.equal(tree.getNodeById(999), null); - // - load example data in tree - tree.loadFromData(utils_for_test_1.exampleData); - assert.equal(utils_for_test_1.doGetNodeById(tree, 124).name, "node2"); - var child2 = utils_for_test_1.doGetNodeById(tree, 126); - child2.addChild(new node_1.Node({ label: "child4", id: 128 })); - child2.addChild(new node_1.Node({ label: "child5", id: 129 })); - // - load data in node child2 - child2.loadFromData(["abc", "def"]); - assert.equal(tree.getNodeById(128), null); - assert.equal(child2.children.length, 2); - assert.equal(child2.children[0].name, "abc"); -}); -test("removeChildren", function (assert) { - // - load example data - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - // add child4 and child5 - var child2 = utils_for_test_1.doGetNodeById(tree, 126); - assert.equal(child2.name, "child2"); - child2.addChild(new node_1.Node({ label: "child4", id: 128 })); - child2.addChild(new node_1.Node({ label: "child5", id: 129 })); - assert.equal(utils_for_test_1.doGetNodeById(tree, 128).name, "child4"); - // - remove children from child2 - child2.removeChildren(); - assert.equal(tree.getNodeById(128), null); - assert.equal(child2.children.length, 0); -}); -test("node with id 0", function (assert) { - // - load node with id 0 - var tree = new node_1.Node({}, true); - tree.loadFromData([ - { - id: 0, - label: "mynode" - } - ]); - var node = utils_for_test_1.doGetNodeById(tree, 0); - assert.equal(node.name, "mynode"); - // -- remove the node - node.remove(); - assert.equal(tree.getNodeById(0), undefined); -}); -test("getPreviousSibling", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - // - getPreviousSibling - var previousSibling = utils_for_test_1.doGetNodeByName(tree, "child2").getPreviousSibling(); - if (!previousSibling) { - assert.ok(false, "Previous sibling not found"); - } - else { - assert.equal(previousSibling.name, "child1"); - } - assert.equal(tree.getPreviousSibling(), null); - assert.equal(utils_for_test_1.doGetNodeByName(tree, "child1").getPreviousSibling(), null); -}); -test("getNextSibling", function (assert) { - // setup - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - // - getNextSibling - var nextSibling = utils_for_test_1.doGetNodeByName(tree, "node1").getNextSibling(); - if (!nextSibling) { - assert.ok(false, "Next sibling not found"); - } - else { - assert.equal(nextSibling.name, "node2"); - } - assert.equal(utils_for_test_1.doGetNodeByName(tree, "node2").getNextSibling(), null); - assert.equal(tree.getNextSibling(), null); -}); -test("getNodesByProperty", function (assert) { - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - var nodes = tree.getNodesByProperty("name", "child1"); - assert.equal(nodes.length, 1); - assert.equal(nodes[0].name, "child1"); -}); -test("getNodeByCallback", function (assert) { - var tree = new node_1.Node({}, true); - tree.loadFromData(utils_for_test_1.exampleData); - var node = tree.getNodeByCallback(function (n) { return n.name === "child1"; }); - if (!node) { - assert.ok(false, "Node not found"); - } - else { - assert.equal(node.name, "child1"); - } -}); diff --git a/src_test/test_util.js b/src_test/test_util.js deleted file mode 100644 index 07d380f5..00000000 --- a/src_test/test_util.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -exports.__esModule = true; -var module = QUnit.module, test = QUnit.test; -var util_1 = require("../src/util"); -module("util"); -test("isInt", function (assert) { - assert.ok(util_1.isInt(10)); - assert.ok(util_1.isInt(0)); - assert.ok(util_1.isInt(-1)); - assert.notOk(util_1.isInt("1")); - assert.notOk(null); -}); -test("isFunction", function (assert) { - assert.ok(util_1.isFunction(util_1.isInt)); - assert.notOk(util_1.isFunction("test")); -}); -test("htmlEscape", function (assert) { - assert.equal(util_1.htmlEscape(""), ""); - assert.equal(util_1.htmlEscape("test"), "test"); - assert.equal(util_1.htmlEscape("a&b"), "a&b"); -}); -test("getBoolString", function (assert) { - assert.equal(util_1.getBoolString(true), "true"); - assert.equal(util_1.getBoolString(false), "false"); - assert.equal(util_1.getBoolString(1), "true"); - assert.equal(util_1.getBoolString(null), "false"); -}); diff --git a/src_test/utilsForTest.js.map b/src_test/utilsForTest.js.map new file mode 100644 index 00000000..210b9cd3 --- /dev/null +++ b/src_test/utilsForTest.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utilsForTest.js","sourceRoot":"","sources":["utilsForTest.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src_test/utils_for_test.ts b/src_test/utilsForTest.ts similarity index 100% rename from src_test/utils_for_test.ts rename to src_test/utilsForTest.ts diff --git a/src_test/utils_for_test.js b/src_test/utils_for_test.js deleted file mode 100644 index 10a0f759..00000000 --- a/src_test/utils_for_test.js +++ /dev/null @@ -1,71 +0,0 @@ -"use strict"; -exports.__esModule = true; -exports.exampleData = [ - { - label: "node1", - id: 123, - intProperty: 1, - strProperty: "1", - children: [{ label: "child1", id: 125, intProperty: 2 }, { label: "child2", id: 126 }] - }, - { - label: "node2", - id: 124, - intProperty: 3, - strProperty: "3", - children: [{ label: "child3", id: 127 }] - } -]; -/* -example data 2: - --main ----c1 ----c2 -*/ -exports.exampleData2 = [ - { - label: "main", - children: [{ label: "c1" }, { label: "c2" }] - } -]; -function formatNodes(nodes) { - var strings = nodes.map(function (node) { return node.name; }); - return strings.join(" "); -} -exports.formatNodes = formatNodes; -function isNodeClosed($node) { - return ($node.is("li.jqtree-folder.jqtree-closed") && - $node.find("a:eq(0)").is("a.jqtree-toggler.jqtree-closed") && - $node.find("ul:eq(0)").is("ul")); -} -exports.isNodeClosed = isNodeClosed; -function isNodeOpen($node) { - return ($node.is("li.jqtree-folder") && - $node.find("a:eq(0)").is("a.jqtree-toggler") && - $node.find("ul:eq(0)").is("ul") && - !$node.is("li.jqtree-folder.jqtree-closed") && - !$node.find("span:eq(0)").is("a.jqtree-toggler.jqtree-closed")); -} -exports.isNodeOpen = isNodeOpen; -function formatTitles($node) { - var titles = $node.find(".jqtree-title").map(function (_, el) { return $(el).text(); }); - return titles.toArray().join(" "); -} -exports.formatTitles = formatTitles; -function doGetNodeByName(tree, name) { - var result = tree.getNodeByName(name); - if (!result) { - throw Error("Node with name '" + name + "' not found"); - } - return result; -} -exports.doGetNodeByName = doGetNodeByName; -function doGetNodeById(tree, id) { - var result = tree.getNodeById(id); - if (!result) { - throw Error("Node with id '" + id + "' not found"); - } - return result; -} -exports.doGetNodeById = doGetNodeById; diff --git a/tree.jquery.debug.js b/tree.jquery.debug.js index faebedfd..1973df05 100644 --- a/tree.jquery.debug.js +++ b/tree.jquery.debug.js @@ -235,7 +235,7 @@ var Node = /** @class */ (function () { */ Node.prototype.addChild = function (node) { this.children.push(node); - node._setParent(this); + node.setParent(this); }; /* Add child at position. Index starts at 0. @@ -247,7 +247,7 @@ var Node = /** @class */ (function () { */ Node.prototype.addChildAtPosition = function (node, index) { this.children.splice(index, 0, node); - node._setParent(this); + node.setParent(this); }; /* Remove child. This also removes the children of the node. @@ -257,7 +257,7 @@ var Node = /** @class */ (function () { Node.prototype.removeChild = function (node) { // remove children from the index node.removeChildren(); - this._removeChild(node); + this.doRemoveChild(node); }; /* Get child index. @@ -326,7 +326,7 @@ var Node = /** @class */ (function () { return; } else { - movedNode.parent._removeChild(movedNode); + movedNode.parent.doRemoveChild(movedNode); if (position === Position.After) { if (targetNode.parent) { targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1); @@ -352,7 +352,13 @@ var Node = /** @class */ (function () { return nodes.map(function (node) { var tmpNode = {}; for (var k in node) { - if (["parent", "children", "element", "tree", "isEmptyFolder"].indexOf(k) === -1 && + if ([ + "parent", + "children", + "element", + "tree", + "isEmptyFolder" + ].indexOf(k) === -1 && Object.prototype.hasOwnProperty.call(node, k)) { var v = node[k]; tmpNode[k] = v; @@ -395,7 +401,9 @@ var Node = /** @class */ (function () { var node = new this.tree.nodeClass(nodeInfo); var childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex + 1); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -409,7 +417,9 @@ var Node = /** @class */ (function () { var node = new this.tree.nodeClass(nodeInfo); var childIndex = this.parent.getChildIndex(this); this.parent.addChildAtPosition(node, childIndex); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -421,7 +431,7 @@ var Node = /** @class */ (function () { } else { var newParent = new this.tree.nodeClass(nodeInfo); - newParent._setParent(this.tree); + newParent.setParent(this.tree); var originalParent = this.parent; for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) { var child = _a[_i]; @@ -441,7 +451,9 @@ var Node = /** @class */ (function () { Node.prototype.append = function (nodeInfo) { var node = new this.tree.nodeClass(nodeInfo); this.addChild(node); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -449,7 +461,9 @@ var Node = /** @class */ (function () { Node.prototype.prepend = function (nodeInfo) { var node = new this.tree.nodeClass(nodeInfo); this.addChildAtPosition(node, 0); - if (typeof nodeInfo === "object" && nodeInfo["children"] && nodeInfo["children"].length) { + if (typeof nodeInfo === "object" && + nodeInfo["children"] && + nodeInfo["children"].length) { node.loadFromData(nodeInfo["children"]); } return node; @@ -565,7 +579,8 @@ var Node = /** @class */ (function () { else { var previousSibling = this.getPreviousSibling(); if (previousSibling) { - if (!previousSibling.hasChildren() || !previousSibling.is_open) { + if (!previousSibling.hasChildren() || + !previousSibling.is_open) { // Previous sibling return previousSibling; } @@ -625,12 +640,12 @@ var Node = /** @class */ (function () { }; addNode(data); }; - Node.prototype._setParent = function (parent) { + Node.prototype.setParent = function (parent) { this.parent = parent; this.tree = parent.tree; this.tree.addNodeToIndex(this); }; - Node.prototype._removeChild = function (node) { + Node.prototype.doRemoveChild = function (node) { this.children.splice(this.getChildIndex(node), 1); this.tree.removeNodeFromIndex(node); }; @@ -702,7 +717,7 @@ var SimpleWidget = /** @class */ (function () { jQuery.data(el, dataKey, widget); } // Call init after setting data, so we can call methods - widget._init(); + widget.init(); } } return $el; @@ -725,7 +740,8 @@ var SimpleWidget = /** @class */ (function () { var widget = jQuery.data(el, getDataKey()); if (widget && widget instanceof SimpleWidget) { var widgetFunction = widget[functionName]; - if (widgetFunction && typeof widgetFunction === "function") { + if (widgetFunction && + typeof widgetFunction === "function") { result = widgetFunction.apply(widget, args); } } @@ -756,12 +772,12 @@ var SimpleWidget = /** @class */ (function () { }; }; SimpleWidget.prototype.destroy = function () { - this._deinit(); + this.deinit(); }; - SimpleWidget.prototype._init = function () { + SimpleWidget.prototype.init = function () { // }; - SimpleWidget.prototype._deinit = function () { + SimpleWidget.prototype.deinit = function () { // }; SimpleWidget.defaults = {}; @@ -803,26 +819,26 @@ var __assign = (this && this.__assign) || function () { exports.__esModule = true; var version_1 = __webpack_require__(5); var jQuery = __webpack_require__(2); -var drag_and_drop_handler_1 = __webpack_require__(6); -var elements_renderer_1 = __webpack_require__(7); -var data_loader_1 = __webpack_require__(8); -var key_handler_1 = __webpack_require__(9); +var dragAndDropHandler_1 = __webpack_require__(6); +var elementsRenderer_1 = __webpack_require__(7); +var dataLoader_1 = __webpack_require__(8); +var keyHandler_1 = __webpack_require__(9); var mouse_widget_1 = __webpack_require__(10); -var save_state_handler_1 = __webpack_require__(11); -var scroll_handler_1 = __webpack_require__(12); -var select_node_handler_1 = __webpack_require__(13); +var saveStateHandler_1 = __webpack_require__(11); +var scrollHandler_1 = __webpack_require__(12); +var selectNodeHandler_1 = __webpack_require__(13); var simple_widget_1 = __webpack_require__(3); var node_1 = __webpack_require__(0); var util_1 = __webpack_require__(1); -var node_element_1 = __webpack_require__(14); +var nodeElement_1 = __webpack_require__(14); var NODE_PARAM_IS_EMPTY = "Node parameter is empty"; var PARAM_IS_EMPTY = "Parameter is empty: "; var JqTreeWidget = /** @class */ (function (_super) { __extends(JqTreeWidget, _super); function JqTreeWidget() { var _this = _super !== null && _super.apply(this, arguments) || this; - _this._handleClick = function (e) { - var clickTarget = _this._getClickTarget(e.target); + _this.handleClick = function (e) { + var clickTarget = _this.getClickTarget(e.target); if (clickTarget) { if (clickTarget.type === "button") { _this.toggle(clickTarget.node, _this.options.slide); @@ -836,24 +852,25 @@ var JqTreeWidget = /** @class */ (function (_super) { click_event: e // eslint-disable-line @typescript-eslint/camelcase }); if (!event_1.isDefaultPrevented()) { - _this._selectNode(node); + _this.doSelectNode(node); } } } }; - _this._handleDblclick = function (e) { - var clickTarget = _this._getClickTarget(e.target); - if (clickTarget && clickTarget.type === "label") { + _this.handleDblclick = function (e) { + var _a; + var clickTarget = _this.getClickTarget(e.target); + if (((_a = clickTarget) === null || _a === void 0 ? void 0 : _a.type) === "label") { _this._triggerEvent("tree.dblclick", { node: clickTarget.node, click_event: e // eslint-disable-line @typescript-eslint/camelcase }); } }; - _this._handleContextmenu = function (e) { + _this.handleContextmenu = function (e) { var $div = jQuery(e.target).closest("ul.jqtree-tree .jqtree-element"); if ($div.length) { - var node = _this._getNode($div); + var node = _this.getNode($div); if (node) { e.preventDefault(); e.stopPropagation(); @@ -885,7 +902,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return this.tree; }; JqTreeWidget.prototype.selectNode = function (node, optionsParam) { - this._selectNode(node, optionsParam); + this.doSelectNode(node, optionsParam); return this.element; }; JqTreeWidget.prototype.getSelectedNode = function () { @@ -900,7 +917,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return JSON.stringify(this.tree.getData()); }; JqTreeWidget.prototype.loadData = function (data, parentNode) { - this._loadData(data, parentNode); + this.doLoadData(data, parentNode); return this.element; }; /* @@ -920,16 +937,16 @@ var JqTreeWidget = /** @class */ (function (_super) { JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) { if (typeof param1 === "string") { // first parameter is url - this._loadDataFromUrl(param1, param2, param3); + this.doLoadDataFromUrl(param1, param2, param3); } else { // first parameter is not url - this._loadDataFromUrl(null, param1, param2); + this.doLoadDataFromUrl(null, param1, param2); } return this.element; }; JqTreeWidget.prototype.reload = function (onFinished) { - this._loadDataFromUrl(null, null, onFinished); + this.doLoadDataFromUrl(null, null, onFinished); return this.element; }; JqTreeWidget.prototype.getNodeById = function (nodeId) { @@ -942,7 +959,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return this.tree.getNodesByProperty(key, value); }; JqTreeWidget.prototype.getNodeByHtmlElement = function (element) { - return this._getNode(jQuery(element)); + return this.getNode(jQuery(element)); }; JqTreeWidget.prototype.getNodeByCallback = function (callback) { return this.tree.getNodeByCallback(callback); @@ -978,8 +995,8 @@ var JqTreeWidget = /** @class */ (function (_super) { } var slide = slideParam == null ? this.options.slide : slideParam; if (node.isFolder() || node.isEmptyFolder) { - new node_element_1.FolderElement(node, this).close(slide, this.options.animationSpeed); - this._saveState(); + new nodeElement_1.FolderElement(node, this).close(slide, this.options.animationSpeed); + this.saveState(); } return this.element; }; @@ -1044,7 +1061,9 @@ var JqTreeWidget = /** @class */ (function (_super) { return node; }; JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) { - var parentNode = !parentNodeParam ? this.tree : parentNodeParam; + var parentNode = !parentNodeParam + ? this.tree + : parentNodeParam; var node = parentNode.prepend(newNodeInfo); this._refreshElements(parentNode); return node; @@ -1068,7 +1087,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } } this._refreshElements(node); - this._selectCurrentNode(); + this.selectCurrentNode(); return this.element; }; JqTreeWidget.prototype.moveNode = function (node, targetNode, position) { @@ -1096,7 +1115,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (this.selectNodeHandler) { this.selectNodeHandler.addToSelection(node); this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus); - this._saveState(); + this.saveState(); } return this.element; }; @@ -1126,7 +1145,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (this.selectNodeHandler) { this.selectNodeHandler.removeFromSelection(node); this._getNodeElementForNode(node).deselect(); - this._saveState(); + this.saveState(); } return this.element; }; @@ -1195,12 +1214,12 @@ var JqTreeWidget = /** @class */ (function (_super) { var _this = this; if (slide === void 0) { slide = true; } var doOpenNode = function (_node, _slide, _onFinished) { - var folderElement = new node_element_1.FolderElement(_node, _this); + var folderElement = new nodeElement_1.FolderElement(_node, _this); folderElement.open(_onFinished, _slide, _this.options.animationSpeed); }; if (node.isFolder() || node.isEmptyFolder) { if (node.load_on_demand) { - this._loadFolderOnDemand(node, slide, onFinished); + this.loadFolderOnDemand(node, slide, onFinished); } else { var parent_2 = node.parent; @@ -1212,7 +1231,7 @@ var JqTreeWidget = /** @class */ (function (_super) { parent_2 = parent_2.parent; } doOpenNode(node, slide, onFinished); - this._saveState(); + this.saveState(); } } }; @@ -1226,14 +1245,14 @@ var JqTreeWidget = /** @class */ (function (_super) { }; JqTreeWidget.prototype._getNodeElementForNode = function (node) { if (node.isFolder()) { - return new node_element_1.FolderElement(node, this); + return new nodeElement_1.FolderElement(node, this); } else { - return new node_element_1.NodeElement(node, this); + return new nodeElement_1.NodeElement(node, this); } }; JqTreeWidget.prototype._getNodeElement = function ($element) { - var node = this._getNode($element); + var node = this.getNode($element); if (node) { return this._getNodeElementForNode(node); } @@ -1242,61 +1261,62 @@ var JqTreeWidget = /** @class */ (function (_super) { } }; JqTreeWidget.prototype._containsElement = function (element) { - var node = this._getNode(jQuery(element)); + var node = this.getNode(jQuery(element)); return node != null && node.tree === this.tree; }; JqTreeWidget.prototype._getScrollLeft = function () { - return (this.scrollHandler && this.scrollHandler.getScrollLeft()) || 0; + var _a, _b; + return ((_b = (_a = this) === null || _a === void 0 ? void 0 : _a.scrollHandler) === null || _b === void 0 ? void 0 : _b.getScrollLeft()) || 0; }; - JqTreeWidget.prototype._init = function () { - _super.prototype._init.call(this); + JqTreeWidget.prototype.init = function () { + _super.prototype.init.call(this); this.element = this.$el; this.mouseDelay = 300; this.isInitialized = false; - this.options.rtl = this._getRtlOption(); + this.options.rtl = this.getRtlOption(); if (this.options.closedIcon === null) { - this.options.closedIcon = this._getDefaultClosedIcon(); + this.options.closedIcon = this.getDefaultClosedIcon(); } - this.renderer = new elements_renderer_1["default"](this); - this.dataLoader = new data_loader_1["default"](this); - if (save_state_handler_1["default"] != null) { - this.saveStateHandler = new save_state_handler_1["default"](this); + this.renderer = new elementsRenderer_1["default"](this); + this.dataLoader = new dataLoader_1["default"](this); + if (saveStateHandler_1["default"] != null) { + this.saveStateHandler = new saveStateHandler_1["default"](this); } else { this.options.saveState = false; } - if (select_node_handler_1["default"] != null) { - this.selectNodeHandler = new select_node_handler_1["default"](this); + if (selectNodeHandler_1["default"] != null) { + this.selectNodeHandler = new selectNodeHandler_1["default"](this); } - if (drag_and_drop_handler_1.DragAndDropHandler != null) { - this.dndHandler = new drag_and_drop_handler_1.DragAndDropHandler(this); + if (dragAndDropHandler_1.DragAndDropHandler != null) { + this.dndHandler = new dragAndDropHandler_1.DragAndDropHandler(this); } else { this.options.dragAndDrop = false; } - if (scroll_handler_1["default"] != null) { - this.scrollHandler = new scroll_handler_1["default"](this); + if (scrollHandler_1["default"] != null) { + this.scrollHandler = new scrollHandler_1["default"](this); } - if (key_handler_1["default"] != null && select_node_handler_1["default"] != null) { - this.keyHandler = new key_handler_1["default"](this); + if (keyHandler_1["default"] != null && selectNodeHandler_1["default"] != null) { + this.keyHandler = new keyHandler_1["default"](this); } - this._initData(); - this.element.click(this._handleClick); - this.element.dblclick(this._handleDblclick); + this.initData(); + this.element.click(this.handleClick); + this.element.dblclick(this.handleDblclick); if (this.options.useContextMenu) { - this.element.on("contextmenu", this._handleContextmenu); + this.element.on("contextmenu", this.handleContextmenu); } }; - JqTreeWidget.prototype._deinit = function () { + JqTreeWidget.prototype.deinit = function () { this.element.empty(); this.element.off(); if (this.keyHandler) { this.keyHandler.deinit(); } this.tree = new node_1.Node({}, true); - _super.prototype._deinit.call(this); + _super.prototype.deinit.call(this); }; - JqTreeWidget.prototype._mouseCapture = function (positionInfo) { + JqTreeWidget.prototype.mouseCapture = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseCapture(positionInfo); } @@ -1304,7 +1324,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseStart = function (positionInfo) { + JqTreeWidget.prototype.mouseStart = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStart(positionInfo); } @@ -1312,7 +1332,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseDrag = function (positionInfo) { + JqTreeWidget.prototype.mouseDrag = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { var result = this.dndHandler.mouseDrag(positionInfo); if (this.scrollHandler) { @@ -1324,7 +1344,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._mouseStop = function (positionInfo) { + JqTreeWidget.prototype.mouseStop = function (positionInfo) { if (this.options.dragAndDrop && this.dndHandler) { return this.dndHandler.mouseStop(positionInfo); } @@ -1332,21 +1352,21 @@ var JqTreeWidget = /** @class */ (function (_super) { return false; } }; - JqTreeWidget.prototype._initData = function () { + JqTreeWidget.prototype.initData = function () { if (this.options.data) { - this._loadData(this.options.data, null); + this.doLoadData(this.options.data, null); } else { - var dataUrl = this._getDataUrlInfo(null); + var dataUrl = this.getDataUrlInfo(null); if (dataUrl) { - this._loadDataFromUrl(null, null, null); + this.doLoadDataFromUrl(null, null, null); } else { - this._loadData([], null); + this.doLoadData([], null); } } }; - JqTreeWidget.prototype._getDataUrlInfo = function (node) { + JqTreeWidget.prototype.getDataUrlInfo = function (node) { var _this = this; var dataUrl = this.options.dataUrl || this.element.data("url"); var getUrlFromString = function () { @@ -1355,14 +1375,15 @@ var JqTreeWidget = /** @class */ (function (_super) { return urlInfo; }; var setUrlInfoData = function (urlInfo) { - if (node && node.id) { + var _a; + if ((_a = node) === null || _a === void 0 ? void 0 : _a.id) { // Load on demand of a subtree; add node parameter var data = { node: node.id }; urlInfo["data"] = data; } else { // Add selected_node parameter - var selectedNodeId = _this._getNodeIdToBeSelected(); + var selectedNodeId = _this.getNodeIdToBeSelected(); if (selectedNodeId) { var data = { selected_node: selectedNodeId }; // eslint-disable-line @typescript-eslint/camelcase urlInfo["data"] = data; @@ -1383,7 +1404,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return dataUrl; } }; - JqTreeWidget.prototype._getNodeIdToBeSelected = function () { + JqTreeWidget.prototype.getNodeIdToBeSelected = function () { if (this.options.saveState && this.saveStateHandler) { return this.saveStateHandler.getNodeIdToBeSelected(); } @@ -1391,7 +1412,7 @@ var JqTreeWidget = /** @class */ (function (_super) { return null; } }; - JqTreeWidget.prototype._initTree = function (data) { + JqTreeWidget.prototype.initTree = function (data) { var _this = this; var doInit = function () { if (!_this.isInitialized) { @@ -1404,19 +1425,19 @@ var JqTreeWidget = /** @class */ (function (_super) { this.selectNodeHandler.clear(); } this.tree.loadFromData(data); - var mustLoadOnDemand = this._setInitialState(); + var mustLoadOnDemand = this.setInitialState(); this._refreshElements(null); if (!mustLoadOnDemand) { doInit(); } else { // Load data on demand and then init the tree - this._setInitialStateOnDemand(doInit); + this.setInitialStateOnDemand(doInit); } }; // Set initial state, either by restoring the state or auto-opening nodes // result: must load nodes on demand? - JqTreeWidget.prototype._setInitialState = function () { + JqTreeWidget.prototype.setInitialState = function () { var _this = this; var restoreState = function () { // result: is state restored, must load on demand? @@ -1440,7 +1461,7 @@ var JqTreeWidget = /** @class */ (function (_super) { if (_this.options.autoOpen === false) { return false; } - var maxLevel = _this._getAutoOpenMaxLevel(); + var maxLevel = _this.getAutoOpenMaxLevel(); var mustLoadOnDemand = false; _this.tree.iterate(function (node, level) { if (node.load_on_demand) { @@ -1465,7 +1486,7 @@ var JqTreeWidget = /** @class */ (function (_super) { }; // Set the initial state for nodes that are loaded on demand // Call cb_finished when done - JqTreeWidget.prototype._setInitialStateOnDemand = function (cbFinished) { + JqTreeWidget.prototype.setInitialStateOnDemand = function (cbFinished) { var _this = this; var restoreState = function () { if (!(_this.options.saveState && _this.saveStateHandler)) { @@ -1483,7 +1504,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } }; var autoOpenNodes = function () { - var maxLevel = _this._getAutoOpenMaxLevel(); + var maxLevel = _this.getAutoOpenMaxLevel(); var loadingCount = 0; var loadAndOpenNode = function (node) { loadingCount += 1; @@ -1515,7 +1536,7 @@ var JqTreeWidget = /** @class */ (function (_super) { autoOpenNodes(); } }; - JqTreeWidget.prototype._getAutoOpenMaxLevel = function () { + JqTreeWidget.prototype.getAutoOpenMaxLevel = function () { if (this.options.autoOpen === true) { return -1; } @@ -1523,11 +1544,11 @@ var JqTreeWidget = /** @class */ (function (_super) { return parseInt(this.options.autoOpen, 10); } }; - JqTreeWidget.prototype._getClickTarget = function (element) { + JqTreeWidget.prototype.getClickTarget = function (element) { var $target = jQuery(element); var $button = $target.closest(".jqtree-toggler"); if ($button.length) { - var node = this._getNode($button); + var node = this.getNode($button); if (node) { return { type: "button", @@ -1538,7 +1559,7 @@ var JqTreeWidget = /** @class */ (function (_super) { else { var $el = $target.closest(".jqtree-element"); if ($el.length) { - var node = this._getNode($el); + var node = this.getNode($el); if (node) { return { type: "label", @@ -1549,7 +1570,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } return null; }; - JqTreeWidget.prototype._getNode = function ($element) { + JqTreeWidget.prototype.getNode = function ($element) { var $li = $element.closest("li.jqtree_common"); if ($li.length === 0) { return null; @@ -1558,12 +1579,12 @@ var JqTreeWidget = /** @class */ (function (_super) { return $li.data("node"); } }; - JqTreeWidget.prototype._saveState = function () { + JqTreeWidget.prototype.saveState = function () { if (this.options.saveState && this.saveStateHandler) { this.saveStateHandler.saveState(); } }; - JqTreeWidget.prototype._selectCurrentNode = function () { + JqTreeWidget.prototype.selectCurrentNode = function () { var node = this.getSelectedNode(); if (node) { var nodeElement = this._getNodeElementForNode(node); @@ -1572,13 +1593,13 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._deselectCurrentNode = function () { + JqTreeWidget.prototype.deselectCurrentNode = function () { var node = this.getSelectedNode(); if (node) { this.removeFromSelection(node); } }; - JqTreeWidget.prototype._getDefaultClosedIcon = function () { + JqTreeWidget.prototype.getDefaultClosedIcon = function () { if (this.options.rtl) { // triangle to the left return "◀"; @@ -1588,13 +1609,13 @@ var JqTreeWidget = /** @class */ (function (_super) { return "►"; } }; - JqTreeWidget.prototype._getRtlOption = function () { + JqTreeWidget.prototype.getRtlOption = function () { if (this.options.rtl != null) { return this.options.rtl; } else { var dataRtl = this.element.data("rtl"); - if (dataRtl != null && dataRtl !== false) { + if (dataRtl !== null && dataRtl !== false) { return true; } else { @@ -1602,7 +1623,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._selectNode = function (inode, optionsParam) { + JqTreeWidget.prototype.doSelectNode = function (inode, optionsParam) { var _this = this; if (!this.selectNodeHandler) { return; @@ -1611,7 +1632,8 @@ var JqTreeWidget = /** @class */ (function (_super) { var selectOptions = __assign(__assign({}, defaultOptions), (optionsParam || {})); var canSelect = function () { if (_this.options.onCanSelectNode) { - return _this.options.selectable && _this.options.onCanSelectNode(inode); + return (_this.options.selectable && + _this.options.onCanSelectNode(inode)); } else { return _this.options.selectable; @@ -1630,7 +1652,7 @@ var JqTreeWidget = /** @class */ (function (_super) { }; if (!inode) { // Called with empty node -> deselect current node - this._deselectCurrentNode(); + this.deselectCurrentNode(); saveState(); return; } @@ -1640,7 +1662,7 @@ var JqTreeWidget = /** @class */ (function (_super) { var node = inode; if (this.selectNodeHandler.isNodeSelected(node)) { if (selectOptions.mustToggle) { - this._deselectCurrentNode(); + this.deselectCurrentNode(); this._triggerEvent("tree.select", { node: null, previous_node: node // eslint-disable-line @typescript-eslint/camelcase @@ -1649,7 +1671,7 @@ var JqTreeWidget = /** @class */ (function (_super) { } else { var deselectedNode = this.getSelectedNode(); - this._deselectCurrentNode(); + this.deselectCurrentNode(); this.addToSelection(node, selectOptions.mustSetFocus); this._triggerEvent("tree.select", { node: node, @@ -1659,25 +1681,25 @@ var JqTreeWidget = /** @class */ (function (_super) { } saveState(); }; - JqTreeWidget.prototype._loadData = function (data, parentNode) { + JqTreeWidget.prototype.doLoadData = function (data, parentNode) { if (!data) { return; } else { this._triggerEvent("tree.load_data", { tree_data: data }); // eslint-disable-line @typescript-eslint/camelcase if (parentNode) { - this._deselectNodes(parentNode); - this._loadSubtree(data, parentNode); + this.deselectNodes(parentNode); + this.loadSubtree(data, parentNode); } else { - this._initTree(data); + this.initTree(data); } if (this.isDragging() && this.dndHandler) { this.dndHandler.refresh(); } } }; - JqTreeWidget.prototype._deselectNodes = function (parentNode) { + JqTreeWidget.prototype.deselectNodes = function (parentNode) { if (this.selectNodeHandler) { var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode); for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) { @@ -1686,21 +1708,21 @@ var JqTreeWidget = /** @class */ (function (_super) { } } }; - JqTreeWidget.prototype._loadSubtree = function (data, parentNode) { + JqTreeWidget.prototype.loadSubtree = function (data, parentNode) { parentNode.loadFromData(data); parentNode.load_on_demand = false; // eslint-disable-line @typescript-eslint/camelcase parentNode.is_loading = false; // eslint-disable-line @typescript-eslint/camelcase this._refreshElements(parentNode); }; - JqTreeWidget.prototype._loadDataFromUrl = function (urlInfoParam, parentNode, onFinished) { - var urlInfo = urlInfoParam || this._getDataUrlInfo(parentNode); + JqTreeWidget.prototype.doLoadDataFromUrl = function (urlInfoParam, parentNode, onFinished) { + var urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode); this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished); }; - JqTreeWidget.prototype._loadFolderOnDemand = function (node, slide, onFinished) { + JqTreeWidget.prototype.loadFolderOnDemand = function (node, slide, onFinished) { var _this = this; if (slide === void 0) { slide = true; } node.is_loading = true; // eslint-disable-line @typescript-eslint/camelcase - this._loadDataFromUrl(null, node, function () { + this.doLoadDataFromUrl(null, node, function () { _this._openNode(node, slide, onFinished); }); }; @@ -1795,7 +1817,8 @@ var DragAndDropHandler = /** @class */ (function () { if (!this.mustCaptureElement($element)) { return null; } - if (this.treeWidget.options.onIsMoveHandle && !this.treeWidget.options.onIsMoveHandle($element)) { + if (this.treeWidget.options.onIsMoveHandle && + !this.treeWidget.options.onIsMoveHandle($element)) { return null; } var nodeElement = this.treeWidget._getNodeElement($element); @@ -1817,7 +1840,9 @@ var DragAndDropHandler = /** @class */ (function () { } }; DragAndDropHandler.prototype.mouseStart = function (positionInfo) { - if (!this.currentItem || positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (!this.currentItem || + positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return false; } else { @@ -1826,7 +1851,9 @@ var DragAndDropHandler = /** @class */ (function () { var left = offset ? offset.left : 0; var top_1 = offset ? offset.top : 0; var node = this.currentItem.node; - var nodeName = this.treeWidget.options.autoEscape ? util_1.htmlEscape(node.name) : node.name; + var nodeName = this.treeWidget.options.autoEscape + ? util_1.htmlEscape(node.name) + : node.name; this.dragElement = new DragElement(nodeName, positionInfo.pageX - left, positionInfo.pageY - top_1, this.treeWidget.element); this.isDragging = true; this.positionInfo = positionInfo; @@ -1939,7 +1966,10 @@ var DragAndDropHandler = /** @class */ (function () { }; DragAndDropHandler.prototype.findHoveredArea = function (x, y) { var dimensions = this.getTreeDimensions(); - if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) { + if (x < dimensions.left || + y < dimensions.top || + x > dimensions.right || + y > dimensions.bottom) { return null; } var low = 0; @@ -1961,7 +1991,9 @@ var DragAndDropHandler = /** @class */ (function () { }; DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) { var node = area.node; - return node.isFolder() && !node.is_open && area.position === node_1.Position.Inside; + return (node.isFolder() && + !node.is_open && + area.position === node_1.Position.Inside); }; DragAndDropHandler.prototype.updateDropHint = function () { if (!this.hoveredArea) { @@ -2323,8 +2355,10 @@ var ElementsRenderer = /** @class */ (function () { return ul; }; ElementsRenderer.prototype.createLi = function (node, level) { - var isSelected = Boolean(this.treeWidget.selectNodeHandler && this.treeWidget.selectNodeHandler.isNodeSelected(node)); - var mustShowFolder = node.isFolder() || (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); + var isSelected = Boolean(this.treeWidget.selectNodeHandler && + this.treeWidget.selectNodeHandler.isNodeSelected(node)); + var mustShowFolder = node.isFolder() || + (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder); var li = mustShowFolder ? this.createFolderLi(node, level, isSelected) : this.createNodeLi(node, level, isSelected); @@ -2336,7 +2370,9 @@ var ElementsRenderer = /** @class */ (function () { ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) { var buttonClasses = this.getButtonClasses(node); var folderClasses = this.getFolderClasses(node, isSelected); - var iconElement = node.is_open ? this.openedIconElement : this.closedIconElement; + var iconElement = node.is_open + ? this.openedIconElement + : this.closedIconElement; // li var li = document.createElement("li"); li.className = "jqtree_common " + folderClasses; @@ -2528,7 +2564,11 @@ var DataLoader = /** @class */ (function () { }; DataLoader.prototype.parseData = function (data) { var dataFilter = this.treeWidget.options.dataFilter; - var parsedData = data instanceof Array || typeof data === "object" ? data : data != null ? jQuery.parseJSON(data) : []; + var parsedData = data instanceof Array || typeof data === "object" + ? data + : data != null + ? jQuery.parseJSON(data) + : []; return dataFilter ? dataFilter(parsedData) : parsedData; }; return DataLoader; @@ -2642,11 +2682,15 @@ var KeyHandler = /** @class */ (function () { } }; KeyHandler.prototype.canHandleKeyboard = function () { - return (this.treeWidget.options.keyboardSupport && this.isFocusOnTree() && this.treeWidget.getSelectedNode() != null); + return (this.treeWidget.options.keyboardSupport && + this.isFocusOnTree() && + this.treeWidget.getSelectedNode() != null); }; KeyHandler.prototype.isFocusOnTree = function () { var activeElement = document.activeElement; - return Boolean(activeElement && activeElement.tagName === "SPAN" && this.treeWidget._containsElement(activeElement)); + return Boolean(activeElement && + activeElement.tagName === "SPAN" && + this.treeWidget._containsElement(activeElement)); }; KeyHandler.LEFT = 37; KeyHandler.UP = 38; @@ -2690,21 +2734,25 @@ var MouseWidget = /** @class */ (function (_super) { if (e.which !== 1) { return; } - var result = _this._handleMouseDown(_this._getPositionInfo(e)); + var result = _this.handleMouseDown(_this.getPositionInfo(e)); if (result) { e.preventDefault(); } return result; }; - _this.mouseMove = function (e) { return _this._handleMouseMove(e, _this._getPositionInfo(e)); }; - _this.mouseUp = function (e) { return _this._handleMouseUp(_this._getPositionInfo(e)); }; + _this.mouseMove = function (e) { + return _this.handleMouseMove(e, _this.getPositionInfo(e)); + }; + _this.mouseUp = function (e) { + return _this.handleMouseUp(_this.getPositionInfo(e)); + }; _this.touchStart = function (e) { var touchEvent = e.originalEvent; if (touchEvent.touches.length > 1) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseDown(_this._getPositionInfo(touch)); + return _this.handleMouseDown(_this.getPositionInfo(touch)); }; _this.touchMove = function (e) { var touchEvent = e.originalEvent; @@ -2712,7 +2760,7 @@ var MouseWidget = /** @class */ (function (_super) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseMove(e, _this._getPositionInfo(touch)); + return _this.handleMouseMove(e, _this.getPositionInfo(touch)); }; _this.touchEnd = function (e) { var touchEvent = e.originalEvent; @@ -2720,14 +2768,14 @@ var MouseWidget = /** @class */ (function (_super) { return; } var touch = touchEvent.changedTouches[0]; - return _this._handleMouseUp(_this._getPositionInfo(touch)); + return _this.handleMouseUp(_this.getPositionInfo(touch)); }; return _this; } MouseWidget.prototype.setMouseDelay = function (mouseDelay) { this.mouseDelay = mouseDelay; }; - MouseWidget.prototype._init = function () { + MouseWidget.prototype.init = function () { this.$el.on("mousedown.mousewidget", this.mouseDown); this.$el.on("touchstart.mousewidget", this.touchStart); this.isMouseStarted = false; @@ -2736,36 +2784,36 @@ var MouseWidget = /** @class */ (function (_super) { this.isMouseDelayMet = true; this.mouseDownInfo = null; }; - MouseWidget.prototype._deinit = function () { + MouseWidget.prototype.deinit = function () { this.$el.off("mousedown.mousewidget"); this.$el.off("touchstart.mousewidget"); var $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("mouseup.mousewidget"); }; - MouseWidget.prototype._handleMouseDown = function (positionInfo) { + MouseWidget.prototype.handleMouseDown = function (positionInfo) { // We may have missed mouseup (out of window) if (this.isMouseStarted) { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } this.mouseDownInfo = positionInfo; - if (!this._mouseCapture(positionInfo)) { + if (!this.mouseCapture(positionInfo)) { return; } - this._handleStartMouse(); + this.handleStartMouse(); return true; }; - MouseWidget.prototype._handleStartMouse = function () { + MouseWidget.prototype.handleStartMouse = function () { var $document = jQuery(document); $document.on("mousemove.mousewidget", this.mouseMove); $document.on("touchmove.mousewidget", this.touchMove); $document.on("mouseup.mousewidget", this.mouseUp); $document.on("touchend.mousewidget", this.touchEnd); if (this.mouseDelay) { - this._startMouseDelayTimer(); + this.startMouseDelayTimer(); } }; - MouseWidget.prototype._startMouseDelayTimer = function () { + MouseWidget.prototype.startMouseDelayTimer = function () { var _this = this; if (this.mouseDelayTimer) { clearTimeout(this.mouseDelayTimer); @@ -2775,26 +2823,26 @@ var MouseWidget = /** @class */ (function (_super) { }, this.mouseDelay); this.isMouseDelayMet = false; }; - MouseWidget.prototype._handleMouseMove = function (e, positionInfo) { + MouseWidget.prototype.handleMouseMove = function (e, positionInfo) { if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); return e.preventDefault(); } if (this.mouseDelay && !this.isMouseDelayMet) { return true; } if (this.mouseDownInfo) { - this.isMouseStarted = this._mouseStart(this.mouseDownInfo) !== false; + this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false; } if (this.isMouseStarted) { - this._mouseDrag(positionInfo); + this.mouseDrag(positionInfo); } else { - this._handleMouseUp(positionInfo); + this.handleMouseUp(positionInfo); } return !this.isMouseStarted; }; - MouseWidget.prototype._getPositionInfo = function (e) { + MouseWidget.prototype.getPositionInfo = function (e) { return { pageX: e.pageX, pageY: e.pageY, @@ -2802,7 +2850,7 @@ var MouseWidget = /** @class */ (function (_super) { originalEvent: e }; }; - MouseWidget.prototype._handleMouseUp = function (positionInfo) { + MouseWidget.prototype.handleMouseUp = function (positionInfo) { var $document = jQuery(document); $document.off("mousemove.mousewidget"); $document.off("touchmove.mousewidget"); @@ -2810,7 +2858,7 @@ var MouseWidget = /** @class */ (function (_super) { $document.off("touchend.mousewidget"); if (this.isMouseStarted) { this.isMouseStarted = false; - this._mouseStop(positionInfo); + this.mouseStop(positionInfo); } }; return MouseWidget; @@ -2840,9 +2888,9 @@ var SaveStateHandler = /** @class */ (function () { } }; SaveStateHandler.prototype.getStateFromStorage = function () { - var jsonData = this._loadFromStorage(); + var jsonData = this.loadFromStorage(); if (jsonData) { - return this._parseState(jsonData); + return this.parseState(jsonData); } else { return null; @@ -2860,7 +2908,9 @@ var SaveStateHandler = /** @class */ (function () { }); return openNodes; }; - var getSelectedNodeIds = function () { return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; }); }; + var getSelectedNodeIds = function () { + return _this.treeWidget.getSelectedNodes().map(function (n) { return n.id; }); + }; /* eslint-disable @typescript-eslint/camelcase */ return { open_nodes: getOpenNodeIds(), @@ -2881,18 +2931,18 @@ var SaveStateHandler = /** @class */ (function () { else { var mustLoadOnDemand = false; if (state.open_nodes) { - mustLoadOnDemand = this._openInitialNodes(state.open_nodes); + mustLoadOnDemand = this.openInitialNodes(state.open_nodes); } if (state.selected_node) { - this._resetSelection(); - this._selectInitialNodes(state.selected_node); + this.resetSelection(); + this.selectInitialNodes(state.selected_node); } return mustLoadOnDemand; } }; SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cbFinished) { if (state) { - this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); + this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished); } else { cbFinished(); @@ -2907,7 +2957,7 @@ var SaveStateHandler = /** @class */ (function () { return null; } }; - SaveStateHandler.prototype._parseState = function (jsonData) { + SaveStateHandler.prototype.parseState = function (jsonData) { var state = jQuery.parseJSON(jsonData); // Check if selected_node is an int (instead of an array) if (state && state.selected_node && util_1.isInt(state.selected_node)) { @@ -2916,7 +2966,7 @@ var SaveStateHandler = /** @class */ (function () { } return state; }; - SaveStateHandler.prototype._loadFromStorage = function () { + SaveStateHandler.prototype.loadFromStorage = function () { if (this.treeWidget.options.onGetStateFromStorage) { return this.treeWidget.options.onGetStateFromStorage(); } @@ -2924,7 +2974,7 @@ var SaveStateHandler = /** @class */ (function () { return localStorage.getItem(this.getKeyName()); } }; - SaveStateHandler.prototype._openInitialNodes = function (nodeIds) { + SaveStateHandler.prototype.openInitialNodes = function (nodeIds) { var mustLoadOnDemand = false; for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) { var nodeDd = nodeIds_1[_i]; @@ -2940,7 +2990,7 @@ var SaveStateHandler = /** @class */ (function () { } return mustLoadOnDemand; }; - SaveStateHandler.prototype._selectInitialNodes = function (nodeIds) { + SaveStateHandler.prototype.selectInitialNodes = function (nodeIds) { var selectCount = 0; for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) { var nodeId = nodeIds_2[_i]; @@ -2954,7 +3004,7 @@ var SaveStateHandler = /** @class */ (function () { } return selectCount !== 0; }; - SaveStateHandler.prototype._resetSelection = function () { + SaveStateHandler.prototype.resetSelection = function () { var selectNodeHandler = this.treeWidget.selectNodeHandler; if (selectNodeHandler) { var selectedNodes = selectNodeHandler.getSelectedNodes(); @@ -2963,7 +3013,7 @@ var SaveStateHandler = /** @class */ (function () { }); } }; - SaveStateHandler.prototype._setInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) { + SaveStateHandler.prototype.doSetInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) { var _this = this; var loadingCount = 0; var nodeIds = nodeIdsParam; @@ -2987,7 +3037,7 @@ var SaveStateHandler = /** @class */ (function () { } } nodeIds = newNodesIds; - if (_this._selectInitialNodes(selectedNodes)) { + if (_this.selectInitialNodes(selectedNodes)) { _this.treeWidget._refreshElements(null); } if (loadingCount === 0) { @@ -3110,7 +3160,8 @@ var ScrollHandler = /** @class */ (function () { for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) { var attr = cssAttributes_1[_i]; var overflowValue = $el.css(attr); - if (overflowValue === "auto" || overflowValue === "scroll") { + if (overflowValue === "auto" || + overflowValue === "scroll") { return true; } } @@ -3136,7 +3187,9 @@ var ScrollHandler = /** @class */ (function () { setDocumentAsScrollParent(); } var $scrollParent = getParentWithOverflow(); - if ($scrollParent && $scrollParent.length && $scrollParent[0].tagName !== "HTML") { + if ($scrollParent && + $scrollParent.length && + $scrollParent[0].tagName !== "HTML") { this.$scrollParent = $scrollParent; var offset = this.$scrollParent.offset(); this.scrollParentTop = offset ? offset.top : 0; @@ -3182,7 +3235,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.checkVerticalScrolling = function () { - var hoveredArea = this.treeWidget.dndHandler && this.treeWidget.dndHandler.hoveredArea; + var hoveredArea = this.treeWidget.dndHandler && + this.treeWidget.dndHandler.hoveredArea; if (hoveredArea && hoveredArea.top !== this.previousTop) { this.previousTop = hoveredArea.top; if (this.$scrollParent) { @@ -3194,7 +3248,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.checkHorizontalScrolling = function () { - var positionInfo = this.treeWidget.dndHandler && this.treeWidget.dndHandler.positionInfo; + var positionInfo = this.treeWidget.dndHandler && + this.treeWidget.dndHandler.positionInfo; if (!positionInfo) { return; } @@ -3206,7 +3261,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return; } var $scrollParent = this.$scrollParent; @@ -3215,7 +3271,8 @@ var ScrollHandler = /** @class */ (function () { return; } var scrollParent = $scrollParent[0]; - var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < scrollParent.scrollWidth; + var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth < + scrollParent.scrollWidth; var canScrollLeft = scrollParent.scrollLeft > 0; var rightEdge = scrollParentOffset.left + scrollParent.clientWidth; var leftEdge = scrollParentOffset.left; @@ -3229,7 +3286,8 @@ var ScrollHandler = /** @class */ (function () { } }; ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) { - if (positionInfo.pageX === undefined || positionInfo.pageY === undefined) { + if (positionInfo.pageX === undefined || + positionInfo.pageY === undefined) { return; } var $document = jQuery(document); @@ -3337,7 +3395,8 @@ var SelectNodeHandler = /** @class */ (function () { var _this = this; if (includeChildren === void 0) { includeChildren = false; } if (node.id == null) { - if (this.selectedSingleNode && node.element === this.selectedSingleNode.element) { + if (this.selectedSingleNode && + node.element === this.selectedSingleNode.element) { this.selectedSingleNode = null; } } @@ -3427,7 +3486,9 @@ var NodeElement = /** @class */ (function () { return this.$element.children("ul:first"); }; NodeElement.prototype.getSpan = function () { - return this.$element.children(".jqtree-element").find("span.jqtree-title"); + return this.$element + .children(".jqtree-element") + .find("span.jqtree-title"); }; NodeElement.prototype.getLi = function () { return this.$element; @@ -3516,7 +3577,9 @@ var FolderElement = /** @class */ (function (_super) { return !this.node.is_open && position === node_1.Position.Inside; }; FolderElement.prototype.getButton = function () { - return this.$element.children(".jqtree-element").find("a.jqtree-toggler"); + return this.$element + .children(".jqtree-element") + .find("a.jqtree-toggler"); }; return FolderElement; }(NodeElement)); @@ -3587,4 +3650,5 @@ module.exports = __webpack_require__(4); /***/ }) -/******/ ]); \ No newline at end of file +/******/ ]); +//# sourceMappingURL=tree.jquery.js.map \ No newline at end of file diff --git a/tree.jquery.js b/tree.jquery.js index ca3b97e1..a6710986 100644 --- a/tree.jquery.js +++ b/tree.jquery.js @@ -15,4 +15,5 @@ * See the License for the specific language governing permissions and * limitations under the License. * - */!function(e){var t={};function o(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=t,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=16)}([function(e,t,o){"use strict";var n;t.__esModule=!0,function(e){e[e.Before=1]="Before",e[e.After=2]="After",e[e.Inside=3]="Inside",e[e.None=4]="None"}(n=t.Position||(t.Position={}));var r={before:n.Before,after:n.After,inside:n.Inside,none:n.None};t.getPositionName=function(e){for(var t in r)if(r.hasOwnProperty(t)&&r[t]===e)return t;return""},t.getPosition=function(e){return r[e]};var i=function(){function e(t,o,n){void 0===o&&(o=!1),void 0===n&&(n=e),this.name="",this.isEmptyFolder=!1,this.setData(t),this.children=[],this.parent=null,o&&(this.idMapping={},this.tree=this,this.nodeClass=n)}return e.prototype.setData=function(e){var t=this,o=function(e){null!=e&&(t.name=e)};if(e)if("object"!=typeof e)o(e);else for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];"label"===n?o(r):"children"!==n&&(this[n]=r)}},e.prototype.loadFromData=function(e){this.removeChildren();for(var t=0,o=e;t=0?this.parent.children[e]:null}return null},e.prototype.getNextSibling=function(){if(this.parent){var e=this.parent.getChildIndex(this)+1;return e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")},t.getBoolString=function(e){return e?"true":"false"}},function(e,t){e.exports=jQuery},function(e,t,o){"use strict";t.__esModule=!0;var n=function(){function e(e,t){this.$el=jQuery(e);var o=this.constructor.defaults;this.options=jQuery.extend({},o,t)}return e.register=function(t,o){var n=function(){return"simple_widget_"+o};function r(t,o){var n=jQuery.data(t,o);return n&&n instanceof e?n:null}function i(e,o){for(var i=n(),s=0,a=e.get();so.right||t>o.bottom)return null;for(var n=0,r=this.hitAreas.length;n>1,s=this.hitAreas[i];if(ts.bottom))return s;n=i+1}}return null},e.prototype.mustOpenFolderTimer=function(e){var t=e.node;return t.isFolder()&&!t.is_open&&e.position===s.Position.Inside},e.prototype.updateDropHint=function(){if(this.hoveredArea){this.removeDropHint();var e=this.treeWidget._getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}},e.prototype.startOpenFolderTimer=function(e){var t=this;this.stopOpenFolderTimer(),this.openFolderTimer=window.setTimeout(function(){t.treeWidget._openNode(e,t.treeWidget.options.slide,function(){t.refresh(),t.updateDropHint()})},this.treeWidget.options.openFolderDelay)},e.prototype.stopOpenFolderTimer=function(){this.openFolderTimer&&(clearTimeout(this.openFolderTimer),this.openFolderTimer=null)},e.prototype.moveItem=function(e){var t=this;if(this.currentItem&&this.hoveredArea&&this.hoveredArea.position!==s.Position.None&&this.canMoveToArea(this.hoveredArea)){var o=this.currentItem.node,n=this.hoveredArea.node,r=this.hoveredArea.position,i=o.parent;r===s.Position.Inside&&(this.hoveredArea.node.is_open=!0);var a=function(){t.treeWidget.tree.moveNode(o,n,r),t.treeWidget.element.empty(),t.treeWidget._refreshElements(null)};this.treeWidget._triggerEvent("tree.move",{move_info:{moved_node:o,target_node:n,position:s.getPositionName(r),previous_parent:i,do_move:a,original_event:e.originalEvent}}).isDefaultPrevented()||a()}},e.prototype.getTreeDimensions=function(){var e=this.treeWidget.element.offset();if(e){var t=this.treeWidget.element,o=t.width()||0,n=t.height()||0,r=e.left+this.treeWidget._getScrollLeft();return{left:r,top:e.top,right:r+o,bottom:e.top+n+16}}return{left:0,top:0,right:0,bottom:0}},e}();t.DragAndDropHandler=l;var d=function(e){function t(t,o,n){var r=e.call(this,t)||this;return r.currentNode=o,r.treeBottom=n,r}return r(t,e),t.prototype.generate=function(){return this.positions=[],this.lastTop=0,this.iterate(),this.generateHitAreas(this.positions)},t.prototype.generateHitAreas=function(e){for(var t=-1,o=[],n=[],r=0,i=e;r'+e+""),this.$element.css("position","absolute"),n.append(this.$element)}return e.prototype.move=function(e,t){this.$element.offset({left:e-this.offsetX,top:t-this.offsetY})},e.prototype.remove=function(){this.$element.remove()},e}()},function(e,t,o){"use strict";t.__esModule=!0;var n=o(1),r=function(){function e(e){this.treeWidget=e,this.openedIconElement=this.createButtonElement(e.options.openedIcon),this.closedIconElement=this.createButtonElement(e.options.closedIcon)}return e.prototype.render=function(e){e&&e.parent?this.renderFromNode(e):this.renderFromRoot()},e.prototype.renderFromRoot=function(){var e=this.treeWidget.element;e.empty(),this.createDomElements(e[0],this.treeWidget.tree.children,!0,1)},e.prototype.renderFromNode=function(e){var t=jQuery(e.element),o=this.createLi(e,e.getLevel());this.attachNodeData(e,o),t.after(o),t.remove(),e.children&&this.createDomElements(o,e.children,!1,e.getLevel()+1)},e.prototype.createDomElements=function(e,t,o,n){var r=this.createUl(o);e.appendChild(r);for(var i=0,s=t;i1)){var n=o.changedTouches[0];return t._handleMouseDown(t._getPositionInfo(n))}},t.touchMove=function(e){var o=e.originalEvent;if(!(o.touches.length>1)){var n=o.changedTouches[0];return t._handleMouseMove(e,t._getPositionInfo(n))}},t.touchEnd=function(e){var o=e.originalEvent;if(!(o.touches.length>1)){var n=o.changedTouches[0];return t._handleMouseUp(t._getPositionInfo(n))}},t}return r(t,e),t.prototype.setMouseDelay=function(e){this.mouseDelay=e},t.prototype._init=function(){this.$el.on("mousedown.mousewidget",this.mouseDown),this.$el.on("touchstart.mousewidget",this.touchStart),this.isMouseStarted=!1,this.mouseDelay=0,this.mouseDelayTimer=null,this.isMouseDelayMet=!0,this.mouseDownInfo=null},t.prototype._deinit=function(){this.$el.off("mousedown.mousewidget"),this.$el.off("touchstart.mousewidget");var e=jQuery(document);e.off("mousemove.mousewidget"),e.off("mouseup.mousewidget")},t.prototype._handleMouseDown=function(e){if(this.isMouseStarted&&this._handleMouseUp(e),this.mouseDownInfo=e,this._mouseCapture(e))return this._handleStartMouse(),!0},t.prototype._handleStartMouse=function(){var e=jQuery(document);e.on("mousemove.mousewidget",this.mouseMove),e.on("touchmove.mousewidget",this.touchMove),e.on("mouseup.mousewidget",this.mouseUp),e.on("touchend.mousewidget",this.touchEnd),this.mouseDelay&&this._startMouseDelayTimer()},t.prototype._startMouseDelayTimer=function(){var e=this;this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout(function(){e.isMouseDelayMet=!0},this.mouseDelay),this.isMouseDelayMet=!1},t.prototype._handleMouseMove=function(e,t){return this.isMouseStarted?(this._mouseDrag(t),e.preventDefault()):!(!this.mouseDelay||this.isMouseDelayMet)||(this.mouseDownInfo&&(this.isMouseStarted=!1!==this._mouseStart(this.mouseDownInfo)),this.isMouseStarted?this._mouseDrag(t):this._handleMouseUp(t),!this.isMouseStarted)},t.prototype._getPositionInfo=function(e){return{pageX:e.pageX,pageY:e.pageY,target:e.target,originalEvent:e}},t.prototype._handleMouseUp=function(e){var t=jQuery(document);t.off("mousemove.mousewidget"),t.off("touchmove.mousewidget"),t.off("mouseup.mousewidget"),t.off("touchend.mousewidget"),this.isMouseStarted&&(this.isMouseStarted=!1,this._mouseStop(e))},t}(o(3).default);t.default=i},function(e,t,o){"use strict";t.__esModule=!0;var n=o(1),r=function(){function e(e){this.treeWidget=e}return e.prototype.saveState=function(){var e=JSON.stringify(this.getState());this.treeWidget.options.onSetStateFromStorage?this.treeWidget.options.onSetStateFromStorage(e):this.supportsLocalStorage()&&localStorage.setItem(this.getKeyName(),e)},e.prototype.getStateFromStorage=function(){var e=this._loadFromStorage();return e?this._parseState(e):null},e.prototype.getState=function(){var e,t=this;return{open_nodes:(e=[],t.treeWidget.tree.iterate(function(t){return t.is_open&&t.id&&t.hasChildren()&&e.push(t.id),!0}),e),selected_node:t.treeWidget.getSelectedNodes().map(function(e){return e.id})}},e.prototype.setInitialState=function(e){if(e){var t=!1;return e.open_nodes&&(t=this._openInitialNodes(e.open_nodes)),e.selected_node&&(this._resetSelection(),this._selectInitialNodes(e.selected_node)),t}return!1},e.prototype.setInitialStateOnDemand=function(e,t){e?this._setInitialStateOnDemand(e.open_nodes,e.selected_node,t):t()},e.prototype.getNodeIdToBeSelected=function(){var e=this.getStateFromStorage();return e&&e.selected_node?e.selected_node[0]:null},e.prototype._parseState=function(e){var t=jQuery.parseJSON(e);return t&&t.selected_node&&n.isInt(t.selected_node)&&(t.selected_node=[t.selected_node]),t},e.prototype._loadFromStorage=function(){return this.treeWidget.options.onGetStateFromStorage?this.treeWidget.options.onGetStateFromStorage():this.supportsLocalStorage()?localStorage.getItem(this.getKeyName()):void 0},e.prototype._openInitialNodes=function(e){for(var t=!1,o=0,n=e;o=r},e.prototype.getScrollLeft=function(){return this.$scrollParent&&this.$scrollParent.scrollLeft()||0},e.prototype.initScrollParent=function(){var e=this,t=function(){e.scrollParentTop=0,e.$scrollParent=null};"fixed"===this.treeWidget.$el.css("position")&&t();var o=function(){var t=["overflow","overflow-y"],o=function(e){for(var o=0,n=t;o0,s=o.left+n.clientWidth,a=o.left,l=e.pageX>s-20,d=e.pageX0,i=e.pageX>n-20,s=e.pageX-o<20;i?t.scrollLeft(o+20):s&&r&&t.scrollLeft(Math.max(o-20,0))}},e}();t.default=n},function(e,t,o){"use strict";t.__esModule=!0;var n=function(){function e(e){this.treeWidget=e,this.clear()}return e.prototype.getSelectedNode=function(){var e=this.getSelectedNodes();return!!e.length&&e[0]},e.prototype.getSelectedNodes=function(){if(this.selectedSingleNode)return[this.selectedSingleNode];var e=[];for(var t in this.selectedNodes)if(this.selectedNodes.hasOwnProperty(t)){var o=this.treeWidget.getNodeById(t);o&&e.push(o)}return e},e.prototype.getSelectedNodesUnder=function(e){if(this.selectedSingleNode)return e.isParentOf(this.selectedSingleNode)?[this.selectedSingleNode]:[];var t=[];for(var o in this.selectedNodes)if(this.selectedNodes.hasOwnProperty(o)){var n=this.treeWidget.getNodeById(o);n&&e.isParentOf(n)&&t.push(n)}return t},e.prototype.isNodeSelected=function(e){return!!e&&(null!=e.id?!!this.selectedNodes[e.id]:!!this.selectedSingleNode&&this.selectedSingleNode.element===e.element)},e.prototype.clear=function(){this.selectedNodes={},this.selectedSingleNode=null},e.prototype.removeFromSelection=function(e,t){var o=this;void 0===t&&(t=!1),null==e.id?this.selectedSingleNode&&e.element===this.selectedSingleNode.element&&(this.selectedSingleNode=null):(delete this.selectedNodes[e.id],t&&e.iterate(function(){return delete o.selectedNodes[e.id],!0}))},e.prototype.addToSelection=function(e){null!=e.id?this.selectedNodes[e.id]=!0:this.selectedSingleNode=e},e}();t.default=n},function(e,t,o){"use strict";var n,r=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});t.__esModule=!0;var i=o(0),s=function(){function e(e,t){this.init(e,t)}return e.prototype.init=function(e,t){this.node=e,this.treeWidget=t,e.element||(e.element=this.treeWidget.element.get(0)),this.$element=jQuery(e.element)},e.prototype.addDropHint=function(e){return this.mustShowBorderDropHint(e)?new l(this.$element,this.treeWidget._getScrollLeft()):new d(this.node,this.$element,e)},e.prototype.select=function(e){var t=this.getLi();t.addClass("jqtree-selected"),t.attr("aria-selected","true");var o=this.getSpan();o.attr("tabindex",this.treeWidget.options.tabIndex),e&&o.focus()},e.prototype.deselect=function(){var e=this.getLi();e.removeClass("jqtree-selected"),e.attr("aria-selected","false");var t=this.getSpan();t.removeAttr("tabindex"),t.blur()},e.prototype.getUl=function(){return this.$element.children("ul:first")},e.prototype.getSpan=function(){return this.$element.children(".jqtree-element").find("span.jqtree-title")},e.prototype.getLi=function(){return this.$element},e.prototype.mustShowBorderDropHint=function(e){return e===i.Position.Inside},e}();t.NodeElement=s;var a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r(t,e),t.prototype.open=function(e,t,o){var n=this;if(void 0===t&&(t=!0),void 0===o&&(o="fast"),!this.node.is_open){this.node.is_open=!0;var r=this.getButton();r.removeClass("jqtree-closed"),r.html("");var i=r.get(0);if(i){var s=this.treeWidget.renderer.openedIconElement.cloneNode(!0);i.appendChild(s)}var a=function(){n.getLi().removeClass("jqtree-closed"),n.getSpan().attr("aria-expanded","true"),e&&e(n.node),n.treeWidget._triggerEvent("tree.open",{node:n.node})};t?this.getUl().slideDown(o,a):(this.getUl().show(),a())}},t.prototype.close=function(e,t){var o=this;if(void 0===e&&(e=!0),void 0===t&&(t="fast"),this.node.is_open){this.node.is_open=!1;var n=this.getButton();n.addClass("jqtree-closed"),n.html("");var r=n.get(0);if(r){var i=this.treeWidget.renderer.closedIconElement.cloneNode(!0);r.appendChild(i)}var s=function(){o.getLi().addClass("jqtree-closed"),o.getSpan().attr("aria-expanded","false"),o.treeWidget._triggerEvent("tree.close",{node:o.node})};e?this.getUl().slideUp(t,s):(this.getUl().hide(),s())}},t.prototype.mustShowBorderDropHint=function(e){return!this.node.is_open&&e===i.Position.Inside},t.prototype.getButton=function(){return this.$element.children(".jqtree-element").find("a.jqtree-toggler")},t}(s);t.FolderElement=a;var l=function(){function e(e,t){var o=e.children(".jqtree-element"),n=e.width()||0,r=Math.max(n+t-4,0),i=o.outerHeight()||0,s=Math.max(i-4,0);this.$hint=jQuery(''),o.append(this.$hint),this.$hint.css({width:r,height:s})}return e.prototype.remove=function(){this.$hint.remove()},e}();t.BorderDropHint=l;var d=function(){function e(e,t,o){this.$element=t,this.node=e,this.$ghost=jQuery('
  • \n
  • '),o===i.Position.After?this.moveAfter():o===i.Position.Before?this.moveBefore():o===i.Position.Inside&&(e.isFolder()&&e.is_open?this.moveInsideOpenFolder():this.moveInside())}return e.prototype.remove=function(){this.$ghost.remove()},e.prototype.moveAfter=function(){this.$element.after(this.$ghost)},e.prototype.moveBefore=function(){this.$element.before(this.$ghost)},e.prototype.moveInsideOpenFolder=function(){jQuery(this.node.children[0].element).before(this.$ghost)},e.prototype.moveInside=function(){this.$element.after(this.$ghost),this.$ghost.addClass("jqtree-inside")},e}()},,function(e,t,o){e.exports=o(4)}]); \ No newline at end of file + */!function(e){var t={};function o(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=t,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=16)}([function(e,t,o){"use strict";var n;t.__esModule=!0,function(e){e[e.Before=1]="Before",e[e.After=2]="After",e[e.Inside=3]="Inside",e[e.None=4]="None"}(n=t.Position||(t.Position={}));var r={before:n.Before,after:n.After,inside:n.Inside,none:n.None};t.getPositionName=function(e){for(var t in r)if(r.hasOwnProperty(t)&&r[t]===e)return t;return""},t.getPosition=function(e){return r[e]};var i=function(){function e(t,o,n){void 0===o&&(o=!1),void 0===n&&(n=e),this.name="",this.isEmptyFolder=!1,this.setData(t),this.children=[],this.parent=null,o&&(this.idMapping={},this.tree=this,this.nodeClass=n)}return e.prototype.setData=function(e){var t=this,o=function(e){null!=e&&(t.name=e)};if(e)if("object"!=typeof e)o(e);else for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];"label"===n?o(r):"children"!==n&&(this[n]=r)}},e.prototype.loadFromData=function(e){this.removeChildren();for(var t=0,o=e;t=0?this.parent.children[e]:null}return null},e.prototype.getNextSibling=function(){if(this.parent){var e=this.parent.getChildIndex(this)+1;return e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")},t.getBoolString=function(e){return e?"true":"false"}},function(e,t){e.exports=jQuery},function(e,t,o){"use strict";t.__esModule=!0;var n=function(){function e(e,t){this.$el=jQuery(e);var o=this.constructor.defaults;this.options=jQuery.extend({},o,t)}return e.register=function(t,o){var n=function(){return"simple_widget_"+o};function r(t,o){var n=jQuery.data(t,o);return n&&n instanceof e?n:null}function i(e,o){for(var i=n(),s=0,a=e.get();so.right||t>o.bottom)return null;for(var n=0,r=this.hitAreas.length;n>1,s=this.hitAreas[i];if(ts.bottom))return s;n=i+1}}return null},e.prototype.mustOpenFolderTimer=function(e){var t=e.node;return t.isFolder()&&!t.is_open&&e.position===s.Position.Inside},e.prototype.updateDropHint=function(){if(this.hoveredArea){this.removeDropHint();var e=this.treeWidget._getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}},e.prototype.startOpenFolderTimer=function(e){var t=this;this.stopOpenFolderTimer(),this.openFolderTimer=window.setTimeout(function(){t.treeWidget._openNode(e,t.treeWidget.options.slide,function(){t.refresh(),t.updateDropHint()})},this.treeWidget.options.openFolderDelay)},e.prototype.stopOpenFolderTimer=function(){this.openFolderTimer&&(clearTimeout(this.openFolderTimer),this.openFolderTimer=null)},e.prototype.moveItem=function(e){var t=this;if(this.currentItem&&this.hoveredArea&&this.hoveredArea.position!==s.Position.None&&this.canMoveToArea(this.hoveredArea)){var o=this.currentItem.node,n=this.hoveredArea.node,r=this.hoveredArea.position,i=o.parent;r===s.Position.Inside&&(this.hoveredArea.node.is_open=!0);var a=function(){t.treeWidget.tree.moveNode(o,n,r),t.treeWidget.element.empty(),t.treeWidget._refreshElements(null)};this.treeWidget._triggerEvent("tree.move",{move_info:{moved_node:o,target_node:n,position:s.getPositionName(r),previous_parent:i,do_move:a,original_event:e.originalEvent}}).isDefaultPrevented()||a()}},e.prototype.getTreeDimensions=function(){var e=this.treeWidget.element.offset();if(e){var t=this.treeWidget.element,o=t.width()||0,n=t.height()||0,r=e.left+this.treeWidget._getScrollLeft();return{left:r,top:e.top,right:r+o,bottom:e.top+n+16}}return{left:0,top:0,right:0,bottom:0}},e}();t.DragAndDropHandler=l;var d=function(e){function t(t,o,n){var r=e.call(this,t)||this;return r.currentNode=o,r.treeBottom=n,r}return r(t,e),t.prototype.generate=function(){return this.positions=[],this.lastTop=0,this.iterate(),this.generateHitAreas(this.positions)},t.prototype.generateHitAreas=function(e){for(var t=-1,o=[],n=[],r=0,i=e;r'+e+""),this.$element.css("position","absolute"),n.append(this.$element)}return e.prototype.move=function(e,t){this.$element.offset({left:e-this.offsetX,top:t-this.offsetY})},e.prototype.remove=function(){this.$element.remove()},e}()},function(e,t,o){"use strict";t.__esModule=!0;var n=o(1),r=function(){function e(e){this.treeWidget=e,this.openedIconElement=this.createButtonElement(e.options.openedIcon),this.closedIconElement=this.createButtonElement(e.options.closedIcon)}return e.prototype.render=function(e){e&&e.parent?this.renderFromNode(e):this.renderFromRoot()},e.prototype.renderFromRoot=function(){var e=this.treeWidget.element;e.empty(),this.createDomElements(e[0],this.treeWidget.tree.children,!0,1)},e.prototype.renderFromNode=function(e){var t=jQuery(e.element),o=this.createLi(e,e.getLevel());this.attachNodeData(e,o),t.after(o),t.remove(),e.children&&this.createDomElements(o,e.children,!1,e.getLevel()+1)},e.prototype.createDomElements=function(e,t,o,n){var r=this.createUl(o);e.appendChild(r);for(var i=0,s=t;i1)){var n=o.changedTouches[0];return t.handleMouseDown(t.getPositionInfo(n))}},t.touchMove=function(e){var o=e.originalEvent;if(!(o.touches.length>1)){var n=o.changedTouches[0];return t.handleMouseMove(e,t.getPositionInfo(n))}},t.touchEnd=function(e){var o=e.originalEvent;if(!(o.touches.length>1)){var n=o.changedTouches[0];return t.handleMouseUp(t.getPositionInfo(n))}},t}return r(t,e),t.prototype.setMouseDelay=function(e){this.mouseDelay=e},t.prototype.init=function(){this.$el.on("mousedown.mousewidget",this.mouseDown),this.$el.on("touchstart.mousewidget",this.touchStart),this.isMouseStarted=!1,this.mouseDelay=0,this.mouseDelayTimer=null,this.isMouseDelayMet=!0,this.mouseDownInfo=null},t.prototype.deinit=function(){this.$el.off("mousedown.mousewidget"),this.$el.off("touchstart.mousewidget");var e=jQuery(document);e.off("mousemove.mousewidget"),e.off("mouseup.mousewidget")},t.prototype.handleMouseDown=function(e){if(this.isMouseStarted&&this.handleMouseUp(e),this.mouseDownInfo=e,this.mouseCapture(e))return this.handleStartMouse(),!0},t.prototype.handleStartMouse=function(){var e=jQuery(document);e.on("mousemove.mousewidget",this.mouseMove),e.on("touchmove.mousewidget",this.touchMove),e.on("mouseup.mousewidget",this.mouseUp),e.on("touchend.mousewidget",this.touchEnd),this.mouseDelay&&this.startMouseDelayTimer()},t.prototype.startMouseDelayTimer=function(){var e=this;this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout(function(){e.isMouseDelayMet=!0},this.mouseDelay),this.isMouseDelayMet=!1},t.prototype.handleMouseMove=function(e,t){return this.isMouseStarted?(this.mouseDrag(t),e.preventDefault()):!(!this.mouseDelay||this.isMouseDelayMet)||(this.mouseDownInfo&&(this.isMouseStarted=!1!==this.mouseStart(this.mouseDownInfo)),this.isMouseStarted?this.mouseDrag(t):this.handleMouseUp(t),!this.isMouseStarted)},t.prototype.getPositionInfo=function(e){return{pageX:e.pageX,pageY:e.pageY,target:e.target,originalEvent:e}},t.prototype.handleMouseUp=function(e){var t=jQuery(document);t.off("mousemove.mousewidget"),t.off("touchmove.mousewidget"),t.off("mouseup.mousewidget"),t.off("touchend.mousewidget"),this.isMouseStarted&&(this.isMouseStarted=!1,this.mouseStop(e))},t}(o(3).default);t.default=i},function(e,t,o){"use strict";t.__esModule=!0;var n=o(1),r=function(){function e(e){this.treeWidget=e}return e.prototype.saveState=function(){var e=JSON.stringify(this.getState());this.treeWidget.options.onSetStateFromStorage?this.treeWidget.options.onSetStateFromStorage(e):this.supportsLocalStorage()&&localStorage.setItem(this.getKeyName(),e)},e.prototype.getStateFromStorage=function(){var e=this.loadFromStorage();return e?this.parseState(e):null},e.prototype.getState=function(){var e,t=this;return{open_nodes:(e=[],t.treeWidget.tree.iterate(function(t){return t.is_open&&t.id&&t.hasChildren()&&e.push(t.id),!0}),e),selected_node:t.treeWidget.getSelectedNodes().map(function(e){return e.id})}},e.prototype.setInitialState=function(e){if(e){var t=!1;return e.open_nodes&&(t=this.openInitialNodes(e.open_nodes)),e.selected_node&&(this.resetSelection(),this.selectInitialNodes(e.selected_node)),t}return!1},e.prototype.setInitialStateOnDemand=function(e,t){e?this.doSetInitialStateOnDemand(e.open_nodes,e.selected_node,t):t()},e.prototype.getNodeIdToBeSelected=function(){var e=this.getStateFromStorage();return e&&e.selected_node?e.selected_node[0]:null},e.prototype.parseState=function(e){var t=jQuery.parseJSON(e);return t&&t.selected_node&&n.isInt(t.selected_node)&&(t.selected_node=[t.selected_node]),t},e.prototype.loadFromStorage=function(){return this.treeWidget.options.onGetStateFromStorage?this.treeWidget.options.onGetStateFromStorage():this.supportsLocalStorage()?localStorage.getItem(this.getKeyName()):void 0},e.prototype.openInitialNodes=function(e){for(var t=!1,o=0,n=e;o=r},e.prototype.getScrollLeft=function(){return this.$scrollParent&&this.$scrollParent.scrollLeft()||0},e.prototype.initScrollParent=function(){var e=this,t=function(){e.scrollParentTop=0,e.$scrollParent=null};"fixed"===this.treeWidget.$el.css("position")&&t();var o=function(){var t=["overflow","overflow-y"],o=function(e){for(var o=0,n=t;o0,s=o.left+n.clientWidth,a=o.left,l=e.pageX>s-20,d=e.pageX0,i=e.pageX>n-20,s=e.pageX-o<20;i?t.scrollLeft(o+20):s&&r&&t.scrollLeft(Math.max(o-20,0))}},e}();t.default=n},function(e,t,o){"use strict";t.__esModule=!0;var n=function(){function e(e){this.treeWidget=e,this.clear()}return e.prototype.getSelectedNode=function(){var e=this.getSelectedNodes();return!!e.length&&e[0]},e.prototype.getSelectedNodes=function(){if(this.selectedSingleNode)return[this.selectedSingleNode];var e=[];for(var t in this.selectedNodes)if(this.selectedNodes.hasOwnProperty(t)){var o=this.treeWidget.getNodeById(t);o&&e.push(o)}return e},e.prototype.getSelectedNodesUnder=function(e){if(this.selectedSingleNode)return e.isParentOf(this.selectedSingleNode)?[this.selectedSingleNode]:[];var t=[];for(var o in this.selectedNodes)if(this.selectedNodes.hasOwnProperty(o)){var n=this.treeWidget.getNodeById(o);n&&e.isParentOf(n)&&t.push(n)}return t},e.prototype.isNodeSelected=function(e){return!!e&&(null!=e.id?!!this.selectedNodes[e.id]:!!this.selectedSingleNode&&this.selectedSingleNode.element===e.element)},e.prototype.clear=function(){this.selectedNodes={},this.selectedSingleNode=null},e.prototype.removeFromSelection=function(e,t){var o=this;void 0===t&&(t=!1),null==e.id?this.selectedSingleNode&&e.element===this.selectedSingleNode.element&&(this.selectedSingleNode=null):(delete this.selectedNodes[e.id],t&&e.iterate(function(){return delete o.selectedNodes[e.id],!0}))},e.prototype.addToSelection=function(e){null!=e.id?this.selectedNodes[e.id]=!0:this.selectedSingleNode=e},e}();t.default=n},function(e,t,o){"use strict";var n,r=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});t.__esModule=!0;var i=o(0),s=function(){function e(e,t){this.init(e,t)}return e.prototype.init=function(e,t){this.node=e,this.treeWidget=t,e.element||(e.element=this.treeWidget.element.get(0)),this.$element=jQuery(e.element)},e.prototype.addDropHint=function(e){return this.mustShowBorderDropHint(e)?new l(this.$element,this.treeWidget._getScrollLeft()):new d(this.node,this.$element,e)},e.prototype.select=function(e){var t=this.getLi();t.addClass("jqtree-selected"),t.attr("aria-selected","true");var o=this.getSpan();o.attr("tabindex",this.treeWidget.options.tabIndex),e&&o.focus()},e.prototype.deselect=function(){var e=this.getLi();e.removeClass("jqtree-selected"),e.attr("aria-selected","false");var t=this.getSpan();t.removeAttr("tabindex"),t.blur()},e.prototype.getUl=function(){return this.$element.children("ul:first")},e.prototype.getSpan=function(){return this.$element.children(".jqtree-element").find("span.jqtree-title")},e.prototype.getLi=function(){return this.$element},e.prototype.mustShowBorderDropHint=function(e){return e===i.Position.Inside},e}();t.NodeElement=s;var a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return r(t,e),t.prototype.open=function(e,t,o){var n=this;if(void 0===t&&(t=!0),void 0===o&&(o="fast"),!this.node.is_open){this.node.is_open=!0;var r=this.getButton();r.removeClass("jqtree-closed"),r.html("");var i=r.get(0);if(i){var s=this.treeWidget.renderer.openedIconElement.cloneNode(!0);i.appendChild(s)}var a=function(){n.getLi().removeClass("jqtree-closed"),n.getSpan().attr("aria-expanded","true"),e&&e(n.node),n.treeWidget._triggerEvent("tree.open",{node:n.node})};t?this.getUl().slideDown(o,a):(this.getUl().show(),a())}},t.prototype.close=function(e,t){var o=this;if(void 0===e&&(e=!0),void 0===t&&(t="fast"),this.node.is_open){this.node.is_open=!1;var n=this.getButton();n.addClass("jqtree-closed"),n.html("");var r=n.get(0);if(r){var i=this.treeWidget.renderer.closedIconElement.cloneNode(!0);r.appendChild(i)}var s=function(){o.getLi().addClass("jqtree-closed"),o.getSpan().attr("aria-expanded","false"),o.treeWidget._triggerEvent("tree.close",{node:o.node})};e?this.getUl().slideUp(t,s):(this.getUl().hide(),s())}},t.prototype.mustShowBorderDropHint=function(e){return!this.node.is_open&&e===i.Position.Inside},t.prototype.getButton=function(){return this.$element.children(".jqtree-element").find("a.jqtree-toggler")},t}(s);t.FolderElement=a;var l=function(){function e(e,t){var o=e.children(".jqtree-element"),n=e.width()||0,r=Math.max(n+t-4,0),i=o.outerHeight()||0,s=Math.max(i-4,0);this.$hint=jQuery(''),o.append(this.$hint),this.$hint.css({width:r,height:s})}return e.prototype.remove=function(){this.$hint.remove()},e}();t.BorderDropHint=l;var d=function(){function e(e,t,o){this.$element=t,this.node=e,this.$ghost=jQuery('
  • \n
  • '),o===i.Position.After?this.moveAfter():o===i.Position.Before?this.moveBefore():o===i.Position.Inside&&(e.isFolder()&&e.is_open?this.moveInsideOpenFolder():this.moveInside())}return e.prototype.remove=function(){this.$ghost.remove()},e.prototype.moveAfter=function(){this.$element.after(this.$ghost)},e.prototype.moveBefore=function(){this.$element.before(this.$ghost)},e.prototype.moveInsideOpenFolder=function(){jQuery(this.node.children[0].element).before(this.$ghost)},e.prototype.moveInside=function(){this.$element.after(this.$ghost),this.$ghost.addClass("jqtree-inside")},e}()},,function(e,t,o){e.exports=o(4)}]); +//# sourceMappingURL=tree.jquery.js.map \ No newline at end of file diff --git a/webpack.config.base.js b/webpack.config.base.js index 48e90fc9..8cdeea3e 100644 --- a/webpack.config.base.js +++ b/webpack.config.base.js @@ -1,27 +1,27 @@ -var fs = require("fs"); -var path = require("path"); -var webpack = require("webpack"); -var template = require("lodash.template"); -var jsonfile = require("jsonfile"); +const fs = require("fs"); +const path = require("path"); +const webpack = require("webpack"); +const template = require("lodash.template"); +const jsonfile = require("jsonfile"); module.exports = function(debug, minimize) { function getHeader() { if (debug) { return ""; } else { - var header_template = fs.readFileSync("./src/header.txt", "utf8"); - var package = jsonfile.readFileSync("package.json"); + const headerTemplate = fs.readFileSync("./src/header.txt", "utf8"); + const package = jsonfile.readFileSync("package.json"); - var data = { + const data = { version: package.version, year: new Date().getFullYear() }; - return template(header_template)(data); + return template(headerTemplate)(data); } } - var config = { + const config = { entry: { "tree.jquery": ["./src/tree.jquery.ts"], test: ["./src_test/test.ts"] @@ -60,9 +60,10 @@ module.exports = function(debug, minimize) { }; if (debug) { - config["devtool"] = "source-map"; + config["devtool"] = "eval"; config["watch"] = true; } else { + config["devtool"] = "source-map"; config["plugins"] = [new webpack.BannerPlugin(getHeader())]; }