fancytree-rails 0.0.2 → 2.0.0.pre.6.pre.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +4 -4
- data/Rakefile +1 -1
- data/lib/fancytree/rails/version.rb +2 -2
- data/vendor/assets/javascripts/fancytree/jquery.fancytree-all.js +853 -659
- data/vendor/assets/javascripts/fancytree/jquery.fancytree-all.min.js +3 -3
- data/vendor/assets/javascripts/fancytree/jquery.fancytree.awesome.js +4 -2
- data/vendor/assets/javascripts/fancytree/jquery.fancytree.js +380 -340
- data/vendor/assets/javascripts/fancytree/jquery.fancytree.min.js +3 -3
- data/vendor/assets/stylesheets/fancytree/skin-awesome/ui.fancytree.min.css +6 -0
- data/vendor/assets/stylesheets/fancytree/skin-lion/ui.fancytree.min.css +6 -0
- data/vendor/assets/stylesheets/fancytree/skin-themeroller/ui.fancytree.min.css +1 -0
- data/vendor/assets/stylesheets/fancytree/skin-vista/ui.fancytree.min.css +6 -0
- data/vendor/assets/stylesheets/fancytree/skin-win7/ui.fancytree.min.css +6 -0
- data/vendor/assets/stylesheets/fancytree/skin-win8/ui.fancytree.min.css +6 -0
- data/vendor/assets/stylesheets/fancytree/skin-xp/ui.fancytree.min.css +6 -0
- metadata +11 -4
@@ -1,7 +1,7 @@
|
|
1
|
-
/*! jQuery Fancytree Plugin - v2.0.0-
|
1
|
+
/*! jQuery Fancytree Plugin - v2.0.0-6 - 2014-02-10 10:02
|
2
2
|
* https://github.com/mar10/fancytree
|
3
3
|
* Copyright (c) 2014 Martin Wendt; Licensed MIT */
|
4
4
|
|
5
|
-
!function(a,b,c,d){"use strict";function e(b){b=b||"",a.error("Not implemented: "+b)}function f(b,c){b||(c=c?": "+c:"",a.error("Assertion failed"+c))}function g(a,c){var d,e,f=b.console?b.console[a]:null;if(f)if(f.apply)f.apply(b.console,c);else{for(e="",d=0;d<c.length;d++)e+=c[d];f(e)}}function h(b){var c,d,e,f=a.map(a.trim(b).split("."),function(a){return parseInt(a,10)}),g=a.map(Array.prototype.slice.call(arguments,1),function(a){return parseInt(a,10)});for(c=0;c<g.length;c++)if(d=f[c]||0,e=g[c]||0,d!==e)return d>e;return!0}function i(a,b,c,d,e){var f=function(){var c=b[a],f=d[a],g=b.ext[e],h=function(){return c.apply(b,arguments)};return function(){var a=b._local,c=b._super;try{return b._local=g,b._super=h,f.apply(b,arguments)}finally{b._local=a,b._super=c}}}();return f}function j(b,c,d,e){for(var f in d)"function"==typeof d[f]?"function"==typeof b[f]?b[f]=i(f,b,c,d,e):"_"===f.charAt(0)?b.ext[e][f]=i(f,b,c,d,e):a.error("Could not override tree."+f+". Use prefix '_' to create tree."+e+"._"+f):"options"!==f&&(b.ext[e][f]=d[f])}function k(b,c){return b===d?a.Deferred(function(){this.resolve()}).promise():a.Deferred(function(){this.resolveWith(b,c)}).promise()}function l(b,c){return b===d?a.Deferred(function(){this.reject()}).promise():a.Deferred(function(){this.rejectWith(b,c)}).promise()}function m(a,b){return function(){a.resolveWith(b)}}function n(a){return a=a.toLowerCase(),function(b){return b.title.toLowerCase().indexOf(a)>=0}}function o(b,c){var d,e,g,h;for(this.parent=b,this.tree=b.tree,this.ul=null,this.li=null,this.isStatusNode=!1,this.data={},d=0,e=u.length;e>d;d++)g=u[d],this[g]=c[g];c.data&&a.extend(this.data,c.data);for(g in c)v[g]||a.isFunction(c[g])||w[g]||(this.data[g]=c[g]);null==this.key&&(this.key="_"+r._nextNodeKey++),c.active&&(f(null===this.tree.activeNode,"only one active node allowed"),this.tree.activeNode=this),this.children=null,h=c.children,h&&h.length&&this._setChildren(h)}function p(b){this.widget=b,this.$div=b.element,this.options=b.options,this.ext={},this.data={},this._id=a.ui.fancytree._nextId++,this._ns=".fancytree-"+this._id,this.activeNode=null,this.focusNode=null,this._hasFocus=null,this.lastSelectedNode=null,this.systemFocusElement=null,this.statusClassPropName="span",this.ariaPropName="li",this.nodeContainerAttrName="li",this.$div.find(">ul.fancytree-container").remove();var c,d={tree:this};this.rootNode=new o(d,{title:"root",key:"root_"+this._id,children:null}),this.rootNode.parent=null,c=a("<ul>",{"class":"ui-fancytree fancytree-container"}).appendTo(this.$div),this.$container=c,this.rootNode.ul=c[0],null==this.options.debugLevel&&(this.options.debugLevel=r.debugLevel),this.$container.attr("tabindex",this.options.tabbable?"0":"-1"),this.options.aria&&this.$container.attr("role","tree").attr("aria-multiselectable",!0)}if(a.ui.fancytree&&a.ui.fancytree.version)return a.ui.fancytree.warn("Fancytree: ignored duplicate include"),void 0;var q,r=null,s="active expanded focus folder lazy selected unselectable".split(" "),t={},u="expanded extraClasses folder hideCheckbox key lazy selected title tooltip unselectable".split(" "),v={},w={active:!0,children:!0,data:!0,focus:!0};for(q=0;q<s.length;q++)t[s[q]]=!0;for(q=0;q<u.length;q++)v[u[q]]=!0;o.prototype={_findDirectChild:function(a){var b,c,d=this.children;if(d)if("string"==typeof a){for(b=0,c=d.length;c>b;b++)if(d[b].key===a)return d[b]}else{if("number"==typeof a)return this.children[a];if(a.parent===this)return a}return null},_setChildren:function(a){f(a&&(!this.children||0===this.children.length),"only init supported"),this.children=[];for(var b=0,c=a.length;c>b;b++)this.children.push(new o(this,a[b]))},addChildren:function(b,c){var d,e,g,h=null,i=[];for(a.isPlainObject(b)&&(b=[b]),this.children||(this.children=[]),d=0,e=b.length;e>d;d++)i.push(new o(this,b[d]));return h=i[0],null==c?this.children=this.children.concat(i):(c=this._findDirectChild(c),g=a.inArray(c,this.children),f(g>=0,"insertBefore must be an existing child"),this.children.splice.apply(this.children,[g,0].concat(i))),(!this.parent||this.parent.ul||this.tr)&&this.render(),3===this.tree.options.selectMode&&this.fixSelection3FromEndNodes(),h},addNode:function(a,b){switch((b===d||"over"===b)&&(b="child"),b){case"after":return this.getParent().addChildren(a,this.getNextSibling());case"before":return this.getParent().addChildren(a,this);case"child":case"over":return this.addChildren(a)}f(!1,"Invalid mode: "+b)},applyPatch:function(b){if(null===b)return this.remove(),k(this);var c,d,e,f={children:!0,expanded:!0,parent:!0};for(c in b)e=b[c],f[c]||a.isFunction(e)||(v[c]?this[c]=e:this.data[c]=e);return b.hasOwnProperty("children")&&(this.removeChildren(),b.children&&this._setChildren(b.children)),this.isVisible()&&(this.renderTitle(),this.renderStatus()),d=b.hasOwnProperty("expanded")?this.setExpanded(b.expanded):k(this)},collapseSiblings:function(){return this.tree._callHook("nodeCollapseSiblings",this)},copyTo:function(a,b,c){return a.addNode(this.toDict(!0,c),b)},countChildren:function(a){var b,c,d,e=this.children;if(!e)return 0;if(d=e.length,a!==!1)for(b=0,c=d;c>b;b++)d+=e[b].countChildren();return d},debug:function(){this.tree.options.debugLevel>=2&&(Array.prototype.unshift.call(arguments,this.toString()),g("debug",arguments))},discard:function(){return this.lazy&&a.isArray(this.children)?(this.removeChildren(),this.setExpanded(!1)):void 0},findAll:function(b){b=a.isFunction(b)?b:n(b);var c=[];return this.visit(function(a){b(a)&&c.push(a)}),c},findFirst:function(b){b=a.isFunction(b)?b:n(b);var c=null;return this.visit(function(a){return b(a)?(c=a,!1):void 0}),c},_changeSelectStatusAttrs:function(a){var b=!1;switch(a){case!1:b=this.selected||this.partsel,this.selected=!1,this.partsel=!1;break;case!0:b=!this.selected||!this.partsel,this.selected=!0,this.partsel=!0;break;case d:b=this.selected||!this.partsel,this.selected=!1,this.partsel=!0;break;default:f(!1,"invalid state: "+a)}return this.debug("fixSelection3AfterLoad() _changeSelectStatusAttrs()",a,b),b&&this.renderStatus(),b},fixSelection3AfterClick:function(){var a=this.isSelected();this.visit(function(b){b._changeSelectStatusAttrs(a)}),this.fixSelection3FromEndNodes()},fixSelection3FromEndNodes:function(){function a(b){var c,e,f,g,h,i,j,k=b.children;if(k){for(i=!0,j=!1,c=0,e=k.length;e>c;c++)f=k[c],g=a(f),g!==!1&&(j=!0),g!==!0&&(i=!1);h=i?!0:j?d:!1}else h=!!b.selected;return b._changeSelectStatusAttrs(h),h}f(3===this.tree.options.selectMode,"expected selectMode 3"),a(this),this.visitParents(function(a){var b,c,e,f,g=a.children,h=!0,i=!1;for(b=0,c=g.length;c>b;b++)e=g[b],(e.selected||e.partsel)&&(i=!0),e.unselectable||e.selected||(h=!1);f=h?!0:i?d:!1,a._changeSelectStatusAttrs(f)})},fromDict:function(b){for(var c in b)v[c]?this[c]=b[c]:"data"===c?a.extend(this.data,b.data):a.isFunction(b[c])||w[c]||(this.data[c]=b[c]);b.children?(this.removeChildren(),this.addChildren(b.children)):this.renderTitle()},getChildren:function(){return this.hasChildren()===d?d:this.children},getFirstChild:function(){return this.children?this.children[0]:null},getIndex:function(){return a.inArray(this,this.parent.children)},getIndexHier:function(b){b=b||".";var c=[];return a.each(this.getParentList(!1,!0),function(a,b){c.push(b.getIndex()+1)}),c.join(b)},getKeyPath:function(a){var b=[],c=this.tree.options.keyPathSeparator;return this.visitParents(function(a){a.parent&&b.unshift(a.key)},!a),c+b.join(c)},getLastChild:function(){return this.children?this.children[this.children.length-1]:null},getLevel:function(){for(var a=0,b=this.parent;b;)a++,b=b.parent;return a},getNextSibling:function(){if(this.parent){var a,b,c=this.parent.children;for(a=0,b=c.length-1;b>a;a++)if(c[a]===this)return c[a+1]}return null},getParent:function(){return this.parent},getParentList:function(a,b){for(var c=[],d=b?this:this.parent;d;)(a||d.parent)&&c.unshift(d),d=d.parent;return c},getPrevSibling:function(){if(this.parent){var a,b,c=this.parent.children;for(a=1,b=c.length;b>a;a++)if(c[a]===this)return c[a-1]}return null},hasChildren:function(){return this.lazy?null==this.children?d:0===this.children.length?!1:1===this.children.length&&this.children[0].isStatusNode?d:!0:!!this.children},hasFocus:function(){return this.tree.hasFocus()&&this.tree.focusNode===this},isActive:function(){return this.tree.activeNode===this},isChildOf:function(a){return this.parent&&this.parent===a},isDescendantOf:function(a){if(!a||a.tree!==this.tree)return!1;for(var b=this.parent;b;){if(b===a)return!0;b=b.parent}return!1},isExpanded:function(){return!!this.expanded},isFirstSibling:function(){var a=this.parent;return!a||a.children[0]===this},isFolder:function(){return!!this.folder},isLastSibling:function(){var a=this.parent;return!a||a.children[a.children.length-1]===this},isLazy:function(){return!!this.lazy},isLoading:function(){e()},isRoot:function(){return this.tree.rootNode===this},isSelected:function(){return!!this.selected},isVisible:function(){var a,b,c=this.getParentList(!1,!1);for(a=0,b=c.length;b>a;a++)if(!c[a].expanded)return!1;return!0},makeVisible:function(){var a,b,c=this.getParentList(!1,!1);for(a=0,b=c.length;b>a;a++)c[a].setExpanded(!0)},moveTo:function(b,c,e){(c===d||"over"===c)&&(c="child");var g,h=this.parent,i="child"===c?b:b.parent;if(this!==b){if(!this.parent)throw"Cannot move system root";if(i.isDescendantOf(this))throw"Cannot move a node to it's own descendant";if(1===this.parent.children.length?(this.parent.children=this.parent.lazy?[]:null,this.parent.expanded=!1):(g=a.inArray(this,this.parent.children),f(g>=0),this.parent.children.splice(g,1)),this.parent=i,i.hasChildren())switch(c){case"child":i.children.push(this);break;case"before":g=a.inArray(b,i.children),f(g>=0),i.children.splice(g,0,this);break;case"after":g=a.inArray(b,i.children),f(g>=0),i.children.splice(g+1,0,this);break;default:throw"Invalid mode "+c}else i.children=[this];e&&b.visit(e,!0),this.tree!==b.tree&&(this.warn("Cross-tree moveTo is experimantal!"),this.visit(function(a){a.tree=b.tree},!0)),i.expanded||h.ul.removeChild(this.li),h.isDescendantOf(i)||h.render(),i.isDescendantOf(h)||i===h||i.render()}},navigate:function(b,c){function d(a){return a?(a.makeVisible(),c===!1?a.setFocus():a.setActive()):void 0}var e,f,g=!0,h=a.ui.keyCode,i=null;switch(b){case h.BACKSPACE:this.parent&&this.parent.parent&&d(this.parent);break;case h.LEFT:this.expanded?(this.setExpanded(!1),d(this)):this.parent&&this.parent.parent&&d(this.parent);break;case h.RIGHT:this.expanded||!this.children&&!this.lazy?this.children&&this.children.length&&d(this.children[0]):(this.setExpanded(),d(this));break;case h.UP:for(i=this.getPrevSibling();i&&i.expanded&&i.children&&i.children.length;)i=i.children[i.children.length-1];!i&&this.parent&&this.parent.parent&&(i=this.parent),d(i);break;case h.DOWN:if(this.expanded&&this.children&&this.children.length)i=this.children[0];else for(f=this.getParentList(!1,!0),e=f.length-1;e>=0&&!(i=f[e].getNextSibling());e--);d(i);break;default:g=!1}},lazyLoad:function(b){(b||this.hasChildren()===d)&&this.discard(),f(!a.isArray(this.children));var c=this.tree._triggerNodeEvent("lazyload",this);return f("boolean"!=typeof c,"lazyload event must return source in data.result"),this.tree._callHook("nodeLoadChildren",this,c)},render:function(a,b){return this.tree._callHook("nodeRender",this,a,b)},renderTitle:function(){return this.tree._callHook("nodeRenderTitle",this)},renderStatus:function(){return this.tree._callHook("nodeRenderStatus",this)},remove:function(){return this.parent.removeChild(this)},removeChild:function(a){return this.tree._callHook("nodeRemoveChild",this,a)},removeChildren:function(){return this.tree._callHook("nodeRemoveChildren",this)},scheduleAction:function(a,b){this.tree.timer&&clearTimeout(this.tree.timer),this.tree.timer=null;var c=this;switch(a){case"cancel":break;case"expand":this.tree.timer=setTimeout(function(){c.tree.debug("setTimeout: trigger expand"),c.setExpanded(!0)},b);break;case"activate":this.tree.timer=setTimeout(function(){c.tree.debug("setTimeout: trigger activate"),c.setActive(!0)},b);break;default:throw"Invalid mode "+a}},scrollIntoView:function(b,c){b=b===!0?{duration:200,queue:!1}:b;var d,e=new a.Deferred,f=a(this.span).position().top,g=a(this.span).height(),h=this.tree.$container,i=h[0].scrollTop,j=Math.max(0,h.innerHeight()-h[0].clientHeight),k=h.height()-j,l=null;return 0>f?l=i+f:f+g>k&&(l=i+f-k+g,c&&(d=c?a(c.span).position().top:0,f-d>k&&(l=i+f))),null!==l?b?h.animate({scrollTop:l},b):(h[0].scrollTop=l,e.resolveWith(this)):e.resolveWith(this),e.promise()},setActive:function(a){return this.tree._callHook("nodeSetActive",this,a)},setExpanded:function(a){return this.tree._callHook("nodeSetExpanded",this,a)},setFocus:function(a){return this.tree._callHook("nodeSetFocus",this,a)},setSelected:function(a){return this.tree._callHook("nodeSetSelected",this,a)},setTitle:function(a){this.title=a,this.renderTitle()},sortChildren:function(a,b){var c,d,e=this.children;if(e){if(a=a||function(a,b){var c=a.title.toLowerCase(),d=b.title.toLowerCase();return c===d?0:c>d?1:-1},e.sort(a),b)for(c=0,d=e.length;d>c;c++)e[c].children&&e[c].sortChildren(a,"$norender$");"$norender$"!==b&&this.render()}},toDict:function(b,c){var d,e,f,g={},h=this;if(a.each(u,function(a,b){(h[b]||h[b]===!1)&&(g[b]=h[b])}),a.isEmptyObject(this.data)||(g.data=a.extend({},this.data),a.isEmptyObject(g.data)&&delete g.data),c&&c(g),b&&this.hasChildren())for(g.children=[],d=0,e=this.children.length;e>d;d++)f=this.children[d],f.isStatusNode||g.children.push(f.toDict(!0,c));return g},toggleExpanded:function(){return this.tree._callHook("nodeToggleExpanded",this)},toggleSelected:function(){return this.tree._callHook("nodeToggleSelected",this)},toString:function(){return"<FancytreeNode(#"+this.key+", '"+this.title+"')>"},visit:function(a,b){var c,d,e=!0,f=this.children;if(b===!0&&(e=a(this),e===!1||"skip"===e))return e;if(f)for(c=0,d=f.length;d>c&&(e=f[c].visit(a,!0),e!==!1);c++);return e},visitParents:function(a,b){if(b&&a(this)===!1)return!1;for(var c=this.parent;c;){if(a(c)===!1)return!1;c=c.parent}return!0},warn:function(){Array.prototype.unshift.call(arguments,this.toString()),g("warn",arguments)}},p.prototype={_makeHookContext:function(b,c,e){var f,g;return b.node!==d?(c&&b.originalEvent!==c&&a.error("invalid args"),f=b):b.tree?(g=b.tree,f={node:b,tree:g,widget:g.widget,options:g.widget.options,originalEvent:c}):b.widget?f={node:null,tree:b,widget:b.widget,options:b.widget.options,originalEvent:c}:a.error("invalid args"),e&&a.extend(f,e),f},_callHook:function(b,c){var d=this._makeHookContext(c),e=this[b],f=Array.prototype.slice.call(arguments,2);return a.isFunction(e)||a.error("_callHook('"+b+"') is not a function"),f.unshift(d),e.apply(this,f)},activateKey:function(a){var b=this.getNodeByKey(a);return b?b.setActive():this.activeNode&&this.activeNode.setActive(!1),b},applyPatch:function(b){var c,d,e,g,h,i,j=b.length,k=[];for(d=0;j>d;d++)e=b[d],f(2===e.length,"patchList must be an array of length-2-arrays"),g=e[0],h=e[1],i=null===g?this.rootNode:this.getNodeByKey(g),i?(c=new a.Deferred,k.push(c),i.applyPatch(h).always(m(c,i))):this.warn("could not find node with key '"+g+"'");return a.when.apply(a,k).promise()},count:function(){return this.rootNode.countChildren()},debug:function(){this.options.debugLevel>=2&&(Array.prototype.unshift.call(arguments,this.toString()),g("debug",arguments))},generateFormElements:function(b,c){var d,e=b!==!1?"ft_"+this._id:b,f=c!==!1?"ft_"+this._id+"_active":c,g="fancytree_result_"+this._id,h=this.$container.find("div#"+g);h.length?h.empty():h=a("<div>",{id:g}).hide().appendTo(this.$container),e&&(d=this.getSelectedNodes(3===this.options.selectMode),a.each(d,function(b,c){h.append(a("<input>",{type:"checkbox",name:e,value:c.key,checked:!0}))})),f&&this.activeNode&&h.append(a("<input>",{type:"radio",name:f,value:this.activeNode.key,checked:!0}))},getActiveNode:function(){return this.activeNode},getFirstChild:function(){return this.rootNode.getFirstChild()},getFocusNode:function(){return this.focusNode},getNodeByKey:function(a,b){var d,e;return!b&&(d=c.getElementById(this.options.idPrefix+a))?d.ftnode?d.ftnode:null:(b=b||this.rootNode,e=null,b.visit(function(b){return b.key===a?(e=b,!1):void 0},!0),e)},getSelectedNodes:function(a){var b=[];return this.rootNode.visit(function(c){return c.selected&&(b.push(c),a===!0)?"skip":void 0}),b},hasFocus:function(){return!!this._hasFocus},info:function(){this.options.debugLevel>=1&&(Array.prototype.unshift.call(arguments,this.toString()),g("info",arguments))},loadKeyPath:function(b,c,e){function f(a,b,d){c.call(r,b,"loading"),b.lazyLoad().done(function(){r.loadKeyPath.call(r,l[a],c,b).always(m(d,r))}).fail(function(){r.warn("loadKeyPath: error loading: "+a+" (parent: "+p+")"),c.call(r,b,"error"),d.reject()})}var g,h,i,j,k,l,n,o,p=e||this.rootNode,q=this.options.keyPathSeparator,r=this;for(a.isArray(b)||(b=[b]),l={},i=0;i<b.length;i++)for(j=b[i],j.charAt(0)===q&&(j=j.substr(1)),o=j.split(q);o.length;){if(k=o.shift(),n=p._findDirectChild(k),!n){this.warn("loadKeyPath: key not found: "+k+" (parent: "+p+")"),c.call(this,k,"error");break}if(0===o.length){c.call(this,n,"ok");break}if(n.lazy&&n.hasChildren()===d){c.call(this,n,"loaded"),l[k]?l[k].push(o.join(q)):l[k]=[o.join(q)];break}c.call(this,n,"loaded"),p=n}g=[];for(k in l)n=p._findDirectChild(k),h=new a.Deferred,g.push(h),f(k,n,h);return a.when.apply(a,g).promise()},nodeClick:function(a){var b,c,d=a.originalEvent,e=a.targetType,f=a.node;if("expander"===e)this._callHook("nodeToggleExpanded",a);else if("checkbox"===e)this._callHook("nodeToggleSelected",a),this._callHook("nodeSetFocus",a,!0);else{if(c=!1,b=!0,f.folder)switch(a.options.clickFolderMode){case 2:c=!0,b=!1;break;case 3:b=!0,c=!0}b&&(this.nodeSetFocus(a),this._callHook("nodeSetActive",a,!0)),c&&this._callHook("nodeToggleExpanded",a)}"a"===d.target.localName&&"fancytree-title"===d.target.className&&d.preventDefault()},nodeCollapseSiblings:function(a){var b,c,d,e=a.node;if(e.parent)for(b=e.parent.children,c=0,d=b.length;d>c;c++)b[c]!==e&&b[c].expanded&&this._callHook("nodeSetExpanded",b[c],!1)},nodeDblclick:function(a){"title"===a.targetType&&4===a.options.clickFolderMode&&this._callHook("nodeToggleExpanded",a),"title"===a.targetType&&a.originalEvent.preventDefault()},nodeKeydown:function(b){var c,d=b.originalEvent,e=b.node,f=b.tree,g=b.options,h=!0,i=!(d.ctrlKey||!g.autoActivate),j=a.ui.keyCode;switch(e||(this.rootNode.getFirstChild().setFocus(),e=b.node=this.focusNode,e.debug("Keydown force focus on first node")),d.which){case j.NUMPAD_ADD:case 187:f.nodeSetExpanded(b,!0);break;case j.NUMPAD_SUBTRACT:case 189:f.nodeSetExpanded(b,!1);break;case j.SPACE:g.checkbox?f.nodeToggleSelected(b):f.nodeSetActive(b,!0);break;case j.ENTER:f.nodeSetActive(b,!0);break;case j.BACKSPACE:case j.LEFT:case j.RIGHT:case j.UP:case j.DOWN:c=e.navigate(d.which,i);break;default:h=!1}h&&d.preventDefault()},nodeLoadChildren:function(b,c){var d,e,g=b.tree,h=b.node;return a.isFunction(c)&&(c=c()),c.url&&(d=a.extend({},b.options.ajax,c),d.debugDelay?(e=d.debugDelay,a.isArray(e)&&(e=e[0]+Math.random()*(e[1]-e[0])),h.debug("nodeLoadChildren waiting debug delay "+Math.round(e)+"ms"),d.debugDelay=!1,c=a.Deferred(function(b){setTimeout(function(){a.ajax(d).done(function(){b.resolveWith(this,arguments)}).fail(function(){b.rejectWith(this,arguments)})},e)})):c=a.ajax(d),c=c.pipe(function(c){var d;return"string"==typeof c&&a.error("Ajax request returned a string (did you get the JSON dataType wrong?)."),b.options.postProcess?(d=g._triggerNodeEvent("postProcess",b,b.originalEvent,{response:c,dataType:this.dataType}),c=a.isArray(d)?d:c):c&&c.hasOwnProperty("d")&&b.options.enableAspx&&(c="string"==typeof c.d?a.parseJSON(c.d):c.d),c},function(a,b,c){return g._makeHookContext(h,null,{error:a,args:Array.prototype.slice.call(arguments),message:c,details:a.status+": "+c})})),a.isFunction(c.promise)&&(g.nodeSetStatus(b,"loading"),c.done(function(){g.nodeSetStatus(b,"ok")}).fail(function(a){var c;c=a.node&&a.error&&a.message?a:g._makeHookContext(h,null,{error:a,args:Array.prototype.slice.call(arguments),message:a?a.message||a.toString():""}),g._triggerNodeEvent("loaderror",c,null),g.nodeSetStatus(b,"error",c.message,c.details)})),a.when(c).done(function(b){var c;a.isPlainObject(b)&&(f(a.isArray(b.children),"source must contain (or be) an array of children"),f(h.isRoot(),"source may only be an object for root nodes"),c=b,b=b.children,delete c.children,a.extend(g.data,c)),f(a.isArray(b),"expected array of children"),h._setChildren(b),h.parent&&g._triggerNodeEvent("loadChildren",h)})},nodeLoadKeyPath:function(){},nodeMakeVisible:function(a){var b,c,d=a.node.getParentList(!1,!1);for(b=0,c=d.length;c>b;b++)d[b].setExpanded(!0)},nodeRemoveChild:function(b,c){var d,e=b.node,g=b.options,h=a.extend({},b,{node:c}),i=e.children;return r.debug("nodeRemoveChild()",e.toString(),c.toString()),1===i.length?(f(c===i[0]),this.nodeRemoveChildren(b)):(this.activeNode&&(c===this.activeNode||this.activeNode.isDescendantOf(c))&&this.activeNode.setActive(!1),this.focusNode&&(c===this.focusNode||this.focusNode.isDescendantOf(c))&&(this.focusNode=null),this.nodeRemoveMarkup(h),this.nodeRemoveChildren(h),d=a.inArray(c,i),f(d>=0),c.visit(function(a){a.parent=null},!0),g.removeNode&&g.removeNode.call(b.tree,{type:"removeNode"},h),i.splice(d,1),void 0)},nodeRemoveChildMarkup:function(b){var c=b.node;r.debug("nodeRemoveChildMarkup()",c.toString()),c.ul&&(a(c.ul).remove(),c.visit(function(a){a.li=a.ul=null}),c.ul=null)},nodeRemoveChildren:function(b){var c,e=b.node,f=e.children,g=b.options;r.debug("nodeRemoveChildren()",e.toString()),f&&(this.activeNode&&this.activeNode.isDescendantOf(e)&&this.activeNode.setActive(!1),this.focusNode&&this.focusNode.isDescendantOf(e)&&(this.focusNode=null),this.nodeRemoveChildMarkup(b),c=a.extend({},b),e.visit(function(a){a.parent=null,g.removeNode&&(c.node=a,g.removeNode.call(b.tree,{type:"removeNode"},c))}),e.children=d,this.nodeRenderStatus(b))},nodeRemoveMarkup:function(b){var c=b.node;r.debug("nodeRemoveMarkup()",c.toString()),c.li&&(a(c.li).remove(),c.li=null),this.nodeRemoveChildMarkup(b)},nodeRender:function(b,d,e,g,h){var i,j,k,l,m,n,o=b.node,p=b.tree,q=b.options,r=q.aria,s=!1,t=o.parent,u=!t,v=o.children;if(u||t.ul){if(f(u||t.ul,"parent UL must exist"),u||(o.li&&(d||o.li.parentNode!==o.parent.ul)&&(o.li.parentNode!==o.parent.ul&&this.warn("unlink "+o+" (must be child of "+o.parent+")"),this.nodeRemoveMarkup(b)),o.li||(s=!0,o.li=c.createElement("li"),o.li.ftnode=o,o.key&&q.generateIds&&(o.li.id=q.idPrefix+o.key),o.span=c.createElement("span"),o.span.className="fancytree-node",r&&a(o.span).attr("aria-labelledby","ftal_"+o.key),o.li.appendChild(o.span),this.nodeRenderTitle(b),q.createNode&&q.createNode.call(p,{type:"createNode"},b)),q.renderNode&&q.renderNode.call(p,{type:"renderNode"},b)),v){if(u||o.expanded||e===!0){for(o.ul||(o.ul=c.createElement("ul"),(g===!0&&!h||!o.expanded)&&(o.ul.style.display="none"),r&&a(o.ul).attr("role","group"),o.li?o.li.appendChild(o.ul):o.tree.$div.append(o.ul)),l=0,m=v.length;m>l;l++)n=a.extend({},b,{node:v[l]}),this.nodeRender(n,d,e,!1,!0);for(i=o.ul.firstChild,l=0,m=v.length-1;m>l;l++)j=v[l],k=i.ftnode,j!==k?(o.debug("_fixOrder: mismatch at index "+l+": "+j+" != "+k),o.ul.insertBefore(j.li,k.li)):i=i.nextSibling}}else o.ul&&(this.warn("remove child markup for "+o),this.nodeRemoveChildMarkup(b));u||(this.nodeRenderStatus(b),s&&t.ul.appendChild(o.li))}},nodeRenderTitle:function(a,b){var c,e,f,g,h,i=a.node,j=a.tree,k=a.options,l=k.aria,m=i.getLevel(),n=[],o=i.data.icon;b!==d&&(i.title=b),i.span&&(m<k.minExpandLevel?m>1&&(l?n.push("<span role='button' class='fancytree-expander'></span>"):n.push("<span class='fancytree-expander'></span>")):l?n.push("<span role='button' class='fancytree-expander'></span>"):n.push("<span class='fancytree-expander'></span>"),k.checkbox&&i.hideCheckbox!==!0&&!i.isStatusNode&&(l?n.push("<span role='checkbox' class='fancytree-checkbox'></span>"):n.push("<span class='fancytree-checkbox'></span>")),g=l?" role='img'":"",o&&"string"==typeof o?(e="/"===o.charAt(0)?o:k.imagePath+o,n.push("<img src='"+e+"' alt='' />")):i.data.iconclass?n.push("<span "+g+" class='fancytree-custom-icon "+i.data.iconclass+"'></span>"):(o===!0||o!==!1&&k.icons!==!1)&&n.push("<span "+g+" class='fancytree-icon'></span>"),f="",k.renderTitle&&(f=k.renderTitle.call(j,{type:"renderTitle"},a)||""),f||(h=i.tooltip?" title='"+i.tooltip.replace(/\"/g,""")+"'":"",c=l?" id='ftal_"+i.key+"'":"",g=l?" role='treeitem'":"",f="<span "+g+" class='fancytree-title'"+c+h+">"+i.title+"</span>"),n.push(f),i.span.innerHTML=n.join(""))},nodeRenderStatus:function(b){var c=b.node,d=b.tree,e=b.options,f=c.hasChildren(),g=c.isLastSibling(),h=e.aria,i=a(c.span).find(".fancytree-title"),j=e._classNames,k=[],l=c[d.statusClassPropName];l&&(k.push(j.node),d.activeNode===c&&k.push(j.active),d.focusNode===c?(k.push(j.focused),h&&i.attr("aria-activedescendant",!0)):h&&i.removeAttr("aria-activedescendant"),c.expanded?(k.push(j.expanded),h&&i.attr("aria-expanded",!0)):h&&i.removeAttr("aria-expanded"),c.folder&&k.push(j.folder),f!==!1&&k.push(j.hasChildren),g&&k.push(j.lastsib),c.lazy&&null==c.children&&k.push(j.lazy),c.partsel&&k.push(j.partsel),c.selected?(k.push(j.selected),h&&i.attr("aria-selected",!0)):h&&i.attr("aria-selected",!1),c.extraClasses&&k.push(c.extraClasses),f===!1?k.push(j.combinedExpanderPrefix+"n"+(g?"l":"")):k.push(j.combinedExpanderPrefix+(c.expanded?"e":"c")+(c.lazy&&null==c.children?"d":"")+(g?"l":"")),k.push(j.combinedIconPrefix+(c.expanded?"e":"c")+(c.folder?"f":"")),l.className=k.join(" "),c.li&&(c.li.className=g?j.lastsib:""))},nodeSetActive:function(b,c){var d,e=b.node,g=b.tree,h=b.options,i=e===g.activeNode;return c=c!==!1,e.debug("nodeSetActive",c),i===c?k(e):c&&this._triggerNodeEvent("beforeActivate",e,b.originalEvent)===!1?l(e,["rejected"]):(c?(g.activeNode&&(f(g.activeNode!==e,"node was active (inconsistency)"),d=a.extend({},b,{node:g.activeNode}),g.nodeSetActive(d,!1),f(null===g.activeNode,"deactivate was out of sync?")),h.activeVisible&&g.nodeMakeVisible(b),g.activeNode=e,g.nodeRenderStatus(b),g.nodeSetFocus(b),g._triggerNodeEvent("activate",e)):(f(g.activeNode===e,"node was not active (inconsistency)"),g.activeNode=null,this.nodeRenderStatus(b),b.tree._triggerNodeEvent("deactivate",e)),void 0)},nodeSetExpanded:function(b,c){var e,f,g,h,i,j,m=b.node,n=b.tree,o=b.options;if(c=c!==!1,m.debug("nodeSetExpanded("+c+")"),m.expanded&&c||!m.expanded&&!c)return m.debug("nodeSetExpanded("+c+"): nothing to do"),k(m);if(c&&!m.lazy&&!m.hasChildren())return l(m,["empty"]);if(!c&&m.getLevel()<o.minExpandLevel)return l(m,["locked"]);if(this._triggerNodeEvent("beforeExpand",m,b.originalEvent)===!1)return l(m,["rejected"]);if(f=new a.Deferred,c&&!m.expanded&&o.autoCollapse){i=m.getParentList(!1,!0),j=o.autoCollapse;try{for(o.autoCollapse=!1,g=0,h=i.length;h>g;g++)this._callHook("nodeCollapseSiblings",i[g])}finally{o.autoCollapse=j}}return f.done(function(){b.tree._triggerNodeEvent(c?"expand":"collapse",b),o.autoScroll&&m.getLastChild().scrollIntoView(!0,m)}),e=function(d){var e,f,g,h;if(m.expanded=c,n._callHook("nodeRender",b,!1,!1,!0),m.ul)if(g="none"!==m.ul.style.display,h=!!m.expanded,g===h)m.warn("nodeSetExpanded: UL.style.display already set");else{if(o.fx)return e=o.fx.duration||200,f=o.fx.easing,m.debug("nodeSetExpanded: animate start..."),a(m.ul).animate(o.fx,e,f,function(){m.debug("nodeSetExpanded: animate done"),d()}),void 0;m.ul.style.display=m.expanded||!parent?"":"none"}d()},c&&m.lazy&&m.hasChildren()===d?(m.debug("nodeSetExpanded: load start..."),m.lazyLoad().done(function(){m.debug("nodeSetExpanded: load done"),f.notifyWith&&f.notifyWith(m,["loaded"]),e(function(){f.resolveWith(m)})}).fail(function(a){e(function(){f.rejectWith(m,["load failed ("+a+")"])})})):e(function(){f.resolveWith(m)}),m.debug("nodeSetExpanded: returns"),f.promise()},nodeSetFocus:function(b,c){b.node.debug("nodeSetFocus("+c+")");var d,e=b.tree,f=b.node;if(c=c!==!1,e.focusNode){if(e.focusNode===f&&c)return f.debug("nodeSetFocus("+c+"): nothing to do"),void 0;d=a.extend({},b,{node:e.focusNode}),e.focusNode=null,this._triggerNodeEvent("blur",d),this._callHook("nodeRenderStatus",d)}c&&(this.hasFocus()||(f.debug("nodeSetFocus: forcing container focus"),this._callHook("treeSetFocus",b,!0,!0)),this.nodeMakeVisible(b),e.focusNode=f,this._triggerNodeEvent("focus",b),b.options.autoScroll&&f.scrollIntoView(),this._callHook("nodeRenderStatus",b))},nodeSetSelected:function(a,b){var c=a.node,d=a.tree,e=a.options;if(b=b!==!1,c.debug("nodeSetSelected("+b+")",a),!c.unselectable){if(c.selected&&b||!c.selected&&!b)return!!c.selected;if(this._triggerNodeEvent("beforeSelect",c,a.originalEvent)===!1)return!!c.selected;b&&1===e.selectMode?d.lastSelectedNode&&d.lastSelectedNode.setSelected(!1):3===e.selectMode&&(c.selected=b,c.fixSelection3AfterClick()),c.selected=b,this.nodeRenderStatus(a),d.lastSelectedNode=b?c:null,d._triggerNodeEvent("select",a)}},nodeSetStatus:function(b,c,d,e){var f,g,h=b.node,i=b.tree,j=b.options._classNames;switch(f=function(){var a=h.children?h.children[0]:null;if(a&&a.isStatusNode){try{h.ul&&(h.ul.removeChild(a.li),a.li=null)}catch(b){}1===h.children.length?h.children=[]:h.children.shift()}},g=function(b){var c=h.children?h.children[0]:null;return c&&c.isStatusNode?(a.extend(c,b),i._callHook("nodeRender",c)):(b.key="_statusNode",h._setChildren([b]),h.children[0].isStatusNode=!0,i.render()),h.children[0]},c){case"ok":f(),a(h.span).removeClass(j.loading),a(h.span).removeClass(j.error);break;case"loading":a(h.span).removeClass(j.error),a(h.span).addClass(j.loading),h.parent||g({title:i.options.strings.loading+(d?" ("+d+") ":""),tooltip:e,extraClasses:"fancytree-statusnode-wait"});break;case"error":a(h.span).removeClass(j.loading),a(h.span).addClass(j.error),g({title:i.options.strings.loadError+(d?" ("+d+") ":""),tooltip:e,extraClasses:"fancytree-statusnode-error"});break;default:a.error("invalid status "+c)}},nodeToggleExpanded:function(a){return this.nodeSetExpanded(a,!a.node.expanded)},nodeToggleSelected:function(a){return this.nodeSetSelected(a,!a.node.selected)},treeClear:function(a){var b=a.tree;b.activeNode=null,b.focusNode=null,b.$div.find(">ul.fancytree-container").empty(),b.rootNode.children=null},treeCreate:function(){},treeDestroy:function(){},treeInit:function(a){this.treeLoad(a)},treeLoad:function(b,c){var d,f,g,h=b.tree,i=b.widget.element,j=a.extend({},b,{node:this.rootNode});if(h.rootNode.children&&this.treeClear(b),c=c||this.options.source)"string"==typeof c&&e();else switch(d=i.data("type")||"html"){case"html":f=i.find(">ul:first"),f.addClass("ui-fancytree-source ui-helper-hidden"),c=a.ui.fancytree.parseHtml(f);break;case"json":c=a.parseJSON(i.text()),c.children&&(c.title&&(h.title=c.title),c=c.children);break;default:a.error("Invalid data-type: "+d)}return g=this.nodeLoadChildren(j,c).done(function(){h.render(),3===b.options.selectMode&&h.rootNode.fixSelection3FromEndNodes(),h._triggerTreeEvent("init",!0)}).fail(function(){h.render(),h._triggerTreeEvent("init",!1)})},treeSetFocus:function(a,b,c){b=b!==!1,this.debug("treeSetFocus("+b+"), _calledByNodeSetFocus: "+c),this.debug(" focusNode: "+this.focusNode),this.debug(" activeNode: "+this.activeNode),b!==this.hasFocus()&&(this._hasFocus=b,this.$container.toggleClass("fancytree-treefocus",b),this._triggerTreeEvent(b?"focusTree":"blurTree"))},reactivate:function(a){var b=this.activeNode;b&&(this.activeNode=null,b.setActive(),a&&b.setFocus())},reload:function(a){return this._callHook("treeClear",this),this._callHook("treeLoad",this,a)},render:function(a,b){return this.rootNode.render(a,b)},setFocus:function(a){return this._callHook("treeSetFocus",this,a)},toDict:function(a,b){var c=this.rootNode.toDict(!0,b);return a?c:c.children},toString:function(){return"<Fancytree(#"+this._id+")>"},_triggerNodeEvent:function(a,b,c,e){var f=this._makeHookContext(b,c,e),g=this.widget._trigger(a,c,f);
|
6
|
-
return g!==!1&&f.result!==d?f.result:g},_triggerTreeEvent:function(a,b){var c=this._makeHookContext(this,b),e=this.widget._trigger(a,b,c);return e!==!1&&c.result!==d?c.result:e},visit:function(a){return this.rootNode.visit(a,!1)},warn:function(){Array.prototype.unshift.call(arguments,this.toString()),g("warn",arguments)}},a.widget("ui.fancytree",{options:{activeVisible:!0,ajax:{type:"GET",cache:!1,dataType:"json"},aria:!1,autoActivate:!0,autoCollapse:!1,autoScroll:!1,checkbox:!1,clickFolderMode:4,debugLevel:null,disabled:!1,enableAspx:!0,extensions:[],fx:{height:"toggle",duration:200},generateIds:!1,icons:!0,idPrefix:"ft_",keyboard:!0,keyPathSeparator:"/",minExpandLevel:1,selectMode:2,strings:{loading:"Loading…",loadError:"Load error!"},tabbable:!0,_classNames:{node:"fancytree-node",folder:"fancytree-folder",combinedExpanderPrefix:"fancytree-exp-",combinedIconPrefix:"fancytree-ico-",hasChildren:"fancytree-has-children",active:"fancytree-active",selected:"fancytree-selected",expanded:"fancytree-expanded",lazy:"fancytree-lazy",focused:"fancytree-focused",partsel:"fancytree-partsel",lastsib:"fancytree-lastsib",loading:"fancytree-loading",error:"fancytree-error"},lazyload:null,postProcess:null},_create:function(){this.tree=new p(this),this.$source=this.source||"json"===this.element.data("type")?this.element:this.element.find(">ul:first");var b,c,e,g=this.options.extensions,h=this.tree;for(e=0;e<g.length;e++)c=g[e],b=a.ui.fancytree._extensions[c],b||a.error("Could not apply extension '"+c+"' (it is not registered, did you forget to include it?)"),this.tree.options[c]=a.extend(!0,{},b.options,this.tree.options[c]),f(this.tree.ext[c]===d,"Extension name must not exist as Fancytree.ext attribute: '"+c+"'"),this.tree.ext[c]={},j(this.tree,h,b,c),h=b;this.tree._callHook("treeCreate",this.tree)},_init:function(){this.tree._callHook("treeInit",this.tree),this._bind()},_setOption:function(b,c){var d=!0,e=!1;switch(b){case"aria":case"checkbox":case"icons":case"minExpandLevel":case"tabbable":this.tree._callHook("treeCreate",this.tree),e=!0;break;case"source":d=!1,this.tree._callHook("treeLoad",this.tree,c)}this.tree.debug("set option "+b+"="+c+" <"+typeof c+">"),d&&a.Widget.prototype._setOption.apply(this,arguments),e&&this.tree.render(!0,!1)},destroy:function(){this._unbind(),this.tree._callHook("treeDestroy",this.tree),this.tree.$div.find(">ul.fancytree-container").remove(),this.$source&&this.$source.removeClass("ui-helper-hidden"),a.Widget.prototype.destroy.call(this)},_unbind:function(){var b=this.tree._ns;this.element.unbind(b),this.tree.$container.unbind(b),a(c).unbind(b)},_bind:function(){var a=this,b=this.options,c=this.tree,d=c._ns;this._unbind(),c.$container.on("focusin"+d+" focusout"+d,function(a){var b=r.getNode(a),d="focusin"===a.type;b?c._callHook("nodeSetFocus",b,d):c._callHook("treeSetFocus",c,d)}).on("selectstart"+d,"span.fancytree-title",function(a){a.preventDefault()}).on("keydown"+d,function(a){if(b.disabled||b.keyboard===!1)return!0;var d,e=c.focusNode,f=c._makeHookContext(e||c,a),g=c.phase;try{return c.phase="userEvent",d=e?c._triggerNodeEvent("keydown",e,a):c._triggerTreeEvent("keydown",a),"preventNav"===d?d=!0:d!==!1&&(d=c._callHook("nodeKeydown",f)),d}finally{c.phase=g}}).on("click"+d+" dblclick"+d,function(c){if(b.disabled)return!0;var d,e=r.getEventTarget(c),f=e.node,g=a.tree,h=g.phase;if(!f)return!0;d=g._makeHookContext(f,c);try{switch(g.phase="userEvent",c.type){case"click":return d.targetType=e.type,g._triggerNodeEvent("click",d,c)===!1?!1:g._callHook("nodeClick",d);case"dblclick":return d.targetType=e.type,g._triggerNodeEvent("dblclick",d,c)===!1?!1:g._callHook("nodeDblclick",d)}}finally{g.phase=h}})},getActiveNode:function(){return this.tree.activeNode},getNodeByKey:function(a){return this.tree.getNodeByKey(a)},getRootNode:function(){return this.tree.rootNode},getTree:function(){return this.tree}}),r=a.ui.fancytree,a.extend(a.ui.fancytree,{version:"2.0.0-5",buildType:"release",debugLevel:1,_nextId:1,_nextNodeKey:1,_extensions:{},_FancytreeClass:p,_FancytreeNodeClass:o,jquerySupports:{positionMyOfs:h(a.ui.version,1,9)},assert:function(a,b){return f(a,b)},debug:function(){a.ui.fancytree.debugLevel>=2&&g("log",arguments)},error:function(){g("error",arguments)},getEventTargetType:function(a){return this.getEventTarget(a).type},getEventTarget:function(a){var b=a&&a.target?a.target.className:"",c={node:this.getNode(a.target),type:d};return/\bfancytree-title\b/.test(b)?c.type="title":/\bfancytree-expander\b/.test(b)?c.type=c.node.hasChildren()===!1?"prefix":"expander":/\bfancytree-checkbox\b/.test(b)?c.type="checkbox":/\bfancytree-icon\b/.test(b)?c.type="icon":/\bfancytree-node\b/.test(b)&&(c.type="title"),c},getNode:function(a){if(a instanceof o)return a;for(a.selector!==d?a=a[0]:a.originalEvent!==d&&(a=a.target);a;){if(a.ftnode)return a.ftnode;a=a.parentNode}return null},info:function(){a.ui.fancytree.debugLevel>=1&&g("info",arguments)},parseHtml:function(b){var c,e,f,g,h,i,j,k=b.find(">li"),l=[];return k.each(function(){var k,m,n=a(this),o=n.find(">span:first",this),p=o.length?null:n.find(">a:first"),q={tooltip:null,data:{}};for(o.length?q.title=o.html():p&&p.length?(q.title=p.html(),q.data.href=p.attr("href"),q.data.target=p.attr("target"),q.tooltip=p.attr("title")):(q.title=n.html(),g=q.title.search(/<ul/i),g>=0&&(q.title=q.title.substring(0,g))),q.title=a.trim(q.title),e=0,f=s.length;f>e;e++)q[s[e]]=d;for(i=this.className.split(" "),c=[],e=0,f=i.length;f>e;e++)j=i[e],t[j]?q[j]=!0:c.push(j);q.extraClasses=c.join(" "),h=n.attr("title"),h&&(q.tooltip=h),h=n.attr("id"),h&&(q.key=h),k=n.data(),k&&!a.isEmptyObject(k)&&(m=k.json,delete k.json,a.extend(q.data,k),m&&a.extend(q.data,m)),b=n.find(">ul:first"),q.children=b.length?a.ui.fancytree.parseHtml(b):q.lazy?d:null,l.push(q)}),l},registerExtension:function(b,c){a.ui.fancytree._extensions[b]=c},warn:function(){g("warn",arguments)}})}(jQuery,window,document),function(a){"use strict";a.ui.fancytree.registerExtension("columnview",{version:"0.0.1",options:{},treeInit:function(b){var c,d,e=b.tree,f=e.widget.element;e.tr=a("tbody tr",f)[0],e.columnCount=a(">td",e.tr).length,this._super(b),d=a(e.rootNode.ul),c=a(">td",e.tr).eq(0),d.removeClass("fancytree-container"),d.removeAttr("tabindex"),e.$container=f,f.addClass("fancytree-container fancytree-ext-columnview"),f.attr("tabindex","0"),c.empty(),d.detach().appendTo(c),e.widget.options.autoCollapse=!0,e.widget.options.fx=!1,e.widget.options.clickFolderMode=1,f.bind("fancytreeactivate",function(b,c){var d,e,f=c.node,g=c.tree,h=f.getLevel();if(g._callHook("nodeCollapseSiblings",f),h<=g.columnCount)for(e=a(">td",g.tr),d=h;d<g.columnCount;d++)e.eq(d).empty();f.expanded||!f.children&&!f.lazy||f.setExpanded()}).bind("fancytreekeydown",function(b,c){var d=null;switch(b.which){case a.ui.keyCode.DOWN:return d=c.node.getNextSibling(),d&&d.setFocus(),!1;case a.ui.keyCode.LEFT:return d=c.node.getParent(),d&&d.setFocus(),!1;case a.ui.keyCode.UP:return d=c.node.getPrevSibling(),d&&d.setFocus(),!1}})},nodeRender:function(b,c,d,e,f){this._super(b,c,d,e,f);var g,h,i,j=b.tree,k=b.node,l=a(k.span);l.find("span.fancytree-expander").remove(),k.hasChildren()===!1||l.find("span.fancytree-cv-right").length||l.append(a("<span class='fancytree-icon fancytree-cv-right'>")),k.ul&&(k.ul.style.display="",g=k.getLevel(),g<j.columnCount&&(h=a(">td",j.tr).eq(g),i=a(k.ul).detach(),h.empty().append(i)))}})}(jQuery,window,document),function(a,b,c,d){"use strict";function e(a){return 0===a?"":a>0?"+"+a:""+a}function f(b){var c=b.options.dnd||null;c&&g(),c&&c.dragStart&&b.widget.element.draggable({addClasses:!1,appendTo:"body",containment:!1,delay:0,distance:4,revert:!1,scroll:!0,scrollSpeed:7,scrollSensitivity:10,connectToFancytree:!0,helper:function(b){var c=a.ui.fancytree.getNode(b.target);return c?c.tree.ext.dnd._onDragEvent("helper",c,null,b,null,null):"<div>ERROR?: helper requested but sourceNode not found</div>"},start:function(){}}),c&&c.dragDrop&&b.widget.element.droppable({addClasses:!1,tolerance:"intersect",greedy:!1})}function g(){i||(a.ui.plugin.add("draggable","connectToFancytree",{start:function(b,c){var d=a(this).data("ui-draggable")||a(this).data("draggable"),e=c.helper.data("ftSourceNode")||null;return e?(d.offset.click.top=-2,d.offset.click.left=16,e.tree.ext.dnd._onDragEvent("start",e,null,b,c,d)):void 0},drag:function(b,c){var d,e=a(this).data("ui-draggable")||a(this).data("draggable"),f=c.helper.data("ftSourceNode")||null,g=c.helper.data("ftTargetNode")||null,i=a.ui.fancytree.getNode(b.target);return b.target&&!i&&(d=a(b.target).closest("div.fancytree-drag-helper,#fancytree-drop-marker").length>0)?(h("Drag event over helper: ignored."),void 0):(c.helper.data("ftTargetNode",i),g&&g!==i&&g.tree.ext.dnd._onDragEvent("leave",g,f,b,c,e),i&&i.tree.options.dnd.dragDrop&&(i===g?i.tree.ext.dnd._onDragEvent("over",i,f,b,c,e):i.tree.ext.dnd._onDragEvent("enter",i,f,b,c,e)),void 0)},stop:function(b,c){var d=a(this).data("ui-draggable")||a(this).data("draggable"),e=c.helper.data("ftSourceNode")||null,f=c.helper.data("ftTargetNode")||null,g=b.type,i="mouseup"===g&&1===b.which;i||h("Drag was cancelled"),f&&(i&&f.tree.ext.dnd._onDragEvent("drop",f,e,b,c,d),f.tree.ext.dnd._onDragEvent("leave",f,e,b,c,d)),e&&e.tree.ext.dnd._onDragEvent("stop",e,null,b,c,d)}}),i=!0)}var h=a.ui.fancytree.debug,i=!1;a.ui.fancytree.registerExtension("dnd",{version:"0.0.1",options:{dragStart:null,dragStop:null,autoExpandMS:1e3,preventVoidMoves:!0,preventRecursiveMoves:!0,dragEnter:null,dragOver:null,dragDrop:null,dragLeave:null},treeInit:function(a){var b=a.tree;this._super(a),f(b)},nodeKeydown:function(b){var c=b.originalEvent;c.which===a.ui.keyCode.ESCAPE&&this._local._cancelDrag(),this._super(b)},_setDndStatus:function(b,c,d,f,g){var h,i=0,j="center",k=this._local,l=b?a(b.span):null,m=a(c.span);if(k.$dropMarker||(k.$dropMarker=a("<div id='fancytree-drop-marker'></div>").hide().css({"z-index":1e3}).prependTo(a(this.$div).parent())),"after"===f||"before"===f||"over"===f){switch(f){case"before":k.$dropMarker.removeClass("fancytree-drop-after fancytree-drop-over"),k.$dropMarker.addClass("fancytree-drop-before"),j="top";break;case"after":k.$dropMarker.removeClass("fancytree-drop-before fancytree-drop-over"),k.$dropMarker.addClass("fancytree-drop-after"),j="bottom";break;default:k.$dropMarker.removeClass("fancytree-drop-after fancytree-drop-before"),k.$dropMarker.addClass("fancytree-drop-over"),m.addClass("fancytree-drop-target"),i=8}h=a.ui.fancytree.jquerySupports.positionMyOfs?{my:"left"+e(i)+" center",at:"left "+j,of:m}:{my:"left center",at:"left "+j,of:m,offset:""+i+" 0"},k.$dropMarker.show().position(h)}else m.removeClass("fancytree-drop-target"),k.$dropMarker.hide();"after"===f?m.addClass("fancytree-drop-after"):m.removeClass("fancytree-drop-after"),"before"===f?m.addClass("fancytree-drop-before"):m.removeClass("fancytree-drop-before"),g===!0?(l&&l.addClass("fancytree-drop-accept"),m.addClass("fancytree-drop-accept"),d.addClass("fancytree-drop-accept")):(l&&l.removeClass("fancytree-drop-accept"),m.removeClass("fancytree-drop-accept"),d.removeClass("fancytree-drop-accept")),g===!1?(l&&l.addClass("fancytree-drop-reject"),m.addClass("fancytree-drop-reject"),d.addClass("fancytree-drop-reject")):(l&&l.removeClass("fancytree-drop-reject"),m.removeClass("fancytree-drop-reject"),d.removeClass("fancytree-drop-reject"))},_onDragEvent:function(b,c,e,f,g,i){"over"!==b&&h("tree.ext.dnd._onDragEvent(%s, %o, %o) - %o",b,c,e,this);var j,k,l,m,n,o,p,q=this.options,r=q.dnd,s=this._makeHookContext(c,f,{otherNode:e,ui:g,draggable:i}),t=null,u=a(c.span);switch(b){case"helper":j=a("<div class='fancytree-drag-helper'><span class='fancytree-drag-helper-img' /></div>").append(u.find("span.fancytree-title").clone()),a("ul.fancytree-container",c.tree.$div).append(j),j.data("ftSourceNode",c),t=j;break;case"start":c.isStatusNode?t=!1:r.dragStart&&(t=r.dragStart(c,s)),t===!1?(this.debug("tree.dragStart() cancelled"),g.helper.trigger("mouseup"),g.helper.hide()):u.addClass("fancytree-drag-source");break;case"enter":p=r.preventRecursiveMoves&&c.isDescendantOf(e)?!1:r.dragEnter?r.dragEnter(c,s):null,t=p?a.isArray(p)?{over:a.inArray("over",p)>=0,before:a.inArray("before",p)>=0,after:a.inArray("after",p)>=0}:{over:p===!0||"over"===p,before:p===!0||"before"===p,after:p===!0||"after"===p}:!1,g.helper.data("enterResponse",t),h("helper.enterResponse: %o",t);break;case"over":n=g.helper.data("enterResponse"),o=null,n===!1||("string"==typeof n?o=n:(k=u.offset(),l={x:f.pageX-k.left,y:f.pageY-k.top},m={x:l.x/u.width(),y:l.y/u.height()},n.after&&m.y>.75?o="after":!n.over&&n.after&&m.y>.5?o="after":n.before&&m.y<=.25?o="before":!n.over&&n.before&&m.y<=.5?o="before":n.over&&(o="over"),r.preventVoidMoves&&(c===e?(h(" drop over source node prevented"),o=null):"before"===o&&e&&c===e.getNextSibling()?(h(" drop after source node prevented"),o=null):"after"===o&&e&&c===e.getPrevSibling()?(h(" drop before source node prevented"),o=null):"over"===o&&e&&e.parent===c&&e.isLastSibling()&&(h(" drop last child over own parent prevented"),o=null)),g.helper.data("hitMode",o))),"over"===o&&r.autoExpandMS&&c.hasChildren()!==!1&&!c.expanded&&c.scheduleAction("expand",r.autoExpandMS),o&&r.dragOver&&(s.hitMode=o,t=r.dragOver(c,s)),this._local._setDndStatus(e,c,g.helper,o,t!==!1&&null!==o);break;case"drop":o=g.helper.data("hitMode"),o&&r.dragDrop&&(s.hitMode=o,r.dragDrop(c,s));break;case"leave":c.scheduleAction("cancel"),g.helper.data("enterResponse",null),g.helper.data("hitMode",null),this._local._setDndStatus(e,c,g.helper,"out",d),r.dragLeave&&r.dragLeave(c,s);break;case"stop":u.removeClass("fancytree-drag-source"),r.dragStop&&r.dragStop(c,s);break;default:throw"Unsupported drag event: "+b}return t},_cancelDrag:function(){var b=a.ui.ddmanager.current;b&&b.cancel()}})}(jQuery,window,document),function(a){"use strict";function b(a){return(a+"").replace(/([.?*+\^\$\[\]\\(){}|-])/g,"\\$1")}a.ui.fancytree._FancytreeClass.prototype.applyFilter=function(a){var c,d,e=0,f=this.options.filter.leavesOnly;return this.visit(function(a){delete a.match,delete a.subMatch}),"string"==typeof a&&(c=b(a),d=new RegExp(".*"+c+".*","i"),a=function(a){return!!d.exec(a.title)}),this.enableFilter=!0,this.$div.addClass("fancytree-ext-filter"),"hide"===this.options.filter.mode&&this.$div.addClass("fancytree-ext-filter-hide"),this.visit(function(b){f&&null!=b.children||!a(b)||(e++,b.match=!0,b.visitParents(function(a){a.subMatch=!0}))}),this.render(),e},a.ui.fancytree._FancytreeClass.prototype.clearFilter=function(){this.visit(function(b){delete b.match,delete b.subMatch,a(b.li).show()}),this.enableFilter=!1,this.render(),this.$div.removeClass("fancytree-ext-filter fancytree-ext-filter-hide")},a.ui.fancytree.registerExtension("filter",{version:"0.0.1",options:{mode:"dimm",leavesOnly:!1},treeInit:function(a){this._super(a)},treeDestroy:function(a){this._super(a)},nodeRenderStatus:function(b){var c,d=b.node,e=b.options,f=b.tree,g=a(d[f.statusClassPropName]);g.length&&(this._super(b),f.enableFilter&&(d.match?g.addClass("fancytree-match"):g.removeClass("fancytree-match"),d.subMatch?g.addClass("fancytree-submatch"):g.removeClass("fancytree-submatch"),"hide"===e.filter.mode&&(c=!(!d.match&&!d.subMatch),d.debug(d.title+": visible="+c),a(d.li).toggle(c))))}})}(jQuery,window,document),function(a,b,c){"use strict";a.ui.fancytree.registerExtension("menu",{version:"0.0.1",options:{enable:!0,selector:null,position:{},create:a.noop,beforeOpen:a.noop,open:a.noop,focus:a.noop,select:a.noop,close:a.noop},treeInit:function(b){var c=b.options,d=b.tree;this._super(b),d.ext.menu.data={tree:d,node:null,$menu:null,menuId:null},d.$container.delegate("span.fancytree-node","contextmenu",function(b){var c=a.ui.fancytree.getNode(b),e={node:c,tree:c.tree,originalEvent:b,options:d.options};return d.ext.menu._openMenu(e),!1}),a(c.menu.selector).menu({create:function(b){d.ext.menu.data.$menu=a(this).menu("widget");var e=a.extend({},d.ext.menu.data);c.menu.create.call(d,b,e)},focus:function(b,e){var f=a.extend({},d.ext.menu.data,{menuItem:e.item,menuId:e.item.find(">a").attr("href")});c.menu.focus.call(d,b,f)},select:function(e,f){var g=a.extend({},d.ext.menu.data,{menuItem:f.item,menuId:f.item.find(">a").attr("href")});c.menu.select.call(d,e,g)!==!1&&d.ext.menu._closeMenu(b)}}).hide()},treeDestroy:function(a){this._super(a)},_openMenu:function(b){var d,e=b.tree,f=b.options,g=a(f.menu.selector);e.ext.menu.data.node=b.node,d=a.extend({},e.ext.menu.data),f.menu.beforeOpen.call(e,b.originalEvent,d)!==!1&&(a(c).bind("keydown.fancytree",function(c){c.which===a.ui.keyCode.ESCAPE&&e.ext.menu._closeMenu(b)}).bind("mousedown.fancytree",function(c){0===a(c.target).closest(".ui-menu-item").length&&e.ext.menu._closeMenu(b)}),g.css("position","absolute").show().position({my:"left top",at:"right top",of:b.originalEvent,collision:"fit"}).focus(),f.menu.open.call(e,b.originalEvent,d))},_closeMenu:function(b){var d,e=b.tree,f=b.options,g=a.extend({},e.ext.menu.data);f.menu.close.call(e,b.originalEvent,g)!==!1&&(d=a(f.menu.selector),a(c).unbind("keydown.fancytree, mousedown.fancytree"),d.hide(),e.ext.menu.data.node=null)}})}(jQuery,window,document),function(a,b,c,d){"use strict";function e(b,c){c=c||"",b||a.error("Assertion failed "+c)}var f="active",g="expanded",h="focus",i="selected";a.ui.fancytree._FancytreeClass.prototype.clearCookies=function(b){var c=this.ext.persist,d=c.cookiePrefix;b=b||"active expanded focus selected",b.indexOf(f)>=0&&a.cookie(d+f,null),b.indexOf(g)>=0&&a.cookie(d+g,null),b.indexOf(h)>=0&&a.cookie(d+h,null),b.indexOf(i)>=0&&a.cookie(d+i,null)},a.ui.fancytree._FancytreeClass.prototype.getPersistData=function(){var b=this.ext.persist,c=this.options.persist,d=c.cookieDelimiter,e={};e[f]=a.cookie(b.cookiePrefix+f),e[g]=(a.cookie(b.cookiePrefix+g)||"").split(d),e[i]=(a.cookie(b.cookiePrefix+i)||"").split(d),e[h]=a.cookie(b.cookiePrefix+h)},a.ui.fancytree.registerExtension("persist",{version:"0.0.1",options:{cookieDelimiter:"~",cookiePrefix:d,cookie:{raw:!1,expires:"",path:"",domain:"",secure:!1},overrideSource:!1,types:"active expanded focus selected"},_setKey:function(b,c,d){c=""+c;var e=this._local,f=this.options.persist,g=e.cookiePrefix+b,h=a.cookie(g),i=h?h.split(f.cookieDelimiter):[],j=a.inArray(c,i);j>=0&&i.splice(j,1),d&&i.push(c),a.cookie(g,i.join(f.cookieDelimiter),f.cookie)},treeInit:function(b){var j=b.tree,k=b.options,l=this._local,m=this.options.persist;e(a.cookie,"Missing required plugin for 'persist' extension: jquery.cookie.js"),l.cookiePrefix=m.cookiePrefix||"fancytree-"+j._id+"-",l.storeActive=m.types.indexOf(f)>=0,l.storeExpanded=m.types.indexOf(g)>=0,l.storeSelected=m.types.indexOf(i)>=0,l.storeFocus=m.types.indexOf(h)>=0,j.$div.bind("fancytreeinit",function(){var b,e,n,o,p=a.cookie(l.cookiePrefix+h);if(j.debug("COOKIE "+c.cookie),l.storeExpanded&&(b=a.cookie(l.cookiePrefix+g)))for(e=b.split(m.cookieDelimiter),n=0;n<e.length;n++)o=j.getNodeByKey(e[n]),o?(o.expanded===d||m.overrideSource&&o.expanded===!1)&&(o.expanded=!0,o.render()):l._setKey(g,e[n],!1);if(l.storeSelected&&(b=a.cookie(l.cookiePrefix+i)))for(e=b.split(m.cookieDelimiter),n=0;n<e.length;n++)o=j.getNodeByKey(e[n]),o?(o.selected===d||m.overrideSource&&o.selected===!1)&&(o.selected=!0,o.renderStatus()):l._setKey(i,e[n],!1);l.storeActive&&(b=a.cookie(l.cookiePrefix+f),!b||!k.persist.overrideSource&&j.activeNode||(o=j.getNodeByKey(b),o&&o.setActive())),l.storeFocus&&p&&(o=j.getNodeByKey(p),o&&o.setFocus())}),this._super(b)},nodeSetActive:function(b,c){var d=this._local,e=this.options.persist;this._super(b,c),d.storeActive&&a.cookie(d.cookiePrefix+f,this.activeNode?this.activeNode.key:null,e.cookie)},nodeSetExpanded:function(a,b){var c=a.node,d=this._local;this._super(a,b),d.storeExpanded&&d._setKey(g,c.key,b)},nodeSetFocus:function(b){var c=this._local,d=this.options.persist;this._super(b),c.storeFocus&&a.cookie(this.cookiePrefix+h,this.focusNode?this.focusNode.key:null,d.cookie)},nodeSetSelected:function(a,b){var c=a.node,d=this._local;this._super(a,b),d.storeSelected&&d._setKey(i,c.key,b)}})}(jQuery,window,document),function(a,b,c){"use strict";function d(b,c){c=c||"",b||a.error("Assertion failed "+c)}function e(a,b){a.parentNode.insertBefore(b,a.nextSibling)}function f(a,b){a.visit(function(a){var c=a.tr;return c&&(c.style.display=b?"":"none"),a.expanded?void 0:"skip"})}function g(b){var c,e,f,g=b.parent,h=g?g.children:null;if(h&&h.length>1&&h[0]!==b)for(c=a.inArray(b,h),f=h[c-1],d(f.tr);f.children&&(e=f.children[f.children.length-1],e.tr);)f=e;else f=g;return f}a.ui.fancytree.registerExtension("table",{version:"0.0.1",options:{indentation:16,nodeColumnIdx:0,checkboxColumnIdx:null},treeInit:function(b){var d,e,f,g=b.tree,h=g.widget.element;for(h.addClass("fancytree-container fancytree-ext-table"),g.tbody=h.find("> tbody")[0],g.columnCount=a("thead >tr >th",h).length,a(g.tbody).empty(),g.rowFragment=c.createDocumentFragment(),e=a("<tr>"),f="",b.options.aria&&(e.attr("role","row"),f=" role='gridcell'"),d=0;d<g.columnCount;d++)b.options.table.nodeColumnIdx===d?e.append("<td"+f+"><span class='fancytree-node'></span></td>"):e.append("<td"+f+">");g.rowFragment.appendChild(e.get(0)),g.statusClassPropName="tr",g.ariaPropName="tr",this.nodeContainerAttrName="tr",this._super(b),a(g.rootNode.ul).remove(),g.rootNode.ul=null,g.$container=h,this.$container.attr("tabindex",this.options.tabbable?"0":"-1"),this.options.aria&&g.$container.attr("role","treegrid").attr("aria-readonly",!0)},nodeRemoveChildMarkup:function(b){var c=b.node;c.visit(function(b){b.tr&&(a(b.tr).remove(),b.tr=null)})},nodeRemoveMarkup:function(b){var c=b.node;c.tr&&(a(c.tr).remove(),c.tr=null),this.nodeRemoveChildMarkup(b)},nodeRender:function(b,c,f,h,i){var j,k,l,m,n,o,p,q,r=b.tree,s=b.node,t=b.options,u=!s.parent;if(i||(b.hasCollapsedParents=s.parent&&!s.parent.expanded),u||(s.tr?this.nodeRenderTitle(b):(n=r.rowFragment.firstChild.cloneNode(!0),o=g(s),d(o),h===!0&&i?n.style.display="none":f&&b.hasCollapsedParents&&(n.style.display="none"),o.tr?e(o.tr,n):(d(!o.parent,"prev. row must have a tr, or is system root"),r.tbody.appendChild(n)),s.tr=n,s.key&&t.generateIds&&(s.tr.id=t.idPrefix+s.key),s.tr.ftnode=s,t.aria&&a(s.tr).attr("aria-labelledby","ftal_"+s.key),s.span=a("span.fancytree-node",s.tr).get(0),this.nodeRenderTitle(b),t.createNode&&t.createNode.call(r,{type:"createNode"},b))),t.renderNode&&t.renderNode.call(r,{type:"renderNode"},b),j=s.children,j&&(u||f||s.expanded))for(l=0,m=j.length;m>l;l++)q=a.extend({},b,{node:j[l]}),q.hasCollapsedParents=q.hasCollapsedParents||!s.expanded,this.nodeRender(q,c,f,h,!0);j&&!i&&(p=s.tr||null,k=r.tbody.firstChild,s.visit(function(a){if(a.tr){if(s.expanded||u||"none"===a.tr.style.display||(a.tr.style.display="none"),a.tr.previousSibling!==p){s.debug("_fixOrder: mismatch at node: "+a);var b=p?p.nextSibling:k;r.tbody.insertBefore(a.tr,b)}p=a.tr}})),u||this.nodeRenderStatus(b)},nodeRenderTitle:function(b){var c,d=b.node,e=b.options;this._super(b),e.checkbox&&null!=e.table.checkboxColumnIdx&&(c=a("span.fancytree-checkbox",d.span).detach(),a(d.tr).find("td:first").html(c)),e.renderColumns&&e.renderColumns.call(b.tree,{type:"renderColumns"},b)},nodeRenderStatus:function(b){var c,d=b.node,e=b.options;this._super(b),a(d.tr).removeClass("fancytree-node"),c=(d.getLevel()-1)*e.table.indentation,c&&a(d.span).css({marginLeft:c+"px"})},nodeSetExpanded:function(a,b){return this._super(a,b).always(function(){b=b!==!1,f(a.node,b)})},nodeSetStatus:function(b,c,d,e){if("ok"===c){var f=b.node,g=f.children?f.children[0]:null;g&&g.isStatusNode&&a(g.tr).remove()}this._super(b,c,d,e)}})}(jQuery,window,document),function(a){"use strict";a.ui.fancytree.registerExtension("themeroller",{version:"0.0.1",options:{activeClass:"ui-state-active",foccusClass:"ui-state-focus",hoverClass:"ui-state-hover",selectedClass:"ui-state-highlight"},treeInit:function(b){this._super(b);var c=b.widget.element;"TABLE"===c[0].nodeName?(c.addClass("ui-widget ui-corner-all"),c.find(">thead tr").addClass("ui-widget-header"),c.find(">tbody").addClass("ui-widget-conent")):c.addClass("ui-widget ui-widget-content ui-corner-all"),c.delegate(".fancytree-node","mouseenter mouseleave",function(b){var c=a.ui.fancytree.getNode(b.target),d="mouseenter"===b.type;c.debug("hover: "+d),a(c.span).toggleClass("ui-state-hover ui-corner-all",d)})},treeDestroy:function(a){this._super(a),a.widget.element.removeClass("ui-widget ui-widget-content ui-corner-all")},nodeRenderStatus:function(b){var c=b.node,d=a(c.span);this._super(b),d.toggleClass("ui-state-active",c.isActive()),d.toggleClass("ui-state-focus",c.hasFocus()),d.toggleClass("ui-state-highlight",c.isSelected())}})}(jQuery,window,document);
|
5
|
+
!function(a,b,c,d){"use strict";function e(b){b=b||"",a.error("Not implemented: "+b)}function f(b,c){b||(c=c?": "+c:"",a.error("Assertion failed"+c))}function g(a,c){var d,e,f=b.console?b.console[a]:null;if(f)if(f.apply)f.apply(b.console,c);else{for(e="",d=0;d<c.length;d++)e+=c[d];f(e)}}function h(b){var c,d,e,f=a.map(a.trim(b).split("."),function(a){return parseInt(a,10)}),g=a.map(Array.prototype.slice.call(arguments,1),function(a){return parseInt(a,10)});for(c=0;c<g.length;c++)if(d=f[c]||0,e=g[c]||0,d!==e)return d>e;return!0}function i(a,b,c,d,e){var f=function(){var c=b[a],f=d[a],g=b.ext[e],h=function(){return c.apply(b,arguments)};return function(){var a=b._local,c=b._super;try{return b._local=g,b._super=h,f.apply(b,arguments)}finally{b._local=a,b._super=c}}}();return f}function j(b,c,d,e){for(var f in d)"function"==typeof d[f]?"function"==typeof b[f]?b[f]=i(f,b,c,d,e):"_"===f.charAt(0)?b.ext[e][f]=i(f,b,c,d,e):a.error("Could not override tree."+f+". Use prefix '_' to create tree."+e+"._"+f):"options"!==f&&(b.ext[e][f]=d[f])}function k(b,c){return b===d?a.Deferred(function(){this.resolve()}).promise():a.Deferred(function(){this.resolveWith(b,c)}).promise()}function l(b,c){return b===d?a.Deferred(function(){this.reject()}).promise():a.Deferred(function(){this.rejectWith(b,c)}).promise()}function m(a,b){return function(){a.resolveWith(b)}}function n(a){return a=a.toLowerCase(),function(b){return b.title.toLowerCase().indexOf(a)>=0}}function o(b,c){var d,e,g,h;for(this.parent=b,this.tree=b.tree,this.ul=null,this.li=null,this.isStatusNode=!1,this.data={},d=0,e=u.length;e>d;d++)g=u[d],this[g]=c[g];c.data&&a.extend(this.data,c.data);for(g in c)v[g]||a.isFunction(c[g])||w[g]||(this.data[g]=c[g]);null==this.key&&(this.key="_"+r._nextNodeKey++),c.active&&(f(null===this.tree.activeNode,"only one active node allowed"),this.tree.activeNode=this),this.children=null,h=c.children,h&&h.length&&this._setChildren(h)}function p(b){this.widget=b,this.$div=b.element,this.options=b.options,this.ext={},this.data={},this._id=a.ui.fancytree._nextId++,this._ns=".fancytree-"+this._id,this.activeNode=null,this.focusNode=null,this._hasFocus=null,this.lastSelectedNode=null,this.systemFocusElement=null,this.statusClassPropName="span",this.ariaPropName="li",this.nodeContainerAttrName="li",this.$div.find(">ul.fancytree-container").remove();var c,d={tree:this};this.rootNode=new o(d,{title:"root",key:"root_"+this._id,children:null,expanded:!0}),this.rootNode.parent=null,c=a("<ul>",{"class":"ui-fancytree fancytree-container"}).appendTo(this.$div),this.$container=c,this.rootNode.ul=c[0],null==this.options.debugLevel&&(this.options.debugLevel=r.debugLevel),this.$container.attr("tabindex",this.options.tabbable?"0":"-1"),this.options.aria&&this.$container.attr("role","tree").attr("aria-multiselectable",!0)}if(a.ui.fancytree&&a.ui.fancytree.version)return void a.ui.fancytree.warn("Fancytree: ignored duplicate include");var q,r=null,s="active expanded focus folder lazy selected unselectable".split(" "),t={},u="expanded extraClasses folder hideCheckbox key lazy selected title tooltip unselectable".split(" "),v={},w={active:!0,children:!0,data:!0,focus:!0};for(q=0;q<s.length;q++)t[s[q]]=!0;for(q=0;q<u.length;q++)v[u[q]]=!0;o.prototype={_findDirectChild:function(a){var b,c,d=this.children;if(d)if("string"==typeof a){for(b=0,c=d.length;c>b;b++)if(d[b].key===a)return d[b]}else{if("number"==typeof a)return this.children[a];if(a.parent===this)return a}return null},_setChildren:function(a){f(a&&(!this.children||0===this.children.length),"only init supported"),this.children=[];for(var b=0,c=a.length;c>b;b++)this.children.push(new o(this,a[b]))},addChildren:function(b,c){var d,e,g,h=null,i=[];for(a.isPlainObject(b)&&(b=[b]),this.children||(this.children=[]),d=0,e=b.length;e>d;d++)i.push(new o(this,b[d]));return h=i[0],null==c?this.children=this.children.concat(i):(c=this._findDirectChild(c),g=a.inArray(c,this.children),f(g>=0,"insertBefore must be an existing child"),this.children.splice.apply(this.children,[g,0].concat(i))),(!this.parent||this.parent.ul||this.tr)&&this.render(),3===this.tree.options.selectMode&&this.fixSelection3FromEndNodes(),h},addNode:function(a,b){switch((b===d||"over"===b)&&(b="child"),b){case"after":return this.getParent().addChildren(a,this.getNextSibling());case"before":return this.getParent().addChildren(a,this);case"child":case"over":return this.addChildren(a)}f(!1,"Invalid mode: "+b)},applyPatch:function(b){if(null===b)return this.remove(),k(this);var c,d,e,f={children:!0,expanded:!0,parent:!0};for(c in b)e=b[c],f[c]||a.isFunction(e)||(v[c]?this[c]=e:this.data[c]=e);return b.hasOwnProperty("children")&&(this.removeChildren(),b.children&&this._setChildren(b.children)),this.isVisible()&&(this.renderTitle(),this.renderStatus()),d=b.hasOwnProperty("expanded")?this.setExpanded(b.expanded):k(this)},collapseSiblings:function(){return this.tree._callHook("nodeCollapseSiblings",this)},copyTo:function(a,b,c){return a.addNode(this.toDict(!0,c),b)},countChildren:function(a){var b,c,d,e=this.children;if(!e)return 0;if(d=e.length,a!==!1)for(b=0,c=d;c>b;b++)d+=e[b].countChildren();return d},debug:function(){this.tree.options.debugLevel>=2&&(Array.prototype.unshift.call(arguments,this.toString()),g("debug",arguments))},discard:function(){return this.lazy&&a.isArray(this.children)?(this.removeChildren(),this.setExpanded(!1)):void 0},findAll:function(b){b=a.isFunction(b)?b:n(b);var c=[];return this.visit(function(a){b(a)&&c.push(a)}),c},findFirst:function(b){b=a.isFunction(b)?b:n(b);var c=null;return this.visit(function(a){return b(a)?(c=a,!1):void 0}),c},_changeSelectStatusAttrs:function(a){var b=!1;switch(a){case!1:b=this.selected||this.partsel,this.selected=!1,this.partsel=!1;break;case!0:b=!this.selected||!this.partsel,this.selected=!0,this.partsel=!0;break;case d:b=this.selected||!this.partsel,this.selected=!1,this.partsel=!0;break;default:f(!1,"invalid state: "+a)}return this.debug("fixSelection3AfterLoad() _changeSelectStatusAttrs()",a,b),b&&this.renderStatus(),b},fixSelection3AfterClick:function(){var a=this.isSelected();this.visit(function(b){b._changeSelectStatusAttrs(a)}),this.fixSelection3FromEndNodes()},fixSelection3FromEndNodes:function(){function a(b){var c,e,f,g,h,i,j,k=b.children;if(k){for(i=!0,j=!1,c=0,e=k.length;e>c;c++)f=k[c],g=a(f),g!==!1&&(j=!0),g!==!0&&(i=!1);h=i?!0:j?d:!1}else h=!!b.selected;return b._changeSelectStatusAttrs(h),h}f(3===this.tree.options.selectMode,"expected selectMode 3"),a(this),this.visitParents(function(a){var b,c,e,f,g=a.children,h=!0,i=!1;for(b=0,c=g.length;c>b;b++)e=g[b],(e.selected||e.partsel)&&(i=!0),e.unselectable||e.selected||(h=!1);f=h?!0:i?d:!1,a._changeSelectStatusAttrs(f)})},fromDict:function(b){for(var c in b)v[c]?this[c]=b[c]:"data"===c?a.extend(this.data,b.data):a.isFunction(b[c])||w[c]||(this.data[c]=b[c]);b.children?(this.removeChildren(),this.addChildren(b.children)):this.renderTitle()},getChildren:function(){return this.hasChildren()===d?d:this.children},getFirstChild:function(){return this.children?this.children[0]:null},getIndex:function(){return a.inArray(this,this.parent.children)},getIndexHier:function(b){b=b||".";var c=[];return a.each(this.getParentList(!1,!0),function(a,b){c.push(b.getIndex()+1)}),c.join(b)},getKeyPath:function(a){var b=[],c=this.tree.options.keyPathSeparator;return this.visitParents(function(a){a.parent&&b.unshift(a.key)},!a),c+b.join(c)},getLastChild:function(){return this.children?this.children[this.children.length-1]:null},getLevel:function(){for(var a=0,b=this.parent;b;)a++,b=b.parent;return a},getNextSibling:function(){if(this.parent){var a,b,c=this.parent.children;for(a=0,b=c.length-1;b>a;a++)if(c[a]===this)return c[a+1]}return null},getParent:function(){return this.parent},getParentList:function(a,b){for(var c=[],d=b?this:this.parent;d;)(a||d.parent)&&c.unshift(d),d=d.parent;return c},getPrevSibling:function(){if(this.parent){var a,b,c=this.parent.children;for(a=1,b=c.length;b>a;a++)if(c[a]===this)return c[a-1]}return null},hasChildren:function(){return this.lazy?null==this.children?d:0===this.children.length?!1:1===this.children.length&&this.children[0].isStatusNode?d:!0:!!this.children},hasFocus:function(){return this.tree.hasFocus()&&this.tree.focusNode===this},isActive:function(){return this.tree.activeNode===this},isChildOf:function(a){return this.parent&&this.parent===a},isDescendantOf:function(a){if(!a||a.tree!==this.tree)return!1;for(var b=this.parent;b;){if(b===a)return!0;b=b.parent}return!1},isExpanded:function(){return!!this.expanded},isFirstSibling:function(){var a=this.parent;return!a||a.children[0]===this},isFolder:function(){return!!this.folder},isLastSibling:function(){var a=this.parent;return!a||a.children[a.children.length-1]===this},isLazy:function(){return!!this.lazy},isLoading:function(){e()},isRoot:function(){return this.tree.rootNode===this},isSelected:function(){return!!this.selected},isVisible:function(){var a,b,c=this.getParentList(!1,!1);for(a=0,b=c.length;b>a;a++)if(!c[a].expanded)return!1;return!0},makeVisible:function(){var a,b,c=this.getParentList(!1,!1);for(a=0,b=c.length;b>a;a++)c[a].setExpanded(!0)},moveTo:function(b,c,e){(c===d||"over"===c)&&(c="child");var g,h=this.parent,i="child"===c?b:b.parent;if(this!==b){if(!this.parent)throw"Cannot move system root";if(i.isDescendantOf(this))throw"Cannot move a node to its own descendant";if(1===this.parent.children.length?(this.parent.children=this.parent.lazy?[]:null,this.parent.expanded=!1):(g=a.inArray(this,this.parent.children),f(g>=0),this.parent.children.splice(g,1)),this.parent=i,i.hasChildren())switch(c){case"child":i.children.push(this);break;case"before":g=a.inArray(b,i.children),f(g>=0),i.children.splice(g,0,this);break;case"after":g=a.inArray(b,i.children),f(g>=0),i.children.splice(g+1,0,this);break;default:throw"Invalid mode "+c}else i.children=[this];e&&b.visit(e,!0),this.tree!==b.tree&&(this.warn("Cross-tree moveTo is experimantal!"),this.visit(function(a){a.tree=b.tree},!0)),h.isDescendantOf(i)||h.render(),i.isDescendantOf(h)||i===h||i.render()}},navigate:function(b,c){function d(d){return d?(d.makeVisible(),a(d.span).is(":visible")?c===!1?d.setFocus():d.setActive():(d.debug("Navigate: skipping hidden node"),void d.navigate(b,c))):void 0}var e,f,g=!0,h=a.ui.keyCode,i=null;switch(b){case h.BACKSPACE:this.parent&&this.parent.parent&&d(this.parent);break;case h.LEFT:this.expanded?(this.setExpanded(!1),d(this)):this.parent&&this.parent.parent&&d(this.parent);break;case h.RIGHT:this.expanded||!this.children&&!this.lazy?this.children&&this.children.length&&d(this.children[0]):(this.setExpanded(),d(this));break;case h.UP:for(i=this.getPrevSibling();i&&i.expanded&&i.children&&i.children.length;)i=i.children[i.children.length-1];!i&&this.parent&&this.parent.parent&&(i=this.parent),d(i);break;case h.DOWN:if(this.expanded&&this.children&&this.children.length)i=this.children[0];else for(f=this.getParentList(!1,!0),e=f.length-1;e>=0&&!(i=f[e].getNextSibling());e--);d(i);break;default:g=!1}},lazyLoad:function(b){(b||this.hasChildren()===d)&&this.discard(),f(!a.isArray(this.children));var c=this.tree._triggerNodeEvent("lazyload",this);return f("boolean"!=typeof c,"lazyload event must return source in data.result"),this.tree._callHook("nodeLoadChildren",this,c)},render:function(a,b){return this.tree._callHook("nodeRender",this,a,b)},renderTitle:function(){return this.tree._callHook("nodeRenderTitle",this)},renderStatus:function(){return this.tree._callHook("nodeRenderStatus",this)},remove:function(){return this.parent.removeChild(this)},removeChild:function(a){return this.tree._callHook("nodeRemoveChild",this,a)},removeChildren:function(){return this.tree._callHook("nodeRemoveChildren",this)},scheduleAction:function(a,b){this.tree.timer&&clearTimeout(this.tree.timer),this.tree.timer=null;var c=this;switch(a){case"cancel":break;case"expand":this.tree.timer=setTimeout(function(){c.tree.debug("setTimeout: trigger expand"),c.setExpanded(!0)},b);break;case"activate":this.tree.timer=setTimeout(function(){c.tree.debug("setTimeout: trigger activate"),c.setActive(!0)},b);break;default:throw"Invalid mode "+a}},scrollIntoView:function(b,c){b=b===!0?{duration:200,queue:!1}:b;var d,e=new a.Deferred,f=a(this.span).position().top,g=a(this.span).height(),h=this.tree.$container,i=h[0].scrollTop,j=Math.max(0,h.innerHeight()-h[0].clientHeight),k=h.height()-j,l=null;return 0>f?l=i+f:f+g>k&&(l=i+f-k+g,c&&(d=c?a(c.span).position().top:0,f-d>k&&(l=i+d))),null!==l?b?h.animate({scrollTop:l},b):(h[0].scrollTop=l,e.resolveWith(this)):e.resolveWith(this),e.promise()},setActive:function(a,b){return this.tree._callHook("nodeSetActive",this,a,b)},setExpanded:function(a,b){return this.tree._callHook("nodeSetExpanded",this,a,b)},setFocus:function(a){return this.tree._callHook("nodeSetFocus",this,a)},setSelected:function(a){return this.tree._callHook("nodeSetSelected",this,a)},setTitle:function(a){this.title=a,this.renderTitle()},sortChildren:function(a,b){var c,d,e=this.children;if(e){if(a=a||function(a,b){var c=a.title.toLowerCase(),d=b.title.toLowerCase();return c===d?0:c>d?1:-1},e.sort(a),b)for(c=0,d=e.length;d>c;c++)e[c].children&&e[c].sortChildren(a,"$norender$");"$norender$"!==b&&this.render()}},toDict:function(b,c){var d,e,f,g={},h=this;if(a.each(u,function(a,b){(h[b]||h[b]===!1)&&(g[b]=h[b])}),a.isEmptyObject(this.data)||(g.data=a.extend({},this.data),a.isEmptyObject(g.data)&&delete g.data),c&&c(g),b&&this.hasChildren())for(g.children=[],d=0,e=this.children.length;e>d;d++)f=this.children[d],f.isStatusNode||g.children.push(f.toDict(!0,c));return g},toggleExpanded:function(){return this.tree._callHook("nodeToggleExpanded",this)},toggleSelected:function(){return this.tree._callHook("nodeToggleSelected",this)},toString:function(){return"<FancytreeNode(#"+this.key+", '"+this.title+"')>"},visit:function(a,b){var c,d,e=!0,f=this.children;if(b===!0&&(e=a(this),e===!1||"skip"===e))return e;if(f)for(c=0,d=f.length;d>c&&(e=f[c].visit(a,!0),e!==!1);c++);return e},visitParents:function(a,b){if(b&&a(this)===!1)return!1;for(var c=this.parent;c;){if(a(c)===!1)return!1;c=c.parent}return!0},warn:function(){Array.prototype.unshift.call(arguments,this.toString()),g("warn",arguments)}},p.prototype={_makeHookContext:function(b,c,e){var f,g;return b.node!==d?(c&&b.originalEvent!==c&&a.error("invalid args"),f=b):b.tree?(g=b.tree,f={node:b,tree:g,widget:g.widget,options:g.widget.options,originalEvent:c}):b.widget?f={node:null,tree:b,widget:b.widget,options:b.widget.options,originalEvent:c}:a.error("invalid args"),e&&a.extend(f,e),f},_callHook:function(b,c){var d=this._makeHookContext(c),e=this[b],f=Array.prototype.slice.call(arguments,2);return a.isFunction(e)||a.error("_callHook('"+b+"') is not a function"),f.unshift(d),e.apply(this,f)},_requireExtension:function(b,c,d,e){d=!!d;var g=this._local.name,h=this.options.extensions,i=a.inArray(b,h)<a.inArray(g,h),j=c&&null==this.ext[b],k=!j&&null!=d&&d!==i;return f(g&&g!==b),j||k?(e||(j||c?(e="'"+g+"' extension requires '"+b+"'",k&&(e+=" to be registered "+(d?"before":"after")+" itself")):e="If used together, `"+b+"` must be registered "+(d?"before":"after")+" `"+g+"`"),a.error(e),!1):!0},activateKey:function(a){var b=this.getNodeByKey(a);return b?b.setActive():this.activeNode&&this.activeNode.setActive(!1),b},applyPatch:function(b){var c,d,e,g,h,i,j=b.length,k=[];for(d=0;j>d;d++)e=b[d],f(2===e.length,"patchList must be an array of length-2-arrays"),g=e[0],h=e[1],i=null===g?this.rootNode:this.getNodeByKey(g),i?(c=new a.Deferred,k.push(c),i.applyPatch(h).always(m(c,i))):this.warn("could not find node with key '"+g+"'");return a.when.apply(a,k).promise()},count:function(){return this.rootNode.countChildren()},debug:function(){this.options.debugLevel>=2&&(Array.prototype.unshift.call(arguments,this.toString()),g("debug",arguments))},generateFormElements:function(b,c){var d,e=b!==!1?"ft_"+this._id:b,f=c!==!1?"ft_"+this._id+"_active":c,g="fancytree_result_"+this._id,h=this.$container.find("div#"+g);h.length?h.empty():h=a("<div>",{id:g}).hide().appendTo(this.$container),e&&(d=this.getSelectedNodes(3===this.options.selectMode),a.each(d,function(b,c){h.append(a("<input>",{type:"checkbox",name:e,value:c.key,checked:!0}))})),f&&this.activeNode&&h.append(a("<input>",{type:"radio",name:f,value:this.activeNode.key,checked:!0}))},getActiveNode:function(){return this.activeNode},getFirstChild:function(){return this.rootNode.getFirstChild()},getFocusNode:function(){return this.focusNode},getNodeByKey:function(a,b){var d,e;return!b&&(d=c.getElementById(this.options.idPrefix+a))?d.ftnode?d.ftnode:null:(b=b||this.rootNode,e=null,b.visit(function(b){return b.key===a?(e=b,!1):void 0},!0),e)},getSelectedNodes:function(a){var b=[];return this.rootNode.visit(function(c){return c.selected&&(b.push(c),a===!0)?"skip":void 0}),b},hasFocus:function(){return!!this._hasFocus},info:function(){this.options.debugLevel>=1&&(Array.prototype.unshift.call(arguments,this.toString()),g("info",arguments))},loadKeyPath:function(b,c,e){function f(a,b,d){c.call(r,b,"loading"),b.lazyLoad().done(function(){r.loadKeyPath.call(r,l[a],c,b).always(m(d,r))}).fail(function(){r.warn("loadKeyPath: error loading: "+a+" (parent: "+p+")"),c.call(r,b,"error"),d.reject()})}var g,h,i,j,k,l,n,o,p=e||this.rootNode,q=this.options.keyPathSeparator,r=this;for(a.isArray(b)||(b=[b]),l={},i=0;i<b.length;i++)for(j=b[i],j.charAt(0)===q&&(j=j.substr(1)),o=j.split(q);o.length;){if(k=o.shift(),n=p._findDirectChild(k),!n){this.warn("loadKeyPath: key not found: "+k+" (parent: "+p+")"),c.call(this,k,"error");break}if(0===o.length){c.call(this,n,"ok");break}if(n.lazy&&n.hasChildren()===d){c.call(this,n,"loaded"),l[k]?l[k].push(o.join(q)):l[k]=[o.join(q)];break}c.call(this,n,"loaded"),p=n}g=[];for(k in l)n=p._findDirectChild(k),h=new a.Deferred,g.push(h),f(k,n,h);return a.when.apply(a,g).promise()},reactivate:function(a){var b=this.activeNode;b&&(this.activeNode=null,b.setActive(),a&&b.setFocus())},reload:function(a){return this._callHook("treeClear",this),this._callHook("treeLoad",this,a)},render:function(a,b){return this.rootNode.render(a,b)},setFocus:function(a){return this._callHook("treeSetFocus",this,a)},toDict:function(a,b){var c=this.rootNode.toDict(!0,b);return a?c:c.children},toString:function(){return"<Fancytree(#"+this._id+")>"},_triggerNodeEvent:function(a,b,c,e){var f=this._makeHookContext(b,c,e),g=this.widget._trigger(a,c,f);return g!==!1&&f.result!==d?f.result:g},_triggerTreeEvent:function(a,b){var c=this._makeHookContext(this,b),e=this.widget._trigger(a,b,c);return e!==!1&&c.result!==d?c.result:e},visit:function(a){return this.rootNode.visit(a,!1)},warn:function(){Array.prototype.unshift.call(arguments,this.toString()),g("warn",arguments)}},a.extend(p.prototype,{nodeClick:function(a){var b,c,d=a.originalEvent,e=a.targetType,f=a.node;if("expander"===e)this._callHook("nodeToggleExpanded",a);else if("checkbox"===e)this._callHook("nodeToggleSelected",a),this._callHook("nodeSetFocus",a,!0);else{if(c=!1,b=!0,f.folder)switch(a.options.clickFolderMode){case 2:c=!0,b=!1;break;case 3:b=!0,c=!0}b&&(this.nodeSetFocus(a),this._callHook("nodeSetActive",a,!0)),c&&this._callHook("nodeToggleExpanded",a)}"a"===d.target.localName&&"fancytree-title"===d.target.className&&d.preventDefault()},nodeCollapseSiblings:function(a,b){var c,d,e,f=a.node;if(f.parent)for(c=f.parent.children,d=0,e=c.length;e>d;d++)c[d]!==f&&c[d].expanded&&this._callHook("nodeSetExpanded",c[d],!1,b)},nodeDblclick:function(a){"title"===a.targetType&&4===a.options.clickFolderMode&&this._callHook("nodeToggleExpanded",a),"title"===a.targetType&&a.originalEvent.preventDefault()},nodeKeydown:function(b){var c,d=b.originalEvent,e=b.node,f=b.tree,g=b.options,h=!0,i=!(d.ctrlKey||!g.autoActivate),j=a.ui.keyCode;switch(e||(this.rootNode.getFirstChild().setFocus(),e=b.node=this.focusNode,e.debug("Keydown force focus on first node")),d.which){case j.NUMPAD_ADD:case 187:f.nodeSetExpanded(b,!0);break;case j.NUMPAD_SUBTRACT:case 189:f.nodeSetExpanded(b,!1);break;case j.SPACE:g.checkbox?f.nodeToggleSelected(b):f.nodeSetActive(b,!0);break;case j.ENTER:f.nodeSetActive(b,!0);break;case j.BACKSPACE:case j.LEFT:case j.RIGHT:case j.UP:case j.DOWN:c=e.navigate(d.which,i);break;default:h=!1}h&&d.preventDefault()},nodeLoadChildren:function(b,c){var d,e,g=b.tree,h=b.node;return a.isFunction(c)&&(c=c()),c.url&&(d=a.extend({},b.options.ajax,c),d.debugDelay?(e=d.debugDelay,a.isArray(e)&&(e=e[0]+Math.random()*(e[1]-e[0])),h.debug("nodeLoadChildren waiting debug delay "+Math.round(e)+"ms"),d.debugDelay=!1,c=a.Deferred(function(b){setTimeout(function(){a.ajax(d).done(function(){b.resolveWith(this,arguments)}).fail(function(){b.rejectWith(this,arguments)})},e)})):c=a.ajax(d),c=c.pipe(function(c){var d;return"string"==typeof c&&a.error("Ajax request returned a string (did you get the JSON dataType wrong?)."),b.options.postProcess?(d=g._triggerNodeEvent("postProcess",b,b.originalEvent,{response:c,dataType:this.dataType}),c=a.isArray(d)?d:c):c&&c.hasOwnProperty("d")&&b.options.enableAspx&&(c="string"==typeof c.d?a.parseJSON(c.d):c.d),c},function(a,b,c){return g._makeHookContext(h,null,{error:a,args:Array.prototype.slice.call(arguments),message:c,details:a.status+": "+c})})),a.isFunction(c.promise)&&(g.nodeSetStatus(b,"loading"),c.done(function(){g.nodeSetStatus(b,"ok")}).fail(function(a){var c;c=a.node&&a.error&&a.message?a:g._makeHookContext(h,null,{error:a,args:Array.prototype.slice.call(arguments),message:a?a.message||a.toString():""}),g._triggerNodeEvent("loaderror",c,null),g.nodeSetStatus(b,"error",c.message,c.details)})),a.when(c).done(function(b){var c;a.isPlainObject(b)&&(f(a.isArray(b.children),"source must contain (or be) an array of children"),f(h.isRoot(),"source may only be an object for root nodes"),c=b,b=b.children,delete c.children,a.extend(g.data,c)),f(a.isArray(b),"expected array of children"),h._setChildren(b),h.parent&&g._triggerNodeEvent("loadChildren",h)})},nodeLoadKeyPath:function(){},nodeMakeVisible:function(a){var b,c,d=a.node.getParentList(!1,!1);for(b=0,c=d.length;c>b;b++)d[b].setExpanded(!0)},nodeRemoveChild:function(b,c){var d,e=b.node,g=b.options,h=a.extend({},b,{node:c}),i=e.children;return r.debug("nodeRemoveChild()",e.toString(),c.toString()),1===i.length?(f(c===i[0]),this.nodeRemoveChildren(b)):(this.activeNode&&(c===this.activeNode||this.activeNode.isDescendantOf(c))&&this.activeNode.setActive(!1),this.focusNode&&(c===this.focusNode||this.focusNode.isDescendantOf(c))&&(this.focusNode=null),this.nodeRemoveMarkup(h),this.nodeRemoveChildren(h),d=a.inArray(c,i),f(d>=0),c.visit(function(a){a.parent=null},!0),g.removeNode&&g.removeNode.call(b.tree,{type:"removeNode"},h),void i.splice(d,1))},nodeRemoveChildMarkup:function(b){var c=b.node;r.debug("nodeRemoveChildMarkup()",c.toString()),c.ul&&(c.isRoot()?a(c.ul).empty():(a(c.ul).remove(),c.ul=null),c.visit(function(a){a.li=a.ul=null}))},nodeRemoveChildren:function(b){var c,e=b.node,f=e.children,g=b.options;r.debug("nodeRemoveChildren()",e.toString()),f&&(this.activeNode&&this.activeNode.isDescendantOf(e)&&this.activeNode.setActive(!1),this.focusNode&&this.focusNode.isDescendantOf(e)&&(this.focusNode=null),this.nodeRemoveChildMarkup(b),c=a.extend({},b),e.visit(function(a){a.parent=null,g.removeNode&&(c.node=a,g.removeNode.call(b.tree,{type:"removeNode"},c))}),e.children=d,this.nodeRenderStatus(b))},nodeRemoveMarkup:function(b){var c=b.node;r.debug("nodeRemoveMarkup()",c.toString()),c.li&&(a(c.li).remove(),c.li=null),this.nodeRemoveChildMarkup(b)},nodeRender:function(b,d,e,g,h){var i,j,k,l,m,n,o,p=b.node,q=b.tree,s=b.options,t=s.aria,u=!1,v=p.parent,w=!v,x=p.children;if(r.debug("nodeRender("+!!d+", "+!!e+")",p.toString()),w||v.ul){if(f(w||v.ul,"parent UL must exist"),w||(p.li&&(d||p.li.parentNode!==p.parent.ul)&&(p.li.parentNode!==p.parent.ul&&this.warn("unlink "+p+" (must be child of "+p.parent+")"),this.nodeRemoveMarkup(b)),p.li||(u=!0,p.li=c.createElement("li"),p.li.ftnode=p,p.key&&s.generateIds&&(p.li.id=s.idPrefix+p.key),p.span=c.createElement("span"),p.span.className="fancytree-node",t&&a(p.span).attr("aria-labelledby","ftal_"+p.key),p.li.appendChild(p.span),this.nodeRenderTitle(b),s.createNode&&s.createNode.call(q,{type:"createNode"},b)),s.renderNode&&s.renderNode.call(q,{type:"renderNode"},b)),x){if(w||p.expanded||e===!0){for(p.ul||(p.ul=c.createElement("ul"),(g===!0&&!h||!p.expanded)&&(p.ul.style.display="none"),t&&a(p.ul).attr("role","group"),p.li?p.li.appendChild(p.ul):p.tree.$div.append(p.ul)),l=0,m=x.length;m>l;l++)o=a.extend({},b,{node:x[l]}),this.nodeRender(o,d,e,!1,!0);for(i=p.ul.firstChild;i;)k=i.ftnode,k&&k.parent!==p?(p.debug("_fixParent: remove missing "+k,i),n=i.nextSibling,i.parentNode.removeChild(i),i=n):i=i.nextSibling;for(i=p.ul.firstChild,l=0,m=x.length-1;m>l;l++)j=x[l],k=i.ftnode,j!==k?(p.debug("_fixOrder: mismatch at index "+l+": "+j+" != "+k),p.ul.insertBefore(j.li,k.li)):i=i.nextSibling}}else p.ul&&(this.warn("remove child markup for "+p),this.nodeRemoveChildMarkup(b));w||(this.nodeRenderStatus(b),u&&v.ul.appendChild(p.li))}},nodeRenderTitle:function(a,b){var c,e,f,g,h,i,j=a.node,k=a.tree,l=a.options,m=l.aria,n=j.getLevel(),o=[],p=j.data.icon;b!==d&&(j.title=b),j.span&&(n<l.minExpandLevel?n>1&&o.push(m?"<span role='button' class='fancytree-expander'></span>":"<span class='fancytree-expander'></span>"):o.push(m?"<span role='button' class='fancytree-expander'></span>":"<span class='fancytree-expander'></span>"),l.checkbox&&j.hideCheckbox!==!0&&!j.isStatusNode&&o.push(m?"<span role='checkbox' class='fancytree-checkbox'></span>":"<span class='fancytree-checkbox'></span>"),g=m?" role='img'":"",p&&"string"==typeof p?(e="/"===p.charAt(0)?p:l.imagePath+p,o.push("<img src='"+e+"' alt='' />")):j.data.iconclass?o.push("<span "+g+" class='fancytree-custom-icon "+j.data.iconclass+"'></span>"):(p===!0||p!==!1&&l.icons!==!1)&&o.push("<span "+g+" class='fancytree-icon'></span>"),f="",l.renderTitle&&(f=l.renderTitle.call(k,{type:"renderTitle"},a)||""),f||(i=j.tooltip?" title='"+j.tooltip.replace(/\"/g,""")+"'":"",c=m?" id='ftal_"+j.key+"'":"",g=m?" role='treeitem'":"",h=l.titlesTabbable?" tabindex='0'":"",f="<span "+g+" class='fancytree-title'"+c+i+h+">"+j.title+"</span>"),o.push(f),j.span.innerHTML=o.join(""))},nodeRenderStatus:function(b){var c=b.node,d=b.tree,e=b.options,f=c.hasChildren(),g=c.isLastSibling(),h=e.aria,i=a(c.span).find(".fancytree-title"),j=e._classNames,k=[],l=c[d.statusClassPropName];l&&(k.push(j.node),d.activeNode===c&&k.push(j.active),d.focusNode===c?(k.push(j.focused),h&&i.attr("aria-activedescendant",!0)):h&&i.removeAttr("aria-activedescendant"),c.expanded?(k.push(j.expanded),h&&i.attr("aria-expanded",!0)):h&&i.removeAttr("aria-expanded"),c.folder&&k.push(j.folder),f!==!1&&k.push(j.hasChildren),g&&k.push(j.lastsib),c.lazy&&null==c.children&&k.push(j.lazy),c.partsel&&k.push(j.partsel),c.selected?(k.push(j.selected),h&&i.attr("aria-selected",!0)):h&&i.attr("aria-selected",!1),c.extraClasses&&k.push(c.extraClasses),k.push(f===!1?j.combinedExpanderPrefix+"n"+(g?"l":""):j.combinedExpanderPrefix+(c.expanded?"e":"c")+(c.lazy&&null==c.children?"d":"")+(g?"l":"")),k.push(j.combinedIconPrefix+(c.expanded?"e":"c")+(c.folder?"f":"")),l.className=k.join(" "),c.li&&(c.li.className=g?j.lastsib:""))},nodeSetActive:function(b,c,d){d=d||{};var e,g=b.node,h=b.tree,i=b.options,j=g===h.activeNode;return c=c!==!1,g.debug("nodeSetActive",c),j===c?k(g):c&&this._triggerNodeEvent("beforeActivate",g,b.originalEvent)===!1?l(g,["rejected"]):void(c?(h.activeNode&&(f(h.activeNode!==g,"node was active (inconsistency)"),e=a.extend({},b,{node:h.activeNode}),h.nodeSetActive(e,!1),f(null===h.activeNode,"deactivate was out of sync?")),i.activeVisible&&h.nodeMakeVisible(b),h.activeNode=g,h.nodeRenderStatus(b),h.nodeSetFocus(b),h._triggerNodeEvent("activate",g)):(f(h.activeNode===g,"node was not active (inconsistency)"),h.activeNode=null,this.nodeRenderStatus(b),b.tree._triggerNodeEvent("deactivate",g)))},nodeSetExpanded:function(b,c,e){e=e||{};var f,g,h,i,j,m,n=b.node,o=b.tree,p=b.options,q=e.noAnimation===!0;if(c=c!==!1,n.debug("nodeSetExpanded("+c+")"),n.expanded&&c||!n.expanded&&!c)return n.debug("nodeSetExpanded("+c+"): nothing to do"),k(n);if(c&&!n.lazy&&!n.hasChildren())return l(n,["empty"]);if(!c&&n.getLevel()<p.minExpandLevel)return l(n,["locked"]);if(this._triggerNodeEvent("beforeExpand",n,b.originalEvent)===!1)return l(n,["rejected"]);if(q||n.isVisible()||(q=e.noAnimation=!0),g=new a.Deferred,c&&!n.expanded&&p.autoCollapse){j=n.getParentList(!1,!0),m=p.autoCollapse;try{for(p.autoCollapse=!1,h=0,i=j.length;i>h;h++)this._callHook("nodeCollapseSiblings",j[h],e)}finally{p.autoCollapse=m}}return g.done(function(){b.tree._triggerNodeEvent(c?"expand":"collapse",b),p.autoScroll&&!q&&n.getLastChild().scrollIntoView(!0,n)}),f=function(d){var e,f,g,h;if(n.expanded=c,o._callHook("nodeRender",b,!1,!1,!0),n.ul)if(g="none"!==n.ul.style.display,h=!!n.expanded,g===h)n.warn("nodeSetExpanded: UL.style.display already set");else{if(p.fx&&!q)return e=p.fx.duration||200,f=p.fx.easing,n.debug("nodeSetExpanded: animate start..."),void a(n.ul).animate(p.fx,e,f,function(){n.debug("nodeSetExpanded: animate done"),d()});n.ul.style.display=n.expanded||!parent?"":"none"}d()},c&&n.lazy&&n.hasChildren()===d?(n.debug("nodeSetExpanded: load start..."),n.lazyLoad().done(function(){n.debug("nodeSetExpanded: load done"),g.notifyWith&&g.notifyWith(n,["loaded"]),f(function(){g.resolveWith(n)})}).fail(function(a){f(function(){g.rejectWith(n,["load failed ("+a+")"])})})):f(function(){g.resolveWith(n)}),n.debug("nodeSetExpanded: returns"),g.promise()},nodeSetFocus:function(b,c){b.node.debug("nodeSetFocus("+c+")");var d,e=b.tree,f=b.node;if(c=c!==!1,e.focusNode){if(e.focusNode===f&&c)return void f.debug("nodeSetFocus("+c+"): nothing to do");d=a.extend({},b,{node:e.focusNode}),e.focusNode=null,this._triggerNodeEvent("blur",d),this._callHook("nodeRenderStatus",d)}c&&(this.hasFocus()||(f.debug("nodeSetFocus: forcing container focus"),this._callHook("treeSetFocus",b,!0,!0)),this.nodeMakeVisible(b),e.focusNode=f,this._triggerNodeEvent("focus",b),b.options.autoScroll&&f.scrollIntoView(),this._callHook("nodeRenderStatus",b))},nodeSetSelected:function(a,b){var c=a.node,d=a.tree,e=a.options;if(b=b!==!1,c.debug("nodeSetSelected("+b+")",a),!c.unselectable){if(c.selected&&b||!c.selected&&!b)return!!c.selected;if(this._triggerNodeEvent("beforeSelect",c,a.originalEvent)===!1)return!!c.selected;b&&1===e.selectMode?d.lastSelectedNode&&d.lastSelectedNode.setSelected(!1):3===e.selectMode&&(c.selected=b,c.fixSelection3AfterClick()),c.selected=b,this.nodeRenderStatus(a),d.lastSelectedNode=b?c:null,d._triggerNodeEvent("select",a)}},nodeSetStatus:function(b,c,d,e){var f,g,h=b.node,i=b.tree,j=b.options._classNames;switch(f=function(){var a=h.children?h.children[0]:null;if(a&&a.isStatusNode){try{h.ul&&(h.ul.removeChild(a.li),a.li=null)}catch(b){}1===h.children.length?h.children=[]:h.children.shift()}},g=function(b){var c=h.children?h.children[0]:null;return c&&c.isStatusNode?(a.extend(c,b),i._callHook("nodeRender",c)):(b.key="_statusNode",h._setChildren([b]),h.children[0].isStatusNode=!0,i.render()),h.children[0]},c){case"ok":f(),a(h.span).removeClass(j.loading),a(h.span).removeClass(j.error);break;case"loading":a(h.span).removeClass(j.error),a(h.span).addClass(j.loading),h.parent||g({title:i.options.strings.loading+(d?" ("+d+") ":""),tooltip:e,extraClasses:"fancytree-statusnode-wait"});break;case"error":a(h.span).removeClass(j.loading),a(h.span).addClass(j.error),g({title:i.options.strings.loadError+(d?" ("+d+") ":""),tooltip:e,extraClasses:"fancytree-statusnode-error"});break;default:a.error("invalid status "+c)}},nodeToggleExpanded:function(a){return this.nodeSetExpanded(a,!a.node.expanded)},nodeToggleSelected:function(a){return this.nodeSetSelected(a,!a.node.selected)},treeClear:function(a){var b=a.tree;b.activeNode=null,b.focusNode=null,b.$div.find(">ul.fancytree-container").empty(),b.rootNode.children=null
|
6
|
+
},treeCreate:function(){},treeDestroy:function(){},treeInit:function(a){this.treeLoad(a)},treeLoad:function(b,c){var d,f,g,h=b.tree,i=b.widget.element,j=a.extend({},b,{node:this.rootNode});if(h.rootNode.children&&this.treeClear(b),c=c||this.options.source)"string"==typeof c&&e();else switch(d=i.data("type")||"html"){case"html":f=i.find(">ul:first"),f.addClass("ui-fancytree-source ui-helper-hidden"),c=a.ui.fancytree.parseHtml(f);break;case"json":c=a.parseJSON(i.text()),c.children&&(c.title&&(h.title=c.title),c=c.children);break;default:a.error("Invalid data-type: "+d)}return g=this.nodeLoadChildren(j,c).done(function(){h.render(),3===b.options.selectMode&&h.rootNode.fixSelection3FromEndNodes(),h._triggerTreeEvent("init",!0)}).fail(function(){h.render(),h._triggerTreeEvent("init",!1)})},treeSetFocus:function(a,b,c){b=b!==!1,this.debug("treeSetFocus("+b+"), _calledByNodeSetFocus: "+c),this.debug(" focusNode: "+this.focusNode),this.debug(" activeNode: "+this.activeNode),b!==this.hasFocus()&&(this._hasFocus=b,this.$container.toggleClass("fancytree-treefocus",b),this._triggerTreeEvent(b?"focusTree":"blurTree"))}}),a.widget("ui.fancytree",{options:{activeVisible:!0,ajax:{type:"GET",cache:!1,dataType:"json"},aria:!1,autoActivate:!0,autoCollapse:!1,autoScroll:!1,checkbox:!1,clickFolderMode:4,debugLevel:null,disabled:!1,enableAspx:!0,extensions:[],fx:{height:"toggle",duration:200},generateIds:!1,icons:!0,idPrefix:"ft_",keyboard:!0,keyPathSeparator:"/",minExpandLevel:1,selectMode:2,strings:{loading:"Loading…",loadError:"Load error!"},tabbable:!0,titlesTabbable:!1,_classNames:{node:"fancytree-node",folder:"fancytree-folder",combinedExpanderPrefix:"fancytree-exp-",combinedIconPrefix:"fancytree-ico-",hasChildren:"fancytree-has-children",active:"fancytree-active",selected:"fancytree-selected",expanded:"fancytree-expanded",lazy:"fancytree-lazy",focused:"fancytree-focused",partsel:"fancytree-partsel",lastsib:"fancytree-lastsib",loading:"fancytree-loading",error:"fancytree-error"},lazyload:null,postProcess:null},_create:function(){this.tree=new p(this),this.$source=this.source||"json"===this.element.data("type")?this.element:this.element.find(">ul:first");var b,c,e,g=this.options.extensions,h=this.tree;for(e=0;e<g.length;e++)c=g[e],b=a.ui.fancytree._extensions[c],b||a.error("Could not apply extension '"+c+"' (it is not registered, did you forget to include it?)"),this.tree.options[c]=a.extend(!0,{},b.options,this.tree.options[c]),f(this.tree.ext[c]===d,"Extension name must not exist as Fancytree.ext attribute: '"+c+"'"),this.tree.ext[c]={},j(this.tree,h,b,c),h=b;this.tree._callHook("treeCreate",this.tree)},_init:function(){this.tree._callHook("treeInit",this.tree),this._bind()},_setOption:function(b,c){var d=!0,e=!1;switch(b){case"aria":case"checkbox":case"icons":case"minExpandLevel":case"tabbable":this.tree._callHook("treeCreate",this.tree),e=!0;break;case"source":d=!1,this.tree._callHook("treeLoad",this.tree,c)}this.tree.debug("set option "+b+"="+c+" <"+typeof c+">"),d&&a.Widget.prototype._setOption.apply(this,arguments),e&&this.tree.render(!0,!1)},destroy:function(){this._unbind(),this.tree._callHook("treeDestroy",this.tree),this.tree.$div.find(">ul.fancytree-container").remove(),this.$source&&this.$source.removeClass("ui-helper-hidden"),a.Widget.prototype.destroy.call(this)},_unbind:function(){var b=this.tree._ns;this.element.unbind(b),this.tree.$container.unbind(b),a(c).unbind(b)},_bind:function(){var a=this,b=this.options,c=this.tree,d=c._ns;this._unbind(),c.$container.on("focusin"+d+" focusout"+d,function(a){var b=r.getNode(a),d="focusin"===a.type;b?c._callHook("nodeSetFocus",b,d):c._callHook("treeSetFocus",c,d)}).on("selectstart"+d,"span.fancytree-title",function(a){a.preventDefault()}).on("keydown"+d,function(a){if(b.disabled||b.keyboard===!1)return!0;var d,e=c.focusNode,f=c._makeHookContext(e||c,a),g=c.phase;try{return c.phase="userEvent",d=e?c._triggerNodeEvent("keydown",e,a):c._triggerTreeEvent("keydown",a),"preventNav"===d?d=!0:d!==!1&&(d=c._callHook("nodeKeydown",f)),d}finally{c.phase=g}}).on("click"+d+" dblclick"+d,function(c){if(b.disabled)return!0;var d,e=r.getEventTarget(c),f=e.node,g=a.tree,h=g.phase;if(!f)return!0;d=g._makeHookContext(f,c);try{switch(g.phase="userEvent",c.type){case"click":return d.targetType=e.type,g._triggerNodeEvent("click",d,c)===!1?!1:g._callHook("nodeClick",d);case"dblclick":return d.targetType=e.type,g._triggerNodeEvent("dblclick",d,c)===!1?!1:g._callHook("nodeDblclick",d)}}finally{g.phase=h}})},getActiveNode:function(){return this.tree.activeNode},getNodeByKey:function(a){return this.tree.getNodeByKey(a)},getRootNode:function(){return this.tree.rootNode},getTree:function(){return this.tree}}),r=a.ui.fancytree,a.extend(a.ui.fancytree,{version:"2.0.0-6",buildType:"release",debugLevel:1,_nextId:1,_nextNodeKey:1,_extensions:{},_FancytreeClass:p,_FancytreeNodeClass:o,jquerySupports:{positionMyOfs:h(a.ui.version,1,9)},assert:function(a,b){return f(a,b)},debug:function(){a.ui.fancytree.debugLevel>=2&&g("log",arguments)},error:function(){g("error",arguments)},getEventTargetType:function(a){return this.getEventTarget(a).type},getEventTarget:function(a){var b=a&&a.target?a.target.className:"",c={node:this.getNode(a.target),type:d};return/\bfancytree-title\b/.test(b)?c.type="title":/\bfancytree-expander\b/.test(b)?c.type=c.node.hasChildren()===!1?"prefix":"expander":/\bfancytree-checkbox\b/.test(b)?c.type="checkbox":/\bfancytree-icon\b/.test(b)?c.type="icon":/\bfancytree-node\b/.test(b)&&(c.type="title"),c},getNode:function(a){if(a instanceof o)return a;for(a.selector!==d?a=a[0]:a.originalEvent!==d&&(a=a.target);a;){if(a.ftnode)return a.ftnode;a=a.parentNode}return null},info:function(){a.ui.fancytree.debugLevel>=1&&g("info",arguments)},parseHtml:function(b){var c,e,f,g,h,i,j,k=b.find(">li"),l=[];return k.each(function(){var k,m,n=a(this),o=n.find(">span:first",this),p=o.length?null:n.find(">a:first"),q={tooltip:null,data:{}};for(o.length?q.title=o.html():p&&p.length?(q.title=p.html(),q.data.href=p.attr("href"),q.data.target=p.attr("target"),q.tooltip=p.attr("title")):(q.title=n.html(),g=q.title.search(/<ul/i),g>=0&&(q.title=q.title.substring(0,g))),q.title=a.trim(q.title),e=0,f=s.length;f>e;e++)q[s[e]]=d;for(i=this.className.split(" "),c=[],e=0,f=i.length;f>e;e++)j=i[e],t[j]?q[j]=!0:c.push(j);q.extraClasses=c.join(" "),h=n.attr("title"),h&&(q.tooltip=h),h=n.attr("id"),h&&(q.key=h),k=n.data(),k&&!a.isEmptyObject(k)&&(m=k.json,delete k.json,a.extend(q.data,k),m&&a.extend(q.data,m)),b=n.find(">ul:first"),q.children=b.length?a.ui.fancytree.parseHtml(b):q.lazy?d:null,l.push(q)}),l},registerExtension:function(b){f(null!=b.name,"extensions must have a `name` property."),f(null!=b.version,"extensions must have a `version` property."),a.ui.fancytree._extensions[b.name]=b},warn:function(){g("warn",arguments)}})}(jQuery,window,document),function(a,b,c,d){"use strict";function e(a){return 0===a?"":a>0?"+"+a:""+a}function f(b){var c=b.options.dnd||null;c&&g(),c&&c.dragStart&&b.widget.element.draggable({addClasses:!1,appendTo:"body",containment:!1,delay:0,distance:4,revert:!1,scroll:!0,scrollSpeed:7,scrollSensitivity:10,connectToFancytree:!0,helper:function(b){var c=a.ui.fancytree.getNode(b.target);return c?c.tree.ext.dnd._onDragEvent("helper",c,null,b,null,null):"<div>ERROR?: helper requested but sourceNode not found</div>"},start:function(){}}),c&&c.dragDrop&&b.widget.element.droppable({addClasses:!1,tolerance:"intersect",greedy:!1})}function g(){i||(a.ui.plugin.add("draggable","connectToFancytree",{start:function(b,c){var d=a(this).data("ui-draggable")||a(this).data("draggable"),e=c.helper.data("ftSourceNode")||null;return e?(d.offset.click.top=-2,d.offset.click.left=16,e.tree.ext.dnd._onDragEvent("start",e,null,b,c,d)):void 0},drag:function(b,c){var d,e=a(this).data("ui-draggable")||a(this).data("draggable"),f=c.helper.data("ftSourceNode")||null,g=c.helper.data("ftTargetNode")||null,i=a.ui.fancytree.getNode(b.target);return b.target&&!i&&(d=a(b.target).closest("div.fancytree-drag-helper,#fancytree-drop-marker").length>0)?void h("Drag event over helper: ignored."):(c.helper.data("ftTargetNode",i),g&&g!==i&&g.tree.ext.dnd._onDragEvent("leave",g,f,b,c,e),void(i&&i.tree.options.dnd.dragDrop&&(i===g?i.tree.ext.dnd._onDragEvent("over",i,f,b,c,e):i.tree.ext.dnd._onDragEvent("enter",i,f,b,c,e))))},stop:function(b,c){var d=a(this).data("ui-draggable")||a(this).data("draggable"),e=c.helper.data("ftSourceNode")||null,f=c.helper.data("ftTargetNode")||null,g=b.type,i="mouseup"===g&&1===b.which;i||h("Drag was cancelled"),f&&(i&&f.tree.ext.dnd._onDragEvent("drop",f,e,b,c,d),f.tree.ext.dnd._onDragEvent("leave",f,e,b,c,d)),e&&e.tree.ext.dnd._onDragEvent("stop",e,null,b,c,d)}}),i=!0)}var h=a.ui.fancytree.debug,i=!1;a.ui.fancytree.registerExtension({name:"dnd",version:"0.0.1",options:{dragStart:null,dragStop:null,autoExpandMS:1e3,preventVoidMoves:!0,preventRecursiveMoves:!0,dragEnter:null,dragOver:null,dragDrop:null,dragLeave:null},treeInit:function(a){var b=a.tree;this._super(a),f(b)},nodeKeydown:function(b){var c=b.originalEvent;return c.which===a.ui.keyCode.ESCAPE&&this._local._cancelDrag(),this._super(b)},_setDndStatus:function(b,c,d,f,g){var h,i=0,j="center",k=this._local,l=b?a(b.span):null,m=a(c.span);if(k.$dropMarker||(k.$dropMarker=a("<div id='fancytree-drop-marker'></div>").hide().css({"z-index":1e3}).prependTo(a(this.$div).parent())),"after"===f||"before"===f||"over"===f){switch(f){case"before":k.$dropMarker.removeClass("fancytree-drop-after fancytree-drop-over"),k.$dropMarker.addClass("fancytree-drop-before"),j="top";break;case"after":k.$dropMarker.removeClass("fancytree-drop-before fancytree-drop-over"),k.$dropMarker.addClass("fancytree-drop-after"),j="bottom";break;default:k.$dropMarker.removeClass("fancytree-drop-after fancytree-drop-before"),k.$dropMarker.addClass("fancytree-drop-over"),m.addClass("fancytree-drop-target"),i=8}h=a.ui.fancytree.jquerySupports.positionMyOfs?{my:"left"+e(i)+" center",at:"left "+j,of:m}:{my:"left center",at:"left "+j,of:m,offset:""+i+" 0"},k.$dropMarker.show().position(h)}else m.removeClass("fancytree-drop-target"),k.$dropMarker.hide();"after"===f?m.addClass("fancytree-drop-after"):m.removeClass("fancytree-drop-after"),"before"===f?m.addClass("fancytree-drop-before"):m.removeClass("fancytree-drop-before"),g===!0?(l&&l.addClass("fancytree-drop-accept"),m.addClass("fancytree-drop-accept"),d.addClass("fancytree-drop-accept")):(l&&l.removeClass("fancytree-drop-accept"),m.removeClass("fancytree-drop-accept"),d.removeClass("fancytree-drop-accept")),g===!1?(l&&l.addClass("fancytree-drop-reject"),m.addClass("fancytree-drop-reject"),d.addClass("fancytree-drop-reject")):(l&&l.removeClass("fancytree-drop-reject"),m.removeClass("fancytree-drop-reject"),d.removeClass("fancytree-drop-reject"))},_onDragEvent:function(b,c,e,f,g,i){"over"!==b&&h("tree.ext.dnd._onDragEvent(%s, %o, %o) - %o",b,c,e,this);var j,k,l,m,n,o,p,q=this.options,r=q.dnd,s=this._makeHookContext(c,f,{otherNode:e,ui:g,draggable:i}),t=null,u=a(c.span);switch(b){case"helper":j=a("<div class='fancytree-drag-helper'><span class='fancytree-drag-helper-img' /></div>").append(u.find("span.fancytree-title").clone()),a("ul.fancytree-container",c.tree.$div).append(j),j.data("ftSourceNode",c),t=j;break;case"start":c.isStatusNode?t=!1:r.dragStart&&(t=r.dragStart(c,s)),t===!1?(this.debug("tree.dragStart() cancelled"),g.helper.trigger("mouseup"),g.helper.hide()):u.addClass("fancytree-drag-source");break;case"enter":p=r.preventRecursiveMoves&&c.isDescendantOf(e)?!1:r.dragEnter?r.dragEnter(c,s):null,t=p?a.isArray(p)?{over:a.inArray("over",p)>=0,before:a.inArray("before",p)>=0,after:a.inArray("after",p)>=0}:{over:p===!0||"over"===p,before:p===!0||"before"===p,after:p===!0||"after"===p}:!1,g.helper.data("enterResponse",t),h("helper.enterResponse: %o",t);break;case"over":n=g.helper.data("enterResponse"),o=null,n===!1||("string"==typeof n?o=n:(k=u.offset(),l={x:f.pageX-k.left,y:f.pageY-k.top},m={x:l.x/u.width(),y:l.y/u.height()},n.after&&m.y>.75?o="after":!n.over&&n.after&&m.y>.5?o="after":n.before&&m.y<=.25?o="before":!n.over&&n.before&&m.y<=.5?o="before":n.over&&(o="over"),r.preventVoidMoves&&(c===e?(h(" drop over source node prevented"),o=null):"before"===o&&e&&c===e.getNextSibling()?(h(" drop after source node prevented"),o=null):"after"===o&&e&&c===e.getPrevSibling()?(h(" drop before source node prevented"),o=null):"over"===o&&e&&e.parent===c&&e.isLastSibling()&&(h(" drop last child over own parent prevented"),o=null)),g.helper.data("hitMode",o))),"over"===o&&r.autoExpandMS&&c.hasChildren()!==!1&&!c.expanded&&c.scheduleAction("expand",r.autoExpandMS),o&&r.dragOver&&(s.hitMode=o,t=r.dragOver(c,s)),this._local._setDndStatus(e,c,g.helper,o,t!==!1&&null!==o);break;case"drop":o=g.helper.data("hitMode"),o&&r.dragDrop&&(s.hitMode=o,r.dragDrop(c,s));break;case"leave":c.scheduleAction("cancel"),g.helper.data("enterResponse",null),g.helper.data("hitMode",null),this._local._setDndStatus(e,c,g.helper,"out",d),r.dragLeave&&r.dragLeave(c,s);break;case"stop":u.removeClass("fancytree-drag-source"),r.dragStop&&r.dragStop(c,s);break;default:throw"Unsupported drag event: "+b}return t},_cancelDrag:function(){var b=a.ui.ddmanager.current;b&&b.cancel()}})}(jQuery,window,document),function(a,b,c){"use strict";var d=/Mac/.test(navigator.platform);a.ui.fancytree._FancytreeNodeClass.prototype.editStart=function(){var b,d=this,e=this.tree,f=e.ext.edit,g=d.title,h=e.options.edit,i=a(".fancytree-title",d.span),j={node:d,tree:e,options:e.options};return h.beforeEdit.call(d,{type:"beforeEdit"},j)===!1?!1:(g=d.title,d.debug("editStart"),e.widget._unbind(),a(c).on("mousedown.fancytree-edit",function(b){a(b.target).hasClass("fancytree-edit-input")||d.editEnd(!0,b)}),b=a("<input />",{"class":"fancytree-edit-input",value:g}),null!=h.adjustWidthOfs&&b.width(i.width()+h.adjustWidthOfs),null!=h.inputCss&&b.css(h.inputCss),j.input=b,i.html(b),a.ui.fancytree.assert(!f.currentNode,"recursive edit"),f.currentNode=this,b.focus().change(function(){b.addClass("fancytree-edit-dirty")}).keydown(function(b){switch(b.which){case a.ui.keyCode.ESCAPE:d.editEnd(!1,b);break;case a.ui.keyCode.ENTER:return d.editEnd(!0,b),!1}}).blur(function(a){return d.editEnd(!0,a)}),void h.edit.call(d,{type:"edit"},j))},a.ui.fancytree._FancytreeNodeClass.prototype.editEnd=function(b,d){var e=this,f=this.tree,g=f.ext.edit,h=f.options.edit,i=a(".fancytree-title",e.span),j=i.find("input.fancytree-edit-input"),k=j.val(),l=j.hasClass("fancytree-edit-dirty"),m=(b||l&&b!==!1)&&k!==e.title,n={node:e,tree:f,options:f.options,originalEvent:d,dirty:l,save:m,input:j,value:k};return h.beforeClose.call(e,{type:"beforeClose"},n)===!1?!1:m&&h.save.call(e,{type:"save"},n)===!1?!1:(j.removeClass("fancytree-edit-dirty").unbind(),a(c).off(".fancytree-edit"),m?e.setTitle(k):e.renderTitle(),f.widget._bind(),g.currentNode=null,e.setFocus(),a(f.$container).focus(),n.input=null,h.close.call(e,{type:"close"},n),!0)},a.ui.fancytree._FancytreeNodeClass.prototype.startEdit=function(){return this.warn("FancytreeNode.startEdit() is deprecated. Use .editStart() instead."),this.editStart.apply(this,arguments)},a.ui.fancytree._FancytreeNodeClass.prototype.endEdit=function(){return this.warn("FancytreeNode.endEdit() is deprecated. Use .editEnd() instead."),this.editEnd.apply(this,arguments)},a.ui.fancytree._FancytreeClass.prototype.isEditing=function(){return this.ext.edit.currentNode},a.ui.fancytree._FancytreeNodeClass.prototype.isEditing=function(){return this.tree.ext.edit.currentNode===this},a.ui.fancytree.registerExtension({name:"edit",version:"0.1.0",options:{adjustWidthOfs:4,inputCss:{minWidth:"3em"},triggerCancel:["esc","tab","click"],triggerStart:["f2","shift+click","mac+enter"],beforeClose:a.noop,beforeEdit:a.noop,close:a.noop,edit:a.noop,save:a.noop},currentNode:null,treeInit:function(a){this._super(a),this.$container.addClass("fancytree-ext-edit")},nodeClick:function(b){return a.inArray("shift+click",b.options.edit.triggerStart)>=0&&b.originalEvent.shiftKey?(b.node.editStart(),!1):void this._super(b)},nodeDblclick:function(b){return a.inArray("dblclick",b.options.edit.triggerStart)>=0?(b.node.editStart(),!1):this._super(b)},nodeKeydown:function(b){switch(b.originalEvent.which){case 113:if(a.inArray("f2",b.options.edit.triggerStart)>=0)return b.node.editStart(),!1;break;case a.ui.keyCode.ENTER:if(a.inArray("mac+enter",b.options.edit.triggerStart)>=0&&d)return b.node.editStart(),!1}return this._super(b)}})}(jQuery,window,document),function(a){"use strict";function b(a){return(a+"").replace(/([.?*+\^\$\[\]\\(){}|-])/g,"\\$1")}a.ui.fancytree._FancytreeClass.prototype.applyFilter=function(a){var c,d,e=0,f=this.options.filter.leavesOnly;return this.visit(function(a){delete a.match,delete a.subMatch}),"string"==typeof a&&(c=b(a),d=new RegExp(".*"+c+".*","i"),a=function(a){return!!d.exec(a.title)}),this.enableFilter=!0,this.$div.addClass("fancytree-ext-filter"),"hide"===this.options.filter.mode&&this.$div.addClass("fancytree-ext-filter-hide"),this.visit(function(b){f&&null!=b.children||!a(b)||(e++,b.match=!0,b.visitParents(function(a){a.subMatch=!0}))}),this.render(),e},a.ui.fancytree._FancytreeClass.prototype.clearFilter=function(){this.visit(function(b){delete b.match,delete b.subMatch,a(b.li).show()}),this.enableFilter=!1,this.render(),this.$div.removeClass("fancytree-ext-filter fancytree-ext-filter-hide")},a.ui.fancytree.registerExtension({name:"filter",version:"0.0.1",options:{mode:"dimm",leavesOnly:!1},treeInit:function(a){this._super(a)},treeDestroy:function(a){this._super(a)},nodeRenderStatus:function(b){var c,d=b.node,e=b.options,f=b.tree,g=a(d[f.statusClassPropName]);g.length&&(this._super(b),f.enableFilter&&(d.match?g.addClass("fancytree-match"):g.removeClass("fancytree-match"),d.subMatch?g.addClass("fancytree-submatch"):g.removeClass("fancytree-submatch"),"hide"===e.filter.mode&&(c=!(!d.match&&!d.subMatch),d.debug(d.title+": visible="+c),a(d.li).toggle(c))))}})}(jQuery,window,document),function(a){"use strict";function b(a,b){var d=a.closest("td");switch(b){case c.LEFT:return d.prev();case c.RIGHT:return d.next();case c.UP:return d.parent().prevAll(":visible").first().find("td").eq(d.index());case c.DOWN:return d.parent().nextAll(":visible").first().find("td").eq(d.index())}return null}var c=a.ui.keyCode,d={text:[c.UP,c.DOWN],checkbox:[c.UP,c.DOWN,c.LEFT,c.RIGHT],radiobutton:[c.UP,c.DOWN,c.LEFT,c.RIGHT],"select-one":[c.LEFT,c.RIGHT],"select-multiple":[c.LEFT,c.RIGHT]};a.ui.fancytree.registerExtension({name:"gridnav",version:"0.0.1",options:{autofocusInput:!1,handleCursorKeys:!0},treeInit:function(b){this._requireExtension("table",!0,!0),this._super(b),this.$container.addClass("fancytree-ext-gridnav"),this.$container.on("focusin",function(c){var d,e=a.ui.fancytree.getNode(c.target);e&&!e.isActive()&&(d=b.tree._makeHookContext(e,c),b.tree._callHook("nodeSetActive",d,!0))})},nodeSetActive:function(b,c){var d,e=b.options.gridnav,f=b.node,g=b.originalEvent||{},h=a(g.target).is(":input");c=c!==!1,this._super(b,c),c&&(b.options.titlesTabbable?(h||(a(f.span).find("span.fancytree-title").focus(),f.setFocus()),b.tree.$container.attr("tabindex","-1")):e.autofocusInput&&!h&&(d=a(f.tr||f.span),d.find(":input:enabled:first").focus()))},nodeKeydown:function(c){var e,f,g,h=c.options.gridnav,i=c.originalEvent,j=a(i.target);return e=j.is(":input:enabled")?j.prop("type"):null,c.tree.debug("ext-gridnav nodeKeydown",i,e),e&&h.handleCursorKeys?(f=d[e],f&&a.inArray(i.which,f)>=0&&(g=b(j,i.which),g&&g.length)?(g.find(":input:enabled").focus(),!1):!0):(c.tree.debug("ext-gridnav NOT HANDLED",i,e),this._super(c))}})}(jQuery,window,document),function(a,b,c,d){"use strict";function e(b,c){c=c||"",b||a.error("Assertion failed "+c)}var f="active",g="expanded",h="focus",i="selected";a.ui.fancytree._FancytreeClass.prototype.clearCookies=function(b){var c=this.ext.persist,d=c.cookiePrefix;b=b||"active expanded focus selected",b.indexOf(f)>=0&&a.cookie(d+f,null),b.indexOf(g)>=0&&a.cookie(d+g,null),b.indexOf(h)>=0&&a.cookie(d+h,null),b.indexOf(i)>=0&&a.cookie(d+i,null)},a.ui.fancytree._FancytreeClass.prototype.getPersistData=function(){var b=this.ext.persist,c=this.options.persist,d=c.cookieDelimiter,e={};e[f]=a.cookie(b.cookiePrefix+f),e[g]=(a.cookie(b.cookiePrefix+g)||"").split(d),e[i]=(a.cookie(b.cookiePrefix+i)||"").split(d),e[h]=a.cookie(b.cookiePrefix+h)},a.ui.fancytree.registerExtension({name:"persist",version:"0.0.1",options:{cookieDelimiter:"~",cookiePrefix:d,cookie:{raw:!1,expires:"",path:"",domain:"",secure:!1},overrideSource:!1,types:"active expanded focus selected"},_setKey:function(b,c,d){c=""+c;var e=this._local,f=this.options.persist,g=e.cookiePrefix+b,h=a.cookie(g),i=h?h.split(f.cookieDelimiter):[],j=a.inArray(c,i);j>=0&&i.splice(j,1),d&&i.push(c),a.cookie(g,i.join(f.cookieDelimiter),f.cookie)},treeInit:function(b){var j=b.tree,k=b.options,l=this._local,m=this.options.persist;e(a.cookie,"Missing required plugin for 'persist' extension: jquery.cookie.js"),l.cookiePrefix=m.cookiePrefix||"fancytree-"+j._id+"-",l.storeActive=m.types.indexOf(f)>=0,l.storeExpanded=m.types.indexOf(g)>=0,l.storeSelected=m.types.indexOf(i)>=0,l.storeFocus=m.types.indexOf(h)>=0,j.$div.bind("fancytreeinit",function(){var b,e,n,o,p=a.cookie(l.cookiePrefix+h);if(j.debug("COOKIE "+c.cookie),l.storeExpanded&&(b=a.cookie(l.cookiePrefix+g)))for(e=b.split(m.cookieDelimiter),n=0;n<e.length;n++)o=j.getNodeByKey(e[n]),o?(o.expanded===d||m.overrideSource&&o.expanded===!1)&&(o.expanded=!0,o.render()):l._setKey(g,e[n],!1);if(l.storeSelected&&(b=a.cookie(l.cookiePrefix+i)))for(e=b.split(m.cookieDelimiter),n=0;n<e.length;n++)o=j.getNodeByKey(e[n]),o?(o.selected===d||m.overrideSource&&o.selected===!1)&&(o.selected=!0,o.renderStatus()):l._setKey(i,e[n],!1);l.storeActive&&(b=a.cookie(l.cookiePrefix+f),!b||!k.persist.overrideSource&&j.activeNode||(o=j.getNodeByKey(b),o&&o.setActive())),l.storeFocus&&p&&(o=j.getNodeByKey(p),o&&o.setFocus())}),this._super(b)},nodeSetActive:function(b,c,d){var e=this._local,g=this.options.persist;this._super(b,c,d),e.storeActive&&a.cookie(e.cookiePrefix+f,this.activeNode?this.activeNode.key:null,g.cookie)},nodeSetExpanded:function(a,b,c){var d,e=a.node,f=this._local;return d=this._super(a,b,c),f.storeExpanded&&f._setKey(g,e.key,b),d},nodeSetFocus:function(b){var c=this._local,d=this.options.persist;this._super(b),c.storeFocus&&a.cookie(this.cookiePrefix+h,this.focusNode?this.focusNode.key:null,d.cookie)},nodeSetSelected:function(a,b){var c=a.node,d=this._local;this._super(a,b),d.storeSelected&&d._setKey(i,c.key,b)}})}(jQuery,window,document),function(a,b,c){"use strict";function d(b,c){c=c||"",b||a.error("Assertion failed "+c)}function e(a,b){a.parentNode.insertBefore(b,a.nextSibling)}function f(a,b){a.visit(function(a){var c=a.tr;return c&&(c.style.display=b?"":"none"),a.expanded?void 0:"skip"})}function g(b){var c,e,f,g=b.parent,h=g?g.children:null;if(h&&h.length>1&&h[0]!==b)for(c=a.inArray(b,h),f=h[c-1],d(f.tr);f.children&&(e=f.children[f.children.length-1],e.tr);)f=e;else f=g;return f}a.ui.fancytree.registerExtension({name:"table",version:"0.1.0",options:{indentation:16,nodeColumnIdx:0,checkboxColumnIdx:null},treeInit:function(b){var d,e,f,g=b.tree,h=g.widget.element;for(h.addClass("fancytree-container fancytree-ext-table"),g.tbody=h.find("> tbody")[0],g.columnCount=a("thead >tr >th",h).length,a(g.tbody).empty(),g.rowFragment=c.createDocumentFragment(),e=a("<tr>"),f="",b.options.aria&&(e.attr("role","row"),f=" role='gridcell'"),d=0;d<g.columnCount;d++)e.append(b.options.table.nodeColumnIdx===d?"<td"+f+"><span class='fancytree-node'></span></td>":"<td"+f+">");g.rowFragment.appendChild(e.get(0)),g.statusClassPropName="tr",g.ariaPropName="tr",this.nodeContainerAttrName="tr",this._super(b),a(g.rootNode.ul).remove(),g.rootNode.ul=null,g.$container=h,this.$container.attr("tabindex",this.options.tabbable?"0":"-1"),this.options.aria&&g.$container.attr("role","treegrid").attr("aria-readonly",!0)},nodeRemoveChildMarkup:function(b){var c=b.node;c.visit(function(b){b.tr&&(a(b.tr).remove(),b.tr=null)})},nodeRemoveMarkup:function(b){var c=b.node;c.tr&&(a(c.tr).remove(),c.tr=null),this.nodeRemoveChildMarkup(b)},nodeRender:function(b,c,h,i,j){var k,l,m,n,o,p,q,r,s=b.tree,t=b.node,u=b.options,v=!t.parent;if(j||(b.hasCollapsedParents=t.parent&&!t.parent.expanded),a.ui.fancytree.debug("*** nodeRender "+t+", isRoot="+v),v||t.tr||(o=s.rowFragment.firstChild.cloneNode(!0),p=g(t),d(p),i===!0&&j?o.style.display="none":h&&b.hasCollapsedParents&&(o.style.display="none"),p.tr?e(p.tr,o):(d(!p.parent,"prev. row must have a tr, or is system root"),s.tbody.appendChild(o)),t.tr=o,t.key&&u.generateIds&&(t.tr.id=u.idPrefix+t.key),t.tr.ftnode=t,u.aria&&a(t.tr).attr("aria-labelledby","ftal_"+t.key),t.span=a("span.fancytree-node",t.tr).get(0),this.nodeRenderTitle(b),u.createNode&&u.createNode.call(s,{type:"createNode"},b)),u.renderNode&&u.renderNode.call(s,{type:"renderNode"},b),k=t.children,k&&(v||h||t.expanded))for(m=0,n=k.length;n>m;m++)r=a.extend({},b,{node:k[m]}),r.hasCollapsedParents=r.hasCollapsedParents||!t.expanded,this.nodeRender(r,c,h,i,!0);k&&!j&&(q=t.tr||null,l=s.tbody.firstChild,t.visit(function(a){if(a.tr){if(a.parent.expanded||"none"===a.tr.style.display||(a.tr.style.display="none",f(a,!1)),a.tr.previousSibling!==q){t.debug("_fixOrder: mismatch at node: "+a);var b=q?q.nextSibling:l;s.tbody.insertBefore(a.tr,b)}q=a.tr}})),v||this.nodeRenderStatus(b)},nodeRenderTitle:function(b){var c,d=b.node,e=b.options;this._super(b),e.checkbox&&null!=e.table.checkboxColumnIdx&&(c=a("span.fancytree-checkbox",d.span).detach(),a(d.tr).find("td:first").html(c)),e.renderColumns&&e.renderColumns.call(b.tree,{type:"renderColumns"},b)},nodeRenderStatus:function(b){var c,d=b.node,e=b.options;this._super(b),a(d.tr).removeClass("fancytree-node"),c=(d.getLevel()-1)*e.table.indentation,a(d.span).css({marginLeft:c+"px"})},nodeSetExpanded:function(a,b,c){return this._super(a,b,c).always(function(){b=b!==!1,f(a.node,b)})},nodeSetStatus:function(b,c,d,e){if("ok"===c){var f=b.node,g=f.children?f.children[0]:null;g&&g.isStatusNode&&a(g.tr).remove()}this._super(b,c,d,e)}})}(jQuery,window,document),function(a){"use strict";a.ui.fancytree.registerExtension({name:"themeroller",version:"0.0.1",options:{activeClass:"ui-state-active",foccusClass:"ui-state-focus",hoverClass:"ui-state-hover",selectedClass:"ui-state-highlight"},treeInit:function(b){this._super(b);var c=b.widget.element;"TABLE"===c[0].nodeName?(c.addClass("ui-widget ui-corner-all"),c.find(">thead tr").addClass("ui-widget-header"),c.find(">tbody").addClass("ui-widget-conent")):c.addClass("ui-widget ui-widget-content ui-corner-all"),c.delegate(".fancytree-node","mouseenter mouseleave",function(b){var c=a.ui.fancytree.getNode(b.target),d="mouseenter"===b.type;c.debug("hover: "+d),a(c.span).toggleClass("ui-state-hover ui-corner-all",d)})},treeDestroy:function(a){this._super(a),a.widget.element.removeClass("ui-widget ui-widget-content ui-corner-all")},nodeRenderStatus:function(b){var c=b.node,d=a(c.span);this._super(b),d.toggleClass("ui-state-active",c.isActive()),d.toggleClass("ui-state-focus",c.hasFocus()),d.toggleClass("ui-state-highlight",c.isSelected())}})}(jQuery,window,document);
|
7
7
|
//# sourceMappingURL=jquery.fancytree-all.min.js.map
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Use glyph fonts as instead of icon sprites.
|
5
5
|
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
6
6
|
*
|
7
|
-
* Copyright (c)
|
7
|
+
* Copyright (c) 2014, Martin Wendt (http://wwWendt.de)
|
8
8
|
*
|
9
9
|
* Released under the MIT license
|
10
10
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
@@ -25,7 +25,9 @@ function _getIcon(opts, type){
|
|
25
25
|
return opts.map[type];
|
26
26
|
}
|
27
27
|
|
28
|
-
$.ui.fancytree.registerExtension(
|
28
|
+
$.ui.fancytree.registerExtension({
|
29
|
+
name: "awesome",
|
30
|
+
version: "0.0.1",
|
29
31
|
// Default options for this extension.
|
30
32
|
options: {
|
31
33
|
prefix: "icon-",
|
@@ -3,14 +3,18 @@
|
|
3
3
|
* Dynamic tree view control, with support for lazy loading of branches.
|
4
4
|
* https://github.com/mar10/fancytree/
|
5
5
|
*
|
6
|
-
* Copyright (c) 2006-
|
6
|
+
* Copyright (c) 2006-2014, Martin Wendt (http://wwWendt.de)
|
7
7
|
* Released under the MIT license
|
8
8
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
9
9
|
*
|
10
|
-
* @version 2.0.0-
|
11
|
-
* @date 2014-
|
10
|
+
* @version 2.0.0-6
|
11
|
+
* @date 2014-02-10T10:52
|
12
12
|
*/
|
13
13
|
|
14
|
+
/** Core Fancytree module.
|
15
|
+
*/
|
16
|
+
|
17
|
+
|
14
18
|
// Start of local namespace
|
15
19
|
;(function($, window, document, undefined) {
|
16
20
|
"use strict";
|
@@ -174,7 +178,7 @@ function _makeNodeTitleMatcher(s){
|
|
174
178
|
|
175
179
|
var i,
|
176
180
|
FT = null, // initialized below
|
177
|
-
//
|
181
|
+
//boolean attributes that can be set with equivalent class names in the LI tags
|
178
182
|
CLASS_ATTRS = "active expanded focus folder lazy selected unselectable".split(" "),
|
179
183
|
CLASS_ATTR_MAP = {},
|
180
184
|
// Top-level Fancytree node attributes, that can be set by dict
|
@@ -193,29 +197,29 @@ for(i=0; i<NODE_ATTRS.length; i++){ NODE_ATTR_MAP[NODE_ATTRS[i]] = true; }
|
|
193
197
|
|
194
198
|
|
195
199
|
/**
|
196
|
-
* Creates a new
|
197
|
-
*
|
198
|
-
* @
|
199
|
-
* @
|
200
|
+
* Creates a new FancytreeNode
|
201
|
+
*
|
202
|
+
* @class FancytreeNode
|
203
|
+
* @classdesc A FancytreeNode represents the hierarchical data model and operations.
|
204
|
+
*
|
200
205
|
* @param {FancytreeNode} parent
|
201
|
-
* @param {NodeData}
|
206
|
+
* @param {NodeData} obj
|
202
207
|
*
|
203
208
|
* @property {Fancytree} tree
|
204
209
|
* @property {FancytreeNode} parent Parent node
|
205
|
-
* @property {
|
206
|
-
* @property {
|
210
|
+
* @property {string} key
|
211
|
+
* @property {string} title
|
207
212
|
* @property {object} data Contains all extra data that was passed on node creation
|
208
213
|
* @property {FancytreeNode[] | null | undefined} children list of child nodes
|
209
|
-
* @property {
|
210
|
-
* @property {
|
211
|
-
* @property {
|
212
|
-
* @property {
|
213
|
-
* @property {
|
214
|
-
* @property {
|
215
|
-
* @property {
|
216
|
-
* @property {
|
217
|
-
* @property {
|
218
|
-
* @property {String} tooltip
|
214
|
+
* @property {boolean} isStatusNode
|
215
|
+
* @property {boolean} expanded
|
216
|
+
* @property {boolean} folder
|
217
|
+
* @property {string} extraClasses
|
218
|
+
* @property {boolean} lazy
|
219
|
+
* @property {boolean} selected
|
220
|
+
* @property {string} tooltip
|
221
|
+
* @property {string} data.href
|
222
|
+
* @property {string} data.target
|
219
223
|
*/
|
220
224
|
function FancytreeNode(parent, obj){
|
221
225
|
var i, l, name, cl;
|
@@ -266,7 +270,7 @@ function FancytreeNode(parent, obj){
|
|
266
270
|
}
|
267
271
|
|
268
272
|
|
269
|
-
FancytreeNode.prototype =
|
273
|
+
FancytreeNode.prototype = /** @lends FancytreeNode# */{
|
270
274
|
/* Return the direct child FancytreeNode with a given key, index. */
|
271
275
|
_findDirectChild: function(ptr){
|
272
276
|
var i, l,
|
@@ -301,16 +305,11 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
301
305
|
* Append (or insert) a list of child nodes.
|
302
306
|
*
|
303
307
|
* @param {NodeData[]} children array of child node definitions (also single child accepted)
|
304
|
-
* @param {FancytreeNode |
|
308
|
+
* @param {FancytreeNode | string | Integer} [insertBefore] child node (or key or index of such).
|
305
309
|
* If omitted, the new children are appended.
|
306
310
|
* @returns {FancytreeNode} first child added
|
307
311
|
*
|
308
|
-
* @see applyPatch
|
309
|
-
* @see FanctreeNode.applyPatch to modify existing child nodes.
|
310
|
-
* @see FanctreeNode#applyPatch to modify existing child nodes.
|
311
|
-
* @see applyPatch
|
312
|
-
* @see FanctreeNode.applyPatch
|
313
|
-
* @see FanctreeNode#applyPatch
|
312
|
+
* @see FancytreeNode#applyPatch
|
314
313
|
*/
|
315
314
|
addChildren: function(children, insertBefore){
|
316
315
|
var i, l, pos,
|
@@ -348,8 +347,10 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
348
347
|
/**
|
349
348
|
* Append or prepend a node, or append a child node.
|
350
349
|
*
|
350
|
+
* This a convenience function that calls addChildren()
|
351
|
+
*
|
351
352
|
* @param {NodeData} node node definition
|
352
|
-
* @param {
|
353
|
+
* @param {string} [mode=child] 'before', 'after', or 'child' ('over' is a synonym for 'child')
|
353
354
|
* @returns {FancytreeNode} new node
|
354
355
|
*/
|
355
356
|
addNode: function(node, mode){
|
@@ -368,10 +369,10 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
368
369
|
_assert(false, "Invalid mode: " + mode);
|
369
370
|
},
|
370
371
|
/**
|
372
|
+
* Modify existing child nodes.
|
371
373
|
*
|
372
374
|
* @param {NodePatch} patch
|
373
375
|
* @returns {$.Promise}
|
374
|
-
* @see {@link applyPatch} to modify existing child nodes.
|
375
376
|
* @see FancytreeNode#addChildren
|
376
377
|
*/
|
377
378
|
applyPatch: function(patch) {
|
@@ -425,7 +426,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
425
426
|
/** Copy this node as sibling or child of `node`.
|
426
427
|
*
|
427
428
|
* @param {FancytreeNode} node source node
|
428
|
-
* @param {
|
429
|
+
* @param {string} mode 'before' | 'after' | 'child'
|
429
430
|
* @param {Function} [map] callback function(NodeData) that could modify the new node
|
430
431
|
* @returns {FancytreeNode} new
|
431
432
|
*/
|
@@ -434,7 +435,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
434
435
|
},
|
435
436
|
/** Count direct and indirect children.
|
436
437
|
*
|
437
|
-
* @param {
|
438
|
+
* @param {boolean} [deep=true] pass 'false' to only count direct children
|
438
439
|
* @returns {int} number of child nodes
|
439
440
|
*/
|
440
441
|
countChildren: function(deep) {
|
@@ -471,7 +472,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
471
472
|
// TODO: expand(flag)
|
472
473
|
/**Find all nodes that contain `match` in the title.
|
473
474
|
*
|
474
|
-
* @param {
|
475
|
+
* @param {string | function(node)} match string to search for, of a function that
|
475
476
|
* returns `true` if a node is matched.
|
476
477
|
* @returns {FancytreeNode[]} array of nodes (may be empty)
|
477
478
|
* @see FancytreeNode#findAll
|
@@ -488,7 +489,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
488
489
|
},
|
489
490
|
/**Find first node that contains `match` in the title (not including self).
|
490
491
|
*
|
491
|
-
* @param {
|
492
|
+
* @param {string | function(node)} match string to search for, of a function that
|
492
493
|
* returns `true` if a node is matched.
|
493
494
|
* @returns {FancytreeNode} matching node or null
|
494
495
|
* @example
|
@@ -673,7 +674,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
673
674
|
// return this.parent.children.indexOf(this);
|
674
675
|
return $.inArray(this, this.parent.children); // indexOf doesn't work in IE7
|
675
676
|
},
|
676
|
-
/**@returns {
|
677
|
+
/**@returns {string} hierarchical child index (1-based: '3.2.4').*/
|
677
678
|
getIndexHier: function(separator) {
|
678
679
|
separator = separator || ".";
|
679
680
|
var res = [];
|
@@ -683,8 +684,8 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
683
684
|
return res.join(separator);
|
684
685
|
},
|
685
686
|
/**
|
686
|
-
* @param {
|
687
|
-
* @returns {
|
687
|
+
* @param {boolean} [excludeSelf=false]
|
688
|
+
* @returns {string} parent keys separated by options.keyPathSeparator
|
688
689
|
*/
|
689
690
|
getKeyPath: function(excludeSelf) {
|
690
691
|
var path = [],
|
@@ -731,8 +732,8 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
731
732
|
return this.parent;
|
732
733
|
},
|
733
734
|
/**
|
734
|
-
* @param {
|
735
|
-
* @param {
|
735
|
+
* @param {boolean} [includeRoot=false]
|
736
|
+
* @param {boolean} [includeSelf=false]
|
736
737
|
* @returns {FancytreeNode[]}
|
737
738
|
*/
|
738
739
|
getParentList: function(includeRoot, includeSelf) {
|
@@ -777,24 +778,24 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
777
778
|
}
|
778
779
|
return !!this.children;
|
779
780
|
},
|
780
|
-
/**@returns {
|
781
|
+
/**@returns {boolean} true, if node has keyboard focus*/
|
781
782
|
hasFocus: function() {
|
782
783
|
return (this.tree.hasFocus() && this.tree.focusNode === this);
|
783
784
|
},
|
784
|
-
/**@returns {
|
785
|
+
/**@returns {boolean} true, if node is active*/
|
785
786
|
isActive: function() {
|
786
787
|
return (this.tree.activeNode === this);
|
787
788
|
},
|
788
789
|
/**
|
789
790
|
* @param {FancytreeNode} otherNode
|
790
|
-
* @returns {
|
791
|
+
* @returns {boolean} true, if node is a direct child of otherNode
|
791
792
|
*/
|
792
793
|
isChildOf: function(otherNode) {
|
793
794
|
return (this.parent && this.parent === otherNode);
|
794
795
|
},
|
795
796
|
/**
|
796
797
|
* @param {FancytreeNode} otherNode
|
797
|
-
* @returns {
|
798
|
+
* @returns {boolean} true, if node is a sub node of otherNode
|
798
799
|
*/
|
799
800
|
isDescendantOf: function(otherNode) {
|
800
801
|
if(!otherNode || otherNode.tree !== this.tree){
|
@@ -809,37 +810,37 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
809
810
|
}
|
810
811
|
return false;
|
811
812
|
},
|
812
|
-
/** @returns {
|
813
|
+
/** @returns {boolean} true, if node is expanded*/
|
813
814
|
isExpanded: function() {
|
814
815
|
return !!this.expanded;
|
815
816
|
},
|
816
|
-
/** @returns {
|
817
|
+
/** @returns {boolean}*/
|
817
818
|
isFirstSibling: function() {
|
818
819
|
var p = this.parent;
|
819
820
|
return !p || p.children[0] === this;
|
820
821
|
},
|
821
|
-
/** @returns {
|
822
|
+
/** @returns {boolean}*/
|
822
823
|
isFolder: function() {
|
823
824
|
return !!this.folder;
|
824
825
|
},
|
825
|
-
/** @returns {
|
826
|
+
/** @returns {boolean}*/
|
826
827
|
isLastSibling: function() {
|
827
828
|
var p = this.parent;
|
828
829
|
return !p || p.children[p.children.length-1] === this;
|
829
830
|
},
|
830
|
-
/** @returns {
|
831
|
+
/** @returns {boolean} true, if node is lazy (even if data was already loaded)*/
|
831
832
|
isLazy: function() {
|
832
833
|
return !!this.lazy;
|
833
834
|
},
|
834
|
-
/** @returns {
|
835
|
+
/** @returns {boolean} true, if children are currently beeing loaded*/
|
835
836
|
isLoading: function() {
|
836
837
|
_raiseNotImplemented(); // TODO: implement
|
837
838
|
},
|
838
|
-
/**@returns {
|
839
|
+
/**@returns {boolean} true, if node is the (invisible) system root node*/
|
839
840
|
isRoot: function() {
|
840
841
|
return (this.tree.rootNode === this);
|
841
842
|
},
|
842
|
-
/** @returns {
|
843
|
+
/** @returns {boolean} true, if node is selected (e.g. has a checkmark set)*/
|
843
844
|
isSelected: function() {
|
844
845
|
return !!this.selected;
|
845
846
|
},
|
@@ -872,7 +873,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
872
873
|
},
|
873
874
|
/** Move this node to targetNode.
|
874
875
|
* @param {FancytreeNode} targetNode
|
875
|
-
* @param {
|
876
|
+
* @param {string} mode
|
876
877
|
* 'child': append this node as last child of targetNode.
|
877
878
|
* This is the default. To be compatble with the D'n'd
|
878
879
|
* hitMode, we also accept 'over'.
|
@@ -893,7 +894,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
893
894
|
}else if( !this.parent ){
|
894
895
|
throw "Cannot move system root";
|
895
896
|
}else if( targetParent.isDescendantOf(this) ){
|
896
|
-
throw "Cannot move a node to
|
897
|
+
throw "Cannot move a node to its own descendant";
|
897
898
|
}
|
898
899
|
// Unlink this node from current parent
|
899
900
|
if( this.parent.children.length === 1 ) {
|
@@ -963,10 +964,10 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
963
964
|
}, true);
|
964
965
|
}
|
965
966
|
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
967
|
+
// A collaposed node won't re-render children, so we have to remove it manually
|
968
|
+
// if( !targetParent.expanded ){
|
969
|
+
// prevParent.ul.removeChild(this.li);
|
970
|
+
// }
|
970
971
|
|
971
972
|
// Update HTML markup
|
972
973
|
if( !prevParent.isDescendantOf(targetParent)) {
|
@@ -1031,6 +1032,12 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1031
1032
|
function _goto(n){
|
1032
1033
|
if( n ){
|
1033
1034
|
n.makeVisible();
|
1035
|
+
// Node may still be hidden by a filter
|
1036
|
+
if( ! $(n.span).is(":visible") ) {
|
1037
|
+
n.debug("Navigate: skipping hidden node");
|
1038
|
+
n.navigate(where, activate);
|
1039
|
+
return;
|
1040
|
+
}
|
1034
1041
|
return activate === false ? n.setFocus() : n.setActive();
|
1035
1042
|
}
|
1036
1043
|
}
|
@@ -1044,20 +1051,16 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1044
1051
|
case KC.LEFT:
|
1045
1052
|
if( this.expanded ) {
|
1046
1053
|
this.setExpanded(false);
|
1047
|
-
// tree.nodeSetFocus(ctx);
|
1048
1054
|
_goto(this);
|
1049
1055
|
} else if( this.parent && this.parent.parent ) {
|
1050
|
-
// this.parent.setFocus();
|
1051
1056
|
_goto(this.parent);
|
1052
1057
|
}
|
1053
1058
|
break;
|
1054
1059
|
case KC.RIGHT:
|
1055
1060
|
if( !this.expanded && (this.children || this.lazy) ) {
|
1056
1061
|
this.setExpanded();
|
1057
|
-
// tree.nodeSetFocus(ctx);
|
1058
1062
|
_goto(this);
|
1059
1063
|
} else if( this.children && this.children.length ) {
|
1060
|
-
// this.children[0].setFocus();
|
1061
1064
|
_goto(this.children[0]);
|
1062
1065
|
}
|
1063
1066
|
break;
|
@@ -1089,7 +1092,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1089
1092
|
},
|
1090
1093
|
/**
|
1091
1094
|
* Discard and reload all children of a lazy node.
|
1092
|
-
* @param {
|
1095
|
+
* @param {boolean} [discard=false]
|
1093
1096
|
* @returns $.Promise
|
1094
1097
|
*/
|
1095
1098
|
lazyLoad: function(discard) {
|
@@ -1102,19 +1105,19 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1102
1105
|
return this.tree._callHook("nodeLoadChildren", this, source);
|
1103
1106
|
},
|
1104
1107
|
/**
|
1105
|
-
* @see
|
1108
|
+
* @see Fancytree_Hooks#nodeRender
|
1106
1109
|
*/
|
1107
1110
|
render: function(force, deep) {
|
1108
1111
|
return this.tree._callHook("nodeRender", this, force, deep);
|
1109
1112
|
},
|
1110
1113
|
/**
|
1111
|
-
* @see
|
1114
|
+
* @see Fancytree_Hooks#nodeRenderTitle
|
1112
1115
|
*/
|
1113
1116
|
renderTitle: function() {
|
1114
1117
|
return this.tree._callHook("nodeRenderTitle", this);
|
1115
1118
|
},
|
1116
1119
|
/**
|
1117
|
-
* @see
|
1120
|
+
* @see Fancytree_Hooks#nodeRenderStatus
|
1118
1121
|
*/
|
1119
1122
|
renderStatus: function() {
|
1120
1123
|
return this.tree._callHook("nodeRenderStatus", this);
|
@@ -1165,7 +1168,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1165
1168
|
},
|
1166
1169
|
/**
|
1167
1170
|
*
|
1168
|
-
* @param {
|
1171
|
+
* @param {boolean | PlainObject} [effects=false] animation options.
|
1169
1172
|
* @param {FancytreeNode} [topNode=null] this node will remain visible in
|
1170
1173
|
* any case, even if `this` is outside the scroll pane.
|
1171
1174
|
* @returns $.Promise
|
@@ -1199,7 +1202,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1199
1202
|
if(topNode){
|
1200
1203
|
topNodeY = topNode ? $(topNode.span).position().top : 0;
|
1201
1204
|
if((nodeY - topNodeY) > containerHeight){
|
1202
|
-
newScrollTop = scrollTop +
|
1205
|
+
newScrollTop = scrollTop + topNodeY;
|
1203
1206
|
}
|
1204
1207
|
}
|
1205
1208
|
}
|
@@ -1236,19 +1239,22 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1236
1239
|
},
|
1237
1240
|
|
1238
1241
|
/**Activate this node.
|
1239
|
-
* @param {
|
1242
|
+
* @param {boolean} [flag=true] pass false to deactivate
|
1243
|
+
* @param {object} [opts] additional options. Defaults to {noEvents: false}
|
1240
1244
|
*/
|
1241
|
-
setActive: function(flag){
|
1242
|
-
return this.tree._callHook("nodeSetActive", this, flag);
|
1245
|
+
setActive: function(flag, opts){
|
1246
|
+
return this.tree._callHook("nodeSetActive", this, flag, opts);
|
1243
1247
|
},
|
1244
|
-
/**Expand this node.
|
1245
|
-
* @param {
|
1248
|
+
/**Expand or collapse this node.
|
1249
|
+
* @param {boolean} [flag=true] pass false to collapse
|
1250
|
+
* @param {object} [opts] additional options. Defaults to {noAnimation: false, noEvents: false}
|
1251
|
+
* @returns {$.Promise} resolved, when lazy loading and animations are done
|
1246
1252
|
*/
|
1247
|
-
setExpanded: function(flag){
|
1248
|
-
return this.tree._callHook("nodeSetExpanded", this, flag);
|
1253
|
+
setExpanded: function(flag, opts){
|
1254
|
+
return this.tree._callHook("nodeSetExpanded", this, flag, opts);
|
1249
1255
|
},
|
1250
1256
|
/**Set keyboard focus to this node.
|
1251
|
-
* @param {
|
1257
|
+
* @param {boolean} [flag=true] pass false to blur
|
1252
1258
|
* @see Fancytree#setFocus
|
1253
1259
|
*/
|
1254
1260
|
setFocus: function(flag){
|
@@ -1256,7 +1262,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1256
1262
|
},
|
1257
1263
|
// TODO: setLazyNodeStatus
|
1258
1264
|
/**Select this node.
|
1259
|
-
* @param {
|
1265
|
+
* @param {boolean} [flag=true] pass false to deselect
|
1260
1266
|
*/
|
1261
1267
|
setSelected: function(flag){
|
1262
1268
|
return this.tree._callHook("nodeSetSelected", this, flag);
|
@@ -1269,8 +1275,8 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1269
1275
|
this.renderTitle();
|
1270
1276
|
},
|
1271
1277
|
/**Sort child list by title.
|
1272
|
-
* @param {function} [
|
1273
|
-
* @param {
|
1278
|
+
* @param {function} [cmp] custom compare function(a, b) that returns -1, 0, or 1 (defaults to sort by title).
|
1279
|
+
* @param {boolean} [deep=false] pass true to sort all descendant nodes
|
1274
1280
|
*/
|
1275
1281
|
sortChildren: function(cmp, deep) {
|
1276
1282
|
var i,l,
|
@@ -1296,13 +1302,13 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1296
1302
|
this.render();
|
1297
1303
|
}
|
1298
1304
|
},
|
1299
|
-
/** Convert node (or whole branch) into a
|
1305
|
+
/** Convert node (or whole branch) into a plain object.
|
1300
1306
|
*
|
1301
1307
|
* The result is compatible with node.addChildren().
|
1302
1308
|
*
|
1303
|
-
* @param {
|
1304
|
-
* @param {function} callback callback(dict) is called for every
|
1305
|
-
* @returns {
|
1309
|
+
* @param {boolean} recursive
|
1310
|
+
* @param {function} callback callback(dict) is called for every node, in order to allow modifications
|
1311
|
+
* @returns {NodeData}
|
1306
1312
|
*/
|
1307
1313
|
toDict: function(recursive, callback) {
|
1308
1314
|
var i, l, node,
|
@@ -1310,7 +1316,6 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1310
1316
|
self = this;
|
1311
1317
|
|
1312
1318
|
$.each(NODE_ATTRS, function(i, a){
|
1313
|
-
// if(self[a] !== undefined && self[a] !== null){
|
1314
1319
|
if(self[a] || self[a] === false){
|
1315
1320
|
dict[a] = self[a];
|
1316
1321
|
}
|
@@ -1354,8 +1359,8 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1354
1359
|
* Skip current branch, if fn() returns 'skip'.
|
1355
1360
|
* @param {function} fn the callback function.
|
1356
1361
|
* Return false to stop iteration, return "skip" to skip this node and children only.
|
1357
|
-
* @param {
|
1358
|
-
* @returns {
|
1362
|
+
* @param {boolean} [includeSelf=false]
|
1363
|
+
* @returns {boolean} false, if the iterator was stopped.
|
1359
1364
|
*/
|
1360
1365
|
visit: function(fn, includeSelf) {
|
1361
1366
|
var i, l,
|
@@ -1382,7 +1387,7 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1382
1387
|
*
|
1383
1388
|
* @param fn
|
1384
1389
|
* @param includeSelf
|
1385
|
-
* @returns {
|
1390
|
+
* @returns {boolean}
|
1386
1391
|
*/
|
1387
1392
|
visitParents: function(fn, includeSelf) {
|
1388
1393
|
// Visit parent nodes (bottom up)
|
@@ -1413,10 +1418,12 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1413
1418
|
* Fancytree
|
1414
1419
|
*/
|
1415
1420
|
/**
|
1416
|
-
* Construct a new tree.
|
1417
|
-
*
|
1418
|
-
* @
|
1419
|
-
* @
|
1421
|
+
* Construct a new tree object.
|
1422
|
+
*
|
1423
|
+
* @class Fancytree
|
1424
|
+
* @classdesc A Fancytree is the controller behind a fancytree.
|
1425
|
+
* This class also contains 'hook methods': see {@link Fancytree_Hooks}.
|
1426
|
+
*
|
1420
1427
|
* @param {Widget} widget
|
1421
1428
|
*
|
1422
1429
|
* @property {FancytreeOptions} options
|
@@ -1428,15 +1435,14 @@ FancytreeNode.prototype = /**@lends FancytreeNode*/{
|
|
1428
1435
|
* @property {object} ext
|
1429
1436
|
* @property {object} data
|
1430
1437
|
* @property {object} options
|
1431
|
-
* @property {
|
1432
|
-
* @property {
|
1433
|
-
* @property {
|
1434
|
-
* @property {
|
1435
|
-
* @property {
|
1438
|
+
* @property {string} _id
|
1439
|
+
* @property {string} statusClassPropName
|
1440
|
+
* @property {string} ariaPropName
|
1441
|
+
* @property {string} nodeContainerAttrName
|
1442
|
+
* @property {string} $container
|
1436
1443
|
* @property {FancytreeNode} lastSelectedNode
|
1437
1444
|
*/
|
1438
|
-
function Fancytree(widget){
|
1439
|
-
// TODO: rename widget to widget (it's not a jQuery object)
|
1445
|
+
function Fancytree(widget) {
|
1440
1446
|
this.widget = widget;
|
1441
1447
|
this.$div = widget.element;
|
1442
1448
|
this.options = widget.options;
|
@@ -1463,7 +1469,8 @@ function Fancytree(widget){
|
|
1463
1469
|
this.rootNode = new FancytreeNode(fakeParent, {
|
1464
1470
|
title: "root",
|
1465
1471
|
key: "root_" + this._id,
|
1466
|
-
children: null
|
1472
|
+
children: null,
|
1473
|
+
expanded: true
|
1467
1474
|
});
|
1468
1475
|
this.rootNode.parent = null;
|
1469
1476
|
|
@@ -1488,8 +1495,8 @@ function Fancytree(widget){
|
|
1488
1495
|
}
|
1489
1496
|
|
1490
1497
|
|
1491
|
-
Fancytree.prototype =
|
1492
|
-
|
1498
|
+
Fancytree.prototype = /** @lends Fancytree# */{
|
1499
|
+
/* Return a context object that can be re-used for _callHook().
|
1493
1500
|
* @param {Fancytree | FancytreeNode | EventData} obj
|
1494
1501
|
* @param {Event} originalEvent
|
1495
1502
|
* @param {Object} extra
|
@@ -1518,11 +1525,11 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1518
1525
|
}
|
1519
1526
|
return ctx;
|
1520
1527
|
},
|
1521
|
-
|
1528
|
+
/* Trigger a hook function: funcName(ctx, [...]).
|
1522
1529
|
*
|
1523
|
-
* @param {
|
1530
|
+
* @param {string} funcName
|
1524
1531
|
* @param {Fancytree|FancytreeNode|EventData} contextObject
|
1525
|
-
* @param {any
|
1532
|
+
* @param {any} [_extraArgs] optional additional arguments
|
1526
1533
|
* @returns {any}
|
1527
1534
|
*/
|
1528
1535
|
_callHook: function(funcName, contextObject, _extraArgs) {
|
@@ -1536,11 +1543,47 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1536
1543
|
// this.debug("_hook", funcName, ctx.node && ctx.node.toString() || ctx.tree.toString(), args);
|
1537
1544
|
return fn.apply(this, args);
|
1538
1545
|
},
|
1539
|
-
|
1546
|
+
/* Check if current extensions dependencies are met and throw an error if not.
|
1547
|
+
*
|
1548
|
+
* This method may be called inside the `treeInit` hook for custom extensions.
|
1549
|
+
*
|
1550
|
+
* @param {string} extension name of the required extension
|
1551
|
+
* @param {boolean} [required=true] pass `false` if the extension is optional, but we want to check for order if it is present
|
1552
|
+
* @param {boolean} [before] `true` if `name` must be included before this, `false` otherwise (use `null` if order doesn't matter)
|
1553
|
+
* @param {string} [message] optional error message (defaults to a descriptve error message)
|
1554
|
+
*/
|
1555
|
+
_requireExtension: function(name, required, before, message) {
|
1556
|
+
before = !!before;
|
1557
|
+
var thisName = this._local.name,
|
1558
|
+
extList = this.options.extensions,
|
1559
|
+
isBefore = $.inArray(name, extList) < $.inArray(thisName, extList),
|
1560
|
+
isMissing = required && this.ext[name] == null,
|
1561
|
+
badOrder = !isMissing && before != null && (before !== isBefore);
|
1562
|
+
|
1563
|
+
_assert(thisName && thisName !== name);
|
1564
|
+
|
1565
|
+
if( isMissing || badOrder ){
|
1566
|
+
if( !message ){
|
1567
|
+
if( isMissing || required ){
|
1568
|
+
message = "'" + thisName + "' extension requires '" + name + "'";
|
1569
|
+
if( badOrder ){
|
1570
|
+
message += " to be registered " + (before ? "before" : "after") + " itself";
|
1571
|
+
}
|
1572
|
+
}else{
|
1573
|
+
message = "If used together, `" + name + "` must be registered " + (before ? "before" : "after") + " `" + thisName + "`";
|
1574
|
+
}
|
1575
|
+
}
|
1576
|
+
$.error(message);
|
1577
|
+
return false;
|
1578
|
+
}
|
1579
|
+
return true;
|
1580
|
+
},
|
1581
|
+
/** Activate node with a given key and fire focus and activate events.
|
1540
1582
|
*
|
1541
1583
|
* A prevously activated node will be deactivated.
|
1584
|
+
* If activeVisible option is set, all parents will be expanded as necessary.
|
1542
1585
|
* Pass key = false, to deactivate the current node only.
|
1543
|
-
* @param {
|
1586
|
+
* @param {string} key
|
1544
1587
|
* @returns {FancytreeNode} activated node (null, if not found)
|
1545
1588
|
*/
|
1546
1589
|
activateKey: function(key) {
|
@@ -1552,7 +1595,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1552
1595
|
}
|
1553
1596
|
return node;
|
1554
1597
|
},
|
1555
|
-
/**
|
1598
|
+
/** (experimental)
|
1556
1599
|
*
|
1557
1600
|
* @param {Array} patchList array of [key, NodePatch] arrays
|
1558
1601
|
* @returns {$.Promise} resolved, when all patches have been applied
|
@@ -1588,11 +1631,13 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1588
1631
|
}
|
1589
1632
|
},
|
1590
1633
|
*/
|
1591
|
-
/** Return the number of
|
1634
|
+
/** Return the number of nodes.
|
1635
|
+
* @returns {integer}
|
1636
|
+
*/
|
1592
1637
|
count: function() {
|
1593
1638
|
return this.rootNode.countChildren();
|
1594
1639
|
},
|
1595
|
-
/** Write to browser console if debugLevel >= 2 (prepending tree
|
1640
|
+
/** Write to browser console if debugLevel >= 2 (prepending tree name)
|
1596
1641
|
*
|
1597
1642
|
* @param {*} msg string or object or array of such
|
1598
1643
|
*/
|
@@ -1611,8 +1656,8 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1611
1656
|
*
|
1612
1657
|
* In selectMode 3 only the topmost selected nodes are considered.
|
1613
1658
|
*
|
1614
|
-
* @param {
|
1615
|
-
* @param {
|
1659
|
+
* @param {boolean | string} [selected=true]
|
1660
|
+
* @param {boolean | string} [active=true]
|
1616
1661
|
*/
|
1617
1662
|
generateFormElements: function(selected, active) {
|
1618
1663
|
// TODO: test case
|
@@ -1650,19 +1695,21 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1650
1695
|
}
|
1651
1696
|
},
|
1652
1697
|
/**
|
1653
|
-
* Return
|
1698
|
+
* Return the currently active FancytreeNode or null.
|
1654
1699
|
* @returns {FancytreeNode}
|
1655
1700
|
*/
|
1656
1701
|
getActiveNode: function() {
|
1657
1702
|
return this.activeNode;
|
1658
1703
|
},
|
1659
|
-
/**
|
1704
|
+
/** Return the first top level node if any (not the invisible root node).
|
1705
|
+
* @returns {FancytreeNode | null}
|
1706
|
+
*/
|
1660
1707
|
getFirstChild: function() {
|
1661
1708
|
return this.rootNode.getFirstChild();
|
1662
1709
|
},
|
1663
1710
|
/**
|
1664
1711
|
* Return node that has keyboard focus.
|
1665
|
-
* @param {
|
1712
|
+
* @param {boolean} [ifTreeHasFocus=false] (not yet implemented)
|
1666
1713
|
* @returns {FancytreeNode}
|
1667
1714
|
*/
|
1668
1715
|
getFocusNode: function(ifTreeHasFocus) {
|
@@ -1670,8 +1717,8 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1670
1717
|
return this.focusNode;
|
1671
1718
|
},
|
1672
1719
|
/**
|
1673
|
-
* Return node with a given key.
|
1674
|
-
* @param {
|
1720
|
+
* Return node with a given key or null if not found.
|
1721
|
+
* @param {string} key
|
1675
1722
|
* @param {FancytreeNode} [searchRoot] only search below this node
|
1676
1723
|
* @returns {FancytreeNode | null}
|
1677
1724
|
*/
|
@@ -1701,8 +1748,8 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1701
1748
|
},
|
1702
1749
|
// TODO: getRoot()
|
1703
1750
|
/**
|
1704
|
-
* Return
|
1705
|
-
* @param {
|
1751
|
+
* Return an array of selected nodes.
|
1752
|
+
* @param {boolean} [stopOnParents=false] only return the topmost selected
|
1706
1753
|
* node (useful with selectMode 3)
|
1707
1754
|
* @returns {FancytreeNode[]}
|
1708
1755
|
*/
|
@@ -1718,14 +1765,13 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1718
1765
|
});
|
1719
1766
|
return nodeList;
|
1720
1767
|
},
|
1721
|
-
/**
|
1722
|
-
* @returns {
|
1768
|
+
/** Return true if the tree control has keyboard focus
|
1769
|
+
* @returns {boolean}
|
1723
1770
|
*/
|
1724
1771
|
hasFocus: function(){
|
1725
1772
|
return !!this._hasFocus;
|
1726
1773
|
},
|
1727
|
-
/** Write to browser console if debugLevel >= 1 (prepending tree
|
1728
|
-
*
|
1774
|
+
/** Write to browser console if debugLevel >= 1 (prepending tree name)
|
1729
1775
|
* @param {*} msg string or object or array of such
|
1730
1776
|
*/
|
1731
1777
|
info: function(msg){
|
@@ -1745,69 +1791,22 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1745
1791
|
return ( this.phase=="userEvent" );
|
1746
1792
|
},
|
1747
1793
|
*/
|
1748
|
-
/**
|
1749
|
-
* Expand all parents of one or more nodes.
|
1750
|
-
* Calls
|
1751
|
-
* @param {String | String[]} keyPath one or more key paths (e.g. '/3/2_1/7')
|
1752
|
-
* @param {function} callback callbeck(mode) is called for every visited node
|
1753
|
-
* @returns {$.Promise}
|
1754
|
-
*/
|
1755
|
-
/*
|
1756
|
-
_loadKeyPath: function(keyPath, callback) {
|
1757
|
-
var tree = this.tree;
|
1758
|
-
tree.logDebug("%s._loadKeyPath(%s)", this, keyPath);
|
1759
|
-
if(keyPath === ""){
|
1760
|
-
throw "Key path must not be empty";
|
1761
|
-
}
|
1762
|
-
var segList = keyPath.split(tree.options.keyPathSeparator);
|
1763
|
-
if(segList[0] === ""){
|
1764
|
-
throw "Key path must be relative (don't start with '/')";
|
1765
|
-
}
|
1766
|
-
var seg = segList.shift();
|
1767
|
-
|
1768
|
-
for(var i=0, l=this.childList.length; i < l; i++){
|
1769
|
-
var child = this.childList[i];
|
1770
|
-
if( child.data.key === seg ){
|
1771
|
-
if(segList.length === 0) {
|
1772
|
-
// Found the end node
|
1773
|
-
callback.call(tree, child, "ok");
|
1774
|
-
|
1775
|
-
}else if(child.data.isLazy && (child.childList === null || child.childList === undefined)){
|
1776
|
-
tree.logDebug("%s._loadKeyPath(%s) -> reloading %s...", this, keyPath, child);
|
1777
|
-
var self = this;
|
1778
|
-
child.reloadChildren(function(node, isOk){
|
1779
|
-
// After loading, look for direct child with that key
|
1780
|
-
if(isOk){
|
1781
|
-
tree.logDebug("%s._loadKeyPath(%s) -> reloaded %s.", node, keyPath, node);
|
1782
|
-
callback.call(tree, child, "loaded");
|
1783
|
-
node._loadKeyPath(segList.join(tree.options.keyPathSeparator), callback);
|
1784
|
-
}else{
|
1785
|
-
tree.logWarning("%s._loadKeyPath(%s) -> reloadChildren() failed.", self, keyPath);
|
1786
|
-
callback.call(tree, child, "error");
|
1787
|
-
}
|
1788
|
-
}); // Note: this line gives a JSLint warning (Don't make functions within a loop)
|
1789
|
-
// we can ignore it, since it will only be exectuted once, the the loop is ended
|
1790
|
-
// See also http://stackoverflow.com/questions/3037598/how-to-get-around-the-jslint-error-dont-make-functions-within-a-loop
|
1791
|
-
} else {
|
1792
|
-
callback.call(tree, child, "loaded");
|
1793
|
-
// Look for direct child with that key
|
1794
|
-
child._loadKeyPath(segList.join(tree.options.keyPathSeparator), callback);
|
1795
|
-
}
|
1796
|
-
return;
|
1797
|
-
}
|
1798
|
-
}
|
1799
|
-
// Could not find key
|
1800
|
-
tree.logWarning("Node not found: " + seg);
|
1801
|
-
return;
|
1802
|
-
},
|
1803
|
-
|
1804
|
-
*/
|
1805
1794
|
|
1806
1795
|
/**
|
1807
|
-
*
|
1808
|
-
*
|
1809
|
-
*
|
1810
|
-
* @
|
1796
|
+
* Make sure that a node with a given ID is loaded, by traversing - and
|
1797
|
+
* loading - its parents. This method is ment for lazy hierarchies.
|
1798
|
+
* A callback is executed for every node as we go.
|
1799
|
+
* @example
|
1800
|
+
* tree.loadKeyPath("/_3/_23/_26/_27", function(node, status){
|
1801
|
+
* if(status === "loaded") {
|
1802
|
+
* console.log("loaded intermiediate node " + node);
|
1803
|
+
* }else if(status === "ok") {
|
1804
|
+
* node.activate();
|
1805
|
+
* }
|
1806
|
+
* });
|
1807
|
+
*
|
1808
|
+
* @param {string | string[]} keyPathList one or more key paths (e.g. '/3/2_1/7')
|
1809
|
+
* @param {function} callback callback(node, status) is called for every visited node ('loading', 'loaded', 'ok', 'error')
|
1811
1810
|
* @returns {$.Promise}
|
1812
1811
|
*/
|
1813
1812
|
loadKeyPath: function(keyPathList, callback, _rootNode) {
|
@@ -1881,6 +1880,110 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1881
1880
|
// Return a promise that is resovled, when ALL paths were loaded
|
1882
1881
|
return $.when.apply($, deferredList).promise();
|
1883
1882
|
},
|
1883
|
+
/** Re-fire beforeActivate and activate events. */
|
1884
|
+
reactivate: function(setFocus) {
|
1885
|
+
var node = this.activeNode;
|
1886
|
+
if( node ) {
|
1887
|
+
this.activeNode = null; // Force re-activating
|
1888
|
+
node.setActive();
|
1889
|
+
if( setFocus ){
|
1890
|
+
node.setFocus();
|
1891
|
+
}
|
1892
|
+
}
|
1893
|
+
},
|
1894
|
+
/** Reload tree from source and return a promise.
|
1895
|
+
* @param [source] optional new source (defaults to initial source data)
|
1896
|
+
* @returns {$.Promise}
|
1897
|
+
*/
|
1898
|
+
reload: function(source) {
|
1899
|
+
this._callHook("treeClear", this);
|
1900
|
+
return this._callHook("treeLoad", this, source);
|
1901
|
+
},
|
1902
|
+
/**Render tree (i.e. create DOM elements for all top-level nodes).
|
1903
|
+
* @param {boolean} [force=false] create DOM elemnts, even is parent is collapsed
|
1904
|
+
* @param {boolean} [deep=false]
|
1905
|
+
*/
|
1906
|
+
render: function(force, deep) {
|
1907
|
+
return this.rootNode.render(force, deep);
|
1908
|
+
},
|
1909
|
+
// TODO: selectKey: function(key, select)
|
1910
|
+
// TODO: serializeArray: function(stopOnParents)
|
1911
|
+
/**
|
1912
|
+
* @param {boolean} [flag=true]
|
1913
|
+
*/
|
1914
|
+
setFocus: function(flag) {
|
1915
|
+
return this._callHook("treeSetFocus", this, flag);
|
1916
|
+
},
|
1917
|
+
/**
|
1918
|
+
* Return all nodes as nested list of {@link NodeData}.
|
1919
|
+
*
|
1920
|
+
* @param {boolean} [includeRoot=false] Returns the hidden system root node (and its children)
|
1921
|
+
* @param {function} [callback(node)] Called for every node
|
1922
|
+
* @returns {Array | object}
|
1923
|
+
* @see FancytreeNode#toDict
|
1924
|
+
*/
|
1925
|
+
toDict: function(includeRoot, callback){
|
1926
|
+
var res = this.rootNode.toDict(true, callback);
|
1927
|
+
return includeRoot ? res : res.children;
|
1928
|
+
},
|
1929
|
+
/* Implicitly called for string conversions.
|
1930
|
+
* @returns {string}
|
1931
|
+
*/
|
1932
|
+
toString: function(){
|
1933
|
+
return "<Fancytree(#" + this._id + ")>";
|
1934
|
+
},
|
1935
|
+
/* _trigger a widget event with additional node ctx.
|
1936
|
+
* @see EventData
|
1937
|
+
*/
|
1938
|
+
_triggerNodeEvent: function(type, node, originalEvent, extra) {
|
1939
|
+
// this.debug("_trigger(" + type + "): '" + ctx.node.title + "'", ctx);
|
1940
|
+
var ctx = this._makeHookContext(node, originalEvent, extra),
|
1941
|
+
res = this.widget._trigger(type, originalEvent, ctx);
|
1942
|
+
if(res !== false && ctx.result !== undefined){
|
1943
|
+
return ctx.result;
|
1944
|
+
}
|
1945
|
+
return res;
|
1946
|
+
},
|
1947
|
+
/* _trigger a widget event with additional tree data. */
|
1948
|
+
_triggerTreeEvent: function(type, originalEvent) {
|
1949
|
+
// this.debug("_trigger(" + type + ")", ctx);
|
1950
|
+
var ctx = this._makeHookContext(this, originalEvent),
|
1951
|
+
res = this.widget._trigger(type, originalEvent, ctx);
|
1952
|
+
|
1953
|
+
if(res !== false && ctx.result !== undefined){
|
1954
|
+
return ctx.result;
|
1955
|
+
}
|
1956
|
+
return res;
|
1957
|
+
},
|
1958
|
+
/** Call fn(node) for all nodes.
|
1959
|
+
*
|
1960
|
+
* @param {function} fn the callback function.
|
1961
|
+
* Return false to stop iteration, return "skip" to skip this node and children only.
|
1962
|
+
* @returns {boolean} false, if the iterator was stopped.
|
1963
|
+
*/
|
1964
|
+
visit: function(fn) {
|
1965
|
+
return this.rootNode.visit(fn, false);
|
1966
|
+
},
|
1967
|
+
/** Write warning to browser console (prepending tree info)
|
1968
|
+
*
|
1969
|
+
* @param {*} msg string or object or array of such
|
1970
|
+
*/
|
1971
|
+
warn: function(msg){
|
1972
|
+
Array.prototype.unshift.call(arguments, this.toString());
|
1973
|
+
consoleApply("warn", arguments);
|
1974
|
+
}
|
1975
|
+
};
|
1976
|
+
|
1977
|
+
/**
|
1978
|
+
* These additional methods of the {@link Fancytree} class are 'hook functions'
|
1979
|
+
* that can be used and overloaded by extensions.
|
1980
|
+
* (See <a href="https://github.com/mar10/fancytree/wiki/TutorialExtensions">writing extensions</a>.)
|
1981
|
+
* @mixin Fancytree_Hooks
|
1982
|
+
*/
|
1983
|
+
$.extend(Fancytree.prototype,
|
1984
|
+
/** @lends Fancytree_Hooks# */
|
1985
|
+
{
|
1986
|
+
|
1884
1987
|
/** _Default handling for mouse click events. */
|
1885
1988
|
nodeClick: function(ctx) {
|
1886
1989
|
// this.tree.logDebug("ftnode.onClick(" + event.type + "): ftnode:" + this + ", button:" + event.button + ", which: " + event.which);
|
@@ -1934,7 +2037,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1934
2037
|
}
|
1935
2038
|
// TODO: return promise?
|
1936
2039
|
},
|
1937
|
-
nodeCollapseSiblings: function(ctx) {
|
2040
|
+
nodeCollapseSiblings: function(ctx, callOpts) {
|
1938
2041
|
// TODO: return promise?
|
1939
2042
|
var ac, i, l,
|
1940
2043
|
node = ctx.node;
|
@@ -1943,7 +2046,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
1943
2046
|
ac = node.parent.children;
|
1944
2047
|
for (i=0, l=ac.length; i<l; i++) {
|
1945
2048
|
if ( ac[i] !== node && ac[i].expanded ){
|
1946
|
-
this._callHook("nodeSetExpanded", ac[i], false);
|
2049
|
+
this._callHook("nodeSetExpanded", ac[i], false, callOpts);
|
1947
2050
|
}
|
1948
2051
|
}
|
1949
2052
|
}
|
@@ -2166,7 +2269,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2166
2269
|
},
|
2167
2270
|
/**
|
2168
2271
|
* Remove a single direct child of ctx.node.
|
2169
|
-
* @param ctx
|
2272
|
+
* @param {EventData} ctx
|
2170
2273
|
* @param {FancytreeNode} childNode dircect child of ctx.node
|
2171
2274
|
*/
|
2172
2275
|
nodeRemoveChild: function(ctx, childNode) {
|
@@ -2212,11 +2315,15 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2212
2315
|
FT.debug("nodeRemoveChildMarkup()", node.toString());
|
2213
2316
|
// TODO: Unlink attr.ftnode to support GC
|
2214
2317
|
if(node.ul){
|
2215
|
-
|
2318
|
+
if( node.isRoot() ) {
|
2319
|
+
$(node.ul).empty();
|
2320
|
+
} else {
|
2321
|
+
$(node.ul).remove();
|
2322
|
+
node.ul = null;
|
2323
|
+
}
|
2216
2324
|
node.visit(function(n){
|
2217
2325
|
n.li = n.ul = null;
|
2218
2326
|
});
|
2219
|
-
node.ul = null;
|
2220
2327
|
}
|
2221
2328
|
},
|
2222
2329
|
/**Remove all descendants of ctx.node.
|
@@ -2296,9 +2403,9 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2296
2403
|
* </code>
|
2297
2404
|
*
|
2298
2405
|
* @param: {EventData} ctx
|
2299
|
-
* @param: {
|
2300
|
-
* @param: {
|
2301
|
-
* @param: {
|
2406
|
+
* @param: {boolean} [force=false] re-render, even if html markup was already created
|
2407
|
+
* @param: {boolean} [deep=false] also render all descendants, even if parent is collapsed
|
2408
|
+
* @param: {boolean} [collapsed=false] force root node to be collapsed, so we can apply animated expand later
|
2302
2409
|
*/
|
2303
2410
|
nodeRender: function(ctx, force, deep, collapsed, _recursive) {
|
2304
2411
|
/* This method must take care of all cases where the current data mode
|
@@ -2310,7 +2417,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2310
2417
|
* - children have been added
|
2311
2418
|
* - childern have been removed
|
2312
2419
|
*/
|
2313
|
-
var childLI, childNode1, childNode2, i, l, subCtx,
|
2420
|
+
var childLI, childNode1, childNode2, i, l, next, subCtx,
|
2314
2421
|
node = ctx.node,
|
2315
2422
|
tree = ctx.tree,
|
2316
2423
|
opts = ctx.options,
|
@@ -2319,7 +2426,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2319
2426
|
parent = node.parent,
|
2320
2427
|
isRootNode = !parent,
|
2321
2428
|
children = node.children;
|
2322
|
-
|
2429
|
+
FT.debug("nodeRender(" + !!force + ", " + !!deep + ")", node.toString());
|
2323
2430
|
|
2324
2431
|
if( ! isRootNode && ! parent.ul ) {
|
2325
2432
|
// issue #105: calling node.collapse on a deep, unrendered node
|
@@ -2327,6 +2434,14 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2327
2434
|
}
|
2328
2435
|
_assert(isRootNode || parent.ul, "parent UL must exist");
|
2329
2436
|
|
2437
|
+
// if(node.li && (force || (node.li.parentNode !== node.parent.ul) ) ){
|
2438
|
+
// if(node.li.parentNode !== node.parent.ul){
|
2439
|
+
// // alert("unlink " + node + " (must be child of " + node.parent + ")");
|
2440
|
+
// this.warn("unlink " + node + " (must be child of " + node.parent + ")");
|
2441
|
+
// }
|
2442
|
+
// // this.debug("nodeRemoveMarkup...");
|
2443
|
+
// this.nodeRemoveMarkup(ctx);
|
2444
|
+
// }
|
2330
2445
|
// Render the node
|
2331
2446
|
if( !isRootNode ){
|
2332
2447
|
// Discard markup on force-mode, or if it is not linked to parent <ul>
|
@@ -2360,17 +2475,11 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2360
2475
|
$(node.span).attr("aria-labelledby", "ftal_" + node.key);
|
2361
2476
|
}
|
2362
2477
|
node.li.appendChild(node.span);
|
2363
|
-
// Note: we don't add the LI to the DOM know, but only after we
|
2364
|
-
// added all sub elements (hoping that this performs better since
|
2365
|
-
// the browser only have to render once)
|
2366
|
-
// TODO: benchmarks to prove this
|
2367
|
-
// parent.ul.appendChild(node.li);
|
2368
2478
|
|
2369
2479
|
// Create inner HTML for the <span> (expander, checkbox, icon, and title)
|
2370
2480
|
this.nodeRenderTitle(ctx);
|
2371
2481
|
|
2372
2482
|
// Allow tweaking and binding, after node was created for the first time
|
2373
|
-
// tree._triggerNodeEvent("createNode", ctx);
|
2374
2483
|
if ( opts.createNode ){
|
2375
2484
|
opts.createNode.call(tree, {type: "createNode"}, ctx);
|
2376
2485
|
}
|
@@ -2378,7 +2487,6 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2378
2487
|
// this.nodeRenderTitle(ctx);
|
2379
2488
|
}
|
2380
2489
|
// Allow tweaking after node state was rendered
|
2381
|
-
// tree._triggerNodeEvent("renderNode", ctx);
|
2382
2490
|
if ( opts.renderNode ){
|
2383
2491
|
opts.renderNode.call(tree, {type: "renderNode"}, ctx);
|
2384
2492
|
}
|
@@ -2408,8 +2516,20 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2408
2516
|
subCtx = $.extend({}, ctx, {node: children[i]});
|
2409
2517
|
this.nodeRender(subCtx, force, deep, false, true);
|
2410
2518
|
}
|
2519
|
+
// Remove <li> if nodes have moved to another parent
|
2520
|
+
childLI = node.ul.firstChild;
|
2521
|
+
while( childLI ){
|
2522
|
+
childNode2 = childLI.ftnode;
|
2523
|
+
if( childNode2 && childNode2.parent !== node ) {
|
2524
|
+
node.debug("_fixParent: remove missing " + childNode2, childLI);
|
2525
|
+
next = childLI.nextSibling;
|
2526
|
+
childLI.parentNode.removeChild(childLI);
|
2527
|
+
childLI = next;
|
2528
|
+
}else{
|
2529
|
+
childLI = childLI.nextSibling;
|
2530
|
+
}
|
2531
|
+
}
|
2411
2532
|
// Make sure, that <li> order matches node.children order.
|
2412
|
-
// this.nodeFixOrder(ctx);
|
2413
2533
|
childLI = node.ul.firstChild;
|
2414
2534
|
for(i=0, l=children.length-1; i<l; i++) {
|
2415
2535
|
childNode1 = children[i];
|
@@ -2421,7 +2541,6 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2421
2541
|
childLI = childLI.nextSibling;
|
2422
2542
|
}
|
2423
2543
|
}
|
2424
|
-
// TODO: need to check, if node.ul has <li>s, that are not in node.children[] ?
|
2425
2544
|
}
|
2426
2545
|
}else{
|
2427
2546
|
// No children: remove markup if any
|
@@ -2439,14 +2558,13 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2439
2558
|
parent.ul.appendChild(node.li);
|
2440
2559
|
}
|
2441
2560
|
}
|
2442
|
-
return;
|
2443
2561
|
},
|
2444
2562
|
/** Create HTML for the node's outer <span> (expander, checkbox, icon, and title).
|
2445
2563
|
* @param {EventData} ctx
|
2446
2564
|
*/
|
2447
2565
|
nodeRenderTitle: function(ctx, title) {
|
2448
2566
|
// set node connector images, links and text
|
2449
|
-
var id, imageSrc, nodeTitle, role, tooltip,
|
2567
|
+
var id, imageSrc, nodeTitle, role, tabindex, tooltip,
|
2450
2568
|
node = ctx.node,
|
2451
2569
|
tree = ctx.tree,
|
2452
2570
|
opts = ctx.options,
|
@@ -2513,16 +2631,13 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2513
2631
|
tooltip = node.tooltip ? " title='" + node.tooltip.replace(/\"/g, """) + "'" : "";
|
2514
2632
|
id = aria ? " id='ftal_" + node.key + "'" : "";
|
2515
2633
|
role = aria ? " role='treeitem'" : "";
|
2516
|
-
|
2517
|
-
|
2518
|
-
|
2519
|
-
nodeTitle = "<span " + role + " class='fancytree-title'" + id + tooltip + ">" + node.title + "</span>";
|
2520
|
-
// } else {
|
2521
|
-
// nodeTitle = "<a href='" + href + "' tabindex='-1' class='fancytree-title'" + tooltip + ">" + node.title + "</a>";
|
2522
|
-
// }
|
2634
|
+
tabindex = opts.titlesTabbable ? " tabindex='0'" : "";
|
2635
|
+
|
2636
|
+
nodeTitle = "<span " + role + " class='fancytree-title'" + id + tooltip + tabindex + ">" + node.title + "</span>";
|
2523
2637
|
}
|
2524
2638
|
ares.push(nodeTitle);
|
2525
2639
|
// Note: this will trigger focusout, if node had the focus
|
2640
|
+
//$(node.span).html(ares.join("")); // it will cleanup the jQuery data currently associated with SPAN (if any), but it executes more slowly
|
2526
2641
|
node.span.innerHTML = ares.join("");
|
2527
2642
|
},
|
2528
2643
|
/** Update element classes according to node state.
|
@@ -2639,16 +2754,19 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2639
2754
|
* If flag is true, the node is activated (must be a synchronous operation)
|
2640
2755
|
* If flag is false, the node is deactivated (must be a synchronous operation)
|
2641
2756
|
* @param {EventData} ctx
|
2642
|
-
* @param {
|
2757
|
+
* @param {boolean} [flag=true]
|
2758
|
+
* @param {object} [opts] additional options. Defaults to {}
|
2643
2759
|
*/
|
2644
|
-
nodeSetActive: function(ctx, flag) {
|
2760
|
+
nodeSetActive: function(ctx, flag, callOpts) {
|
2645
2761
|
// Handle user click / [space] / [enter], according to clickFolderMode.
|
2762
|
+
callOpts = callOpts || {};
|
2646
2763
|
var subCtx,
|
2647
2764
|
node = ctx.node,
|
2648
2765
|
tree = ctx.tree,
|
2649
2766
|
opts = ctx.options,
|
2650
2767
|
// userEvent = !!ctx.originalEvent,
|
2651
2768
|
isActive = (node === tree.activeNode);
|
2769
|
+
|
2652
2770
|
// flag defaults to true
|
2653
2771
|
flag = (flag !== false);
|
2654
2772
|
node.debug("nodeSetActive", flag);
|
@@ -2684,22 +2802,24 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2684
2802
|
/** Expand or collapse node, return Deferred.promise.
|
2685
2803
|
*
|
2686
2804
|
* @param {EventData} ctx
|
2687
|
-
* @param {
|
2805
|
+
* @param {boolean} [flag=true]
|
2806
|
+
* @param {object} [opts] additional options. Defaults to {noAnimation: false}
|
2688
2807
|
* @returns {$.Promise} The deferred will be resolved as soon as the (lazy)
|
2689
2808
|
* data was retrieved, rendered, and the expand animation finshed.
|
2690
2809
|
*/
|
2691
|
-
nodeSetExpanded: function(ctx, flag) {
|
2810
|
+
nodeSetExpanded: function(ctx, flag, callOpts) {
|
2811
|
+
callOpts = callOpts || {};
|
2692
2812
|
var _afterLoad, dfd, i, l, parents, prevAC,
|
2693
2813
|
node = ctx.node,
|
2694
2814
|
tree = ctx.tree,
|
2695
|
-
opts = ctx.options
|
2815
|
+
opts = ctx.options,
|
2816
|
+
noAnimation = callOpts.noAnimation === true;
|
2817
|
+
|
2696
2818
|
// flag defaults to true
|
2697
2819
|
flag = (flag !== false);
|
2698
2820
|
|
2699
2821
|
node.debug("nodeSetExpanded(" + flag + ")");
|
2700
|
-
|
2701
|
-
// https://github.com/jshint/jshint/issues/455
|
2702
|
-
// if( !!node.expanded === !!flag){
|
2822
|
+
|
2703
2823
|
if((node.expanded && flag) || (!node.expanded && !flag)){
|
2704
2824
|
// Nothing to do
|
2705
2825
|
node.debug("nodeSetExpanded(" + flag + "): nothing to do");
|
@@ -2714,7 +2834,11 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2714
2834
|
// Callback returned false
|
2715
2835
|
return _getRejectedPromise(node, ["rejected"]);
|
2716
2836
|
}
|
2717
|
-
//
|
2837
|
+
// If this node inside a collpased node, no animation and scrolling is needed
|
2838
|
+
if( !noAnimation && !node.isVisible() ) {
|
2839
|
+
noAnimation = callOpts.noAnimation = true;
|
2840
|
+
}
|
2841
|
+
|
2718
2842
|
dfd = new $.Deferred();
|
2719
2843
|
|
2720
2844
|
// Auto-collapse mode: collapse all siblings
|
@@ -2725,7 +2849,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2725
2849
|
opts.autoCollapse = false;
|
2726
2850
|
for(i=0, l=parents.length; i<l; i++){
|
2727
2851
|
// TODO: should return promise?
|
2728
|
-
this._callHook("nodeCollapseSiblings", parents[i]);
|
2852
|
+
this._callHook("nodeCollapseSiblings", parents[i], callOpts);
|
2729
2853
|
}
|
2730
2854
|
}finally{
|
2731
2855
|
opts.autoCollapse = prevAC;
|
@@ -2734,7 +2858,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2734
2858
|
// Trigger expand/collapse after expanding
|
2735
2859
|
dfd.done(function(){
|
2736
2860
|
ctx.tree._triggerNodeEvent(flag ? "expand" : "collapse", ctx);
|
2737
|
-
if(opts.autoScroll){
|
2861
|
+
if( opts.autoScroll && !noAnimation ) {
|
2738
2862
|
// Scroll down to last child, but keep current node visible
|
2739
2863
|
node.getLastChild().scrollIntoView(true, node);
|
2740
2864
|
}
|
@@ -2765,8 +2889,10 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2765
2889
|
isExpanded = !!node.expanded;
|
2766
2890
|
if ( isVisible === isExpanded ) {
|
2767
2891
|
node.warn("nodeSetExpanded: UL.style.display already set");
|
2768
|
-
|
2892
|
+
|
2893
|
+
} else if ( !opts.fx || noAnimation ) {
|
2769
2894
|
node.ul.style.display = ( node.expanded || !parent ) ? "" : "none";
|
2895
|
+
|
2770
2896
|
} else {
|
2771
2897
|
duration = opts.fx.duration || 200;
|
2772
2898
|
easing = opts.fx.easing;
|
@@ -2816,7 +2942,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2816
2942
|
},
|
2817
2943
|
/**
|
2818
2944
|
* @param {EventData} ctx
|
2819
|
-
* @param {
|
2945
|
+
* @param {boolean} [flag=true]
|
2820
2946
|
*/
|
2821
2947
|
nodeSetFocus: function(ctx, flag) {
|
2822
2948
|
ctx.node.debug("nodeSetFocus(" + flag + ")");
|
@@ -2861,7 +2987,7 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
2861
2987
|
/** (De)Select node, return new status (sync).
|
2862
2988
|
*
|
2863
2989
|
* @param {EventData} ctx
|
2864
|
-
* @param {
|
2990
|
+
* @param {boolean} [flag=true]
|
2865
2991
|
*/
|
2866
2992
|
nodeSetSelected: function(ctx, flag) {
|
2867
2993
|
var node = ctx.node,
|
@@ -3078,121 +3204,33 @@ Fancytree.prototype = /**@lends Fancytree*/{
|
|
3078
3204
|
this.$container.toggleClass("fancytree-treefocus", flag);
|
3079
3205
|
this._triggerTreeEvent(flag ? "focusTree" : "blurTree");
|
3080
3206
|
}
|
3081
|
-
},
|
3082
|
-
/** Re-fire beforeActivate and activate events. */
|
3083
|
-
reactivate: function(setFocus) {
|
3084
|
-
var node = this.activeNode;
|
3085
|
-
if( node ) {
|
3086
|
-
this.activeNode = null; // Force re-activating
|
3087
|
-
node.setActive();
|
3088
|
-
if( setFocus ){
|
3089
|
-
node.setFocus();
|
3090
|
-
}
|
3091
|
-
}
|
3092
|
-
},
|
3093
|
-
// TODO: redraw()
|
3094
|
-
/** Reload tree from source and return a promise.
|
3095
|
-
* @param source
|
3096
|
-
* @returns {$.Promise}
|
3097
|
-
*/
|
3098
|
-
reload: function(source) {
|
3099
|
-
this._callHook("treeClear", this);
|
3100
|
-
return this._callHook("treeLoad", this, source);
|
3101
|
-
},
|
3102
|
-
/**Render tree (i.e. all top-level nodes).
|
3103
|
-
* @param {Boolean} [force=false]
|
3104
|
-
* @param {Boolean} [deep=false]
|
3105
|
-
*/
|
3106
|
-
render: function(force, deep) {
|
3107
|
-
return this.rootNode.render(force, deep);
|
3108
|
-
},
|
3109
|
-
// TODO: selectKey: function(key, select)
|
3110
|
-
// TODO: serializeArray: function(stopOnParents)
|
3111
|
-
/**
|
3112
|
-
* @param {Boolean} [flag=true]
|
3113
|
-
*/
|
3114
|
-
setFocus: function(flag) {
|
3115
|
-
// _assert(false, "Not implemented");
|
3116
|
-
return this._callHook("treeSetFocus", this, flag);
|
3117
|
-
},
|
3118
|
-
/**
|
3119
|
-
* Return all nodes as nested list of {@link NodeData}.
|
3120
|
-
*
|
3121
|
-
* @param {Boolean} [includeRoot=false] Returns the hidden system root node (and it's children)
|
3122
|
-
* @param {function} [callback] Called for every node
|
3123
|
-
* @returns {Array | object}
|
3124
|
-
* @see FancytreeNode#toDict
|
3125
|
-
*/
|
3126
|
-
toDict: function(includeRoot, callback){
|
3127
|
-
var res = this.rootNode.toDict(true, callback);
|
3128
|
-
return includeRoot ? res : res.children;
|
3129
|
-
},
|
3130
|
-
/**Implicitly called for string conversions.
|
3131
|
-
* @returns {String}
|
3132
|
-
*/
|
3133
|
-
toString: function(){
|
3134
|
-
return "<Fancytree(#" + this._id + ")>";
|
3135
|
-
},
|
3136
|
-
/** _trigger a widget event with additional node ctx.
|
3137
|
-
* @see EventData
|
3138
|
-
*/
|
3139
|
-
_triggerNodeEvent: function(type, node, originalEvent, extra) {
|
3140
|
-
// this.debug("_trigger(" + type + "): '" + ctx.node.title + "'", ctx);
|
3141
|
-
var ctx = this._makeHookContext(node, originalEvent, extra),
|
3142
|
-
res = this.widget._trigger(type, originalEvent, ctx);
|
3143
|
-
if(res !== false && ctx.result !== undefined){
|
3144
|
-
return ctx.result;
|
3145
|
-
}
|
3146
|
-
return res;
|
3147
|
-
},
|
3148
|
-
/** _trigger a widget event with additional tree data. */
|
3149
|
-
_triggerTreeEvent: function(type, originalEvent) {
|
3150
|
-
// this.debug("_trigger(" + type + ")", ctx);
|
3151
|
-
var ctx = this._makeHookContext(this, originalEvent),
|
3152
|
-
res = this.widget._trigger(type, originalEvent, ctx);
|
3153
|
-
|
3154
|
-
if(res !== false && ctx.result !== undefined){
|
3155
|
-
return ctx.result;
|
3156
|
-
}
|
3157
|
-
return res;
|
3158
|
-
},
|
3159
|
-
/** Call fn(node) for all nodes.
|
3160
|
-
*
|
3161
|
-
* @param {function} fn the callback function.
|
3162
|
-
* Return false to stop iteration, return "skip" to skip this node and children only.
|
3163
|
-
* @returns {Boolean} false, if the iterator was stopped.
|
3164
|
-
*/
|
3165
|
-
visit: function(fn) {
|
3166
|
-
return this.rootNode.visit(fn, false);
|
3167
|
-
},
|
3168
|
-
/** Write warning to browser console (prepending tree info)
|
3169
|
-
*
|
3170
|
-
* @param {*} msg string or object or array of such
|
3171
|
-
*/
|
3172
|
-
warn: function(msg){
|
3173
|
-
Array.prototype.unshift.call(arguments, this.toString());
|
3174
|
-
consoleApply("warn", arguments);
|
3175
3207
|
}
|
3176
|
-
};
|
3208
|
+
});
|
3177
3209
|
|
3178
3210
|
|
3179
3211
|
/* ******************************************************************************
|
3180
3212
|
* jQuery UI widget boilerplate
|
3181
|
-
* @ name ui_fancytree
|
3182
|
-
* @ class The jQuery.ui.fancytree widget
|
3183
3213
|
*/
|
3184
|
-
|
3185
|
-
|
3186
|
-
|
3214
|
+
/**
|
3215
|
+
* This constructor is not called directly. Use `$(selector).fancytre({})`
|
3216
|
+
* to initialize the plugin instead.
|
3217
|
+
*
|
3218
|
+
* @class ui.fancytree
|
3219
|
+
* @classdesc The plugin (derrived from <a href=" http://api.jqueryui.com/jQuery.widget/">jQuery.Widget</a>).<br>
|
3220
|
+
* <pre class="sh_javascript sunlight-highlight-javascript">// Access instance methods and members:
|
3221
|
+
* var tree = $(selector).fancytree("getTree");
|
3222
|
+
* // Access static members:
|
3223
|
+
* alert($.ui.fancytree.version);
|
3224
|
+
* </pre>
|
3225
|
+
*/
|
3187
3226
|
$.widget("ui.fancytree",
|
3188
|
-
/** @lends
|
3227
|
+
/** @lends ui.fancytree# */
|
3189
3228
|
{
|
3190
3229
|
/**These options will be used as defaults
|
3191
3230
|
* @type {FancytreeOptions}
|
3192
3231
|
*/
|
3193
3232
|
options:
|
3194
3233
|
{
|
3195
|
-
/** @type {Boolean} Make sure, active nodes are visible (expanded). */
|
3196
3234
|
activeVisible: true,
|
3197
3235
|
ajax: {
|
3198
3236
|
type: "GET",
|
@@ -3225,6 +3263,7 @@ $.widget("ui.fancytree",
|
|
3225
3263
|
loadError: "Load error!"
|
3226
3264
|
},
|
3227
3265
|
tabbable: true,
|
3266
|
+
titlesTabbable: false,
|
3228
3267
|
_classNames: {
|
3229
3268
|
node: "fancytree-node",
|
3230
3269
|
folder: "fancytree-folder",
|
@@ -3439,7 +3478,7 @@ $.widget("ui.fancytree",
|
|
3439
3478
|
return this.tree.activeNode;
|
3440
3479
|
},
|
3441
3480
|
/**
|
3442
|
-
* @param {
|
3481
|
+
* @param {string} key
|
3443
3482
|
* @returns {FancytreeNode} the matching node or null
|
3444
3483
|
*/
|
3445
3484
|
getNodeByKey: function(key) {
|
@@ -3458,19 +3497,19 @@ $.widget("ui.fancytree",
|
|
3458
3497
|
// $.ui.fancytree was created by the widget factory. Create a local shortcut:
|
3459
3498
|
FT = $.ui.fancytree;
|
3460
3499
|
|
3461
|
-
|
3500
|
+
/*
|
3462
3501
|
* Static members in the `$.ui.fancytree` namespace.
|
3463
|
-
*
|
3502
|
+
*
|
3464
3503
|
* @example:
|
3465
3504
|
* alert(""version: " + $.ui.fancytree.version);
|
3466
|
-
* var node = $.ui.fancytree.()
|
3505
|
+
* var node = $.ui.fancytree.getNode(element);
|
3467
3506
|
*/
|
3468
3507
|
$.extend($.ui.fancytree,
|
3469
|
-
/** @lends
|
3508
|
+
/** @lends ui.fancytree */
|
3470
3509
|
{
|
3471
|
-
/** @type {
|
3472
|
-
version: "2.0.0-
|
3473
|
-
/** @type {
|
3510
|
+
/** @type {string} */
|
3511
|
+
version: "2.0.0-6",
|
3512
|
+
/** @type {string} */
|
3474
3513
|
buildType: "release",
|
3475
3514
|
/** @type {int} */
|
3476
3515
|
debugLevel: 1, // used by $.ui.fancytree.debug() and as default for tree.options.debugLevel
|
@@ -3503,7 +3542,7 @@ $.extend($.ui.fancytree,
|
|
3503
3542
|
*
|
3504
3543
|
* @static
|
3505
3544
|
* @param {Event} event Mouse event, e.g. click, ...
|
3506
|
-
* @returns {
|
3545
|
+
* @returns {string} 'title' | 'prefix' | 'expander' | 'checkbox' | 'icon' | undefined
|
3507
3546
|
*/
|
3508
3547
|
getEventTargetType: function(event){
|
3509
3548
|
return this.getEventTarget(event).type;
|
@@ -3678,11 +3717,12 @@ $.extend($.ui.fancytree,
|
|
3678
3717
|
},
|
3679
3718
|
/** Add Fancytree extension definition to the list of globally available extensions.
|
3680
3719
|
*
|
3681
|
-
* @param
|
3682
|
-
* @param definition
|
3720
|
+
* @param {Object} definition
|
3683
3721
|
*/
|
3684
|
-
registerExtension: function(
|
3685
|
-
|
3722
|
+
registerExtension: function(definition){
|
3723
|
+
_assert(definition.name != null, "extensions must have a `name` property.");
|
3724
|
+
_assert(definition.version != null, "extensions must have a `version` property.");
|
3725
|
+
$.ui.fancytree._extensions[definition.name] = definition;
|
3686
3726
|
},
|
3687
3727
|
warn: function(msg){
|
3688
3728
|
consoleApply("warn", arguments);
|