From ff3562f514a411ae83556b1c3e3b2adbe6bcd548 Mon Sep 17 00:00:00 2001 From: ElectricMaxxx Date: Mon, 31 Jul 2017 14:27:21 +0200 Subject: [PATCH 1/3] #158 fix error handling and move back on failing reorder --- src/Resources/assets/js/adapter/fancytree.js | 62 ++++++++++++++++---- 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/src/Resources/assets/js/adapter/fancytree.js b/src/Resources/assets/js/adapter/fancytree.js index 73b5a92..a155c99 100644 --- a/src/Resources/assets/js/adapter/fancytree.js +++ b/src/Resources/assets/js/adapter/fancytree.js @@ -265,32 +265,68 @@ export class FancytreeAdapter { let parenPath = parentNode.data.refPath; let targetPath = parenPath + '/' + dropNodePath.substr(1 + dropNodePath.lastIndexOf('/')); - dropedNode.icon = 'fa fa-spinner fa-spin'; - dropedNode.renderTitle(); + let formerIcon = dropedNode.icon; let moveNodeInTree = (responseData) => { dropedNode.remove(); parentNode.addChildren(requestNodeToFancytreeNode(responseData)); }; - let onError = (jqxhr, textStatus, errorThrown) => { - node._error = { message: 'Failed to move the node.', details: errorThrown }; - node.renderStatus(); - console.error(errorThrown); - - setTimeout(function () { - node._error = null; - node.renderStatus(); - }, 1000); + + let setIcon = (nodeToSetOn, icon) => { + nodeToSetOn.icon = icon; + dropedNode.renderTitle(); + }; + + setIcon(dropedNode, 'fa fa-spinner fa-spin') + + let onError = (jqxhr) => { + let message = 'Failed to move node'; + let formerLabel = dropedNode.title; + if (jqxhr.hasOwnProperty('responseJSON') && jqxhr.responseJSON.hasOwnProperty('message')) { + message += ': ' + jqxhr.responseJSON.message; + } + let details = null; + if (jqxhr.hasOwnProperty('responseJSON')) { + details = jqxhr.responseJSON; + } + dropedNode._error = { message: message, details: details}; + dropedNode.renderStatus(); + + dropedNode.title += '[' + message + ']'; + dropedNode.renderTitle(); + + console.error(message); + setIcon(dropedNode, formerIcon); + + setTimeout(function () { + dropedNode._error = null; + dropedNode.title = formerLabel; + dropedNode.renderTitle(); + dropedNode.renderStatus(); + }, 1000); }; this.requestData.move(dropNodePath, targetPath).done((responseData) => { if (this.dndOptions.reorder) { this.requestData.reorder(parenPath, dropedAtPath, targetPath, data.hitMode).done((responseData) => { moveNodeInTree(responseData); if (fancytreeOptions.hasOwnProperty('sortChildren')) { - parentNode.sortChildren(fancytreeOptions.sortChildren, true); + parentNode.sortChildren(fancytreeOptions.sortChildren, true); } - }).fail(onError); + setIcon(dropedNode, formerIcon); + }).fail( (jqxhr) => { + onError(jqxhr); + setTimeout(() => { + this.requestData.move(targetPath, dropNodePath).done((responseData) => { + if (fancytreeOptions.hasOwnProperty('sortChildren')) { + parentNode.sortChildren(fancytreeOptions.sortChildren, true); + } + setIcon(dropedNode, formerIcon); + }); + }, 1000); + + }); } else { + dropedNode.icon = formerIcon; moveNodeInTree(responseData); } }).fail(onError); From 4c14104bb0d3ed2ceab1c61c3c22c57814c7bbb2 Mon Sep 17 00:00:00 2001 From: ElectricMaxxx Date: Mon, 31 Jul 2017 14:47:33 +0200 Subject: [PATCH 2/3] #153 reorder only, when not over --- src/Resources/assets/js/adapter/fancytree.js | 2 +- src/Resources/public/js/cmf_tree_browser.fancytree.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Resources/assets/js/adapter/fancytree.js b/src/Resources/assets/js/adapter/fancytree.js index a155c99..215e515 100644 --- a/src/Resources/assets/js/adapter/fancytree.js +++ b/src/Resources/assets/js/adapter/fancytree.js @@ -306,7 +306,7 @@ export class FancytreeAdapter { }, 1000); }; this.requestData.move(dropNodePath, targetPath).done((responseData) => { - if (this.dndOptions.reorder) { + if (positionBefore && this.dndOptions.reorder) { this.requestData.reorder(parenPath, dropedAtPath, targetPath, data.hitMode).done((responseData) => { moveNodeInTree(responseData); if (fancytreeOptions.hasOwnProperty('sortChildren')) { diff --git a/src/Resources/public/js/cmf_tree_browser.fancytree.js b/src/Resources/public/js/cmf_tree_browser.fancytree.js index 8271cf1..c732763 100644 --- a/src/Resources/public/js/cmf_tree_browser.fancytree.js +++ b/src/Resources/public/js/cmf_tree_browser.fancytree.js @@ -1,3 +1,3 @@ -!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(27),o=r(i),a=n(30);o.default.fn.cmfTree=function(e){e=o.default.extend({adapter:null,request:{load:null},actions:{}},e);var t=(0,o.default)(this),n=function(e){if("string"==typeof e)return(0,o.default)(e);if(e instanceof o.default)return e;throw"Cannot handle selector "+e+". You may want to pass a jQuery object or a jQuery selector."};if(!e.request.load)throw"cmfTree needs an AJAX URL to lazy load the tree, pass it using the `request.load` option.";e.adapter||(e.adapter=new a.FancytreeAdapter(e));var r=e.adapter;if(!r.bindToElement)throw"cmfTree adapters must have a bindToElement() method to specify the output element of the tree.";for(var i in e.actions)if(e.actions.hasOwnProperty(i)){if(!r.addAction)throw"The configured cmfTree adapter does not support actions, implement the addAction() method or use another adapter.";var s=e.actions[i];if(!s.url)throw'actions should have a url defined, "'+i+'" does not.';r.addAction(i,s.url,s.icon)}if(r.bindToElement(t),e.path_output){if(!r.bindToInput)throw"The configured cmfTree adapter does not support binding to an input field, implement the bindToInput() method or use another adapter.";r.bindToInput(n(e.path_output))}return r}},function(e,t,n){var r=n(44)("wks"),i=n(15),o=n(2).Symbol;e.exports=function(e){return r[e]||(r[e]=o&&o[e]||(o||i)("Symbol."+e))}},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t,n){var r=n(4),i=n(23);e.exports=n(10)?function(e,t,n){return r.setDesc(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n=Object;e.exports={create:n.create,getProto:n.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:n.getOwnPropertyDescriptor,setDesc:n.defineProperty,setDescs:n.defineProperties,getKeys:n.keys,getNames:n.getOwnPropertyNames,getSymbols:n.getOwnPropertySymbols,each:[].forEach}},function(e,t){e.exports={}},function(e,t,n){var r=n(2),i=n(3),o=n(15)("src"),a="toString",s=Function[a],l=(""+s).split(a);n(7).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,n,a){"function"==typeof n&&(n.hasOwnProperty(o)||i(n,o,e[t]?""+e[t]:l.join(String(t))),n.hasOwnProperty("name")||i(n,"name",t)),e===r?e[t]=n:(a||delete e[t],i(e,t,n))})(Function.prototype,a,function(){return"function"==typeof this&&this[o]||s.call(this)})},function(e,t){var n=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=n)},function(e,t,n){var r=n(33);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){e.exports=!n(20)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";var r=n(42),i=n(19),o=n(6),a=n(3),s=n(11),l=n(5),d=n(40),c=n(14),u=n(4).getProto,h=n(1)("iterator"),f=!([].keys&&"next"in[].keys()),p="@@iterator",g="keys",v="values",y=function(){return this};e.exports=function(e,t,n,b,m,x,_){d(n,t,b);var k,N,w=function(e){if(!f&&e in T)return T[e];switch(e){case g:return function(){return new n(this,e)};case v:return function(){return new n(this,e)}}return function(){return new n(this,e)}},C=t+" Iterator",S=m==v,E=!1,T=e.prototype,P=T[h]||T[p]||m&&T[m],A=P||w(m);if(P){var F=u(A.call(new e));c(F,C,!0),!r&&s(T,p)&&a(F,h,y),S&&P.name!==v&&(E=!0,A=function(){return P.call(this)})}if(r&&!_||!f&&!E&&T[h]||a(T,h,A),l[t]=A,l[C]=y,m)if(k={values:S?A:w(v),keys:x?A:w(g),entries:S?w("entries"):A},_)for(N in k)N in T||o(T,N,k[N]);else i(i.P+i.F*(f||E),t,k);return k}},function(e,t,n){var r=n(4).setDesc,i=n(11),o=n(1)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){var r=n(12);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){var r=n(18),i=n(1)("toStringTag"),o="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=(t=Object(e))[i])?n:o?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(2),i=n(7),o=n(3),a=n(6),s=n(8),l="prototype",d=function(e,t,n){var c,u,h,f,p=e&d.F,g=e&d.G,v=e&d.S,y=e&d.P,b=e&d.B,m=g?r:v?r[t]||(r[t]={}):(r[t]||{})[l],x=g?i:i[t]||(i[t]={}),_=x[l]||(x[l]={});g&&(n=t);for(c in n)u=!p&&m&&c in m,h=(u?m:n)[c],f=b&&u?s(h,r):y&&"function"==typeof h?s(Function.call,h):h,m&&!u&&a(m,c,h),x[c]!=h&&o(x,c,f),y&&_[c]!=h&&(_[c]=h)};r.core=i,d.F=1,d.G=2,d.S=4,d.P=8,d.B=16,d.W=32,e.exports=d},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var r=n(8),i=n(39),o=n(38),a=n(16),s=n(47),l=n(48);e.exports=function(e,t,n,d){var c,u,h,f=l(e),p=r(n,d,t?2:1),g=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(o(f))for(c=s(e.length);c>g;g++)t?p(a(u=e[g])[0],u[1]):p(e[g]);else for(h=f.call(e);!(u=h.next()).done;)i(h,p,u.value,t)}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(6);e.exports=function(e,t){for(var n in t)r(e,n,t[n]);return e}},function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError(n+": use the 'new' operator!");return e}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t){e.exports=jQuery},function(e,t){!function(e,t,n,r){"use strict";function i(e){return 0===e?"":e>0?"+"+e:""+e}function o(){s||(e.ui.plugin.add("draggable","connectToFancytree",{start:function(t,n){var r=e(this).data("ui-draggable")||e(this).data("draggable"),i=n.helper.data("ftSourceNode")||null;if(i)return r.offset.click.top=-2,r.offset.click.left=16,i.tree.ext.dnd._onDragEvent("start",i,null,t,n,r)},drag:function(t,n){var r,i,o,a=e(this).data("ui-draggable")||e(this).data("draggable"),s=n.helper.data("ftSourceNode")||null,l=n.helper.data("ftTargetNode")||null,d=e.ui.fancytree.getNode(t.target),c=s&&s.tree.options.dnd;return t.target&&!d&&(i=e(t.target).closest("div.fancytree-drag-helper,#fancytree-drop-marker").length>0)?(o=s||l||e.ui.fancytree,void o.debug("Drag event over helper: ignored.")):(n.helper.data("ftTargetNode",d),c&&c.updateHelper&&(r=s.tree._makeHookContext(s,t,{otherNode:d,ui:n,draggable:a,dropMarker:e("#fancytree-drop-marker")}),c.updateHelper.call(s.tree,s,r)),l&&l!==d&&l.tree.ext.dnd._onDragEvent("leave",l,s,t,n,a),void(d&&d.tree.options.dnd.dragDrop&&(d===l?d.tree.ext.dnd._onDragEvent("over",d,s,t,n,a):(d.tree.ext.dnd._onDragEvent("enter",d,s,t,n,a),d.tree.ext.dnd._onDragEvent("over",d,s,t,n,a)))))},stop:function(t,n){var r,i=e(this).data("ui-draggable")||e(this).data("draggable"),o=n.helper.data("ftSourceNode")||null,a=n.helper.data("ftTargetNode")||null,s="mouseup"===t.type&&1===t.which;s||(r=o||a||e.ui.fancytree,r.debug("Drag was cancelled")),a&&(s&&a.tree.ext.dnd._onDragEvent("drop",a,o,t,n,i),a.tree.ext.dnd._onDragEvent("leave",a,o,t,n,i)),o&&o.tree.ext.dnd._onDragEvent("stop",o,null,t,n,i)}}),s=!0)}function a(t){var n=t.options.dnd||null,r=t.options.glyph||null;n&&o(),n&&n.dragStart&&t.widget.element.draggable(e.extend({addClasses:!1,appendTo:t.$container,containment:!1,delay:0,distance:4,revert:!1,scroll:!0,scrollSpeed:7,scrollSensitivity:10,connectToFancytree:!0,helper:function(t){var n,i,o,a=e.ui.fancytree.getNode(t.target);return a?(o=a.tree.options.dnd,i=e(a.span),n=e("
").css({zIndex:3,position:"relative"}).append(i.find("span.fancytree-title").clone()),n.data("ftSourceNode",a),r&&n.find(".fancytree-drag-helper-img").addClass(r.map.dragHelper),o.initHelper&&o.initHelper.call(a.tree,a,{node:a,tree:a.tree,originalEvent:t,ui:{helper:n}}),n):"
ERROR?: helper requested but sourceNode not found
"},start:function(e,t){var n=t.helper.data("ftSourceNode");return!!n}},t.options.dnd.draggable)),n&&n.dragDrop&&t.widget.element.droppable(e.extend({addClasses:!1,tolerance:"intersect",greedy:!1},t.options.dnd.droppable))}var s=!1,l="fancytree-drop-accept",d="fancytree-drop-after",c="fancytree-drop-before",u="fancytree-drop-over",h="fancytree-drop-reject",f="fancytree-drop-target";e.ui.fancytree.registerExtension({name:"dnd",version:"2.21.0",options:{autoExpandMS:1e3,draggable:null,droppable:null,focusOnClick:!1,preventVoidMoves:!0,preventRecursiveMoves:!0,smartRevert:!0,dragStart:null,dragStop:null,initHelper:null,updateHelper:null,dragEnter:null,dragOver:null,dragExpand:null,dragDrop:null,dragLeave:null},treeInit:function(t){var n=t.tree;this._superApply(arguments),n.options.dnd.dragStart&&n.$container.on("mousedown",function(n){if(t.options.dnd.focusOnClick){var r=e.ui.fancytree.getNode(n);r&&r.debug("Re-enable focus that was prevented by jQuery UI draggable."),setTimeout(function(){e(n.target).closest(":tabbable").focus()},10)}}),a(n)},_setDndStatus:function(t,n,r,o,a){var s,p="center",g=this._local,v=this.options.glyph||null,y=t?e(t.span):null,b=e(n.span),m=b.find(">span.fancytree-title");if(g.$dropMarker||(g.$dropMarker=e("
").hide().css({"z-index":1e3}).prependTo(e(this.$div).parent()),v&&g.$dropMarker.addClass(v.map.dropMarker)),"after"===o||"before"===o||"over"===o){switch(s=-24,o){case"before":p="top",s-=16;break;case"after":p="bottom",s-=16}g.$dropMarker.toggleClass(d,"after"===o).toggleClass(u,"over"===o).toggleClass(c,"before"===o).show().position(e.ui.fancytree.fixPositionOptions({my:"left"+i(s)+" center",at:"left "+p,of:m}))}else g.$dropMarker.hide();y&&y.toggleClass(l,a===!0).toggleClass(h,a===!1),b.toggleClass(f,"after"===o||"before"===o||"over"===o).toggleClass(d,"after"===o).toggleClass(c,"before"===o).toggleClass(l,a===!0).toggleClass(h,a===!1),r.toggleClass(l,a===!0).toggleClass(h,a===!1)},_onDragEvent:function(t,i,o,a,s,l){var d,c,u,h,f,p,g,v,y,b=this.options,m=b.dnd,x=this._makeHookContext(i,a,{otherNode:o,ui:s,draggable:l}),_=null,k=this,N=e(i.span);switch(m.smartRevert&&(l.options.revert="invalid"),t){case"start":i.isStatusNode()?_=!1:m.dragStart&&(_=m.dragStart(i,x)),_===!1?(this.debug("tree.dragStart() cancelled"),s.helper.trigger("mouseup").hide()):(m.smartRevert&&(h=i[x.tree.nodeContainerAttrName].getBoundingClientRect(),u=e(l.options.appendTo)[0].getBoundingClientRect(),l.originalPosition.left=Math.max(0,h.left-u.left),l.originalPosition.top=Math.max(0,h.top-u.top)),N.addClass("fancytree-drag-source"),e(n).on("keydown.fancytree-dnd,mousedown.fancytree-dnd",function(t){"keydown"===t.type&&t.which===e.ui.keyCode.ESCAPE?k.ext.dnd._cancelDrag():"mousedown"===t.type&&k.ext.dnd._cancelDrag()}));break;case"enter":y=(!m.preventRecursiveMoves||!i.isDescendantOf(o))&&(m.dragEnter?m.dragEnter(i,x):null),_=!!y&&(e.isArray(y)?{over:e.inArray("over",y)>=0,before:e.inArray("before",y)>=0,after:e.inArray("after",y)>=0}:{over:y===!0||"over"===y,before:y===!0||"before"===y,after:y===!0||"after"===y}),s.helper.data("enterResponse",_);break;case"over":g=s.helper.data("enterResponse"),v=null,g===!1||("string"==typeof g?v=g:(c=N.offset(),f={x:a.pageX-c.left,y:a.pageY-c.top},p={x:f.x/N.width(),y:f.y/N.height()},g.after&&p.y>.75?v="after":!g.over&&g.after&&p.y>.5?v="after":g.before&&p.y<=.25?v="before":!g.over&&g.before&&p.y<=.5?v="before":g.over&&(v="over"),m.preventVoidMoves&&(i===o?(this.debug(" drop over source node prevented"),v=null):"before"===v&&o&&i===o.getNextSibling()?(this.debug(" drop after source node prevented"),v=null):"after"===v&&o&&i===o.getPrevSibling()?(this.debug(" drop before source node prevented"),v=null):"over"===v&&o&&o.parent===i&&o.isLastSibling()&&(this.debug(" drop last child over own parent prevented"),v=null)),s.helper.data("hitMode",v))),"before"===v||"after"===v||!m.autoExpandMS||i.hasChildren()===!1||i.expanded||m.dragExpand&&m.dragExpand(i,x)===!1||i.scheduleAction("expand",m.autoExpandMS),v&&m.dragOver&&(x.hitMode=v,_=m.dragOver(i,x)),d=_!==!1&&null!==v,m.smartRevert&&(l.options.revert=!d),this._local._setDndStatus(o,i,s.helper,v,d);break;case"drop":v=s.helper.data("hitMode"),v&&m.dragDrop&&(x.hitMode=v,m.dragDrop(i,x));break;case"leave":i.scheduleAction("cancel"),s.helper.data("enterResponse",null),s.helper.data("hitMode",null),this._local._setDndStatus(o,i,s.helper,"out",r),m.dragLeave&&m.dragLeave(i,x);break;case"stop":N.removeClass("fancytree-drag-source"),e(n).off(".fancytree-dnd"),m.dragStop&&m.dragStop(i,x);break;default:e.error("Unsupported drag event: "+t)}return _},_cancelDrag:function(){var t=e.ui.ddmanager.current;t&&t.cancel()}})}(jQuery,window,document)},function(e,t){!function(e,t,n,r){"use strict";function i(t,n){t||(n=n?": "+n:"",e.error("Fancytree assertion failed"+n))}function o(e,n){var r,i,o=t.console?t.console[e]:null;if(o)try{o.apply(t.console,n)}catch(e){for(i="",r=0;rs;return!0}function l(e,t,n,r,i){var o=function(){var n=t[e],o=r[e],a=t.ext[i],s=function(){return n.apply(t,arguments)},l=function(e){return n.apply(t,e)};return function(){var e=t._local,n=t._super,r=t._superApply;try{return t._local=a,t._super=s,t._superApply=l,o.apply(t,arguments)}finally{t._local=e,t._super=n,t._superApply=r}}}();return o}function d(t,n,r,i){for(var o in r)"function"==typeof r[o]?"function"==typeof t[o]?t[o]=l(o,t,n,r,i):"_"===o.charAt(0)?t.ext[i][o]=l(o,t,n,r,i):e.error("Could not override tree."+o+". Use prefix '_' to create tree."+i+"._"+o):"options"!==o&&(t.ext[i][o]=r[o])}function c(t,n){return t===r?e.Deferred(function(){this.resolve()}).promise():e.Deferred(function(){this.resolveWith(t,n)}).promise()}function u(t,n){return t===r?e.Deferred(function(){this.reject()}).promise():e.Deferred(function(){this.rejectWith(t,n)}).promise()}function h(e,t){return function(){e.resolveWith(t)}}function f(t){var n=e.extend({},t.data()),r=n.json;return delete n.fancytree,delete n.uiFancytree,r&&(delete n.json,n=e.extend(n,r)),n}function p(e){return(""+e).replace(w,function(e){return E[e]})}function g(e){return(""+e).replace(C,function(e){return E[e]})}function v(e){return e=e.toLowerCase(),function(t){return t.title.toLowerCase().indexOf(e)>=0}}function y(e){var t=new RegExp("^"+e,"i");return function(e){return t.test(e.title)}}function b(t,n){var r,o,a,s;for(this.parent=t,this.tree=t.tree,this.ul=null,this.li=null,this.statusNodeType=null,this._isLoading=!1,this._error=null,this.data={},r=0,o=L.length;rul.fancytree-container").remove();var n,i={tree:this};this.rootNode=new b(i,{title:"root",key:"root_"+this._id,children:null,expanded:!0}),this.rootNode.parent=null,n=e("