").attr("id",b).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(b){a.isArray(b)&&(b.length?b.length===this.anchors.length&&(b=!0):b=!1);for(var c,d=0;c=this.tabs[d];d++)b===!0||-1!==a.inArray(d,b)?a(c).addClass("ui-state-disabled").attr("aria-disabled","true"):a(c).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=b},_setupEvents:function(b){var c={click:function(a){a.preventDefault()}};b&&a.each(b.split(" "),function(a,b){c[b]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,c),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(b){var c,d=this.element.parent();"fill"===b?(c=d.height(),c-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var b=a(this),d=b.css("position");"absolute"!==d&&"fixed"!==d&&(c-=b.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){c-=a(this).outerHeight(!0)}),this.panels.each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")):"auto"===b&&(c=0,this.panels.each(function(){c=Math.max(c,a(this).height("").height())}).height(c))},_eventHandler:function(b){var c=this.options,d=this.active,e=a(b.currentTarget),f=e.closest("li"),g=f[0]===d[0],h=g&&c.collapsible,i=h?a():this._getPanelForTab(f),j=d.length?this._getPanelForTab(d):a(),k={oldTab:d,oldPanel:j,newTab:h?a():f,newPanel:i};b.preventDefault(),f.hasClass("ui-state-disabled")||f.hasClass("ui-tabs-loading")||this.running||g&&!c.collapsible||this._trigger("beforeActivate",b,k)===!1||(c.active=h?!1:this.tabs.index(f),this.active=g?a():f,this.xhr&&this.xhr.abort(),j.length||i.length||a.error("jQuery UI Tabs: Mismatching fragment identifier."),i.length&&this.load(this.tabs.index(f),b),this._toggle(b,k))
-},_toggle:function(b,c){function d(){f.running=!1,f._trigger("activate",b,c)}function e(){c.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),g.length&&f.options.show?f._show(g,f.options.show,d):(g.show(),d())}var f=this,g=c.newPanel,h=c.oldPanel;this.running=!0,h.length&&this.options.hide?this._hide(h,this.options.hide,function(){c.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),e()}):(c.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),h.hide(),e()),h.attr({"aria-expanded":"false","aria-hidden":"true"}),c.oldTab.attr("aria-selected","false"),g.length&&h.length?c.oldTab.attr("tabIndex",-1):g.length&&this.tabs.filter(function(){return 0===a(this).attr("tabIndex")}).attr("tabIndex",-1),g.attr({"aria-expanded":"true","aria-hidden":"false"}),c.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(b){var c,d=this._findActive(b);d[0]!==this.active[0]&&(d.length||(d=this.active),c=d.find(".ui-tabs-anchor")[0],this._eventHandler({target:c,currentTarget:c,preventDefault:a.noop}))},_findActive:function(b){return b===!1?a():this.tabs.eq(b)},_getIndex:function(a){return"string"==typeof a&&(a=this.anchors.index(this.anchors.filter("[href$='"+a+"']"))),a},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){a.data(this,"ui-tabs-destroy")?a(this).remove():a(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var b=a(this),c=b.data("ui-tabs-aria-controls");c?b.attr("aria-controls",c).removeData("ui-tabs-aria-controls"):b.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(c){var d=this.options.disabled;d!==!1&&(c===b?d=!1:(c=this._getIndex(c),d=a.isArray(d)?a.map(d,function(a){return a!==c?a:null}):a.map(this.tabs,function(a,b){return b!==c?b:null})),this._setupDisabled(d))},disable:function(c){var d=this.options.disabled;if(d!==!0){if(c===b)d=!0;else{if(c=this._getIndex(c),-1!==a.inArray(c,d))return;d=a.isArray(d)?a.merge([c],d).sort():[c]}this._setupDisabled(d)}},load:function(b,c){b=this._getIndex(b);var e=this,f=this.tabs.eq(b),g=f.find(".ui-tabs-anchor"),h=this._getPanelForTab(f),i={tab:f,panel:h};d(g[0])||(this.xhr=a.ajax(this._ajaxSettings(g,c,i)),this.xhr&&"canceled"!==this.xhr.statusText&&(f.addClass("ui-tabs-loading"),h.attr("aria-busy","true"),this.xhr.success(function(a){setTimeout(function(){h.html(a),e._trigger("load",c,i)},1)}).complete(function(a,b){setTimeout(function(){"abort"===b&&e.panels.stop(!1,!0),f.removeClass("ui-tabs-loading"),h.removeAttr("aria-busy"),a===e.xhr&&delete e.xhr},1)})))},_ajaxSettings:function(b,c,d){var e=this;return{url:b.attr("href"),beforeSend:function(b,f){return e._trigger("beforeLoad",c,a.extend({jqXHR:b,ajaxSettings:f},d))}}},_getPanelForTab:function(b){var c=a(b).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+c))}})}(a),function(){}(a),function(a,b){function c(a){e=a.originalEvent,i=e.accelerationIncludingGravity,f=Math.abs(i.x),g=Math.abs(i.y),h=Math.abs(i.z),!b.orientation&&(f>7||(h>6&&8>g||8>h&&g>6)&&f>5)?d.enabled&&d.disable():d.enabled||d.enable()}a.mobile.iosorientationfixEnabled=!0;var d,e,f,g,h,i,j=navigator.userAgent;return/iPhone|iPad|iPod/.test(navigator.platform)&&/OS [1-5]_[0-9_]* like Mac OS X/i.test(j)&&j.indexOf("AppleWebKit")>-1?(d=a.mobile.zoom,void a.mobile.document.on("mobileinit",function(){a.mobile.iosorientationfixEnabled&&a.mobile.window.bind("orientationchange.iosorientationfix",d.enable).bind("devicemotion.iosorientationfix",c)})):void(a.mobile.iosorientationfixEnabled=!1)}(a,this),function(a,b,d){function e(){f.removeClass("ui-mobile-rendering")}var f=a("html"),g=a.mobile.window;a(b.document).trigger("mobileinit"),a.mobile.gradeA()&&(a.mobile.ajaxBlacklist&&(a.mobile.ajaxEnabled=!1),f.addClass("ui-mobile ui-mobile-rendering"),setTimeout(e,5e3),a.extend(a.mobile,{initializePage:function(){var b=a.mobile.path,f=a(":jqmData(role='page'), :jqmData(role='dialog')"),h=b.stripHash(b.stripQueryParams(b.parseLocation().hash)),i=a.mobile.path.parseLocation(),j=h?c.getElementById(h):d;f.length||(f=a("body").wrapInner("
").children(0)),f.each(function(){var c=a(this);c[0].getAttribute("data-"+a.mobile.ns+"url")||c.attr("data-"+a.mobile.ns+"url",c.attr("id")||b.convertUrlToDataUrl(i.pathname+i.search))}),a.mobile.firstPage=f.first(),a.mobile.pageContainer=a.mobile.firstPage.parent().addClass("ui-mobile-viewport").pagecontainer(),a.mobile.navreadyDeferred.resolve(),g.trigger("pagecontainercreate"),a.mobile.loading("show"),e(),a.mobile.hashListeningEnabled&&a.mobile.path.isHashValid(location.hash)&&(a(j).is(":jqmData(role='page')")||a.mobile.path.isPath(h)||h===a.mobile.dialogHashKey)?a.event.special.navigate.isPushStateEnabled()?(a.mobile.navigate.history.stack=[],a.mobile.navigate(a.mobile.path.isPath(location.hash)?location.hash:location.href)):g.trigger("hashchange",[!0]):(a.event.special.navigate.isPushStateEnabled()&&a.mobile.navigate.navigator.squash(b.parseLocation().href),a.mobile.changePage(a.mobile.firstPage,{transition:"none",reverse:!0,changeHash:!1,fromHashChange:!0}))}}),a(function(){a.support.inlineSVG(),a.mobile.hideUrlBar&&b.scrollTo(0,1),a.mobile.defaultHomeScroll=a.support.scrollTop&&1!==a.mobile.window.scrollTop()?1:0,a.mobile.autoInitializePage&&a.mobile.initializePage(),a.mobile.hideUrlBar&&g.load(a.mobile.silentScroll),a.support.cssPointerEvents||a.mobile.document.delegate(".ui-state-disabled,.ui-disabled","vclick",function(a){a.preventDefault(),a.stopImmediatePropagation()})}))}(a,this)});
-//# sourceMappingURL=jquery.mobile-1.4.4.min.map
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jquerymobile-1.4.4/jquery.mobile-1.4.4.min.map b/dashboard-ui/thirdparty/jquerymobile-1.4.4/jquery.mobile-1.4.4.min.map
deleted file mode 100644
index 5f1863061..000000000
--- a/dashboard-ui/thirdparty/jquerymobile-1.4.4/jquery.mobile-1.4.4.min.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"jquery.mobile-1.4.4.min.js","sources":["jquery.mobile-1.4.4.js"],"names":["root","doc","factory","define","amd","$","mobile","jQuery","this","document","window","extend","version","subPageUrlKey","hideUrlBar","keepNative","activePageClass","activeBtnClass","focusClass","ajaxEnabled","hashListeningEnabled","linkBindingEnabled","defaultPageTransition","maxTransitionWidth","minScrollBack","defaultDialogTransition","pageLoadErrorMessage","pageLoadErrorMessageTheme","phonegapNavigationEnabled","autoInitializePage","pushStateEnabled","ignoreContentEnabled","buttonMarkup","hoverDelay","dynamicBaseEnabled","pageContainer","allowCrossDomainPages","dialogHashKey","undefined","nsNormalizeDict","oldFind","find","rbrace","jqmDataRE","ns","getAttribute","element","key","data","jquery","test","JSON","parse","err","nsNormalize","prop","camelCase","closestPageData","$target","closest","fn","jqmData","value","result","arguments","length","elem","jqmRemoveData","removeData","selector","context","ret","extra","indexOf","replace","call","focusable","isTabIndexNotNaN","map","mapName","img","nodeName","toLowerCase","parentNode","name","href","visible","disabled","expr","filters","parents","addBack","filter","css","uuid","runiqueId","ui","keyCode","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","focus","orig","delay","each","setTimeout","apply","scrollParent","ie","eq","ownerDocument","uniqueId","id","removeUniqueId","removeAttr","createPseudo","dataName","i","match","isNaN","attr","tabbable","tabIndex","isTabIndexNaN","outerWidth","reduce","size","border","margin","side","parseFloat","type","innerWidth","innerHeight","outerHeight","add","prevObject","exec","navigator","userAgent","support","selectstart","createElement","disableSelection","bind","event","preventDefault","enableSelection","unbind","zIndex","position","parseInt","parent","plugin","module","option","set","proto","prototype","plugins","push","instance","args","allowDisconnected","nodeType","options","compensateToolbars","page","desiredHeight","pageParent","toolbarsAffectingHeight","externalHeaders","children","internalHeaders","externalFooters","internalFooters","concat","toArray","index","Math","max","behaviors","silentScroll","ypos","defaultHomeScroll","special","scrollstart","enabled","scrollTo","trigger","x","y","getClosestBaseUrl","ele","url","base","path","documentBase","hrefNoHash","isPath","makeUrlAbsolute","removeActiveLinkClass","forceRemoval","activeClickedLink","removeClass","getInheritedTheme","el","defaultTheme","c","m","e","ltr","re","className","enhanceable","elements","haveParents","hijackable","$element","excluded","count","$newSet","getScreenHeight","height","resetActivePageHeight","pageHeight","pageOuterHeight","loading","loader","_widget","defaultHtml","returnValue","addDependents","newDependents","$elem","dependents","removeWithDependents","enhanceWithin","widgetElements","keepNativeSelector","that","nojs","links","degradeInputsWithin","initSelector","not","jqmEnhanceable","fieldcontain","widgets","constructor","widgetName","getEncodedText","text","html","jqmHijackable","nativeElement","remove","matches","matchesSelector","node","slice","Array","_cleanData","cleanData","elems","triggerHandler","widget","fullName","existingConstructor","basePrototype","proxiedPrototype","namespace","split","Widget","_createWidget","_proto","_childConstructors","isFunction","_super","_superApply","__super","__superApply","widgetEventPrefix","widgetFullName","child","childPrototype","bridge","target","input","inputIndex","inputLength","hasOwnProperty","isPlainObject","object","isMethodCall","methodValue","charAt","pushStack","get","error","_init","defaultElement","create","eventNamespace","_getCreateOptions","bindings","hoverable","_on","destroy","style","defaultView","parentWindow","_create","_trigger","_getCreateEventData","noop","_destroy","parts","curOption","shift","pop","_setOptions","_setOption","toggleClass","enable","disable","suppressDisabledCheck","handlers","delegateElement","handler","handlerProxy","hasClass","guid","eventName","delegate","_off","join","undelegate","_delay","_hoverable","mouseenter","currentTarget","addClass","mouseleave","_focusable","focusin","focusout","callback","Event","originalEvent","isDefaultPrevented","show","hide","method","defaultEffect","effect","hasOptions","effectName","duration","isEmptyObject","complete","effects","easing","queue","next","rcapitals","replaceFunction","loaderClass","$html","theme","textVisible","fakeFixLoader","activeBtn","first","top","scrollTop","offset","checkLoaderPosition","screenHeight","proxy","resetHtml","msgText","textonly","message","loadSettings","appendTo","get_fragment","location","fake_onhashchange","str_hashchange","doc_mode","documentMode","supports_onhashchange","setup","start","teardown","stop","poll","hash","history_hash","history_get","last_hash","history_set","timeout_id","self","fn_retval","val","clearTimeout","attachEvent","addEventListener","iframe","iframe_src","src","one","insertAfter","contentWindow","onpropertychange","propertyName","title","iframe_doc","domain","open","write","close","matchMedia","bool","docElem","documentElement","refNode","firstElementChild","firstChild","fakeBody","div","cssText","background","appendChild","q","innerHTML","insertBefore","offsetWidth","removeChild","media","touch","orientation","propExists","v","uc_prop","toUpperCase","substr","props","vendors","fbCSS","inlineSVG","w","svg","createElementNS","createSVGRect","opera","Image","onerror","onload","width","transform3dTest","transforms","t","mqProp","MozTransform","transform","append","getComputedStyle","getPropertyValue","baseTagTest","link","rebase","fauxBase","protocol","host","pathname","fauxEle","prependTo","cssPointerEventsTest","supports","pointerEvents","boundingRect","getBoundingClientRect","fixedPosition","ua","platform","wkmatch","wkversion","ffmatch","ffversion","operammobilematch","omversion","operamini","toString","nokiaLTE7_3","webos","bb","blackberry","browser","oldIE","a","all","pushState","history","search","mediaquery","cssPseudoElement","touchOverflow","cssTransform3d","boxShadow","dynamicBaseTag","cssPointerEvents","gradeA","ajaxBlacklist","WebKitPoint","$win","dummyFnToInitNavigate","beforenavigate","on","off","navigate","bound","originalEventName","isPushStateEnabled","isHashChangeEnabled","popstate","newEvent","beforeNavigate","state","historyState","hashchange","hashchangeState","$base","uiStateKey","urlParseRE","getLocation","parsedUrl","parseUrl","uri","doubleSlash","substring","getDocumentUrl","asParsedObject","documentUrl","parseLocation","hrefNoSearch","authority","username","password","hostname","port","directory","filename","makePathAbsolute","relPath","absPath","absStack","relStack","d","isSameDomain","absUrl1","absUrl2","isRelativeUrl","isAbsoluteUrl","relUrl","absUrl","relObj","absObj","hasPath","addSearchParams","params","u","p","param","s","convertUrlToDataUrl","isEmbeddedPage","decodeURIComponent","newPath","stripHash","clean","stripQueryParams","cleanHash","isHashValid","isExternal","hasProtocol","documentBaseDiffers","squash","resolutionUrl","cleanedUrl","stateIndex","docUrl","preservedHash","uiState","isPreservableHash","hashToSelector","hasHash","getFilePath","isFirstPageUrl","samePath","fp","firstPage","fpId","isPermittedCrossDomainRequest","reqUrl","getDocumentBase","History","stack","activeIndex","getActive","getLast","previousIndex","getNext","getPrev","clearForward","earlyReturn","entry","direct","opts","newActiveIndex","present","back","forward","missing","initialHref","Navigator","ignoreInitialHashChange","popstate.history","hashchange.history","replaceState","parsed","loc","resolved","go","noEvents","popstateEvent","isPopStateEvent","preventNextHashChange","preventHashAssignPopState","ignorePopState","stopImmediatePropagation","historyEntry","direction","animation","transition","testElement","vendorPrefixes","testName","j","prefix","cssTransitions","cssAnimations","animationComplete","fallbackTime","timer","eventBinding","animationType","defaultDuration","getNativeEvent","createVirtualEvent","eventType","oe","ne","ct","len","mouseEventProps","which","touches","changedTouches","touchEventProps","getVirtualBindingFlags","b","k","flags","dataPropertyName","hasVirtualBinding","getClosestElementWithVirtualBinding","enableTouchBindings","blockTouchTriggers","disableTouchBindings","enableMouseBindings","lastTouchID","clickBlockList","blockMouseTriggers","disableMouseBindings","startResetTimer","clearResetTimer","resetTimerID","vmouse","resetTimerDuration","triggerVirtualEvent","ve","mouseEventCallback","touchID","touchTargetPropertyName","isPropagationStopped","stopPropagation","isImmediatePropagationStopped","handleTouchStart","nextTouchID","didScroll","startX","pageX","startY","pageY","handleScroll","handleTouchMove","didCancel","moveThreshold","moveDistanceThreshold","abs","handleTouchEnd","clientX","clientY","hasVirtualBindings","dummyMouseHandler","getSpecialEventObject","realType","activeDocHandlers","$document","eventCaptureSupported","$this","threshold","virtualEventNames","mouseHookProps","mouseHooks","clickDistanceThreshold","o","cnt","triggerCustomEvent","obj","bubble","originalType","dispatch","supportTouch","scrollEvent","touchStartEvent","touchStopEvent","touchMoveEvent","attrFn","scrolling","thisObject","tap","tapholdThreshold","emitTapOnTaphold","isTaphold","clearTapTimer","clearTapHandlers","clickHandler","origTarget","swipe","scrollSupressionThreshold","durationThreshold","horizontalDistanceThreshold","verticalDistanceThreshold","winPageX","pageXOffset","winPageY","pageYOffset","floor","time","Date","getTime","coords","origin","handleSwipe","swipestart","swipestop","eventInProgress","events","emitted","move","scrollstop","taphold","swipeleft","swiperight","sourceEvent","throttledresize","heldCall","curr","diff","throttle","lastCall","get_orientation","last_orientation","win","event_name","initial_orientation_is_landscape","initial_orientation_is_default","ww","wh","landscape_threshold","portrait_map","0","180","-90","90","orientationchange","handleObj","old_handler","isPortrait","clientWidth","clientHeight","baseElement","linkSelector","rewrite","thisAttr","is","theLocation","thisUrl","reset","originalWidget","keepNativeFactoryDefault","domCache","keepNativeDefault","contentTheme","enhanced","_enhance","pagebeforehide","pagebeforeshow","dialog","attrPrefix","role","bindRemove","samePage","prEvent","_handlePageBeforeShow","setContainerBackground","removeContainerBackground","pagecontainer","trim","globalValue","optionValue","newDefault","oldDefault","setLastScrollEnabled","pagechange","_disableRecordScroll","_enableRecordScroll","_afterContentChange","_recordScroll","currentScroll","minScroll","defaultScroll","active","_getActiveHistory","_getScroll","_getMinScroll","_getDefaultScroll","lastScroll","_delayedRecordScroll","_filterNavigateEvents","_getHash","_handleNavigate","getActivePage","activePage","_getInitialContent","_getHistory","_getDocumentBase","steps","change","changeHash","fromHashChange","_handleDestination","to","_transitionFromHistory","defaultTransition","_handleDialog","changePageOptions","activeContent","pageUrl","reverse","_changeContent","changePage","_getBase","_getNs","content","_include","settings","_find","fileUrl","_createFileUrl","dataUrl","_createDataUrl","initialContent","_getLoader","_showLoading","msg","_loadMsg","_hideLoading","_showError","_parse","_setLoadedTitle","newPageTitle","RegExp","$1","_isRewritableBaseTag","absoluteUrl","_triggerWithDeprecated","deprecatedEvent","_loadSuccess","triggerData","deferred","textStatus","xhr","pageElemRegex","dataUrlRegex","encodeURIComponent","prefetch","toPage","showLoadMsg","resolve","_loadDefaults","reloadPage","reload","loadMsgDelay","load","pblEvent","Deferred","_findBaseWithDefault","reject","promise","prevPage","fromPage","ajax","contentType","dataType","success","_loadError","errorThrown","plfEvent","_getTransitionHandler","_maybeDegradeTransition","transitionHandlers","defaultTransitionHandler","_triggerCssTransitionEvents","from","nextPage","_cssTransition","TransitionHandler","done","_releaseTransitionLock","isPageTransitioning","pageTransitionQueue","_removeActiveLinkClass","force","_loadUrl","fail","_triggerPageBeforeChange","returnEvents","unshift","defaults","activeIsInitialPage","historyDir","pageTitle","isDialog","alreadyThere","cssTransitionDeferred","beforeTransition","allowSamePageTransition","activeElement","blur","encodeURI","$to","$from","alreadyFocused","duplicateCachedPage","focusPage","closestBase","navreadyDeferred","findClosestLink","domreadyDeferred","loadDeferred","pageIsFullyLoaded","$lastVClicked","loadPage","container","nav","app","backHistory","autofocus","_registerInternalEvents","getAjaxFormData","$form","calculateOnly","formData","vclickedName","serializeArray","form","$btn","btnEls","needClosest","outer","baseUrl","useDefaultUrlHandling","$link","httpCleanup","urls","inArray","readyState","when","Transition","init","toPreClass","cleanFrom","beforeDoneIn","beforeDoneOut","beforeStartOut","doneIn","toggleViewportClass","toScroll","scrollPage","sequential","doneOut","reverseClass","none","preventFocus","startIn","hideIn","startOut","maxTransitionOverride","getMaxScrollForTransition","SerialTransition","ConcurrentTransition","defaultGetMaxScrollForTransition","simultaneous","transitionFallbacks","flip","flow","slide","slidedown","slidefade","slideup","turn","degradeInputs","color","date","datetime","datetime-local","email","month","number","range","tel","week","hasType","findstr","repstr","optType","clone","replaceWith","closeBtn","closeBtnText","overlayTheme","corners","_inner","_headerCloseButton","_setCloseBtn","wrapInner","class","closeButtonLocation","closeButtonText","currentOpts","dst","btn","_isCloseable","_handlePageBeforeHide","_handleVClickSubmit","attrs","vclick","submit","click","hist","rInitialLetter","iconposClass","iconpos","expandCueText","collapseCueText","collapsed","heading","collapsedIcon","expandedIcon","inset","mini","accordion","collapsibleset","_ui","_renderedOptions","_getOptions","anchor","status","_handleExpandCollapse","accordionWidget","collapsible","_themeClassFromOption","iconclass","contentThemeClass","originalHeading","placeholder","detach","refresh","_applyOptions","isCollapsed","newTheme","oldTheme","hasCorners","hasIcon","isCollapse","expand","collapse","contents","unwrap","noHiddenClass","uiScreenHiddenRegex","addFirstLastClasses","_getVisibles","$els","visibles","_addFirstLastClasses","$visibles","end","last","_removeFirstLastClasses","childCollapsiblesSelector","_handleCollapsibleExpand","closestCollapsible","siblings","_classes","collapsibleexpand","_refresh","themeClass","collapsiblesInSet","grid","iterator","letter","$kids","gridCols","solo","$navbar","$navbtns","icon","classes","getAttr","countTheme","dividerTheme","splitIcon","splitTheme","shadow","listviewClasses","_findFirstElementByTagName","nextProp","lcName","ucName","dict","_addThumbClasses","containers","_getChildrenByTagName","results","nextSibling","_beforeListviewRefresh","_afterListviewRefresh","buttonClass","pos","numli","item","itemClass","itemTheme","itemIcon","isDivider","startCount","newStartCount","splittheme","splitThemeClass","spliticon","altButtonClass","li","$list","ol","itemClassDict","countBubbles","countThemeClass","empty","defaultAutodividersSelector","elt","listview","autodividers","autodividersSelector","_replaceDividers","lis","dividerText","divider","lastDividerText","list","createTextNode","setAttribute","rdivider","rhidden","hideDividers","items","idx","hideDivider","formReset","_handleFormReset","escapeId","wrapperClass","inheritAttr","dataAttr","label","isParent","_findLabel","inputtype","checkedClass","uncheckedClass","labelIsParent","vmouseover","vmousedown","parentLabel","labelsList","labels","contains","getElementsByTagName","wrapAll","_wrapper","wrap","prepend","_handleInputFocus","_handleInputBlur","_handleInputVClick","_getInputSet","_updateAll","_handleLabelVMouseOver","_handleLabelVClick","_cacheVals","checked","formId","radio","radios","changeTriggered","checkboxradio","_reset","_hasIcon","controlgroup","controlgroupWidget","controlgroupConstructor","isChecked","addClasses","removeClasses","currentOptions","iconshadow","inline","wrapper","_button","iconClasses","_getIconClasses","originalElement","isDisabled","meta","disabledZoom","enabledZoom","disabledInitially","zoom","locked","lock","unlock","restore","preventFocusZoom","isSearch","isTextarea","tagName","isRange","inputNeedsWrap","_classesFromOptions","_autoCorrect","setOptions","elementClasses","_wrap","autocorrect","_handleBlur","_handleFocus","trackTheme","highlight","optionsCount","origTabIndex","activeClass","sliderImg","control","trackThemeClass","cornerClass","miniClass","cType","isToggleSwitch","isRangeslider","selectClass","controlID","$label","labelID","min","step","domHandle","handle","domSlider","slider","valuebg","bg","aria-valuemin","aria-valuemax","aria-valuenow","_value","aria-valuetext","aria-labelledby","dragging","beforeStart","userModified","mouseMoved","childNodes","_labels","keyup","vmouseup","_sliderVMouseDown","vmousemove","keydown","_setTheme","_setTrackTheme","_setCorners","_setMini","_setHighlight","_setDisabled","_controlChange","_controlKeyup","_controlBlur","_controlVMouseUp","_checkedRefresh","_handleVMouseDown","_handleKeydown","_keySliding","_handleKeyup","selectedIndex","_sliderVMouseUp","_preventDocumentDrag","isfromControl","preventInputUpdate","left","tol","pxStep","percent","isInput","optionElements","newval","valModStep","alignValue","percentPerStep","handlePercent","aPercent","bPercent","valueChanged","parentTheme","round","toFixed","ab","currentTheme","currentTrackTheme","newTrackTheme","getPopup","popup","popupEnabled","showValue","_currentValue","_popup","_popupVisible","_positionPopup","dstOffset","newValue","_showPopup","_hidePopup","onText","offText","flipswitch","_originalTabIndex","_left","_right","after","existingDirection","_toggle","_keydown","$el","elClass","_inputFirst","_inputLast","_label","_sliderWidgetFirst","_sliderWidgetLast","_sliderFirst","_sliderLast","firstHandle","_sliders","_targetVal","_sliderTarget","_proxy","slidebeforestart","slidestop","slidedrag","slidebeforechange","mousedown","_handleReset","_updateHighlight","_dragFirstHandle","_slidedrag","otherSlider","_slidestop","_slidebeforestart","_change","thisSlider","margin-left","textinput","clearBtn","clearBtnText","_addClearBtn","clearButton","_clearBtnClick","_clearBtn","_enhanceClear","_bindClearEvents","_toggleClear","cut","paste","_unbindClear","_destroyClear","_toggleClearClass","autogrow","keyupTimeoutBuffer","_autogrow","pageshow","popupbeforeposition","updatelayout","panelopen","_handleShow","_prepareHeightUpdate","_unbindAutogrow","keyupTimeout","_updateHeight","_timeout","paddingTop","paddingBottom","paddingHeight","scrollHeight","borderTop","borderBottom","borderHeight","min-height","max-height","hidePlaceholderMenuItems","closeText","nativeMenu","button","_focusButton","_selectOptions","select","_preExtension","selectId","buttonId","isMultiple","multiple","setButtonText","buttonCount","build","selected","selectedIndices","span","setButtonCount","_refreshButton","idref","fitSegmentInsideSegment","windowSize","segmentSize","desired","getWindowCoordinates","theWindow","scrollLeft","cx","cy","positionTo","tolerance","closeLinkSelector","closeLinkEvents","navigateEvents","closeEvents","dismissible","_handleDocumentVmousedown","theEvent","_isOpen","_ignoreResizeEvents","theElement","myId","_scrollTop","_page","_fallbackTransition","_currentTransition","_prerequisites","_tolerance","_resizeData","_ignoreResizeTo","_orientationchangeInProgress","screen","prev","getElementById","_applyTransition","_setTolerance","focusElement","resize","fragment","createDocumentFragment","_eatEventAndClose","_resizeScreen","popupHeight","documentHeight","_handleWindowKeyUp","_expectResizeEvent","windowCoordinates","timeoutId","_resizeTimeout","reposition","_stopIgnoringResizeEvents","_handleWindowResize","_handleWindowOrientationchange","_handleDocumentFocusIn","targetElement","newOptions","ar","r","l","String","_clampPopupWidth","infoOnly","menuSize","rectangle","rc","_calculateFinalLocation","clampInfo","_placementCoords","_createPrerequisites","screenPrerequisite","containerPrerequisite","whenDone","prerequisites","then","_animate","classToRemove","screenClassToAdd","applyTransition","containerClassToAdd","_desiredCoords","openOptions","pTo","_reposition","_openPrerequisitesComplete","_open","androidBlacklist","androidmatch","andversion","chromematch","additionalCondition","_closePrerequisiteScreen","_closePrerequisiteContainer","_closePrerequisitesDone","_close","immediate","_unenhance","_closePopup","parsedDst","toUrl","_myUrl","_bindContainerClose","hashkey","currentIsDialog","urlHistory","urlAltered","handleLink","unfocusableItemSelector","goToAdjacentItem","adjacent","selectmenu","_handleSelectFocus","_handleButtonVclickKeydown","isOpen","_decideFormat","menuType","popupId","dialogId","_handleListFocus","tabindex","_handleListKeydown","_handleMenuPageHide","_delayedTrigger","thisPage","_handleHeaderCloseClick","_handleListItemClick","listItem","oldIndex","newIndex","_triggerChange","menuId","themeAttr","overlayThemeAttr","dividerThemeAttr","menuPage","listbox","header","headerTitle","menuPageContent","menuPageClose","headerClose","_origTabIndex","click li:not(.ui-disabled,.ui-state-disabled,.ui-li-divider)","pagehide","popupafterclose","_popupClosed","_isRebuildRequired","indices","_buildList","_focusMenuItem","$window","selfListParent","menuHeight","btnOffset","popupafteropen","$options","numOptions","optGroup","$option","optLabel","needPlaceholder","dataIcon","dataPrefix","dataIndexAttr","dataIconAttr","dataRoleAttr","dataPlaceholderAttr","isPlaceholderItem","_removePlaceholderAttr","aria-haspopup","aria-owns","optionsToClasses","existingClasses","classNameToOptions","unknownClass","alreadyEnhanced","noIcon","unknownClasses","reverseBoolOptionMap","camelCase2Hyphenated","ui-shadow","ui-corner-all","ui-btn-inline","ui-shadow-icon","ui-mini","getAttrFixed","capitalLettersRE","overwriteClasses","retrievedOptions","optionKey","excludeInvisible","_childWidgets","_initialRefresh","groupLegend","childWrapper","callRefresh","els","buttons","addBackBtn","backBtnTheme","backBtnText","leftbtn","rightbtn","_updateBackButton","_addHeaderButtonClasses","_setRelative","_addHeadingClasses","_btnMarkup","headerAnchors","backButton","_backButton","attached","aria-level","toolbar","visibleOnPageShow","disablePageZoom","fullscreen","tapToggle","tapToggleBlacklist","hideDuringFocus","updatePagePadding","trackPersistentToolbars","supportBlacklist","_makeFixed","_addTransitionClass","_bindPageEvents","_bindToggleHandlers","$page","tclass","webkitAnimationStart","animationstart","_handleAnimationStart","_handlePageShow","thisFooter","thisHeader","nextFooter","nextHeader","_visible","tbPage","_useTransition","notransition","scroll","elHeight","pHeight","viewportHeight","hideClass","outclass","toggle","delayShow","delayHide","isVisible","pageClasses","toolbarClasses","hasFixed","hasFullscreen","_workarounds","os","_bindScrollWorkaround","_bindListThumbWorkaround","_viewportOffset","viewportOffset","_triggerRedraw","getArrow","uiTemplate","gd","arEls","ieHack","arrow","_addArrow","_tryAnArrow","dir","best","desiredForArrow","tip","arFull","dimKey","guideDims","fst","arHalf","oDimKey","menuHalf","offsetFactor","contentBox","arrowOffsetFactor","snd","tipOffset","guideOffset","posProp","posVal","_getPlacementState","clamp","gdOffset","right","bottom","elOffset","bgRef","panel","panelOpen","panelClosed","panelFixed","panelInner","modal","modalOpen","pageWrapper","pageFixedToolbar","pageContentPrefix","animate","display","swipeClose","positionFixed","_closeLink","_parentPage","_modal","_panelInner","_fixedToolbars","parentPage","_openedPage","_getPage","_getPanelInner","_getFixedToolbars","_getWrapper","_addPanelClasses","_bindUpdateLayout","_bindCloseEvents","_bindLinkListeners","_createModal","_bindSwipeEvents","extFixedToolbars","intFixedToolbars","fixedToolbars","_getPosDisplayClasses","_getPanelClasses","panelClasses","_handleCloseClick","click a:jqmData(ajax='false')","_positionPanel","scrollToTop","panelInnerHeight","_unfixPanel","_fixPanel","_bindFixListener","_unbindFixListener","click a","_handleClick","panelId","area","_pageContentOpenClasses","_modalOpenClasses","_openPanel","panelclose","_closePanel","otherPanels","multiplePanels","table","headers","allHeaders","_setHeaders","trs","rebuild","columnCount","mode","columnBtnTheme","columnPopupTheme","columnBtnText","columnBtn","priorityPrefix","columnToggleTable","_menu","_id","_addToggles","_enhanceColToggle","_setupEvents","_setToggleState","change input","menu","keep","inputs","checkboxIndex","cells","priority","_menuInputChange","evt","_unlockCells","menuButton","before","hiddenColumns","checkbox","reflowTable","cellLabels","_updateReflow","iteration","colstart","hierarchyClass","_addLabels","defaultFilterCallback","searchValue","filterReveal","filterCallback","_search","_timer","_setInput","_filterItems","_onKeyUp","lastval","_getFilterableItems","filterItems","_refreshChildWidget","recognizedWidgets","keypress","_onKeyDown","_preventKeyPress","_onKeyPress","refilter","replaceSetOptions","_syncTextInputOptions","rDividerListItem","origDefaultFilterCallback","filterable","filterPlaceholder","filterTheme","createHandlers","_setWidget","_handleCreate","_isSearchInternal","updatePlaceholder","textinputOpts","_refreshingChildWidget","textinputOptions","getNextTabId","tabId","isLocal","rhash","heightStyle","activate","beforeActivate","beforeLoad","running","_processTabs","_initialActive","isArray","unique","tabs","sort","anchors","_findActive","locationHash","tab","_getPanelForTab","_tabKeydown","focusedTab","goingForward","_handlePageNav","activating","_activate","_focusNextTab","ctrlKey","_panelKeydown","altKey","_findNextTab","constrain","lastTabIndex","_setupDisabled","_setupHeightStyle","_tabId","_sanitizeSelector","tablist","aria-selected","panels","aria-expanded","aria-hidden","_getList","anchorId","originalAriaControls","_createPanel","aria-controls","maxHeight","_eventHandler","clickedIsActive","collapsing","toShow","toHide","eventData","oldTab","oldPanel","newTab","newPanel","abort","_show","_hide","_getIndex","num","merge","_ajaxSettings","statusText","response","jqXHR","beforeSend","ajaxSettings","checkTilt","aig","accelerationIncludingGravity","z","iosorientationfixEnabled","hideRenderingClass","initializePage","$pages","hashPage"],"mappings":"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"}
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree1.0/jquery.jstree.js b/dashboard-ui/thirdparty/jstree1.0/jquery.jstree.js
deleted file mode 100644
index c92c2acd6..000000000
--- a/dashboard-ui/thirdparty/jstree1.0/jquery.jstree.js
+++ /dev/null
@@ -1,4564 +0,0 @@
-/*
- * jsTree 1.0-rc3
- * http://jstree.com/
- *
- * Copyright (c) 2010 Ivan Bozhanov (vakata.com)
- *
- * Licensed same as jquery - under the terms of either the MIT License or the GPL Version 2 License
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- * $Date: 2011-02-09 01:17:14 +0200 (ср, 09 февр 2011) $
- * $Revision: 236 $
- */
-
-/*jslint browser: true, onevar: true, undef: true, bitwise: true, strict: true */
-/*global window : false, clearInterval: false, clearTimeout: false, document: false, setInterval: false, setTimeout: false, jQuery: false, navigator: false, XSLTProcessor: false, DOMParser: false, XMLSerializer: false, ActiveXObject: false */
-
-"use strict";
-
-// top wrapper to prevent multiple inclusion (is this OK?)
-(function () { if(jQuery && jQuery.jstree) { return; }
- var is_ie6 = false, is_ie7 = false, is_ff2 = false;
-
-/*
- * jsTree core
- */
-(function ($) {
- // Common functions not related to jsTree
- // decided to move them to a `vakata` "namespace"
- $.vakata = {};
- // CSS related functions
- $.vakata.css = {
- get_css : function(rule_name, delete_flag, sheet) {
- rule_name = rule_name.toLowerCase();
- var css_rules = sheet.cssRules || sheet.rules,
- j = 0;
- do {
- if(css_rules.length && j > css_rules.length + 5) { return false; }
- if(css_rules[j].selectorText && css_rules[j].selectorText.toLowerCase() == rule_name) {
- if(delete_flag === true) {
- if(sheet.removeRule) { sheet.removeRule(j); }
- if(sheet.deleteRule) { sheet.deleteRule(j); }
- return true;
- }
- else { return css_rules[j]; }
- }
- }
- while (css_rules[++j]);
- return false;
- },
- add_css : function(rule_name, sheet) {
- if($.jstree.css.get_css(rule_name, false, sheet)) { return false; }
- if(sheet.insertRule) { sheet.insertRule(rule_name + ' { }', 0); } else { sheet.addRule(rule_name, null, 0); }
- return $.vakata.css.get_css(rule_name);
- },
- remove_css : function(rule_name, sheet) {
- return $.vakata.css.get_css(rule_name, true, sheet);
- },
- add_sheet : function(opts) {
- var tmp = false, is_new = true;
- if(opts.str) {
- if(opts.title) { tmp = $("style[id='" + opts.title + "-stylesheet']")[0]; }
- if(tmp) { is_new = false; }
- else {
- tmp = document.createElement("style");
- tmp.setAttribute('type',"text/css");
- if(opts.title) { tmp.setAttribute("id", opts.title + "-stylesheet"); }
- }
- if(tmp.styleSheet) {
- if(is_new) {
- document.getElementsByTagName("head")[0].appendChild(tmp);
- tmp.styleSheet.cssText = opts.str;
- }
- else {
- tmp.styleSheet.cssText = tmp.styleSheet.cssText + " " + opts.str;
- }
- }
- else {
- tmp.appendChild(document.createTextNode(opts.str));
- document.getElementsByTagName("head")[0].appendChild(tmp);
- }
- return tmp.sheet || tmp.styleSheet;
- }
- if(opts.url) {
- if(document.createStyleSheet) {
- try { tmp = document.createStyleSheet(opts.url); } catch (e) { }
- }
- else {
- tmp = document.createElement('link');
- tmp.rel = 'stylesheet';
- tmp.type = 'text/css';
- tmp.media = "all";
- tmp.href = opts.url;
- document.getElementsByTagName("head")[0].appendChild(tmp);
- return tmp.styleSheet;
- }
- }
- }
- };
-
- // private variables
- var instances = [], // instance array (used by $.jstree.reference/create/focused)
- focused_instance = -1, // the index in the instance array of the currently focused instance
- plugins = {}, // list of included plugins
- prepared_move = {}; // for the move_node function
-
- // jQuery plugin wrapper (thanks to jquery UI widget function)
- $.fn.jstree = function (settings) {
- var isMethodCall = (typeof settings == 'string'), // is this a method call like $().jstree("open_node")
- args = Array.prototype.slice.call(arguments, 1),
- returnValue = this;
-
- // if a method call execute the method on all selected instances
- if(isMethodCall) {
- if(settings.substring(0, 1) == '_') { return returnValue; }
- this.each(function() {
- var instance = instances[$.data(this, "jstree_instance_id")],
- methodValue = (instance && $.isFunction(instance[settings])) ? instance[settings].apply(instance, args) : instance;
- if(typeof methodValue !== "undefined" && (settings.indexOf("is_") === 0 || (methodValue !== true && methodValue !== false))) { returnValue = methodValue; return false; }
- });
- }
- else {
- this.each(function() {
- // extend settings and allow for multiple hashes and $.data
- var instance_id = $.data(this, "jstree_instance_id"),
- a = [],
- b = settings ? $.extend({}, true, settings) : {},
- c = $(this),
- s = false,
- t = [];
- a = a.concat(args);
- if(c.data("jstree")) { a.push(c.data("jstree")); }
- b = a.length ? $.extend.apply(null, [true, b].concat(a)) : b;
-
- // if an instance already exists, destroy it first
- if(typeof instance_id !== "undefined" && instances[instance_id]) { instances[instance_id].destroy(); }
- // push a new empty object to the instances array
- instance_id = parseInt(instances.push({}),10) - 1;
- // store the jstree instance id to the container element
- $.data(this, "jstree_instance_id", instance_id);
- // clean up all plugins
- b.plugins = $.isArray(b.plugins) ? b.plugins : $.jstree.defaults.plugins.slice();
- b.plugins.unshift("core");
- // only unique plugins
- b.plugins = b.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");
-
- // extend defaults with passed data
- s = $.extend(true, {}, $.jstree.defaults, b);
- s.plugins = b.plugins;
- $.each(plugins, function (i, val) {
- if($.inArray(i, s.plugins) === -1) { s[i] = null; delete s[i]; }
- else { t.push(i); }
- });
- s.plugins = t;
-
- // push the new object to the instances array (at the same time set the default classes to the container) and init
- instances[instance_id] = new $.jstree._instance(instance_id, $(this).addClass("jstree jstree-" + instance_id), s);
- // init all activated plugins for this instance
- $.each(instances[instance_id]._get_settings().plugins, function (i, val) { instances[instance_id].data[val] = {}; });
- $.each(instances[instance_id]._get_settings().plugins, function (i, val) { if(plugins[val]) { plugins[val].__init.apply(instances[instance_id]); } });
- // initialize the instance
- setTimeout(function() { if(instances[instance_id]) { instances[instance_id].init(); } }, 0);
- });
- }
- // return the jquery selection (or if it was a method call that returned a value - the returned value)
- return returnValue;
- };
- // object to store exposed functions and objects
- $.jstree = {
- defaults : {
- plugins : []
- },
- _focused : function () { return instances[focused_instance] || null; },
- _reference : function (needle) {
- // get by instance id
- if(instances[needle]) { return instances[needle]; }
- // get by DOM (if still no luck - return null
- var o = $(needle);
- if(!o.length && typeof needle === "string") { o = $("#" + needle); }
- if(!o.length) { return null; }
- return instances[o.closest(".jstree").data("jstree_instance_id")] || null;
- },
- _instance : function (index, container, settings) {
- // for plugins to store data in
- this.data = { core : {} };
- this.get_settings = function () { return $.extend(true, {}, settings); };
- this._get_settings = function () { return settings; };
- this.get_index = function () { return index; };
- this.get_container = function () { return container; };
- this.get_container_ul = function () { return container.children("ul:eq(0)"); };
- this._set_settings = function (s) {
- settings = $.extend(true, {}, settings, s);
- };
- },
- _fn : { },
- plugin : function (pname, pdata) {
- pdata = $.extend({}, {
- __init : $.noop,
- __destroy : $.noop,
- _fn : {},
- defaults : false
- }, pdata);
- plugins[pname] = pdata;
-
- $.jstree.defaults[pname] = pdata.defaults;
- $.each(pdata._fn, function (i, val) {
- val.plugin = pname;
- val.old = $.jstree._fn[i];
- $.jstree._fn[i] = function () {
- var rslt,
- func = val,
- args = Array.prototype.slice.call(arguments),
- evnt = new $.Event("before.jstree"),
- rlbk = false;
-
- if(this.data.core.locked === true && i !== "unlock" && i !== "is_locked") { return; }
-
- // Check if function belongs to the included plugins of this instance
- do {
- if(func && func.plugin && $.inArray(func.plugin, this._get_settings().plugins) !== -1) { break; }
- func = func.old;
- } while(func);
- if(!func) { return; }
-
- // context and function to trigger events, then finally call the function
- if(i.indexOf("_") === 0) {
- rslt = func.apply(this, args);
- }
- else {
- rslt = this.get_container().triggerHandler(evnt, { "func" : i, "inst" : this, "args" : args, "plugin" : func.plugin });
- if(rslt === false) { return; }
- if(typeof rslt !== "undefined") { args = rslt; }
-
- rslt = func.apply(
- $.extend({}, this, {
- __callback : function (data) {
- this.get_container().triggerHandler( i + '.jstree', { "inst" : this, "args" : args, "rslt" : data, "rlbk" : rlbk });
- },
- __rollback : function () {
- rlbk = this.get_rollback();
- return rlbk;
- },
- __call_old : function (replace_arguments) {
- return func.old.apply(this, (replace_arguments ? Array.prototype.slice.call(arguments, 1) : args ) );
- }
- }), args);
- }
-
- // return the result
- return rslt;
- };
- $.jstree._fn[i].old = val.old;
- $.jstree._fn[i].plugin = pname;
- });
- },
- rollback : function (rb) {
- if(rb) {
- if(!$.isArray(rb)) { rb = [ rb ]; }
- $.each(rb, function (i, val) {
- instances[val.i].set_rollback(val.h, val.d);
- });
- }
- }
- };
- // set the prototype for all instances
- $.jstree._fn = $.jstree._instance.prototype = {};
-
- // load the css when DOM is ready
- $(function() {
- // code is copied from jQuery ($.browser is deprecated + there is a bug in IE)
- var u = navigator.userAgent.toLowerCase(),
- v = (u.match( /.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
- css_string = '' +
- '.jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } ' +
- '.jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; min-width:18px; } ' +
- '.jstree-rtl li { margin-left:0; margin-right:18px; } ' +
- '.jstree > ul > li { margin-left:0px; } ' +
- '.jstree-rtl > ul > li { margin-right:0px; } ' +
- '.jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } ' +
- '.jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } ' +
- '.jstree a:focus { outline: none; } ' +
- '.jstree a > ins { height:16px; width:16px; } ' +
- '.jstree a > .jstree-icon { margin-right:3px; } ' +
- '.jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } ' +
- 'li.jstree-open > ul { display:block; } ' +
- 'li.jstree-closed > ul { display:none; } ';
- // Correct IE 6 (does not support the > CSS selector)
- if(/msie/.test(u) && parseInt(v, 10) == 6) {
- is_ie6 = true;
-
- // fix image flicker and lack of caching
- try {
- document.execCommand("BackgroundImageCache", false, true);
- } catch (err) { }
-
- css_string += '' +
- '.jstree li { height:18px; margin-left:0; margin-right:0; } ' +
- '.jstree li li { margin-left:18px; } ' +
- '.jstree-rtl li li { margin-left:0px; margin-right:18px; } ' +
- 'li.jstree-open ul { display:block; } ' +
- 'li.jstree-closed ul { display:none !important; } ' +
- '.jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } ' +
- '.jstree li a ins { height:16px; width:16px; margin-right:3px; } ' +
- '.jstree-rtl li a ins { margin-right:0px; margin-left:3px; } ';
- }
- // Correct IE 7 (shifts anchor nodes onhover)
- if(/msie/.test(u) && parseInt(v, 10) == 7) {
- is_ie7 = true;
- css_string += '.jstree li a { border-width:0 !important; padding:0px 2px !important; } ';
- }
- // correct ff2 lack of display:inline-block
- if(!/compatible/.test(u) && /mozilla/.test(u) && parseFloat(v, 10) < 1.9) {
- is_ff2 = true;
- css_string += '' +
- '.jstree ins { display:-moz-inline-box; } ' +
- '.jstree li { line-height:12px; } ' + // WHY??
- '.jstree a { display:-moz-inline-box; } ' +
- '.jstree .jstree-no-icons .jstree-checkbox { display:-moz-inline-stack !important; } ';
- /* this shouldn't be here as it is theme specific */
- }
- // the default stylesheet
- $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
- });
-
- // core functions (open, close, create, update, delete)
- $.jstree.plugin("core", {
- __init : function () {
- this.data.core.locked = false;
- this.data.core.to_open = this.get_settings().core.initially_open;
- this.data.core.to_load = this.get_settings().core.initially_load;
- },
- defaults : {
- html_titles : false,
- animation : 500,
- initially_open : [],
- initially_load : [],
- open_parents : true,
- notify_plugins : true,
- rtl : false,
- load_open : false,
- strings : {
- loading : "Loading ...",
- new_node : "New node",
- multiple_selection : "Multiple selection"
- }
- },
- _fn : {
- init : function () {
- this.set_focus();
- if(this._get_settings().core.rtl) {
- this.get_container().addClass("jstree-rtl").css("direction", "rtl");
- }
- this.get_container().html("
");
- this.data.core.li_height = this.get_container_ul().find("li.jstree-closed, li.jstree-leaf").eq(0).height() || 18;
-
- this.get_container()
- .delegate("li > ins", "click.jstree", $.proxy(function (event) {
- var trgt = $(event.target);
- // if(trgt.is("ins") && event.pageY - trgt.offset().top < this.data.core.li_height) { this.toggle_node(trgt); }
- this.toggle_node(trgt);
- }, this))
- .bind("mousedown.jstree", $.proxy(function () {
- this.set_focus(); // This used to be setTimeout(set_focus,0) - why?
- }, this))
- .bind("dblclick.jstree", function (event) {
- var sel;
- if(document.selection && document.selection.empty) { document.selection.empty(); }
- else {
- if(window.getSelection) {
- sel = window.getSelection();
- try {
- sel.removeAllRanges();
- sel.collapse();
- } catch (err) { }
- }
- }
- });
- if(this._get_settings().core.notify_plugins) {
- this.get_container()
- .bind("load_node.jstree", $.proxy(function (e, data) {
- var o = this._get_node(data.rslt.obj),
- t = this;
- if(o === -1) { o = this.get_container_ul(); }
- if(!o.length) { return; }
- o.find("li").each(function () {
- var th = $(this);
- if(th.data("jstree")) {
- $.each(th.data("jstree"), function (plugin, values) {
- if(t.data[plugin] && $.isFunction(t["_" + plugin + "_notify"])) {
- t["_" + plugin + "_notify"].call(t, th, values);
- }
- });
- }
- });
- }, this));
- }
- if(this._get_settings().core.load_open) {
- this.get_container()
- .bind("load_node.jstree", $.proxy(function (e, data) {
- var o = this._get_node(data.rslt.obj),
- t = this;
- if(o === -1) { o = this.get_container_ul(); }
- if(!o.length) { return; }
- o.find("li.jstree-open:not(:has(ul))").each(function () {
- t.load_node(this, $.noop, $.noop);
- });
- }, this));
- }
- this.__callback();
- this.load_node(-1, function () { this.loaded(); this.reload_nodes(); });
- },
- destroy : function () {
- var i,
- n = this.get_index(),
- s = this._get_settings(),
- _this = this;
-
- $.each(s.plugins, function (i, val) {
- try { plugins[val].__destroy.apply(_this); } catch(err) { }
- });
- this.__callback();
- // set focus to another instance if this one is focused
- if(this.is_focused()) {
- for(i in instances) {
- if(instances.hasOwnProperty(i) && i != n) {
- instances[i].set_focus();
- break;
- }
- }
- }
- // if no other instance found
- if(n === focused_instance) { focused_instance = -1; }
- // remove all traces of jstree in the DOM (only the ones set using jstree*) and cleans all events
- this.get_container()
- .unbind(".jstree")
- .undelegate(".jstree")
- .removeData("jstree_instance_id")
- .find("[class^='jstree']")
- .addBack()
- .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
- $(document)
- .unbind(".jstree-" + n)
- .undelegate(".jstree-" + n);
- // remove the actual data
- instances[n] = null;
- delete instances[n];
- },
-
- _core_notify : function (n, data) {
- if(data.opened) {
- this.open_node(n, false, true);
- }
- },
-
- lock : function () {
- this.data.core.locked = true;
- this.get_container().children("ul").addClass("jstree-locked").css("opacity","0.7");
- this.__callback({});
- },
- unlock : function () {
- this.data.core.locked = false;
- this.get_container().children("ul").removeClass("jstree-locked").css("opacity","1");
- this.__callback({});
- },
- is_locked : function () { return this.data.core.locked; },
- save_opened : function () {
- var _this = this;
- this.data.core.to_open = [];
- this.get_container_ul().find("li.jstree-open").each(function () {
- if(this.id) { _this.data.core.to_open.push("#" + this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")); }
- });
- this.__callback(_this.data.core.to_open);
- },
- save_loaded : function () { },
- reload_nodes : function (is_callback) {
- var _this = this,
- done = true,
- current = [],
- remaining = [];
- if(!is_callback) {
- this.data.core.reopen = false;
- this.data.core.refreshing = true;
- this.data.core.to_open = $.map($.makeArray(this.data.core.to_open), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); });
- this.data.core.to_load = $.map($.makeArray(this.data.core.to_load), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); });
- if(this.data.core.to_open.length) {
- this.data.core.to_load = this.data.core.to_load.concat(this.data.core.to_open);
- }
- }
- if(this.data.core.to_load.length) {
- $.each(this.data.core.to_load, function (i, val) {
- if(val == "#") { return true; }
- if($(val).length) { current.push(val); }
- else { remaining.push(val); }
- });
- if(current.length) {
- this.data.core.to_load = remaining;
- $.each(current, function (i, val) {
- if(!_this._is_loaded(val)) {
- _this.load_node(val, function () { _this.reload_nodes(true); }, function () { _this.reload_nodes(true); });
- done = false;
- }
- });
- }
- }
- if(this.data.core.to_open.length) {
- $.each(this.data.core.to_open, function (i, val) {
- _this.open_node(val, false, true);
- });
- }
- if(done) {
- // TODO: find a more elegant approach to syncronizing returning requests
- if(this.data.core.reopen) { clearTimeout(this.data.core.reopen); }
- this.data.core.reopen = setTimeout(function () { _this.__callback({}, _this); }, 50);
- this.data.core.refreshing = false;
- this.reopen();
- }
- },
- reopen : function () {
- var _this = this;
- if(this.data.core.to_open.length) {
- $.each(this.data.core.to_open, function (i, val) {
- _this.open_node(val, false, true);
- });
- }
- this.__callback({});
- },
- refresh : function (obj) {
- var _this = this;
- this.save_opened();
- if(!obj) { obj = -1; }
- obj = this._get_node(obj);
- if(!obj) { obj = -1; }
- if(obj !== -1) { obj.children("UL").remove(); }
- else { this.get_container_ul().empty(); }
- this.load_node(obj, function () { _this.__callback({ "obj" : obj}); _this.reload_nodes(); });
- },
- // Dummy function to fire after the first load (so that there is a jstree.loaded event)
- loaded : function () {
- this.__callback();
- },
- // deal with focus
- set_focus : function () {
- if(this.is_focused()) { return; }
- var f = $.jstree._focused();
- if(f) { f.unset_focus(); }
-
- this.get_container().addClass("jstree-focused");
- focused_instance = this.get_index();
- this.__callback();
- },
- is_focused : function () {
- return focused_instance == this.get_index();
- },
- unset_focus : function () {
- if(this.is_focused()) {
- this.get_container().removeClass("jstree-focused");
- focused_instance = -1;
- }
- this.__callback();
- },
-
- // traverse
- _get_node : function (obj) {
- var $obj = $(obj, this.get_container());
- if($obj.is(".jstree") || obj == -1) { return -1; }
- $obj = $obj.closest("li", this.get_container());
- return $obj.length ? $obj : false;
- },
- _get_next : function (obj, strict) {
- obj = this._get_node(obj);
- if(obj === -1) { return this.get_container().find("> ul > li:first-child"); }
- if(!obj.length) { return false; }
- if(strict) { return (obj.nextAll("li").size() > 0) ? obj.nextAll("li:eq(0)") : false; }
-
- if(obj.hasClass("jstree-open")) { return obj.find("li:eq(0)"); }
- else if(obj.nextAll("li").size() > 0) { return obj.nextAll("li:eq(0)"); }
- else { return obj.parentsUntil(".jstree","li").next("li").eq(0); }
- },
- _get_prev : function (obj, strict) {
- obj = this._get_node(obj);
- if(obj === -1) { return this.get_container().find("> ul > li:last-child"); }
- if(!obj.length) { return false; }
- if(strict) { return (obj.prevAll("li").length > 0) ? obj.prevAll("li:eq(0)") : false; }
-
- if(obj.prev("li").length) {
- obj = obj.prev("li").eq(0);
- while(obj.hasClass("jstree-open")) { obj = obj.children("ul:eq(0)").children("li:last"); }
- return obj;
- }
- else { var o = obj.parentsUntil(".jstree","li:eq(0)"); return o.length ? o : false; }
- },
- _get_parent : function (obj) {
- obj = this._get_node(obj);
- if(obj == -1 || !obj.length) { return false; }
- var o = obj.parentsUntil(".jstree", "li:eq(0)");
- return o.length ? o : -1;
- },
- _get_children : function (obj) {
- obj = this._get_node(obj);
- if(obj === -1) { return this.get_container().children("ul:eq(0)").children("li"); }
- if(!obj.length) { return false; }
- return obj.children("ul:eq(0)").children("li");
- },
- get_path : function (obj, id_mode) {
- var p = [],
- _this = this;
- obj = this._get_node(obj);
- if(obj === -1 || !obj || !obj.length) { return false; }
- obj.parentsUntil(".jstree", "li").each(function () {
- p.push( id_mode ? this.id : _this.get_text(this) );
- });
- p.reverse();
- p.push( id_mode ? obj.attr("id") : this.get_text(obj) );
- return p;
- },
-
- // string functions
- _get_string : function (key) {
- return this._get_settings().core.strings[key] || key;
- },
-
- is_open : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-open"); },
- is_closed : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-closed"); },
- is_leaf : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-leaf"); },
- correct_state : function (obj) {
- obj = this._get_node(obj);
- if(!obj || obj === -1) { return false; }
- obj.removeClass("jstree-closed jstree-open").addClass("jstree-leaf").children("ul").remove();
- this.__callback({ "obj" : obj });
- },
- // open/close
- open_node : function (obj, callback, skip_animation) {
- obj = this._get_node(obj);
- if(!obj.length) { return false; }
- if(!obj.hasClass("jstree-closed")) { if(callback) { callback.call(); } return false; }
- var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation,
- t = this;
- if(!this._is_loaded(obj)) {
- obj.children("a").addClass("jstree-loading");
- this.load_node(obj, function () { t.open_node(obj, callback, skip_animation); }, callback);
- }
- else {
- if(this._get_settings().core.open_parents) {
- obj.parentsUntil(".jstree",".jstree-closed").each(function () {
- t.open_node(this, false, true);
- });
- }
- if(s) { obj.children("ul").css("display","none"); }
- obj.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading");
- if(s) { obj.children("ul").stop(true, true).slideDown(s, function () { this.style.display = ""; t.after_open(obj); }); }
- else { t.after_open(obj); }
- this.__callback({ "obj" : obj });
- if(callback) { callback.call(); }
- }
- },
- after_open : function (obj) { this.__callback({ "obj" : obj }); },
- close_node : function (obj, skip_animation) {
- obj = this._get_node(obj);
- var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation,
- t = this;
- if(!obj.length || !obj.hasClass("jstree-open")) { return false; }
- if(s) { obj.children("ul").attr("style","display:block !important"); }
- obj.removeClass("jstree-open").addClass("jstree-closed");
- if(s) { obj.children("ul").stop(true, true).slideUp(s, function () { this.style.display = ""; t.after_close(obj); }); }
- else { t.after_close(obj); }
- this.__callback({ "obj" : obj });
- },
- after_close : function (obj) { this.__callback({ "obj" : obj }); },
- toggle_node : function (obj) {
- obj = this._get_node(obj);
- if(obj.hasClass("jstree-closed")) { return this.open_node(obj); }
- if(obj.hasClass("jstree-open")) { return this.close_node(obj); }
- },
- open_all : function (obj, do_animation, original_obj) {
- obj = obj ? this._get_node(obj) : -1;
- if(!obj || obj === -1) { obj = this.get_container_ul(); }
- if(original_obj) {
- obj = obj.find("li.jstree-closed");
- }
- else {
- original_obj = obj;
- if(obj.is(".jstree-closed")) { obj = obj.find("li.jstree-closed").addBack(); }
- else { obj = obj.find("li.jstree-closed"); }
- }
- var _this = this;
- obj.each(function () {
- var __this = this;
- if(!_this._is_loaded(this)) { _this.open_node(this, function() { _this.open_all(__this, do_animation, original_obj); }, !do_animation); }
- else { _this.open_node(this, false, !do_animation); }
- });
- // so that callback is fired AFTER all nodes are open
- if(original_obj.find('li.jstree-closed').length === 0) { this.__callback({ "obj" : original_obj }); }
- },
- close_all : function (obj, do_animation) {
- var _this = this;
- obj = obj ? this._get_node(obj) : this.get_container();
- if(!obj || obj === -1) { obj = this.get_container_ul(); }
- obj.find("li.jstree-open").addBack().each(function () { _this.close_node(this, !do_animation); });
- this.__callback({ "obj" : obj });
- },
- clean_node : function (obj) {
- obj = obj && obj != -1 ? $(obj) : this.get_container_ul();
- obj = obj.is("li") ? obj.find("li").addBack() : obj.find("li");
- obj.removeClass("jstree-last")
- .filter("li:last-child").addClass("jstree-last").end()
- .filter(":has(li)")
- .not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed");
- obj.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove();
- this.__callback({ "obj" : obj });
- },
- // rollback
- get_rollback : function () {
- this.__callback();
- return { i : this.get_index(), h : this.get_container().children("ul").clone(true), d : this.data };
- },
- set_rollback : function (html, data) {
- this.get_container().empty().append(html);
- this.data = data;
- this.__callback();
- },
- // Dummy functions to be overwritten by any datastore plugin included
- load_node : function (obj, s_call, e_call) { this.__callback({ "obj" : obj }); },
- _is_loaded : function (obj) { return true; },
-
- // Basic operations: create
- create_node : function (obj, position, js, callback, is_loaded) {
- obj = this._get_node(obj);
- position = typeof position === "undefined" ? "last" : position;
- var d = $("
"),
- s = this._get_settings().core,
- tmp;
-
- if(obj !== -1 && !obj.length) { return false; }
- if(!is_loaded && !this._is_loaded(obj)) { this.load_node(obj, function () { this.create_node(obj, position, js, callback, true); }); return false; }
-
- this.__rollback();
-
- if(typeof js === "string") { js = { "data" : js }; }
- if(!js) { js = {}; }
- if(js.attr) { d.attr(js.attr); }
- if(js.metadata) { d.data(js.metadata); }
- if(js.state) { d.addClass("jstree-" + js.state); }
- if(!js.data) { js.data = this._get_string("new_node"); }
- if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); }
- $.each(js.data, function (i, m) {
- tmp = $("
");
- if($.isFunction(m)) { m = m.call(this, js); }
- if(typeof m == "string") { tmp.attr('href','#')[ s.html_titles ? "html" : "text" ](m); }
- else {
- if(!m.attr) { m.attr = {}; }
- if(!m.attr.href) { m.attr.href = '#'; }
- tmp.attr(m.attr)[ s.html_titles ? "html" : "text" ](m.title);
- if(m.language) { tmp.addClass(m.language); }
- }
- tmp.prepend("
");
- if(!m.icon && js.icon) { m.icon = js.icon; }
- if(m.icon) {
- if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); }
- else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); }
- }
- d.append(tmp);
- });
- d.prepend("
");
- if(obj === -1) {
- obj = this.get_container();
- if(position === "before") { position = "first"; }
- if(position === "after") { position = "last"; }
- }
- switch(position) {
- case "before": obj.before(d); tmp = this._get_parent(obj); break;
- case "after" : obj.after(d); tmp = this._get_parent(obj); break;
- case "inside":
- case "first" :
- if(!obj.children("ul").length) { obj.append("
"); }
- obj.children("ul").prepend(d);
- tmp = obj;
- break;
- case "last":
- if(!obj.children("ul").length) { obj.append("
"); }
- obj.children("ul").append(d);
- tmp = obj;
- break;
- default:
- if(!obj.children("ul").length) { obj.append("
"); }
- if(!position) { position = 0; }
- tmp = obj.children("ul").children("li").eq(position);
- if(tmp.length) { tmp.before(d); }
- else { obj.children("ul").append(d); }
- tmp = obj;
- break;
- }
- if(tmp === -1 || tmp.get(0) === this.get_container().get(0)) { tmp = -1; }
- this.clean_node(tmp);
- this.__callback({ "obj" : d, "parent" : tmp });
- if(callback) { callback.call(this, d); }
- return d;
- },
- // Basic operations: rename (deal with text)
- get_text : function (obj) {
- obj = this._get_node(obj);
- if(!obj.length) { return false; }
- var s = this._get_settings().core.html_titles;
- obj = obj.children("a:eq(0)");
- if(s) {
- obj = obj.clone();
- obj.children("INS").remove();
- return obj.html();
- }
- else {
- obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
- return obj.nodeValue;
- }
- },
- set_text : function (obj, val) {
- obj = this._get_node(obj);
- if(!obj.length) { return false; }
- obj = obj.children("a:eq(0)");
- if(this._get_settings().core.html_titles) {
- var tmp = obj.children("INS").clone();
- obj.html(val).prepend(tmp);
- this.__callback({ "obj" : obj, "name" : val });
- return true;
- }
- else {
- obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
- this.__callback({ "obj" : obj, "name" : val });
- return (obj.nodeValue = val);
- }
- },
- rename_node : function (obj, val) {
- obj = this._get_node(obj);
- this.__rollback();
- if(obj && obj.length && this.set_text.apply(this, Array.prototype.slice.call(arguments))) { this.__callback({ "obj" : obj, "name" : val }); }
- },
- // Basic operations: deleting nodes
- delete_node : function (obj) {
- obj = this._get_node(obj);
- if(!obj.length) { return false; }
- this.__rollback();
- var p = this._get_parent(obj), prev = $([]), t = this;
- obj.each(function () {
- prev = prev.add(t._get_prev(this));
- });
- obj = obj.detach();
- if(p !== -1 && p.find("> ul > li").length === 0) {
- p.removeClass("jstree-open jstree-closed").addClass("jstree-leaf");
- }
- this.clean_node(p);
- this.__callback({ "obj" : obj, "prev" : prev, "parent" : p });
- return obj;
- },
- prepare_move : function (o, r, pos, cb, is_cb) {
- var p = {};
-
- p.ot = $.jstree._reference(o) || this;
- p.o = p.ot._get_node(o);
- p.r = r === - 1 ? -1 : this._get_node(r);
- p.p = (typeof pos === "undefined" || pos === false) ? "last" : pos; // TODO: move to a setting
- if(!is_cb && prepared_move.o && prepared_move.o[0] === p.o[0] && prepared_move.r[0] === p.r[0] && prepared_move.p === p.p) {
- this.__callback(prepared_move);
- if(cb) { cb.call(this, prepared_move); }
- return;
- }
- p.ot = $.jstree._reference(p.o) || this;
- p.rt = $.jstree._reference(p.r) || this; // r === -1 ? p.ot : $.jstree._reference(p.r) || this
- if(p.r === -1 || !p.r) {
- p.cr = -1;
- switch(p.p) {
- case "first":
- case "before":
- case "inside":
- p.cp = 0;
- break;
- case "after":
- case "last":
- p.cp = p.rt.get_container().find(" > ul > li").length;
- break;
- default:
- p.cp = p.p;
- break;
- }
- }
- else {
- if(!/^(before|after)$/.test(p.p) && !this._is_loaded(p.r)) {
- return this.load_node(p.r, function () { this.prepare_move(o, r, pos, cb, true); });
- }
- switch(p.p) {
- case "before":
- p.cp = p.r.index();
- p.cr = p.rt._get_parent(p.r);
- break;
- case "after":
- p.cp = p.r.index() + 1;
- p.cr = p.rt._get_parent(p.r);
- break;
- case "inside":
- case "first":
- p.cp = 0;
- p.cr = p.r;
- break;
- case "last":
- p.cp = p.r.find(" > ul > li").length;
- p.cr = p.r;
- break;
- default:
- p.cp = p.p;
- p.cr = p.r;
- break;
- }
- }
- p.np = p.cr == -1 ? p.rt.get_container() : p.cr;
- p.op = p.ot._get_parent(p.o);
- p.cop = p.o.index();
- if(p.op === -1) { p.op = p.ot ? p.ot.get_container() : this.get_container(); }
- if(!/^(before|after)$/.test(p.p) && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp++; }
- //if(p.p === "before" && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp--; }
- p.or = p.np.find(" > ul > li:nth-child(" + (p.cp + 1) + ")");
- prepared_move = p;
- this.__callback(prepared_move);
- if(cb) { cb.call(this, prepared_move); }
- },
- check_move : function () {
- var obj = prepared_move, ret = true, r = obj.r === -1 ? this.get_container() : obj.r;
- if(!obj || !obj.o || obj.or[0] === obj.o[0]) { return false; }
- if(!obj.cy) {
- if(obj.op && obj.np && obj.op[0] === obj.np[0] && obj.cp - 1 === obj.o.index()) { return false; }
- obj.o.each(function () {
- if(r.parentsUntil(".jstree", "li").addBack().index(this) !== -1) { ret = false; return false; }
- });
- }
- return ret;
- },
- move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) {
- if(!is_prepared) {
- return this.prepare_move(obj, ref, position, function (p) {
- this.move_node(p, false, false, is_copy, true, skip_check);
- });
- }
- if(is_copy) {
- prepared_move.cy = true;
- }
- if(!skip_check && !this.check_move()) { return false; }
-
- this.__rollback();
- var o = false;
- if(is_copy) {
- o = obj.o.clone(true);
- o.find("*[id]").addBack().each(function () {
- if(this.id) { this.id = "copy_" + this.id; }
- });
- }
- else { o = obj.o; }
-
- if(obj.or.length) { obj.or.before(o); }
- else {
- if(!obj.np.children("ul").length) { $("
").appendTo(obj.np); }
- obj.np.children("ul:eq(0)").append(o);
- }
-
- try {
- obj.ot.clean_node(obj.op);
- obj.rt.clean_node(obj.np);
- if(!obj.op.find("> ul > li").length) {
- obj.op.removeClass("jstree-open jstree-closed").addClass("jstree-leaf").children("ul").remove();
- }
- } catch (e) { }
-
- if(is_copy) {
- prepared_move.cy = true;
- prepared_move.oc = o;
- }
- this.__callback(prepared_move);
- return prepared_move;
- },
- _get_move : function () { return prepared_move; }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree ui plugin
- * This plugins handles selecting/deselecting/hovering/dehovering nodes
- */
-(function ($) {
- var scrollbar_width, e1, e2;
- $(function() {
- if (/msie/.test(navigator.userAgent.toLowerCase())) {
- e1 = $('
').css({ position: 'absolute', top: -1000, left: 0 }).appendTo('body');
- e2 = $('
').css({ position: 'absolute', top: -1000, left: 0 }).appendTo('body');
- scrollbar_width = e1.width() - e2.width();
- e1.add(e2).remove();
- }
- else {
- e1 = $('
').css({ width: 100, height: 100, overflow: 'auto', position: 'absolute', top: -1000, left: 0 })
- .prependTo('body').append('
').find('div').css({ width: '100%', height: 200 });
- scrollbar_width = 100 - e1.width();
- e1.parent().remove();
- }
- });
- $.jstree.plugin("ui", {
- __init : function () {
- this.data.ui.selected = $();
- this.data.ui.last_selected = false;
- this.data.ui.hovered = null;
- this.data.ui.to_select = this.get_settings().ui.initially_select;
-
- this.get_container()
- .delegate("a", "click.jstree", $.proxy(function (event) {
- event.preventDefault();
- event.currentTarget.blur();
- if(!$(event.currentTarget).hasClass("jstree-loading")) {
- this.select_node(event.currentTarget, true, event);
- }
- }, this))
- .delegate("a", "mouseenter.jstree", $.proxy(function (event) {
- if(!$(event.currentTarget).hasClass("jstree-loading")) {
- this.hover_node(event.target);
- }
- }, this))
- .delegate("a", "mouseleave.jstree", $.proxy(function (event) {
- if(!$(event.currentTarget).hasClass("jstree-loading")) {
- this.dehover_node(event.target);
- }
- }, this))
- .bind("reopen.jstree", $.proxy(function () {
- this.reselect();
- }, this))
- .bind("get_rollback.jstree", $.proxy(function () {
- this.dehover_node();
- this.save_selected();
- }, this))
- .bind("set_rollback.jstree", $.proxy(function () {
- this.reselect();
- }, this))
- .bind("close_node.jstree", $.proxy(function (event, data) {
- var s = this._get_settings().ui,
- obj = this._get_node(data.rslt.obj),
- clk = (obj && obj.length) ? obj.children("ul").find("a.jstree-clicked") : $(),
- _this = this;
- if(s.selected_parent_close === false || !clk.length) { return; }
- clk.each(function () {
- _this.deselect_node(this);
- if(s.selected_parent_close === "select_parent") { _this.select_node(obj); }
- });
- }, this))
- .bind("delete_node.jstree", $.proxy(function (event, data) {
- var s = this._get_settings().ui.select_prev_on_delete,
- obj = this._get_node(data.rslt.obj),
- clk = (obj && obj.length) ? obj.find("a.jstree-clicked") : [],
- _this = this;
- clk.each(function () { _this.deselect_node(this); });
- if(s && clk.length) {
- data.rslt.prev.each(function () {
- if(this.parentNode) { _this.select_node(this); return false; /* if return false is removed all prev nodes will be selected */}
- });
- }
- }, this))
- .bind("move_node.jstree", $.proxy(function (event, data) {
- if(data.rslt.cy) {
- data.rslt.oc.find("a.jstree-clicked").removeClass("jstree-clicked");
- }
- }, this));
- },
- defaults : {
- select_limit : -1, // 0, 1, 2 ... or -1 for unlimited
- select_multiple_modifier : "ctrl", // on, or ctrl, shift, alt
- select_range_modifier : "shift",
- selected_parent_close : "select_parent", // false, "deselect", "select_parent"
- selected_parent_open : true,
- select_prev_on_delete : true,
- disable_selecting_children : false,
- initially_select : []
- },
- _fn : {
- _get_node : function (obj, allow_multiple) {
- if(typeof obj === "undefined" || obj === null) { return allow_multiple ? this.data.ui.selected : this.data.ui.last_selected; }
- var $obj = $(obj, this.get_container());
- if($obj.is(".jstree") || obj == -1) { return -1; }
- $obj = $obj.closest("li", this.get_container());
- return $obj.length ? $obj : false;
- },
- _ui_notify : function (n, data) {
- if(data.selected) {
- this.select_node(n, false);
- }
- },
- save_selected : function () {
- var _this = this;
- this.data.ui.to_select = [];
- this.data.ui.selected.each(function () { if(this.id) { _this.data.ui.to_select.push("#" + this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")); } });
- this.__callback(this.data.ui.to_select);
- },
- reselect : function () {
- var _this = this,
- s = this.data.ui.to_select;
- s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); });
- // this.deselect_all(); WHY deselect, breaks plugin state notifier?
- $.each(s, function (i, val) { if(val && val !== "#") { _this.select_node(val); } });
- this.data.ui.selected = this.data.ui.selected.filter(function () { return this.parentNode; });
- this.__callback();
- },
- refresh : function (obj) {
- this.save_selected();
- return this.__call_old();
- },
- hover_node : function (obj) {
- obj = this._get_node(obj);
- if(!obj.length) { return false; }
- //if(this.data.ui.hovered && obj.get(0) === this.data.ui.hovered.get(0)) { return; }
- if(!obj.hasClass("jstree-hovered")) { this.dehover_node(); }
- this.data.ui.hovered = obj.children("a").addClass("jstree-hovered").parent();
- this._fix_scroll(obj);
- this.__callback({ "obj" : obj });
- },
- dehover_node : function () {
- var obj = this.data.ui.hovered, p;
- if(!obj || !obj.length) { return false; }
- p = obj.children("a").removeClass("jstree-hovered").parent();
- if(this.data.ui.hovered[0] === p[0]) { this.data.ui.hovered = null; }
- this.__callback({ "obj" : obj });
- },
- select_node : function (obj, check, e) {
- obj = this._get_node(obj);
- if(obj == -1 || !obj || !obj.length) { return false; }
- var s = this._get_settings().ui,
- is_multiple = (s.select_multiple_modifier == "on" || (s.select_multiple_modifier !== false && e && e[s.select_multiple_modifier + "Key"])),
- is_range = (s.select_range_modifier !== false && e && e[s.select_range_modifier + "Key"] && this.data.ui.last_selected && this.data.ui.last_selected[0] !== obj[0] && this.data.ui.last_selected.parent()[0] === obj.parent()[0]),
- is_selected = this.is_selected(obj),
- proceed = true,
- t = this;
- if(check) {
- if(s.disable_selecting_children && is_multiple &&
- (
- (obj.parentsUntil(".jstree","li").children("a.jstree-clicked").length) ||
- (obj.children("ul").find("a.jstree-clicked:eq(0)").length)
- )
- ) {
- return false;
- }
- proceed = false;
- switch(!0) {
- case (is_range):
- this.data.ui.last_selected.addClass("jstree-last-selected");
- obj = obj[ obj.index() < this.data.ui.last_selected.index() ? "nextUntil" : "prevUntil" ](".jstree-last-selected").addBack();
- if(s.select_limit == -1 || obj.length < s.select_limit) {
- this.data.ui.last_selected.removeClass("jstree-last-selected");
- this.data.ui.selected.each(function () {
- if(this !== t.data.ui.last_selected[0]) { t.deselect_node(this); }
- });
- is_selected = false;
- proceed = true;
- }
- else {
- proceed = false;
- }
- break;
- case (is_selected && !is_multiple):
- this.deselect_all();
- is_selected = false;
- proceed = true;
- break;
- case (!is_selected && !is_multiple):
- if(s.select_limit == -1 || s.select_limit > 0) {
- this.deselect_all();
- proceed = true;
- }
- break;
- case (is_selected && is_multiple):
- this.deselect_node(obj);
- break;
- case (!is_selected && is_multiple):
- if(s.select_limit == -1 || this.data.ui.selected.length + 1 <= s.select_limit) {
- proceed = true;
- }
- break;
- }
- }
- if(proceed && !is_selected) {
- if(!is_range) { this.data.ui.last_selected = obj; }
- obj.children("a").addClass("jstree-clicked");
- if(s.selected_parent_open) {
- obj.parents(".jstree-closed").each(function () { t.open_node(this, false, true); });
- }
- this.data.ui.selected = this.data.ui.selected.add(obj);
- this._fix_scroll(obj.eq(0));
- this.__callback({ "obj" : obj, "e" : e });
- }
- },
- _fix_scroll : function (obj) {
- var c = this.get_container()[0], t;
- if(c.scrollHeight > c.offsetHeight) {
- obj = this._get_node(obj);
- if(!obj || obj === -1 || !obj.length || !obj.is(":visible")) { return; }
- t = obj.offset().top - this.get_container().offset().top;
- if(t < 0) {
- c.scrollTop = c.scrollTop + t - 1;
- }
- if(t + this.data.core.li_height + (c.scrollWidth > c.offsetWidth ? scrollbar_width : 0) > c.offsetHeight) {
- c.scrollTop = c.scrollTop + (t - c.offsetHeight + this.data.core.li_height + 1 + (c.scrollWidth > c.offsetWidth ? scrollbar_width : 0));
- }
- }
- },
- deselect_node : function (obj) {
- obj = this._get_node(obj);
- if(!obj.length) { return false; }
- if(this.is_selected(obj)) {
- obj.children("a").removeClass("jstree-clicked");
- this.data.ui.selected = this.data.ui.selected.not(obj);
- if(this.data.ui.last_selected.get(0) === obj.get(0)) { this.data.ui.last_selected = this.data.ui.selected.eq(0); }
- this.__callback({ "obj" : obj });
- }
- },
- toggle_select : function (obj) {
- obj = this._get_node(obj);
- if(!obj.length) { return false; }
- if(this.is_selected(obj)) { this.deselect_node(obj); }
- else { this.select_node(obj); }
- },
- is_selected : function (obj) { return this.data.ui.selected.index(this._get_node(obj)) >= 0; },
- get_selected : function (context) {
- return context ? $(context).find("a.jstree-clicked").parent() : this.data.ui.selected;
- },
- deselect_all : function (context) {
- var ret = context ? $(context).find("a.jstree-clicked").parent() : this.get_container().find("a.jstree-clicked").parent();
- ret.children("a.jstree-clicked").removeClass("jstree-clicked");
- this.data.ui.selected = $([]);
- this.data.ui.last_selected = false;
- this.__callback({ "obj" : ret });
- }
- }
- });
- // include the selection plugin by default
- $.jstree.defaults.plugins.push("ui");
-})(jQuery);
-//*/
-
-/*
- * jsTree CRRM plugin
- * Handles creating/renaming/removing/moving nodes by user interaction.
- */
-(function ($) {
- $.jstree.plugin("crrm", {
- __init : function () {
- this.get_container()
- .bind("move_node.jstree", $.proxy(function (e, data) {
- if(this._get_settings().crrm.move.open_onmove) {
- var t = this;
- data.rslt.np.parentsUntil(".jstree").addBack().filter(".jstree-closed").each(function () {
- t.open_node(this, false, true);
- });
- }
- }, this));
- },
- defaults : {
- input_width_limit : 200,
- move : {
- always_copy : false, // false, true or "multitree"
- open_onmove : true,
- default_position : "last",
- check_move : function (m) { return true; }
- }
- },
- _fn : {
- _show_input : function (obj, callback) {
- obj = this._get_node(obj);
- var rtl = this._get_settings().core.rtl,
- w = this._get_settings().crrm.input_width_limit,
- w1 = obj.children("ins").width(),
- w2 = obj.find("> a:visible > ins").width() * obj.find("> a:visible > ins").length,
- t = this.get_text(obj),
- h1 = $("
", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"),
- h2 = obj.css("position","relative").append(
- $("
", {
- "value" : t,
- "class" : "jstree-rename-input",
- // "size" : t.length,
- "css" : {
- "padding" : "0",
- "border" : "1px solid silver",
- "position" : "absolute",
- "left" : (rtl ? "auto" : (w1 + w2 + 4) + "px"),
- "right" : (rtl ? (w1 + w2 + 4) + "px" : "auto"),
- "top" : "0px",
- "height" : (this.data.core.li_height - 2) + "px",
- "lineHeight" : (this.data.core.li_height - 2) + "px",
- "width" : "150px" // will be set a bit further down
- },
- "blur" : $.proxy(function () {
- var i = obj.children(".jstree-rename-input"),
- v = i.val();
- if(v === "") { v = t; }
- h1.remove();
- i.remove(); // rollback purposes
- this.set_text(obj,t); // rollback purposes
- this.rename_node(obj, v);
- callback.call(this, obj, v, t);
- obj.css("position","");
- }, this),
- "keyup" : function (event) {
- var key = event.keyCode || event.which;
- if(key == 27) { this.value = t; this.blur(); return; }
- else if(key == 13) { this.blur(); return; }
- else {
- h2.width(Math.min(h1.text("pW" + this.value).width(),w));
- }
- },
- "keypress" : function(event) {
- var key = event.keyCode || event.which;
- if(key == 13) { return false; }
- }
- })
- ).children(".jstree-rename-input");
- this.set_text(obj, "");
- h1.css({
- fontFamily : h2.css('fontFamily') || '',
- fontSize : h2.css('fontSize') || '',
- fontWeight : h2.css('fontWeight') || '',
- fontStyle : h2.css('fontStyle') || '',
- fontStretch : h2.css('fontStretch') || '',
- fontVariant : h2.css('fontVariant') || '',
- letterSpacing : h2.css('letterSpacing') || '',
- wordSpacing : h2.css('wordSpacing') || ''
- });
- h2.width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
- },
- rename : function (obj) {
- obj = this._get_node(obj);
- this.__rollback();
- var f = this.__callback;
- this._show_input(obj, function (obj, new_name, old_name) {
- f.call(this, { "obj" : obj, "new_name" : new_name, "old_name" : old_name });
- });
- },
- create : function (obj, position, js, callback, skip_rename) {
- var t, _this = this;
- obj = this._get_node(obj);
- if(!obj) { obj = -1; }
- this.__rollback();
- t = this.create_node(obj, position, js, function (t) {
- var p = this._get_parent(t),
- pos = $(t).index();
- if(callback) { callback.call(this, t); }
- if(p.length && p.hasClass("jstree-closed")) { this.open_node(p, false, true); }
- if(!skip_rename) {
- this._show_input(t, function (obj, new_name, old_name) {
- _this.__callback({ "obj" : obj, "name" : new_name, "parent" : p, "position" : pos });
- });
- }
- else { _this.__callback({ "obj" : t, "name" : this.get_text(t), "parent" : p, "position" : pos }); }
- });
- return t;
- },
- remove : function (obj) {
- obj = this._get_node(obj, true);
- var p = this._get_parent(obj), prev = this._get_prev(obj);
- this.__rollback();
- obj = this.delete_node(obj);
- if(obj !== false) { this.__callback({ "obj" : obj, "prev" : prev, "parent" : p }); }
- },
- check_move : function () {
- if(!this.__call_old()) { return false; }
- var s = this._get_settings().crrm.move;
- if(!s.check_move.call(this, this._get_move())) { return false; }
- return true;
- },
- move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) {
- var s = this._get_settings().crrm.move;
- if(!is_prepared) {
- if(typeof position === "undefined") { position = s.default_position; }
- if(position === "inside" && !s.default_position.match(/^(before|after)$/)) { position = s.default_position; }
- return this.__call_old(true, obj, ref, position, is_copy, false, skip_check);
- }
- // if the move is already prepared
- if(s.always_copy === true || (s.always_copy === "multitree" && obj.rt.get_index() !== obj.ot.get_index() )) {
- is_copy = true;
- }
- this.__call_old(true, obj, ref, position, is_copy, true, skip_check);
- },
-
- cut : function (obj) {
- obj = this._get_node(obj, true);
- if(!obj || !obj.length) { return false; }
- this.data.crrm.cp_nodes = false;
- this.data.crrm.ct_nodes = obj;
- this.__callback({ "obj" : obj });
- },
- copy : function (obj) {
- obj = this._get_node(obj, true);
- if(!obj || !obj.length) { return false; }
- this.data.crrm.ct_nodes = false;
- this.data.crrm.cp_nodes = obj;
- this.__callback({ "obj" : obj });
- },
- paste : function (obj) {
- obj = this._get_node(obj);
- if(!obj || !obj.length) { return false; }
- var nodes = this.data.crrm.ct_nodes ? this.data.crrm.ct_nodes : this.data.crrm.cp_nodes;
- if(!this.data.crrm.ct_nodes && !this.data.crrm.cp_nodes) { return false; }
- if(this.data.crrm.ct_nodes) { this.move_node(this.data.crrm.ct_nodes, obj); this.data.crrm.ct_nodes = false; }
- if(this.data.crrm.cp_nodes) { this.move_node(this.data.crrm.cp_nodes, obj, false, true); }
- this.__callback({ "obj" : obj, "nodes" : nodes });
- }
- }
- });
- // include the crr plugin by default
- // $.jstree.defaults.plugins.push("crrm");
-})(jQuery);
-//*/
-
-/*
- * jsTree themes plugin
- * Handles loading and setting themes, as well as detecting path to themes, etc.
- */
-(function ($) {
- var themes_loaded = [];
- // this variable stores the path to the themes folder - if left as false - it will be autodetected
- $.jstree._themes = false;
- $.jstree.plugin("themes", {
- __init : function () {
- this.get_container()
- .bind("init.jstree", $.proxy(function () {
- var s = this._get_settings().themes;
- this.data.themes.dots = s.dots;
- this.data.themes.icons = s.icons;
- this.set_theme(s.theme, s.url);
- }, this))
- .bind("loaded.jstree", $.proxy(function () {
- // bound here too, as simple HTML tree's won't honor dots & icons otherwise
- if(!this.data.themes.dots) { this.hide_dots(); }
- else { this.show_dots(); }
- if(!this.data.themes.icons) { this.hide_icons(); }
- else { this.show_icons(); }
- }, this));
- },
- defaults : {
- theme : "default",
- url : false,
- dots : true,
- icons : true
- },
- _fn : {
- set_theme : function (theme_name, theme_url) {
- if(!theme_name) { return false; }
- if(!theme_url) { theme_url = $.jstree._themes + theme_name + '/style.css'; }
- if($.inArray(theme_url, themes_loaded) == -1) {
- $.vakata.css.add_sheet({ "url" : theme_url });
- themes_loaded.push(theme_url);
- }
- if(this.data.themes.theme != theme_name) {
- this.get_container().removeClass('jstree-' + this.data.themes.theme);
- this.data.themes.theme = theme_name;
- }
- this.get_container().addClass('jstree-' + theme_name);
- if(!this.data.themes.dots) { this.hide_dots(); }
- else { this.show_dots(); }
- if(!this.data.themes.icons) { this.hide_icons(); }
- else { this.show_icons(); }
- this.__callback();
- },
- get_theme : function () { return this.data.themes.theme; },
-
- show_dots : function () { this.data.themes.dots = true; this.get_container().children("ul").removeClass("jstree-no-dots"); },
- hide_dots : function () { this.data.themes.dots = false; this.get_container().children("ul").addClass("jstree-no-dots"); },
- toggle_dots : function () { if(this.data.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },
-
- show_icons : function () { this.data.themes.icons = true; this.get_container().children("ul").removeClass("jstree-no-icons"); },
- hide_icons : function () { this.data.themes.icons = false; this.get_container().children("ul").addClass("jstree-no-icons"); },
- toggle_icons: function () { if(this.data.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }
- }
- });
- // autodetect themes path
- $(function () {
- if($.jstree._themes === false) {
- $("script").each(function () {
- if(this.src.toString().match(/jquery\.jstree[^\/]*?\.js(\?.*)?$/)) {
- $.jstree._themes = this.src.toString().replace(/jquery\.jstree[^\/]*?\.js(\?.*)?$/, "") + 'themes/';
- return false;
- }
- });
- }
- if($.jstree._themes === false) { $.jstree._themes = "themes/"; }
- });
- // include the themes plugin by default
- $.jstree.defaults.plugins.push("themes");
-})(jQuery);
-//*/
-
-/*
- * jsTree hotkeys plugin
- * Enables keyboard navigation for all tree instances
- * Depends on the jstree ui & jquery hotkeys plugins
- */
-(function ($) {
- var bound = [];
- function exec(i, event) {
- var f = $.jstree._focused(), tmp;
- if(f && f.data && f.data.hotkeys && f.data.hotkeys.enabled) {
- tmp = f._get_settings().hotkeys[i];
- if(tmp) { return tmp.call(f, event); }
- }
- }
- $.jstree.plugin("hotkeys", {
- __init : function () {
- if(typeof $.hotkeys === "undefined") { throw "jsTree hotkeys: jQuery hotkeys plugin not included."; }
- if(!this.data.ui) { throw "jsTree hotkeys: jsTree UI plugin not included."; }
- $.each(this._get_settings().hotkeys, function (i, v) {
- if(v !== false && $.inArray(i, bound) == -1) {
- $(document).bind("keydown", i, function (event) { return exec(i, event); });
- bound.push(i);
- }
- });
- this.get_container()
- .bind("lock.jstree", $.proxy(function () {
- if(this.data.hotkeys.enabled) { this.data.hotkeys.enabled = false; this.data.hotkeys.revert = true; }
- }, this))
- .bind("unlock.jstree", $.proxy(function () {
- if(this.data.hotkeys.revert) { this.data.hotkeys.enabled = true; }
- }, this));
- this.enable_hotkeys();
- },
- defaults : {
- "up" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
- this.hover_node(this._get_prev(o));
- return false;
- },
- "ctrl+up" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
- this.hover_node(this._get_prev(o));
- return false;
- },
- "shift+up" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
- this.hover_node(this._get_prev(o));
- return false;
- },
- "down" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
- this.hover_node(this._get_next(o));
- return false;
- },
- "ctrl+down" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
- this.hover_node(this._get_next(o));
- return false;
- },
- "shift+down" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
- this.hover_node(this._get_next(o));
- return false;
- },
- "left" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected;
- if(o) {
- if(o.hasClass("jstree-open")) { this.close_node(o); }
- else { this.hover_node(this._get_prev(o)); }
- }
- return false;
- },
- "ctrl+left" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected;
- if(o) {
- if(o.hasClass("jstree-open")) { this.close_node(o); }
- else { this.hover_node(this._get_prev(o)); }
- }
- return false;
- },
- "shift+left" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected;
- if(o) {
- if(o.hasClass("jstree-open")) { this.close_node(o); }
- else { this.hover_node(this._get_prev(o)); }
- }
- return false;
- },
- "right" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected;
- if(o && o.length) {
- if(o.hasClass("jstree-closed")) { this.open_node(o); }
- else { this.hover_node(this._get_next(o)); }
- }
- return false;
- },
- "ctrl+right" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected;
- if(o && o.length) {
- if(o.hasClass("jstree-closed")) { this.open_node(o); }
- else { this.hover_node(this._get_next(o)); }
- }
- return false;
- },
- "shift+right" : function () {
- var o = this.data.ui.hovered || this.data.ui.last_selected;
- if(o && o.length) {
- if(o.hasClass("jstree-closed")) { this.open_node(o); }
- else { this.hover_node(this._get_next(o)); }
- }
- return false;
- },
- "space" : function () {
- if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").click(); }
- return false;
- },
- "ctrl+space" : function (event) {
- event.type = "click";
- if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); }
- return false;
- },
- "shift+space" : function (event) {
- event.type = "click";
- if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); }
- return false;
- },
- "f2" : function () { this.rename(this.data.ui.hovered || this.data.ui.last_selected); },
- "del" : function () { this.remove(this.data.ui.hovered || this._get_node(null)); }
- },
- _fn : {
- enable_hotkeys : function () {
- this.data.hotkeys.enabled = true;
- },
- disable_hotkeys : function () {
- this.data.hotkeys.enabled = false;
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree JSON plugin
- * The JSON data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions.
- */
-(function ($) {
- $.jstree.plugin("json_data", {
- __init : function() {
- var s = this._get_settings().json_data;
- if(s.progressive_unload) {
- this.get_container().bind("after_close.jstree", function (e, data) {
- data.rslt.obj.children("ul").remove();
- });
- }
- },
- defaults : {
- // `data` can be a function:
- // * accepts two arguments - node being loaded and a callback to pass the result to
- // * will be executed in the current tree's scope & ajax won't be supported
- data : false,
- ajax : false,
- correct_state : true,
- progressive_render : false,
- progressive_unload : false
- },
- _fn : {
- load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_json(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); },
- _is_loaded : function (obj) {
- var s = this._get_settings().json_data;
- obj = this._get_node(obj);
- return obj == -1 || !obj || (!s.ajax && !s.progressive_render && !$.isFunction(s.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").length > 0;
- },
- refresh : function (obj) {
- obj = this._get_node(obj);
- var s = this._get_settings().json_data;
- if(obj && obj !== -1 && s.progressive_unload && ($.isFunction(s.data) || !!s.ajax)) {
- obj.removeData("jstree_children");
- }
- return this.__call_old();
- },
- load_node_json : function (obj, s_call, e_call) {
- var s = this.get_settings().json_data, d,
- error_func = function () {},
- success_func = function () {};
- obj = this._get_node(obj);
-
- if(obj && obj !== -1 && (s.progressive_render || s.progressive_unload) && !obj.is(".jstree-open, .jstree-leaf") && obj.children("ul").children("li").length === 0 && obj.data("jstree_children")) {
- d = this._parse_json(obj.data("jstree_children"), obj);
- if(d) {
- obj.append(d);
- if(!s.progressive_unload) { obj.removeData("jstree_children"); }
- }
- this.clean_node(obj);
- if(s_call) { s_call.call(this); }
- return;
- }
-
- if(obj && obj !== -1) {
- if(obj.data("jstree_is_loading")) { return; }
- else { obj.data("jstree_is_loading",true); }
- }
- switch(!0) {
- case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied.";
- // function option added here for easier model integration (also supporting async - see callback)
- case ($.isFunction(s.data)):
- s.data.call(this, obj, $.proxy(function (d) {
- d = this._parse_json(d, obj);
- if(!d) {
- if(obj === -1 || !obj) {
- if(s.correct_state) { this.get_container().children("ul").empty(); }
- }
- else {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(s.correct_state) { this.correct_state(obj); }
- }
- if(e_call) { e_call.call(this); }
- }
- else {
- if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
- else { obj.append(d).children("a.jstree-loading").removeClass("jstree-loading"); obj.removeData("jstree_is_loading"); }
- this.clean_node(obj);
- if(s_call) { s_call.call(this); }
- }
- }, this));
- break;
- case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
- if(!obj || obj == -1) {
- d = this._parse_json(s.data, obj);
- if(d) {
- this.get_container().children("ul").empty().append(d.children());
- this.clean_node();
- }
- else {
- if(s.correct_state) { this.get_container().children("ul").empty(); }
- }
- }
- if(s_call) { s_call.call(this); }
- break;
- case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
- error_func = function (x, t, e) {
- var ef = this.get_settings().json_data.ajax.error;
- if(ef) { ef.call(this, x, t, e); }
- if(obj != -1 && obj.length) {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(t === "success" && s.correct_state) { this.correct_state(obj); }
- }
- else {
- if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
- }
- if(e_call) { e_call.call(this); }
- };
- success_func = function (d, t, x) {
- var sf = this.get_settings().json_data.ajax.success;
- if(sf) { d = sf.call(this,d,t,x) || d; }
- if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "") || (!$.isArray(d) && !$.isPlainObject(d))) {
- return error_func.call(this, x, t, "");
- }
- d = this._parse_json(d, obj);
- if(d) {
- if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
- else { obj.append(d).children("a.jstree-loading").removeClass("jstree-loading"); obj.removeData("jstree_is_loading"); }
- this.clean_node(obj);
- if(s_call) { s_call.call(this); }
- }
- else {
- if(obj === -1 || !obj) {
- if(s.correct_state) {
- this.get_container().children("ul").empty();
- if(s_call) { s_call.call(this); }
- }
- }
- else {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(s.correct_state) {
- this.correct_state(obj);
- if(s_call) { s_call.call(this); }
- }
- }
- }
- };
- s.ajax.context = this;
- s.ajax.error = error_func;
- s.ajax.success = success_func;
- if(!s.ajax.dataType) { s.ajax.dataType = "json"; }
- if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
- if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
- $.ajax(s.ajax);
- break;
- }
- },
- _parse_json : function (js, obj, is_callback) {
- var d = false,
- p = this._get_settings(),
- s = p.json_data,
- t = p.core.html_titles,
- tmp, i, j, ul1, ul2;
-
- if(!js) { return d; }
- if(s.progressive_unload && obj && obj !== -1) {
- obj.data("jstree_children", d);
- }
- if($.isArray(js)) {
- d = $('
');
- if(!js.length) { return false; }
- for(i = 0, j = js.length; i < j; i++) {
- tmp = this._parse_json(js[i], obj, true);
- if(tmp.length) {
- d = d.append(tmp);
- }
- }
- d = d.children();
- }
- else {
- if(typeof js == "string") { js = { data : js }; }
- if(!js.data && js.data !== "") { return d; }
- d = $(" ");
- if(js.attr) { d.attr(js.attr); }
- if(js.metadata) { d.data(js.metadata); }
- if(js.state) { d.addClass("jstree-" + js.state); }
- if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); }
- $.each(js.data, function (i, m) {
- tmp = $(" ");
- if($.isFunction(m)) { m = m.call(this, js); }
- if(typeof m == "string") { tmp.attr('href','#')[ t ? "html" : "text" ](m); }
- else {
- if(!m.attr) { m.attr = {}; }
- if(!m.attr.href) { m.attr.href = '#'; }
- tmp.attr(m.attr)[ t ? "html" : "text" ](m.title);
- if(m.language) { tmp.addClass(m.language); }
- }
- tmp.prepend(" ");
- if(!m.icon && js.icon) { m.icon = js.icon; }
- if(m.icon) {
- if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); }
- else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); }
- }
- d.append(tmp);
- });
- d.prepend(" ");
- if(js.children) {
- if(s.progressive_render && js.state !== "open") {
- d.addClass("jstree-closed").data("jstree_children", js.children);
- }
- else {
- if(s.progressive_unload) { d.data("jstree_children", js.children); }
- if($.isArray(js.children) && js.children.length) {
- tmp = this._parse_json(js.children, obj, true);
- if(tmp.length) {
- ul2 = $("");
- ul2.append(tmp);
- d.append(ul2);
- }
- }
- }
- }
- }
- if(!is_callback) {
- ul1 = $("");
- ul1.append(d);
- d = ul1;
- }
- return d;
- },
- get_json : function (obj, li_attr, a_attr, is_callback) {
- var result = [],
- s = this._get_settings(),
- _this = this,
- tmp1, tmp2, li, a, t, lang;
- obj = this._get_node(obj);
- if(!obj || obj === -1) { obj = this.get_container().find("> ul > li"); }
- li_attr = $.isArray(li_attr) ? li_attr : [ "id", "class" ];
- if(!is_callback && this.data.types) { li_attr.push(s.types.type_attr); }
- a_attr = $.isArray(a_attr) ? a_attr : [ ];
-
- obj.each(function () {
- li = $(this);
- tmp1 = { data : [] };
- if(li_attr.length) { tmp1.attr = { }; }
- $.each(li_attr, function (i, v) {
- tmp2 = li.attr(v);
- if(tmp2 && tmp2.length && tmp2.replace(/jstree[^ ]*/ig,'').length) {
- tmp1.attr[v] = (" " + tmp2).replace(/ jstree[^ ]*/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"");
- }
- });
- if(li.hasClass("jstree-open")) { tmp1.state = "open"; }
- if(li.hasClass("jstree-closed")) { tmp1.state = "closed"; }
- if(li.data()) { tmp1.metadata = li.data(); }
- a = li.children("a");
- a.each(function () {
- t = $(this);
- if(
- a_attr.length ||
- $.inArray("languages", s.plugins) !== -1 ||
- t.children("ins").get(0).style.backgroundImage.length ||
- (t.children("ins").get(0).className && t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').length)
- ) {
- lang = false;
- if($.inArray("languages", s.plugins) !== -1 && $.isArray(s.languages) && s.languages.length) {
- $.each(s.languages, function (l, lv) {
- if(t.hasClass(lv)) {
- lang = lv;
- return false;
- }
- });
- }
- tmp2 = { attr : { }, title : _this.get_text(t, lang) };
- $.each(a_attr, function (k, z) {
- tmp2.attr[z] = (" " + (t.attr(z) || "")).replace(/ jstree[^ ]*/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"");
- });
- if($.inArray("languages", s.plugins) !== -1 && $.isArray(s.languages) && s.languages.length) {
- $.each(s.languages, function (k, z) {
- if(t.hasClass(z)) { tmp2.language = z; return true; }
- });
- }
- if(t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"").length) {
- tmp2.icon = t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"");
- }
- if(t.children("ins").get(0).style.backgroundImage.length) {
- tmp2.icon = t.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","");
- }
- }
- else {
- tmp2 = _this.get_text(t);
- }
- if(a.length > 1) { tmp1.data.push(tmp2); }
- else { tmp1.data = tmp2; }
- });
- li = li.find("> ul > li");
- if(li.length) { tmp1.children = _this.get_json(li, li_attr, a_attr, true); }
- result.push(tmp1);
- });
- return result;
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree languages plugin
- * Adds support for multiple language versions in one tree
- * This basically allows for many titles coexisting in one node, but only one of them being visible at any given time
- * This is useful for maintaining the same structure in many languages (hence the name of the plugin)
- */
-(function ($) {
- var sh = false;
- $.jstree.plugin("languages", {
- __init : function () { this._load_css(); },
- defaults : [],
- _fn : {
- set_lang : function (i) {
- var langs = this._get_settings().languages,
- st = false,
- selector = ".jstree-" + this.get_index() + ' a';
- if(!$.isArray(langs) || langs.length === 0) { return false; }
- if($.inArray(i,langs) == -1) {
- if(!!langs[i]) { i = langs[i]; }
- else { return false; }
- }
- if(i == this.data.languages.current_language) { return true; }
- st = $.vakata.css.get_css(selector + "." + this.data.languages.current_language, false, sh);
- if(st !== false) { st.style.display = "none"; }
- st = $.vakata.css.get_css(selector + "." + i, false, sh);
- if(st !== false) { st.style.display = ""; }
- this.data.languages.current_language = i;
- this.__callback(i);
- return true;
- },
- get_lang : function () {
- return this.data.languages.current_language;
- },
- _get_string : function (key, lang) {
- var langs = this._get_settings().languages,
- s = this._get_settings().core.strings;
- if($.isArray(langs) && langs.length) {
- lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language;
- }
- if(s[lang] && s[lang][key]) { return s[lang][key]; }
- if(s[key]) { return s[key]; }
- return key;
- },
- get_text : function (obj, lang) {
- obj = this._get_node(obj) || this.data.ui.last_selected;
- if(!obj.size()) { return false; }
- var langs = this._get_settings().languages,
- s = this._get_settings().core.html_titles;
- if($.isArray(langs) && langs.length) {
- lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language;
- obj = obj.children("a." + lang);
- }
- else { obj = obj.children("a:eq(0)"); }
- if(s) {
- obj = obj.clone();
- obj.children("INS").remove();
- return obj.html();
- }
- else {
- obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
- return obj.nodeValue;
- }
- },
- set_text : function (obj, val, lang) {
- obj = this._get_node(obj) || this.data.ui.last_selected;
- if(!obj.size()) { return false; }
- var langs = this._get_settings().languages,
- s = this._get_settings().core.html_titles,
- tmp;
- if($.isArray(langs) && langs.length) {
- lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language;
- obj = obj.children("a." + lang);
- }
- else { obj = obj.children("a:eq(0)"); }
- if(s) {
- tmp = obj.children("INS").clone();
- obj.html(val).prepend(tmp);
- this.__callback({ "obj" : obj, "name" : val, "lang" : lang });
- return true;
- }
- else {
- obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
- this.__callback({ "obj" : obj, "name" : val, "lang" : lang });
- return (obj.nodeValue = val);
- }
- },
- _load_css : function () {
- var langs = this._get_settings().languages,
- str = "/* languages css */",
- selector = ".jstree-" + this.get_index() + ' a',
- ln;
- if($.isArray(langs) && langs.length) {
- this.data.languages.current_language = langs[0];
- for(ln = 0; ln < langs.length; ln++) {
- str += selector + "." + langs[ln] + " {";
- if(langs[ln] != this.data.languages.current_language) { str += " display:none; "; }
- str += " } ";
- }
- sh = $.vakata.css.add_sheet({ 'str' : str, 'title' : "jstree-languages" });
- }
- },
- create_node : function (obj, position, js, callback) {
- var t = this.__call_old(true, obj, position, js, function (t) {
- var langs = this._get_settings().languages,
- a = t.children("a"),
- ln;
- if($.isArray(langs) && langs.length) {
- for(ln = 0; ln < langs.length; ln++) {
- if(!a.is("." + langs[ln])) {
- t.append(a.eq(0).clone().removeClass(langs.join(" ")).addClass(langs[ln]));
- }
- }
- a.not("." + langs.join(", .")).remove();
- }
- if(callback) { callback.call(this, t); }
- });
- return t;
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree cookies plugin
- * Stores the currently opened/selected nodes in a cookie and then restores them
- * Depends on the jquery.cookie plugin
- */
-(function ($) {
- $.jstree.plugin("cookies", {
- __init : function () {
- if(typeof $.cookie === "undefined") { throw "jsTree cookie: jQuery cookie plugin not included."; }
-
- var s = this._get_settings().cookies,
- tmp;
- if(!!s.save_loaded) {
- tmp = $.cookie(s.save_loaded);
- if(tmp && tmp.length) { this.data.core.to_load = tmp.split(","); }
- }
- if(!!s.save_opened) {
- tmp = $.cookie(s.save_opened);
- if(tmp && tmp.length) { this.data.core.to_open = tmp.split(","); }
- }
- if(!!s.save_selected) {
- tmp = $.cookie(s.save_selected);
- if(tmp && tmp.length && this.data.ui) { this.data.ui.to_select = tmp.split(","); }
- }
- this.get_container()
- .one( ( this.data.ui ? "reselect" : "reopen" ) + ".jstree", $.proxy(function () {
- this.get_container()
- .bind("open_node.jstree close_node.jstree select_node.jstree deselect_node.jstree", $.proxy(function (e) {
- if(this._get_settings().cookies.auto_save) { this.save_cookie((e.handleObj.namespace + e.handleObj.type).replace("jstree","")); }
- }, this));
- }, this));
- },
- defaults : {
- save_loaded : "jstree_load",
- save_opened : "jstree_open",
- save_selected : "jstree_select",
- auto_save : true,
- cookie_options : {}
- },
- _fn : {
- save_cookie : function (c) {
- if(this.data.core.refreshing) { return; }
- var s = this._get_settings().cookies;
- if(!c) { // if called manually and not by event
- if(s.save_loaded) {
- this.save_loaded();
- $.cookie(s.save_loaded, this.data.core.to_load.join(","), s.cookie_options);
- }
- if(s.save_opened) {
- this.save_opened();
- $.cookie(s.save_opened, this.data.core.to_open.join(","), s.cookie_options);
- }
- if(s.save_selected && this.data.ui) {
- this.save_selected();
- $.cookie(s.save_selected, this.data.ui.to_select.join(","), s.cookie_options);
- }
- return;
- }
- switch(c) {
- case "open_node":
- case "close_node":
- if(!!s.save_opened) {
- this.save_opened();
- $.cookie(s.save_opened, this.data.core.to_open.join(","), s.cookie_options);
- }
- if(!!s.save_loaded) {
- this.save_loaded();
- $.cookie(s.save_loaded, this.data.core.to_load.join(","), s.cookie_options);
- }
- break;
- case "select_node":
- case "deselect_node":
- if(!!s.save_selected && this.data.ui) {
- this.save_selected();
- $.cookie(s.save_selected, this.data.ui.to_select.join(","), s.cookie_options);
- }
- break;
- }
- }
- }
- });
- // include cookies by default
- // $.jstree.defaults.plugins.push("cookies");
-})(jQuery);
-//*/
-
-/*
- * jsTree sort plugin
- * Sorts items alphabetically (or using any other function)
- */
-(function ($) {
- $.jstree.plugin("sort", {
- __init : function () {
- this.get_container()
- .bind("load_node.jstree", $.proxy(function (e, data) {
- var obj = this._get_node(data.rslt.obj);
- obj = obj === -1 ? this.get_container().children("ul") : obj.children("ul");
- this.sort(obj);
- }, this))
- .bind("rename_node.jstree create_node.jstree create.jstree", $.proxy(function (e, data) {
- this.sort(data.rslt.obj.parent());
- }, this))
- .bind("move_node.jstree", $.proxy(function (e, data) {
- var m = data.rslt.np == -1 ? this.get_container() : data.rslt.np;
- this.sort(m.children("ul"));
- }, this));
- },
- defaults : function (a, b) { return this.get_text(a) > this.get_text(b) ? 1 : -1; },
- _fn : {
- sort : function (obj) {
- var s = this._get_settings().sort,
- t = this;
- obj.append($.makeArray(obj.children("li")).sort($.proxy(s, t)));
- obj.find("> li > ul").each(function() { t.sort($(this)); });
- this.clean_node(obj);
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree DND plugin
- * Drag and drop plugin for moving/copying nodes
- */
-(function ($) {
- var o = false,
- r = false,
- m = false,
- ml = false,
- sli = false,
- sti = false,
- dir1 = false,
- dir2 = false,
- last_pos = false;
- $.vakata.dnd = {
- is_down : false,
- is_drag : false,
- helper : false,
- scroll_spd : 10,
- init_x : 0,
- init_y : 0,
- threshold : 5,
- helper_left : 5,
- helper_top : 10,
- user_data : {},
-
- drag_start : function (e, data, html) {
- if($.vakata.dnd.is_drag) { $.vakata.drag_stop({}); }
- try {
- e.currentTarget.unselectable = "on";
- e.currentTarget.onselectstart = function() { return false; };
- if(e.currentTarget.style) { e.currentTarget.style.MozUserSelect = "none"; }
- } catch(err) { }
- $.vakata.dnd.init_x = e.pageX;
- $.vakata.dnd.init_y = e.pageY;
- $.vakata.dnd.user_data = data;
- $.vakata.dnd.is_down = true;
- $.vakata.dnd.helper = $("
").html(html); //.fadeTo(10,0.25);
- $(document).bind("mousemove", $.vakata.dnd.drag);
- $(document).bind("mouseup", $.vakata.dnd.drag_stop);
- return false;
- },
- drag : function (e) {
- if(!$.vakata.dnd.is_down) { return; }
- if(!$.vakata.dnd.is_drag) {
- if(Math.abs(e.pageX - $.vakata.dnd.init_x) > 5 || Math.abs(e.pageY - $.vakata.dnd.init_y) > 5) {
- $.vakata.dnd.helper.appendTo("body");
- $.vakata.dnd.is_drag = true;
- $(document).triggerHandler("drag_start.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
- }
- else { return; }
- }
-
- // maybe use a scrolling parent element instead of document?
- if(e.type === "mousemove") { // thought of adding scroll in order to move the helper, but mouse poisition is n/a
- var d = $(document), t = d.scrollTop(), l = d.scrollLeft();
- if(e.pageY - t < 20) {
- if(sti && dir1 === "down") { clearInterval(sti); sti = false; }
- if(!sti) { dir1 = "up"; sti = setInterval(function () { $(document).scrollTop($(document).scrollTop() - $.vakata.dnd.scroll_spd); }, 150); }
- }
- else {
- if(sti && dir1 === "up") { clearInterval(sti); sti = false; }
- }
- if($(window).height() - (e.pageY - t) < 20) {
- if(sti && dir1 === "up") { clearInterval(sti); sti = false; }
- if(!sti) { dir1 = "down"; sti = setInterval(function () { $(document).scrollTop($(document).scrollTop() + $.vakata.dnd.scroll_spd); }, 150); }
- }
- else {
- if(sti && dir1 === "down") { clearInterval(sti); sti = false; }
- }
-
- if(e.pageX - l < 20) {
- if(sli && dir2 === "right") { clearInterval(sli); sli = false; }
- if(!sli) { dir2 = "left"; sli = setInterval(function () { $(document).scrollLeft($(document).scrollLeft() - $.vakata.dnd.scroll_spd); }, 150); }
- }
- else {
- if(sli && dir2 === "left") { clearInterval(sli); sli = false; }
- }
- if($(window).width() - (e.pageX - l) < 20) {
- if(sli && dir2 === "left") { clearInterval(sli); sli = false; }
- if(!sli) { dir2 = "right"; sli = setInterval(function () { $(document).scrollLeft($(document).scrollLeft() + $.vakata.dnd.scroll_spd); }, 150); }
- }
- else {
- if(sli && dir2 === "right") { clearInterval(sli); sli = false; }
- }
- }
-
- $.vakata.dnd.helper.css({ left : (e.pageX + $.vakata.dnd.helper_left) + "px", top : (e.pageY + $.vakata.dnd.helper_top) + "px" });
- $(document).triggerHandler("drag.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
- },
- drag_stop : function (e) {
- if(sli) { clearInterval(sli); }
- if(sti) { clearInterval(sti); }
- $(document).unbind("mousemove", $.vakata.dnd.drag);
- $(document).unbind("mouseup", $.vakata.dnd.drag_stop);
- $(document).triggerHandler("drag_stop.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
- $.vakata.dnd.helper.remove();
- $.vakata.dnd.init_x = 0;
- $.vakata.dnd.init_y = 0;
- $.vakata.dnd.user_data = {};
- $.vakata.dnd.is_down = false;
- $.vakata.dnd.is_drag = false;
- }
- };
- $(function() {
- var css_string = '#vakata-dragged { display:block; margin:0 0 0 0; padding:4px 4px 4px 24px; position:absolute; top:-2000px; line-height:16px; z-index:10000; } ';
- $.vakata.css.add_sheet({ str : css_string, title : "vakata" });
- });
-
- $.jstree.plugin("dnd", {
- __init : function () {
- this.data.dnd = {
- active : false,
- after : false,
- inside : false,
- before : false,
- off : false,
- prepared : false,
- w : 0,
- to1 : false,
- to2 : false,
- cof : false,
- cw : false,
- ch : false,
- i1 : false,
- i2 : false,
- mto : false
- };
- this.get_container()
- .bind("mouseenter.jstree", $.proxy(function (e) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
- if(this.data.themes) {
- m.attr("class", "jstree-" + this.data.themes.theme);
- if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); }
- $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
- }
- //if($(e.currentTarget).find("> ul > li").length === 0) {
- if(e.currentTarget === e.target && $.vakata.dnd.user_data.obj && $($.vakata.dnd.user_data.obj).length && $($.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== e.target) { // node should not be from the same tree
- var tr = $.jstree._reference(e.target), dc;
- if(tr.data.dnd.foreign) {
- dc = tr._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : tr.get_container(), is_root : true });
- if(dc === true || dc.inside === true || dc.before === true || dc.after === true) {
- $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
- }
- }
- else {
- tr.prepare_move(o, tr.get_container(), "last");
- if(tr.check_move()) {
- $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
- }
- }
- }
- }
- }, this))
- .bind("mouseup.jstree", $.proxy(function (e) {
- //if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && $(e.currentTarget).find("> ul > li").length === 0) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && e.currentTarget === e.target && $.vakata.dnd.user_data.obj && $($.vakata.dnd.user_data.obj).length && $($.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== e.target) { // node should not be from the same tree
- var tr = $.jstree._reference(e.currentTarget), dc;
- if(tr.data.dnd.foreign) {
- dc = tr._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : tr.get_container(), is_root : true });
- if(dc === true || dc.inside === true || dc.before === true || dc.after === true) {
- tr._get_settings().dnd.drag_finish.call(this, { "o" : o, "r" : tr.get_container(), is_root : true });
- }
- }
- else {
- tr.move_node(o, tr.get_container(), "last", e[tr._get_settings().dnd.copy_modifier + "Key"]);
- }
- }
- }, this))
- .bind("mouseleave.jstree", $.proxy(function (e) {
- if(e.relatedTarget && e.relatedTarget.id && e.relatedTarget.id === "jstree-marker-line") {
- return false;
- }
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
- if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
- if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
- if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
- if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
- if($.vakata.dnd.helper.children("ins").hasClass("jstree-ok")) {
- $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
- }
- }
- }, this))
- .bind("mousemove.jstree", $.proxy(function (e) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
- var cnt = this.get_container()[0];
-
- // Horizontal scroll
- if(e.pageX + 24 > this.data.dnd.cof.left + this.data.dnd.cw) {
- if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
- this.data.dnd.i1 = setInterval($.proxy(function () { this.scrollLeft += $.vakata.dnd.scroll_spd; }, cnt), 100);
- }
- else if(e.pageX - 24 < this.data.dnd.cof.left) {
- if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
- this.data.dnd.i1 = setInterval($.proxy(function () { this.scrollLeft -= $.vakata.dnd.scroll_spd; }, cnt), 100);
- }
- else {
- if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
- }
-
- // Vertical scroll
- if(e.pageY + 24 > this.data.dnd.cof.top + this.data.dnd.ch) {
- if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
- this.data.dnd.i2 = setInterval($.proxy(function () { this.scrollTop += $.vakata.dnd.scroll_spd; }, cnt), 100);
- }
- else if(e.pageY - 24 < this.data.dnd.cof.top) {
- if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
- this.data.dnd.i2 = setInterval($.proxy(function () { this.scrollTop -= $.vakata.dnd.scroll_spd; }, cnt), 100);
- }
- else {
- if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
- }
-
- }
- }, this))
- .bind("scroll.jstree", $.proxy(function (e) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && m && ml) {
- m.hide();
- ml.hide();
- }
- }, this))
- .delegate("a", "mousedown.jstree", $.proxy(function (e) {
- if(e.which === 1) {
- this.start_drag(e.currentTarget, e);
- return false;
- }
- }, this))
- .delegate("a", "mouseenter.jstree", $.proxy(function (e) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
- this.dnd_enter(e.currentTarget);
- }
- }, this))
- .delegate("a", "mousemove.jstree", $.proxy(function (e) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
- if(!r || !r.length || r.children("a")[0] !== e.currentTarget) {
- this.dnd_enter(e.currentTarget);
- }
- if(typeof this.data.dnd.off.top === "undefined") { this.data.dnd.off = $(e.target).offset(); }
- this.data.dnd.w = (e.pageY - (this.data.dnd.off.top || 0)) % this.data.core.li_height;
- if(this.data.dnd.w < 0) { this.data.dnd.w += this.data.core.li_height; }
- this.dnd_show();
- }
- }, this))
- .delegate("a", "mouseleave.jstree", $.proxy(function (e) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
- if(e.relatedTarget && e.relatedTarget.id && e.relatedTarget.id === "jstree-marker-line") {
- return false;
- }
- if(m) { m.hide(); }
- if(ml) { ml.hide(); }
- /*
- var ec = $(e.currentTarget).closest("li"),
- er = $(e.relatedTarget).closest("li");
- if(er[0] !== ec.prev()[0] && er[0] !== ec.next()[0]) {
- if(m) { m.hide(); }
- if(ml) { ml.hide(); }
- }
- */
- this.data.dnd.mto = setTimeout(
- (function (t) { return function () { t.dnd_leave(e); }; })(this),
- 0);
- }
- }, this))
- .delegate("a", "mouseup.jstree", $.proxy(function (e) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
- this.dnd_finish(e);
- }
- }, this));
-
- $(document)
- .bind("drag_stop.vakata", $.proxy(function () {
- if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
- if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
- if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
- if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
- this.data.dnd.after = false;
- this.data.dnd.before = false;
- this.data.dnd.inside = false;
- this.data.dnd.off = false;
- this.data.dnd.prepared = false;
- this.data.dnd.w = false;
- this.data.dnd.to1 = false;
- this.data.dnd.to2 = false;
- this.data.dnd.i1 = false;
- this.data.dnd.i2 = false;
- this.data.dnd.active = false;
- this.data.dnd.foreign = false;
- if(m) { m.css({ "top" : "-2000px" }); }
- if(ml) { ml.css({ "top" : "-2000px" }); }
- }, this))
- .bind("drag_start.vakata", $.proxy(function (e, data) {
- if(data.data.jstree) {
- var et = $(data.event.target);
- if(et.closest(".jstree").hasClass("jstree-" + this.get_index())) {
- this.dnd_enter(et);
- }
- }
- }, this));
- /*
- .bind("keydown.jstree-" + this.get_index() + " keyup.jstree-" + this.get_index(), $.proxy(function(e) {
- if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && !this.data.dnd.foreign) {
- var h = $.vakata.dnd.helper.children("ins");
- if(e[this._get_settings().dnd.copy_modifier + "Key"] && h.hasClass("jstree-ok")) {
- h.parent().html(h.parent().html().replace(/ \(Copy\)$/, "") + " (Copy)");
- }
- else {
- h.parent().html(h.parent().html().replace(/ \(Copy\)$/, ""));
- }
- }
- }, this)); */
-
-
-
- var s = this._get_settings().dnd;
- if(s.drag_target) {
- $(document)
- .delegate(s.drag_target, "mousedown.jstree-" + this.get_index(), $.proxy(function (e) {
- o = e.target;
- $.vakata.dnd.drag_start(e, { jstree : true, obj : e.target }, " " + $(e.target).text() );
- if(this.data.themes) {
- if(m) { m.attr("class", "jstree-" + this.data.themes.theme); }
- if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); }
- $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
- }
- $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
- var cnt = this.get_container();
- this.data.dnd.cof = cnt.offset();
- this.data.dnd.cw = parseInt(cnt.width(),10);
- this.data.dnd.ch = parseInt(cnt.height(),10);
- this.data.dnd.foreign = true;
- e.preventDefault();
- }, this));
- }
- if(s.drop_target) {
- $(document)
- .delegate(s.drop_target, "mouseenter.jstree-" + this.get_index(), $.proxy(function (e) {
- if(this.data.dnd.active && this._get_settings().dnd.drop_check.call(this, { "o" : o, "r" : $(e.target), "e" : e })) {
- $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
- }
- }, this))
- .delegate(s.drop_target, "mouseleave.jstree-" + this.get_index(), $.proxy(function (e) {
- if(this.data.dnd.active) {
- $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
- }
- }, this))
- .delegate(s.drop_target, "mouseup.jstree-" + this.get_index(), $.proxy(function (e) {
- if(this.data.dnd.active && $.vakata.dnd.helper.children("ins").hasClass("jstree-ok")) {
- this._get_settings().dnd.drop_finish.call(this, { "o" : o, "r" : $(e.target), "e" : e });
- }
- }, this));
- }
- },
- defaults : {
- copy_modifier : "ctrl",
- check_timeout : 100,
- open_timeout : 500,
- drop_target : ".jstree-drop",
- drop_check : function (data) { return true; },
- drop_finish : $.noop,
- drag_target : ".jstree-draggable",
- drag_finish : $.noop,
- drag_check : function (data) { return { after : false, before : false, inside : true }; }
- },
- _fn : {
- dnd_prepare : function () {
- if(!r || !r.length) { return; }
- this.data.dnd.off = r.offset();
- if(this._get_settings().core.rtl) {
- this.data.dnd.off.right = this.data.dnd.off.left + r.width();
- }
- if(this.data.dnd.foreign) {
- var a = this._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : r });
- this.data.dnd.after = a.after;
- this.data.dnd.before = a.before;
- this.data.dnd.inside = a.inside;
- this.data.dnd.prepared = true;
- return this.dnd_show();
- }
- this.prepare_move(o, r, "before");
- this.data.dnd.before = this.check_move();
- this.prepare_move(o, r, "after");
- this.data.dnd.after = this.check_move();
- if(this._is_loaded(r)) {
- this.prepare_move(o, r, "inside");
- this.data.dnd.inside = this.check_move();
- }
- else {
- this.data.dnd.inside = false;
- }
- this.data.dnd.prepared = true;
- return this.dnd_show();
- },
- dnd_show : function () {
- if(!this.data.dnd.prepared) { return; }
- var o = ["before","inside","after"],
- r = false,
- rtl = this._get_settings().core.rtl,
- pos;
- if(this.data.dnd.w < this.data.core.li_height/3) { o = ["before","inside","after"]; }
- else if(this.data.dnd.w <= this.data.core.li_height*2/3) {
- o = this.data.dnd.w < this.data.core.li_height/2 ? ["inside","before","after"] : ["inside","after","before"];
- }
- else { o = ["after","inside","before"]; }
- $.each(o, $.proxy(function (i, val) {
- if(this.data.dnd[val]) {
- $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
- r = val;
- return false;
- }
- }, this));
- if(r === false) { $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); }
-
- pos = rtl ? (this.data.dnd.off.right - 18) : (this.data.dnd.off.left + 10);
- switch(r) {
- case "before":
- m.css({ "left" : pos + "px", "top" : (this.data.dnd.off.top - 6) + "px" }).show();
- if(ml) { ml.css({ "left" : (pos + 8) + "px", "top" : (this.data.dnd.off.top - 1) + "px" }).show(); }
- break;
- case "after":
- m.css({ "left" : pos + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height - 6) + "px" }).show();
- if(ml) { ml.css({ "left" : (pos + 8) + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height - 1) + "px" }).show(); }
- break;
- case "inside":
- m.css({ "left" : pos + ( rtl ? -4 : 4) + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height/2 - 5) + "px" }).show();
- if(ml) { ml.hide(); }
- break;
- default:
- m.hide();
- if(ml) { ml.hide(); }
- break;
- }
- last_pos = r;
- return r;
- },
- dnd_open : function () {
- this.data.dnd.to2 = false;
- this.open_node(r, $.proxy(this.dnd_prepare,this), true);
- },
- dnd_finish : function (e) {
- if(this.data.dnd.foreign) {
- if(this.data.dnd.after || this.data.dnd.before || this.data.dnd.inside) {
- this._get_settings().dnd.drag_finish.call(this, { "o" : o, "r" : r, "p" : last_pos });
- }
- }
- else {
- this.dnd_prepare();
- this.move_node(o, r, last_pos, e[this._get_settings().dnd.copy_modifier + "Key"]);
- }
- o = false;
- r = false;
- m.hide();
- if(ml) { ml.hide(); }
- },
- dnd_enter : function (obj) {
- if(this.data.dnd.mto) {
- clearTimeout(this.data.dnd.mto);
- this.data.dnd.mto = false;
- }
- var s = this._get_settings().dnd;
- this.data.dnd.prepared = false;
- r = this._get_node(obj);
- if(s.check_timeout) {
- // do the calculations after a minimal timeout (users tend to drag quickly to the desired location)
- if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
- this.data.dnd.to1 = setTimeout($.proxy(this.dnd_prepare, this), s.check_timeout);
- }
- else {
- this.dnd_prepare();
- }
- if(s.open_timeout) {
- if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
- if(r && r.length && r.hasClass("jstree-closed")) {
- // if the node is closed - open it, then recalculate
- this.data.dnd.to2 = setTimeout($.proxy(this.dnd_open, this), s.open_timeout);
- }
- }
- else {
- if(r && r.length && r.hasClass("jstree-closed")) {
- this.dnd_open();
- }
- }
- },
- dnd_leave : function (e) {
- this.data.dnd.after = false;
- this.data.dnd.before = false;
- this.data.dnd.inside = false;
- $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
- m.hide();
- if(ml) { ml.hide(); }
- if(r && r[0] === e.target.parentNode) {
- if(this.data.dnd.to1) {
- clearTimeout(this.data.dnd.to1);
- this.data.dnd.to1 = false;
- }
- if(this.data.dnd.to2) {
- clearTimeout(this.data.dnd.to2);
- this.data.dnd.to2 = false;
- }
- }
- },
- start_drag : function (obj, e) {
- o = this._get_node(obj);
- if(this.data.ui && this.is_selected(o)) { o = this._get_node(null, true); }
- var dt = o.length > 1 ? this._get_string("multiple_selection") : this.get_text(o),
- cnt = this.get_container();
- if(!this._get_settings().core.html_titles) { dt = dt.replace(//ig,">"); }
- $.vakata.dnd.drag_start(e, { jstree : true, obj : o }, " " + dt );
- if(this.data.themes) {
- if(m) { m.attr("class", "jstree-" + this.data.themes.theme); }
- if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); }
- $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
- }
- this.data.dnd.cof = cnt.offset();
- this.data.dnd.cw = parseInt(cnt.width(),10);
- this.data.dnd.ch = parseInt(cnt.height(),10);
- this.data.dnd.active = true;
- }
- }
- });
- $(function() {
- var css_string = '' +
- '#vakata-dragged ins { display:block; text-decoration:none; width:16px; height:16px; margin:0 0 0 0; padding:0; position:absolute; top:4px; left:4px; ' +
- ' -moz-border-radius:4px; border-radius:4px; -webkit-border-radius:4px; ' +
- '} ' +
- '#vakata-dragged .jstree-ok { background:green; } ' +
- '#vakata-dragged .jstree-invalid { background:red; } ' +
- '#jstree-marker { padding:0; margin:0; font-size:12px; overflow:hidden; height:12px; width:8px; position:absolute; top:-30px; z-index:10001; background-repeat:no-repeat; display:none; background-color:transparent; text-shadow:1px 1px 1px white; color:black; line-height:10px; } ' +
- '#jstree-marker-line { padding:0; margin:0; line-height:0%; font-size:1px; overflow:hidden; height:1px; width:100px; position:absolute; top:-30px; z-index:10000; background-repeat:no-repeat; display:none; background-color:#456c43; ' +
- ' cursor:pointer; border:1px solid #eeeeee; border-left:0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; ' +
- ' -moz-border-radius:1px; border-radius:1px; -webkit-border-radius:1px; ' +
- '}' +
- '';
- $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
- m = $("
").attr({ id : "jstree-marker" }).hide().html("»")
- .bind("mouseleave mouseenter", function (e) {
- m.hide();
- ml.hide();
- e.preventDefault();
- e.stopImmediatePropagation();
- return false;
- })
- .appendTo("body");
- ml = $("
").attr({ id : "jstree-marker-line" }).hide()
- .bind("mouseup", function (e) {
- if(r && r.length) {
- r.children("a").trigger(e);
- e.preventDefault();
- e.stopImmediatePropagation();
- return false;
- }
- })
- .bind("mouseleave", function (e) {
- var rt = $(e.relatedTarget);
- if(rt.is(".jstree") || rt.closest(".jstree").length === 0) {
- if(r && r.length) {
- r.children("a").trigger(e);
- m.hide();
- ml.hide();
- e.preventDefault();
- e.stopImmediatePropagation();
- return false;
- }
- }
- })
- .appendTo("body");
- $(document).bind("drag_start.vakata", function (e, data) {
- if(data.data.jstree) { m.show(); if(ml) { ml.show(); } }
- });
- $(document).bind("drag_stop.vakata", function (e, data) {
- if(data.data.jstree) { m.hide(); if(ml) { ml.hide(); } }
- });
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree checkbox plugin
- * Inserts checkboxes in front of every node
- * Depends on the ui plugin
- * DOES NOT WORK NICELY WITH MULTITREE DRAG'N'DROP
- */
-(function ($) {
- $.jstree.plugin("checkbox", {
- __init : function () {
- this.data.checkbox.noui = this._get_settings().checkbox.override_ui;
- if(this.data.ui && this.data.checkbox.noui) {
- this.select_node = this.deselect_node = this.deselect_all = $.noop;
- this.get_selected = this.get_checked;
- }
-
- this.get_container()
- .bind("open_node.jstree create_node.jstree clean_node.jstree refresh.jstree", $.proxy(function (e, data) {
- this._prepare_checkboxes(data.rslt.obj);
- }, this))
- .bind("loaded.jstree", $.proxy(function (e) {
- this._prepare_checkboxes();
- }, this))
- .delegate( (this.data.ui && this.data.checkbox.noui ? "a" : "ins.jstree-checkbox") , "click.jstree", $.proxy(function (e) {
- e.preventDefault();
- if(this._get_node(e.target).hasClass("jstree-checked")) { this.uncheck_node(e.target); }
- else { this.check_node(e.target); }
- if(this.data.ui && this.data.checkbox.noui) {
- this.save_selected();
- if(this.data.cookies) { this.save_cookie("select_node"); }
- }
- else {
- e.stopImmediatePropagation();
- return false;
- }
- }, this));
- },
- defaults : {
- override_ui : false,
- two_state : false,
- real_checkboxes : false,
- checked_parent_open : true,
- real_checkboxes_names : function (n) { return [ ("check_" + (n[0].id || Math.ceil(Math.random() * 10000))) , 1]; }
- },
- __destroy : function () {
- this.get_container()
- .find("input.jstree-real-checkbox").removeClass("jstree-real-checkbox").end()
- .find("ins.jstree-checkbox").remove();
- },
- _fn : {
- _checkbox_notify : function (n, data) {
- if(data.checked) {
- this.check_node(n, false);
- }
- },
- _prepare_checkboxes : function (obj) {
- obj = !obj || obj == -1 ? this.get_container().find("> ul > li") : this._get_node(obj);
- if(obj === false) { return; } // added for removing root nodes
- var c, _this = this, t, ts = this._get_settings().checkbox.two_state, rc = this._get_settings().checkbox.real_checkboxes, rcn = this._get_settings().checkbox.real_checkboxes_names;
- obj.each(function () {
- t = $(this);
- c = t.is("li") && (t.hasClass("jstree-checked") || (rc && t.children(":checked").length)) ? "jstree-checked" : "jstree-unchecked";
- t.find("li").addBack().each(function () {
- var $t = $(this), nm;
- $t.children("a" + (_this.data.languages ? "" : ":eq(0)") ).not(":has(.jstree-checkbox)").prepend(" ").parent().not(".jstree-checked, .jstree-unchecked").addClass( ts ? "jstree-unchecked" : c );
- if(rc) {
- if(!$t.children(":checkbox").length) {
- nm = rcn.call(_this, $t);
- $t.prepend(" ");
- }
- else {
- $t.children(":checkbox").addClass("jstree-real-checkbox");
- }
- }
- if(!ts) {
- if(c === "jstree-checked" || $t.hasClass("jstree-checked") || $t.children(':checked').length) {
- $t.find("li").addBack().addClass("jstree-checked").children(":checkbox").prop("checked", true);
- }
- }
- else {
- if($t.hasClass("jstree-checked") || $t.children(':checked').length) {
- $t.addClass("jstree-checked").children(":checkbox").prop("checked", true);
- }
- }
- });
- });
- if(!ts) {
- obj.find(".jstree-checked").parent().parent().each(function () { _this._repair_state(this); });
- }
- },
- change_state : function (obj, state) {
- obj = this._get_node(obj);
- var coll = false, rc = this._get_settings().checkbox.real_checkboxes;
- if(!obj || obj === -1) { return false; }
- state = (state === false || state === true) ? state : obj.hasClass("jstree-checked");
- if(this._get_settings().checkbox.two_state) {
- if(state) {
- obj.removeClass("jstree-checked").addClass("jstree-unchecked");
- if(rc) { obj.children(":checkbox").prop("checked", false); }
- }
- else {
- obj.removeClass("jstree-unchecked").addClass("jstree-checked");
- if(rc) { obj.children(":checkbox").prop("checked", true); }
- }
- }
- else {
- if(state) {
- coll = obj.find("li").addBack();
- if(!coll.filter(".jstree-checked, .jstree-undetermined").length) { return false; }
- coll.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");
- if(rc) { coll.children(":checkbox").prop("checked", false); }
- }
- else {
- coll = obj.find("li").addBack();
- if(!coll.filter(".jstree-unchecked, .jstree-undetermined").length) { return false; }
- coll.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");
- if(rc) { coll.children(":checkbox").prop("checked", true); }
- if(this.data.ui) { this.data.ui.last_selected = obj; }
- this.data.checkbox.last_selected = obj;
- }
- obj.parentsUntil(".jstree", "li").each(function () {
- var $this = $(this);
- if(state) {
- if($this.children("ul").children("li.jstree-checked, li.jstree-undetermined").length) {
- $this.parentsUntil(".jstree", "li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
- if(rc) { $this.parentsUntil(".jstree", "li").addBack().children(":checkbox").prop("checked", false); }
- return false;
- }
- else {
- $this.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");
- if(rc) { $this.children(":checkbox").prop("checked", false); }
- }
- }
- else {
- if($this.children("ul").children("li.jstree-unchecked, li.jstree-undetermined").length) {
- $this.parentsUntil(".jstree", "li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
- if(rc) { $this.parentsUntil(".jstree", "li").addBack().children(":checkbox").prop("checked", false); }
- return false;
- }
- else {
- $this.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");
- if(rc) { $this.children(":checkbox").prop("checked", true); }
- }
- }
- });
- }
- if(this.data.ui && this.data.checkbox.noui) { this.data.ui.selected = this.get_checked(); }
- this.__callback(obj);
- return true;
- },
- check_node : function (obj) {
- if(this.change_state(obj, false)) {
- obj = this._get_node(obj);
- if(this._get_settings().checkbox.checked_parent_open) {
- var t = this;
- obj.parents(".jstree-closed").each(function () { t.open_node(this, false, true); });
- }
- this.__callback({ "obj" : obj });
- }
- },
- uncheck_node : function (obj) {
- if(this.change_state(obj, true)) { this.__callback({ "obj" : this._get_node(obj) }); }
- },
- check_all : function () {
- var _this = this,
- coll = this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li");
- coll.each(function () {
- _this.change_state(this, false);
- });
- this.__callback();
- },
- uncheck_all : function () {
- var _this = this,
- coll = this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li");
- coll.each(function () {
- _this.change_state(this, true);
- });
- this.__callback();
- },
-
- is_checked : function(obj) {
- obj = this._get_node(obj);
- return obj.length ? obj.is(".jstree-checked") : false;
- },
- get_checked : function (obj, get_all) {
- obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj);
- return get_all || this._get_settings().checkbox.two_state ? obj.find(".jstree-checked") : obj.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked");
- },
- get_unchecked : function (obj, get_all) {
- obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj);
- return get_all || this._get_settings().checkbox.two_state ? obj.find(".jstree-unchecked") : obj.find("> ul > .jstree-unchecked, .jstree-undetermined > ul > .jstree-unchecked");
- },
-
- show_checkboxes : function () { this.get_container().children("ul").removeClass("jstree-no-checkboxes"); },
- hide_checkboxes : function () { this.get_container().children("ul").addClass("jstree-no-checkboxes"); },
-
- _repair_state : function (obj) {
- obj = this._get_node(obj);
- if(!obj.length) { return; }
- if(this._get_settings().checkbox.two_state) {
- obj.find('li').addBack().not('.jstree-checked').removeClass('jstree-undetermined').addClass('jstree-unchecked').children(':checkbox').prop('checked', true);
- return;
- }
- var rc = this._get_settings().checkbox.real_checkboxes,
- a = obj.find("> ul > .jstree-checked").length,
- b = obj.find("> ul > .jstree-undetermined").length,
- c = obj.find("> ul > li").length;
- if(c === 0) { if(obj.hasClass("jstree-undetermined")) { this.change_state(obj, false); } }
- else if(a === 0 && b === 0) { this.change_state(obj, true); }
- else if(a === c) { this.change_state(obj, false); }
- else {
- obj.parentsUntil(".jstree","li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
- if(rc) { obj.parentsUntil(".jstree", "li").addBack().children(":checkbox").prop("checked", false); }
- }
- },
- reselect : function () {
- if(this.data.ui && this.data.checkbox.noui) {
- var _this = this,
- s = this.data.ui.to_select;
- s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); });
- this.deselect_all();
- $.each(s, function (i, val) { _this.check_node(val); });
- this.__callback();
- }
- else {
- this.__call_old();
- }
- },
- save_loaded : function () {
- var _this = this;
- this.data.core.to_load = [];
- this.get_container_ul().find("li.jstree-closed.jstree-undetermined").each(function () {
- if(this.id) { _this.data.core.to_load.push("#" + this.id); }
- });
- }
- }
- });
- $(function() {
- var css_string = '.jstree .jstree-real-checkbox { display:none; } ';
- $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree XML plugin
- * The XML data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions.
- */
-(function ($) {
- $.vakata.xslt = function (xml, xsl, callback) {
- var r = false, p, q, s;
- // IE9
- if(r === false && window.ActiveXObject) {
- try {
- r = new ActiveXObject("Msxml2.XSLTemplate");
- q = new ActiveXObject("Msxml2.DOMDocument");
- q.loadXML(xml);
- s = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
- s.loadXML(xsl);
- r.stylesheet = s;
- p = r.createProcessor();
- p.input = q;
- p.transform();
- r = p.output;
- }
- catch (e) { }
- }
- xml = $.parseXML(xml);
- xsl = $.parseXML(xsl);
- // FF, Chrome
- if(r === false && typeof (XSLTProcessor) !== "undefined") {
- p = new XSLTProcessor();
- p.importStylesheet(xsl);
- r = p.transformToFragment(xml, document);
- r = $('
').append(r).html();
- }
- // OLD IE
- if(r === false && typeof (xml.transformNode) !== "undefined") {
- r = xml.transformNode(xsl);
- }
- callback.call(null, r);
- };
- var xsl = {
- 'nest' : '<' + '?xml version="1.0" encoding="utf-8" ?>' +
- '' +
- ' ' +
- '' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- '' +
- ' ' +
- ' ' +
- ' ' +
- ' ',
-
- 'flat' : '<' + '?xml version="1.0" encoding="utf-8" ?>' +
- '' +
- ' ' +
- '' +
- ' ' +
- ' ' + /* the last `or` may be removed */
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- '' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' jstree-last ' +
- ' ' +
- ' jstree-open ' +
- ' jstree-closed ' +
- ' jstree-leaf ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' # ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' jstree-icon ' +
- ' ' +
- ' ' +
- ' background:url( ) center center no-repeat; ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' '
- },
- escape_xml = function(string) {
- return string
- .toString()
- .replace(/&/g, '&')
- .replace(//g, '>')
- .replace(/"/g, '"')
- .replace(/'/g, ''');
- };
- $.jstree.plugin("xml_data", {
- defaults : {
- data : false,
- ajax : false,
- xsl : "flat",
- clean_node : false,
- correct_state : true,
- get_skip_empty : false,
- get_include_preamble : true
- },
- _fn : {
- load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_xml(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); },
- _is_loaded : function (obj) {
- var s = this._get_settings().xml_data;
- obj = this._get_node(obj);
- return obj == -1 || !obj || (!s.ajax && !$.isFunction(s.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
- },
- load_node_xml : function (obj, s_call, e_call) {
- var s = this.get_settings().xml_data,
- error_func = function () {},
- success_func = function () {};
-
- obj = this._get_node(obj);
- if(obj && obj !== -1) {
- if(obj.data("jstree_is_loading")) { return; }
- else { obj.data("jstree_is_loading",true); }
- }
- switch(!0) {
- case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied.";
- case ($.isFunction(s.data)):
- s.data.call(this, obj, $.proxy(function (d) {
- this.parse_xml(d, $.proxy(function (d) {
- if(d) {
- d = d.replace(/ ?xmlns="[^"]*"/ig, "");
- if(d.length > 10) {
- d = $(d);
- if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
- else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.removeData("jstree_is_loading"); }
- if(s.clean_node) { this.clean_node(obj); }
- if(s_call) { s_call.call(this); }
- }
- else {
- if(obj && obj !== -1) {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(s.correct_state) {
- this.correct_state(obj);
- if(s_call) { s_call.call(this); }
- }
- }
- else {
- if(s.correct_state) {
- this.get_container().children("ul").empty();
- if(s_call) { s_call.call(this); }
- }
- }
- }
- }
- }, this));
- }, this));
- break;
- case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
- if(!obj || obj == -1) {
- this.parse_xml(s.data, $.proxy(function (d) {
- if(d) {
- d = d.replace(/ ?xmlns="[^"]*"/ig, "");
- if(d.length > 10) {
- d = $(d);
- this.get_container().children("ul").empty().append(d.children());
- if(s.clean_node) { this.clean_node(obj); }
- if(s_call) { s_call.call(this); }
- }
- }
- else {
- if(s.correct_state) {
- this.get_container().children("ul").empty();
- if(s_call) { s_call.call(this); }
- }
- }
- }, this));
- }
- break;
- case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
- error_func = function (x, t, e) {
- var ef = this.get_settings().xml_data.ajax.error;
- if(ef) { ef.call(this, x, t, e); }
- if(obj !== -1 && obj.length) {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(t === "success" && s.correct_state) { this.correct_state(obj); }
- }
- else {
- if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
- }
- if(e_call) { e_call.call(this); }
- };
- success_func = function (d, t, x) {
- d = x.responseText;
- var sf = this.get_settings().xml_data.ajax.success;
- if(sf) { d = sf.call(this,d,t,x) || d; }
- if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "")) {
- return error_func.call(this, x, t, "");
- }
- this.parse_xml(d, $.proxy(function (d) {
- if(d) {
- d = d.replace(/ ?xmlns="[^"]*"/ig, "");
- if(d.length > 10) {
- d = $(d);
- if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
- else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.removeData("jstree_is_loading"); }
- if(s.clean_node) { this.clean_node(obj); }
- if(s_call) { s_call.call(this); }
- }
- else {
- if(obj && obj !== -1) {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(s.correct_state) {
- this.correct_state(obj);
- if(s_call) { s_call.call(this); }
- }
- }
- else {
- if(s.correct_state) {
- this.get_container().children("ul").empty();
- if(s_call) { s_call.call(this); }
- }
- }
- }
- }
- }, this));
- };
- s.ajax.context = this;
- s.ajax.error = error_func;
- s.ajax.success = success_func;
- if(!s.ajax.dataType) { s.ajax.dataType = "xml"; }
- if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
- if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
- $.ajax(s.ajax);
- break;
- }
- },
- parse_xml : function (xml, callback) {
- var s = this._get_settings().xml_data;
- $.vakata.xslt(xml, xsl[s.xsl], callback);
- },
- get_xml : function (tp, obj, li_attr, a_attr, is_callback) {
- var result = "",
- s = this._get_settings(),
- _this = this,
- tmp1, tmp2, li, a, lang;
- if(!tp) { tp = "flat"; }
- if(!is_callback) { is_callback = 0; }
- obj = this._get_node(obj);
- if(!obj || obj === -1) { obj = this.get_container().find("> ul > li"); }
- li_attr = $.isArray(li_attr) ? li_attr : [ "id", "class" ];
- if(!is_callback && this.data.types && $.inArray(s.types.type_attr, li_attr) === -1) { li_attr.push(s.types.type_attr); }
-
- a_attr = $.isArray(a_attr) ? a_attr : [ ];
-
- if(!is_callback) {
- if(s.xml_data.get_include_preamble) {
- result += '<' + '?xml version="1.0" encoding="UTF-8"?' + '>';
- }
- result += "";
- }
- obj.each(function () {
- result += "- ";
- result += "
";
- a = li.children("a");
- a.each(function () {
- tmp1 = $(this);
- lang = false;
- result += "";
- result += "";
- result += " ";
- });
- result += " ";
- tmp2 = li[0].id || true;
- li = li.find("> ul > li");
- if(li.length) { tmp2 = _this.get_xml(tp, li, li_attr, a_attr, tmp2); }
- else { tmp2 = ""; }
- if(tp == "nest") { result += tmp2; }
- result += " ";
- if(tp == "flat") { result += tmp2; }
- });
- if(!is_callback) { result += " "; }
- return result;
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree search plugin
- * Enables both sync and async search on the tree
- * DOES NOT WORK WITH JSON PROGRESSIVE RENDER
- */
-(function ($) {
- if($().jquery.split('.')[1] >= 8) {
- $.expr[':'].jstree_contains = $.expr.createPseudo(function(search) {
- return function(a) {
- return (a.textContent || a.innerText || "").toLowerCase().indexOf(search.toLowerCase())>=0;
- };
- });
- $.expr[':'].jstree_title_contains = $.expr.createPseudo(function(search) {
- return function(a) {
- return (a.getAttribute("title") || "").toLowerCase().indexOf(search.toLowerCase())>=0;
- };
- });
- }
- else {
- $.expr[':'].jstree_contains = function(a,i,m){
- return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
- };
- $.expr[':'].jstree_title_contains = function(a,i,m) {
- return (a.getAttribute("title") || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
- };
- }
- $.jstree.plugin("search", {
- __init : function () {
- this.data.search.str = "";
- this.data.search.result = $();
- if(this._get_settings().search.show_only_matches) {
- this.get_container()
- .bind("search.jstree", function (e, data) {
- $(this).children("ul").find("li").hide().removeClass("jstree-last");
- data.rslt.nodes.parentsUntil(".jstree").addBack().show()
- .filter("ul").each(function () { $(this).children("li:visible").eq(-1).addClass("jstree-last"); });
- })
- .bind("clear_search.jstree", function () {
- $(this).children("ul").find("li").css("display","").end().end().jstree("clean_node", -1);
- });
- }
- },
- defaults : {
- ajax : false,
- search_method : "jstree_contains", // for case insensitive - jstree_contains
- show_only_matches : false
- },
- _fn : {
- search : function (str, skip_async) {
- if($.trim(str) === "") { this.clear_search(); return; }
- var s = this.get_settings().search,
- t = this,
- error_func = function () { },
- success_func = function () { };
- this.data.search.str = str;
-
- if(!skip_async && s.ajax !== false && this.get_container_ul().find("li.jstree-closed:not(:has(ul)):eq(0)").length > 0) {
- this.search.supress_callback = true;
- error_func = function () { };
- success_func = function (d, t, x) {
- var sf = this.get_settings().search.ajax.success;
- if(sf) { d = sf.call(this,d,t,x) || d; }
- this.data.search.to_open = d;
- this._search_open();
- };
- s.ajax.context = this;
- s.ajax.error = error_func;
- s.ajax.success = success_func;
- if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, str); }
- if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, str); }
- if(!s.ajax.data) { s.ajax.data = { "search_string" : str }; }
- if(!s.ajax.dataType || /^json/.exec(s.ajax.dataType)) { s.ajax.dataType = "json"; }
- $.ajax(s.ajax);
- return;
- }
- if(this.data.search.result.length) { this.clear_search(); }
- this.data.search.result = this.get_container().find("a" + (this.data.languages ? "." + this.get_lang() : "" ) + ":" + (s.search_method) + "(" + this.data.search.str + ")");
- this.data.search.result.addClass("jstree-search").parent().parents(".jstree-closed").each(function () {
- t.open_node(this, false, true);
- });
- this.__callback({ nodes : this.data.search.result, str : str });
- },
- clear_search : function (str) {
- this.data.search.result.removeClass("jstree-search");
- this.__callback(this.data.search.result);
- this.data.search.result = $();
- },
- _search_open : function (is_callback) {
- var _this = this,
- done = true,
- current = [],
- remaining = [];
- if(this.data.search.to_open.length) {
- $.each(this.data.search.to_open, function (i, val) {
- if(val == "#") { return true; }
- if($(val).length && $(val).is(".jstree-closed")) { current.push(val); }
- else { remaining.push(val); }
- });
- if(current.length) {
- this.data.search.to_open = remaining;
- $.each(current, function (i, val) {
- _this.open_node(val, function () { _this._search_open(true); });
- });
- done = false;
- }
- }
- if(done) { this.search(this.data.search.str, true); }
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree contextmenu plugin
- */
-(function ($) {
- $.vakata.context = {
- hide_on_mouseleave : false,
-
- cnt : $(""),
- vis : false,
- tgt : false,
- par : false,
- func : false,
- data : false,
- rtl : false,
- show : function (s, t, x, y, d, p, rtl) {
- $.vakata.context.rtl = !!rtl;
- var html = $.vakata.context.parse(s), h, w;
- if(!html) { return; }
- $.vakata.context.vis = true;
- $.vakata.context.tgt = t;
- $.vakata.context.par = p || t || null;
- $.vakata.context.data = d || null;
- $.vakata.context.cnt
- .html(html)
- .css({ "visibility" : "hidden", "display" : "block", "left" : 0, "top" : 0 });
-
- if($.vakata.context.hide_on_mouseleave) {
- $.vakata.context.cnt
- .one("mouseleave", function(e) { $.vakata.context.hide(); });
- }
-
- h = $.vakata.context.cnt.height();
- w = $.vakata.context.cnt.width();
- if(x + w > $(document).width()) {
- x = $(document).width() - (w + 5);
- $.vakata.context.cnt.find("li > ul").addClass("right");
- }
- if(y + h > $(document).height()) {
- y = y - (h + t[0].offsetHeight);
- $.vakata.context.cnt.find("li > ul").addClass("bottom");
- }
-
- $.vakata.context.cnt
- .css({ "left" : x, "top" : y })
- .find("li:has(ul)")
- .bind("mouseenter", function (e) {
- var w = $(document).width(),
- h = $(document).height(),
- ul = $(this).children("ul").show();
- if(w !== $(document).width()) { ul.toggleClass("right"); }
- if(h !== $(document).height()) { ul.toggleClass("bottom"); }
- })
- .bind("mouseleave", function (e) {
- $(this).children("ul").hide();
- })
- .end()
- .css({ "visibility" : "visible" })
- .show();
- $(document).triggerHandler("context_show.vakata");
- },
- hide : function () {
- $.vakata.context.vis = false;
- $.vakata.context.cnt.attr("class","").css({ "visibility" : "hidden" });
- $(document).triggerHandler("context_hide.vakata");
- },
- parse : function (s, is_callback) {
- if(!s) { return false; }
- var str = "",
- tmp = false,
- was_sep = true;
- if(!is_callback) { $.vakata.context.func = {}; }
- str += "";
- $.each(s, function (i, val) {
- if(!val) { return true; }
- $.vakata.context.func[i] = val.action;
- if(!was_sep && val.separator_before) {
- str += " ";
- }
- was_sep = false;
- str += "";
- if(val.separator_after) {
- str += " ";
- was_sep = true;
- }
- });
- str = str.replace(/<\/li\>$/,"");
- str += " ";
- $(document).triggerHandler("context_parse.vakata");
- return str.length > 10 ? str : false;
- },
- exec : function (i) {
- if($.isFunction($.vakata.context.func[i])) {
- // if is string - eval and call it!
- $.vakata.context.func[i].call($.vakata.context.data, $.vakata.context.par);
- return true;
- }
- else { return false; }
- }
- };
- $(function () {
- var css_string = '' +
- '#vakata-contextmenu { display:block; visibility:hidden; left:0; top:-200px; position:absolute; margin:0; padding:0; min-width:180px; background:#ebebeb; border:1px solid silver; z-index:10000; *width:180px; } ' +
- '#vakata-contextmenu ul { min-width:180px; *width:180px; } ' +
- '#vakata-contextmenu ul, #vakata-contextmenu li { margin:0; padding:0; list-style-type:none; display:block; } ' +
- '#vakata-contextmenu li { line-height:20px; min-height:20px; position:relative; padding:0px; } ' +
- '#vakata-contextmenu li a { padding:1px 6px; line-height:17px; display:block; text-decoration:none; margin:1px 1px 0 1px; } ' +
- '#vakata-contextmenu li ins { float:left; width:16px; height:16px; text-decoration:none; margin-right:2px; } ' +
- '#vakata-contextmenu li a:hover, #vakata-contextmenu li.vakata-hover > a { background:gray; color:white; } ' +
- '#vakata-contextmenu li ul { display:none; position:absolute; top:-2px; left:100%; background:#ebebeb; border:1px solid gray; } ' +
- '#vakata-contextmenu .right { right:100%; left:auto; } ' +
- '#vakata-contextmenu .bottom { bottom:-1px; top:auto; } ' +
- '#vakata-contextmenu li.vakata-separator { min-height:0; height:1px; line-height:1px; font-size:1px; overflow:hidden; margin:0 2px; background:silver; /* border-top:1px solid #fefefe; */ padding:0; } ';
- $.vakata.css.add_sheet({ str : css_string, title : "vakata" });
- $.vakata.context.cnt
- .delegate("a","click", function (e) { e.preventDefault(); })
- .delegate("a","mouseup", function (e) {
- if(!$(this).parent().hasClass("jstree-contextmenu-disabled") && $.vakata.context.exec($(this).attr("rel"))) {
- $.vakata.context.hide();
- }
- else { $(this).blur(); }
- })
- .delegate("a","mouseover", function () {
- $.vakata.context.cnt.find(".vakata-hover").removeClass("vakata-hover");
- })
- .appendTo("body");
- $(document).bind("mousedown", function (e) { if($.vakata.context.vis && !$.contains($.vakata.context.cnt[0], e.target)) { $.vakata.context.hide(); } });
- if(typeof $.hotkeys !== "undefined") {
- $(document)
- .bind("keydown", "up", function (e) {
- if($.vakata.context.vis) {
- var o = $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").prevAll("li:not(.vakata-separator)").first();
- if(!o.length) { o = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").last(); }
- o.addClass("vakata-hover");
- e.stopImmediatePropagation();
- e.preventDefault();
- }
- })
- .bind("keydown", "down", function (e) {
- if($.vakata.context.vis) {
- var o = $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").nextAll("li:not(.vakata-separator)").first();
- if(!o.length) { o = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").first(); }
- o.addClass("vakata-hover");
- e.stopImmediatePropagation();
- e.preventDefault();
- }
- })
- .bind("keydown", "right", function (e) {
- if($.vakata.context.vis) {
- $.vakata.context.cnt.find(".vakata-hover").children("ul").show().children("li:not(.vakata-separator)").removeClass("vakata-hover").first().addClass("vakata-hover");
- e.stopImmediatePropagation();
- e.preventDefault();
- }
- })
- .bind("keydown", "left", function (e) {
- if($.vakata.context.vis) {
- $.vakata.context.cnt.find(".vakata-hover").children("ul").hide().children(".vakata-separator").removeClass("vakata-hover");
- e.stopImmediatePropagation();
- e.preventDefault();
- }
- })
- .bind("keydown", "esc", function (e) {
- $.vakata.context.hide();
- e.preventDefault();
- })
- .bind("keydown", "space", function (e) {
- $.vakata.context.cnt.find(".vakata-hover").last().children("a").click();
- e.preventDefault();
- });
- }
- });
-
- $.jstree.plugin("contextmenu", {
- __init : function () {
- this.get_container()
- .delegate("a", "contextmenu.jstree", $.proxy(function (e) {
- e.preventDefault();
- if(!$(e.currentTarget).hasClass("jstree-loading")) {
- this.show_contextmenu(e.currentTarget, e.pageX, e.pageY);
- }
- }, this))
- .delegate("a", "click.jstree", $.proxy(function (e) {
- if(this.data.contextmenu) {
- $.vakata.context.hide();
- }
- }, this))
- .bind("destroy.jstree", $.proxy(function () {
- // TODO: move this to descruct method
- if(this.data.contextmenu) {
- $.vakata.context.hide();
- }
- }, this));
- $(document).bind("context_hide.vakata", $.proxy(function () { this.data.contextmenu = false; }, this));
- },
- defaults : {
- select_node : false, // requires UI plugin
- show_at_node : true,
- items : { // Could be a function that should return an object like this one
- "create" : {
- "separator_before" : false,
- "separator_after" : true,
- "label" : "Create",
- "action" : function (obj) { this.create(obj); }
- },
- "rename" : {
- "separator_before" : false,
- "separator_after" : false,
- "label" : "Rename",
- "action" : function (obj) { this.rename(obj); }
- },
- "remove" : {
- "separator_before" : false,
- "icon" : false,
- "separator_after" : false,
- "label" : "Delete",
- "action" : function (obj) { if(this.is_selected(obj)) { this.remove(); } else { this.remove(obj); } }
- },
- "ccp" : {
- "separator_before" : true,
- "icon" : false,
- "separator_after" : false,
- "label" : "Edit",
- "action" : false,
- "submenu" : {
- "cut" : {
- "separator_before" : false,
- "separator_after" : false,
- "label" : "Cut",
- "action" : function (obj) { this.cut(obj); }
- },
- "copy" : {
- "separator_before" : false,
- "icon" : false,
- "separator_after" : false,
- "label" : "Copy",
- "action" : function (obj) { this.copy(obj); }
- },
- "paste" : {
- "separator_before" : false,
- "icon" : false,
- "separator_after" : false,
- "label" : "Paste",
- "action" : function (obj) { this.paste(obj); }
- }
- }
- }
- }
- },
- _fn : {
- show_contextmenu : function (obj, x, y) {
- obj = this._get_node(obj);
- var s = this.get_settings().contextmenu,
- a = obj.children("a:visible:eq(0)"),
- o = false,
- i = false;
- if(s.select_node && this.data.ui && !this.is_selected(obj)) {
- this.deselect_all();
- this.select_node(obj, true);
- }
- if(s.show_at_node || typeof x === "undefined" || typeof y === "undefined") {
- o = a.offset();
- x = o.left;
- y = o.top + this.data.core.li_height;
- }
- i = obj.data("jstree") && obj.data("jstree").contextmenu ? obj.data("jstree").contextmenu : s.items;
- if($.isFunction(i)) { i = i.call(this, obj); }
- this.data.contextmenu = true;
- $.vakata.context.show(i, a, x, y, this, obj, this._get_settings().core.rtl);
- if(this.data.themes) { $.vakata.context.cnt.attr("class", "jstree-" + this.data.themes.theme + "-context"); }
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree types plugin
- * Adds support types of nodes
- * You can set an attribute on each li node, that represents its type.
- * According to the type setting the node may get custom icon/validation rules
- */
-(function ($) {
- $.jstree.plugin("types", {
- __init : function () {
- var s = this._get_settings().types;
- this.data.types.attach_to = [];
- this.get_container()
- .bind("init.jstree", $.proxy(function () {
- var types = s.types,
- attr = s.type_attr,
- icons_css = "",
- _this = this;
-
- $.each(types, function (i, tp) {
- $.each(tp, function (k, v) {
- if(!/^(max_depth|max_children|icon|valid_children)$/.test(k)) { _this.data.types.attach_to.push(k); }
- });
- if(!tp.icon) { return true; }
- if( tp.icon.image || tp.icon.position) {
- if(i == "default") { icons_css += '.jstree-' + _this.get_index() + ' a > .jstree-icon { '; }
- else { icons_css += '.jstree-' + _this.get_index() + ' li[' + attr + '="' + i + '"] > a > .jstree-icon { '; }
- if(tp.icon.image) { icons_css += ' background-image:url(' + tp.icon.image + '); '; }
- if(tp.icon.position){ icons_css += ' background-position:' + tp.icon.position + '; '; }
- else { icons_css += ' background-position:0 0; '; }
- icons_css += '} ';
- }
- });
- if(icons_css !== "") { $.vakata.css.add_sheet({ 'str' : icons_css, title : "jstree-types" }); }
- }, this))
- .bind("before.jstree", $.proxy(function (e, data) {
- var s, t,
- o = this._get_settings().types.use_data ? this._get_node(data.args[0]) : false,
- d = o && o !== -1 && o.length ? o.data("jstree") : false;
- if(d && d.types && d.types[data.func] === false) { e.stopImmediatePropagation(); return false; }
- if($.inArray(data.func, this.data.types.attach_to) !== -1) {
- if(!data.args[0] || (!data.args[0].tagName && !data.args[0].jquery)) { return; }
- s = this._get_settings().types.types;
- t = this._get_type(data.args[0]);
- if(
- (
- (s[t] && typeof s[t][data.func] !== "undefined") ||
- (s["default"] && typeof s["default"][data.func] !== "undefined")
- ) && this._check(data.func, data.args[0]) === false
- ) {
- e.stopImmediatePropagation();
- return false;
- }
- }
- }, this));
- if(is_ie6) {
- this.get_container()
- .bind("load_node.jstree set_type.jstree", $.proxy(function (e, data) {
- var r = data && data.rslt && data.rslt.obj && data.rslt.obj !== -1 ? this._get_node(data.rslt.obj).parent() : this.get_container_ul(),
- c = false,
- s = this._get_settings().types;
- $.each(s.types, function (i, tp) {
- if(tp.icon && (tp.icon.image || tp.icon.position)) {
- c = i === "default" ? r.find("li > a > .jstree-icon") : r.find("li[" + s.type_attr + "='" + i + "'] > a > .jstree-icon");
- if(tp.icon.image) { c.css("backgroundImage","url(" + tp.icon.image + ")"); }
- c.css("backgroundPosition", tp.icon.position || "0 0");
- }
- });
- }, this));
- }
- },
- defaults : {
- // defines maximum number of root nodes (-1 means unlimited, -2 means disable max_children checking)
- max_children : -1,
- // defines the maximum depth of the tree (-1 means unlimited, -2 means disable max_depth checking)
- max_depth : -1,
- // defines valid node types for the root nodes
- valid_children : "all",
-
- // whether to use $.data
- use_data : false,
- // where is the type stores (the rel attribute of the LI element)
- type_attr : "rel",
- // a list of types
- types : {
- // the default type
- "default" : {
- "max_children" : -1,
- "max_depth" : -1,
- "valid_children": "all"
-
- // Bound functions - you can bind any other function here (using boolean or function)
- //"select_node" : true
- }
- }
- },
- _fn : {
- _types_notify : function (n, data) {
- if(data.type && this._get_settings().types.use_data) {
- this.set_type(data.type, n);
- }
- },
- _get_type : function (obj) {
- obj = this._get_node(obj);
- return (!obj || !obj.length) ? false : obj.attr(this._get_settings().types.type_attr) || "default";
- },
- set_type : function (str, obj) {
- obj = this._get_node(obj);
- var ret = (!obj.length || !str) ? false : obj.attr(this._get_settings().types.type_attr, str);
- if(ret) { this.__callback({ obj : obj, type : str}); }
- return ret;
- },
- _check : function (rule, obj, opts) {
- obj = this._get_node(obj);
- var v = false, t = this._get_type(obj), d = 0, _this = this, s = this._get_settings().types, data = false;
- if(obj === -1) {
- if(!!s[rule]) { v = s[rule]; }
- else { return; }
- }
- else {
- if(t === false) { return; }
- data = s.use_data ? obj.data("jstree") : false;
- if(data && data.types && typeof data.types[rule] !== "undefined") { v = data.types[rule]; }
- else if(!!s.types[t] && typeof s.types[t][rule] !== "undefined") { v = s.types[t][rule]; }
- else if(!!s.types["default"] && typeof s.types["default"][rule] !== "undefined") { v = s.types["default"][rule]; }
- }
- if($.isFunction(v)) { v = v.call(this, obj); }
- if(rule === "max_depth" && obj !== -1 && opts !== false && s.max_depth !== -2 && v !== 0) {
- // also include the node itself - otherwise if root node it is not checked
- obj.children("a:eq(0)").parentsUntil(".jstree","li").each(function (i) {
- // check if current depth already exceeds global tree depth
- if(s.max_depth !== -1 && s.max_depth - (i + 1) <= 0) { v = 0; return false; }
- d = (i === 0) ? v : _this._check(rule, this, false);
- // check if current node max depth is already matched or exceeded
- if(d !== -1 && d - (i + 1) <= 0) { v = 0; return false; }
- // otherwise - set the max depth to the current value minus current depth
- if(d >= 0 && (d - (i + 1) < v || v < 0) ) { v = d - (i + 1); }
- // if the global tree depth exists and it minus the nodes calculated so far is less than `v` or `v` is unlimited
- if(s.max_depth >= 0 && (s.max_depth - (i + 1) < v || v < 0) ) { v = s.max_depth - (i + 1); }
- });
- }
- return v;
- },
- check_move : function () {
- if(!this.__call_old()) { return false; }
- var m = this._get_move(),
- s = m.rt._get_settings().types,
- mc = m.rt._check("max_children", m.cr),
- md = m.rt._check("max_depth", m.cr),
- vc = m.rt._check("valid_children", m.cr),
- ch = 0, d = 1, t;
-
- if(vc === "none") { return false; }
- if($.isArray(vc) && m.ot && m.ot._get_type) {
- m.o.each(function () {
- if($.inArray(m.ot._get_type(this), vc) === -1) { d = false; return false; }
- });
- if(d === false) { return false; }
- }
- if(s.max_children !== -2 && mc !== -1) {
- ch = m.cr === -1 ? this.get_container().find("> ul > li").not(m.o).length : m.cr.find("> ul > li").not(m.o).length;
- if(ch + m.o.length > mc) { return false; }
- }
- if(s.max_depth !== -2 && md !== -1) {
- d = 0;
- if(md === 0) { return false; }
- if(typeof m.o.d === "undefined") {
- // TODO: deal with progressive rendering and async when checking max_depth (how to know the depth of the moved node)
- t = m.o;
- while(t.length > 0) {
- t = t.find("> ul > li");
- d ++;
- }
- m.o.d = d;
- }
- if(md - m.o.d < 0) { return false; }
- }
- return true;
- },
- create_node : function (obj, position, js, callback, is_loaded, skip_check) {
- if(!skip_check && (is_loaded || this._is_loaded(obj))) {
- var p = (typeof position == "string" && position.match(/^before|after$/i) && obj !== -1) ? this._get_parent(obj) : this._get_node(obj),
- s = this._get_settings().types,
- mc = this._check("max_children", p),
- md = this._check("max_depth", p),
- vc = this._check("valid_children", p),
- ch;
- if(typeof js === "string") { js = { data : js }; }
- if(!js) { js = {}; }
- if(vc === "none") { return false; }
- if($.isArray(vc)) {
- if(!js.attr || !js.attr[s.type_attr]) {
- if(!js.attr) { js.attr = {}; }
- js.attr[s.type_attr] = vc[0];
- }
- else {
- if($.inArray(js.attr[s.type_attr], vc) === -1) { return false; }
- }
- }
- if(s.max_children !== -2 && mc !== -1) {
- ch = p === -1 ? this.get_container().find("> ul > li").length : p.find("> ul > li").length;
- if(ch + 1 > mc) { return false; }
- }
- if(s.max_depth !== -2 && md !== -1 && (md - 1) < 0) { return false; }
- }
- return this.__call_old(true, obj, position, js, callback, is_loaded, skip_check);
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree HTML plugin
- * The HTML data store. Datastores are build by replacing the `load_node` and `_is_loaded` functions.
- */
-(function ($) {
- $.jstree.plugin("html_data", {
- __init : function () {
- // this used to use html() and clean the whitespace, but this way any attached data was lost
- this.data.html_data.original_container_html = this.get_container().find(" > ul > li").clone(true);
- // remove white space from LI node - otherwise nodes appear a bit to the right
- this.data.html_data.original_container_html.find("li").addBack().contents().filter(function() { return this.nodeType == 3; }).remove();
- },
- defaults : {
- data : false,
- ajax : false,
- correct_state : true
- },
- _fn : {
- load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_html(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); },
- _is_loaded : function (obj) {
- obj = this._get_node(obj);
- return obj == -1 || !obj || (!this._get_settings().html_data.ajax && !$.isFunction(this._get_settings().html_data.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
- },
- load_node_html : function (obj, s_call, e_call) {
- var d,
- s = this.get_settings().html_data,
- error_func = function () {},
- success_func = function () {};
- obj = this._get_node(obj);
- if(obj && obj !== -1) {
- if(obj.data("jstree_is_loading")) { return; }
- else { obj.data("jstree_is_loading",true); }
- }
- switch(!0) {
- case ($.isFunction(s.data)):
- s.data.call(this, obj, $.proxy(function (d) {
- if(d && d !== "" && d.toString && d.toString().replace(/^[\s\n]+$/,"") !== "") {
- d = $(d);
- if(!d.is("ul")) { d = $("").append(d); }
- if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); }
- else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree_is_loading"); }
- this.clean_node(obj);
- if(s_call) { s_call.call(this); }
- }
- else {
- if(obj && obj !== -1) {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(s.correct_state) {
- this.correct_state(obj);
- if(s_call) { s_call.call(this); }
- }
- }
- else {
- if(s.correct_state) {
- this.get_container().children("ul").empty();
- if(s_call) { s_call.call(this); }
- }
- }
- }
- }, this));
- break;
- case (!s.data && !s.ajax):
- if(!obj || obj == -1) {
- this.get_container()
- .children("ul").empty()
- .append(this.data.html_data.original_container_html)
- .find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end()
- .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");
- this.clean_node();
- }
- if(s_call) { s_call.call(this); }
- break;
- case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
- if(!obj || obj == -1) {
- d = $(s.data);
- if(!d.is("ul")) { d = $("").append(d); }
- this.get_container()
- .children("ul").empty().append(d.children())
- .find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end()
- .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");
- this.clean_node();
- }
- if(s_call) { s_call.call(this); }
- break;
- case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
- obj = this._get_node(obj);
- error_func = function (x, t, e) {
- var ef = this.get_settings().html_data.ajax.error;
- if(ef) { ef.call(this, x, t, e); }
- if(obj != -1 && obj.length) {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(t === "success" && s.correct_state) { this.correct_state(obj); }
- }
- else {
- if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
- }
- if(e_call) { e_call.call(this); }
- };
- success_func = function (d, t, x) {
- var sf = this.get_settings().html_data.ajax.success;
- if(sf) { d = sf.call(this,d,t,x) || d; }
- if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "")) {
- return error_func.call(this, x, t, "");
- }
- if(d) {
- d = $(d);
- if(!d.is("ul")) { d = $("").append(d); }
- if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); }
- else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree_is_loading"); }
- this.clean_node(obj);
- if(s_call) { s_call.call(this); }
- }
- else {
- if(obj && obj !== -1) {
- obj.children("a.jstree-loading").removeClass("jstree-loading");
- obj.removeData("jstree_is_loading");
- if(s.correct_state) {
- this.correct_state(obj);
- if(s_call) { s_call.call(this); }
- }
- }
- else {
- if(s.correct_state) {
- this.get_container().children("ul").empty();
- if(s_call) { s_call.call(this); }
- }
- }
- }
- };
- s.ajax.context = this;
- s.ajax.error = error_func;
- s.ajax.success = success_func;
- if(!s.ajax.dataType) { s.ajax.dataType = "html"; }
- if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
- if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
- $.ajax(s.ajax);
- break;
- }
- }
- }
- });
- // include the HTML data plugin by default
- $.jstree.defaults.plugins.push("html_data");
-})(jQuery);
-//*/
-
-/*
- * jsTree themeroller plugin
- * Adds support for jQuery UI themes. Include this at the end of your plugins list, also make sure "themes" is not included.
- */
-(function ($) {
- $.jstree.plugin("themeroller", {
- __init : function () {
- var s = this._get_settings().themeroller;
- this.get_container()
- .addClass("ui-widget-content")
- .addClass("jstree-themeroller")
- .delegate("a","mouseenter.jstree", function (e) {
- if(!$(e.currentTarget).hasClass("jstree-loading")) {
- $(this).addClass(s.item_h);
- }
- })
- .delegate("a","mouseleave.jstree", function () {
- $(this).removeClass(s.item_h);
- })
- .bind("init.jstree", $.proxy(function (e, data) {
- data.inst.get_container().find("> ul > li > .jstree-loading > ins").addClass("ui-icon-refresh");
- this._themeroller(data.inst.get_container().find("> ul > li"));
- }, this))
- .bind("open_node.jstree create_node.jstree", $.proxy(function (e, data) {
- this._themeroller(data.rslt.obj);
- }, this))
- .bind("loaded.jstree refresh.jstree", $.proxy(function (e) {
- this._themeroller();
- }, this))
- .bind("close_node.jstree", $.proxy(function (e, data) {
- this._themeroller(data.rslt.obj);
- }, this))
- .bind("delete_node.jstree", $.proxy(function (e, data) {
- this._themeroller(data.rslt.parent);
- }, this))
- .bind("correct_state.jstree", $.proxy(function (e, data) {
- data.rslt.obj
- .children("ins.jstree-icon").removeClass(s.opened + " " + s.closed + " ui-icon").end()
- .find("> a > ins.ui-icon")
- .filter(function() {
- return this.className.toString()
- .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
- .indexOf("ui-icon-") === -1;
- }).removeClass(s.item_open + " " + s.item_clsd).addClass(s.item_leaf || "jstree-no-icon");
- }, this))
- .bind("select_node.jstree", $.proxy(function (e, data) {
- data.rslt.obj.children("a").addClass(s.item_a);
- }, this))
- .bind("deselect_node.jstree deselect_all.jstree", $.proxy(function (e, data) {
- this.get_container()
- .find("a." + s.item_a).removeClass(s.item_a).end()
- .find("a.jstree-clicked").addClass(s.item_a);
- }, this))
- .bind("dehover_node.jstree", $.proxy(function (e, data) {
- data.rslt.obj.children("a").removeClass(s.item_h);
- }, this))
- .bind("hover_node.jstree", $.proxy(function (e, data) {
- this.get_container()
- .find("a." + s.item_h).not(data.rslt.obj).removeClass(s.item_h);
- data.rslt.obj.children("a").addClass(s.item_h);
- }, this))
- .bind("move_node.jstree", $.proxy(function (e, data) {
- this._themeroller(data.rslt.o);
- this._themeroller(data.rslt.op);
- }, this));
- },
- __destroy : function () {
- var s = this._get_settings().themeroller,
- c = [ "ui-icon" ];
- $.each(s, function (i, v) {
- v = v.split(" ");
- if(v.length) { c = c.concat(v); }
- });
- this.get_container()
- .removeClass("ui-widget-content")
- .find("." + c.join(", .")).removeClass(c.join(" "));
- },
- _fn : {
- _themeroller : function (obj) {
- var s = this._get_settings().themeroller;
- obj = (!obj || obj == -1) ? this.get_container_ul() : this._get_node(obj);
- obj = (!obj || obj == -1) ? this.get_container_ul() : obj.parent();
- obj
- .find("li.jstree-closed")
- .children("ins.jstree-icon").removeClass(s.opened).addClass("ui-icon " + s.closed).end()
- .children("a").addClass(s.item)
- .children("ins.jstree-icon").addClass("ui-icon")
- .filter(function() {
- return this.className.toString()
- .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
- .indexOf("ui-icon-") === -1;
- }).removeClass(s.item_leaf + " " + s.item_open).addClass(s.item_clsd || "jstree-no-icon")
- .end()
- .end()
- .end()
- .end()
- .find("li.jstree-open")
- .children("ins.jstree-icon").removeClass(s.closed).addClass("ui-icon " + s.opened).end()
- .children("a").addClass(s.item)
- .children("ins.jstree-icon").addClass("ui-icon")
- .filter(function() {
- return this.className.toString()
- .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
- .indexOf("ui-icon-") === -1;
- }).removeClass(s.item_leaf + " " + s.item_clsd).addClass(s.item_open || "jstree-no-icon")
- .end()
- .end()
- .end()
- .end()
- .find("li.jstree-leaf")
- .children("ins.jstree-icon").removeClass(s.closed + " ui-icon " + s.opened).end()
- .children("a").addClass(s.item)
- .children("ins.jstree-icon").addClass("ui-icon")
- .filter(function() {
- return this.className.toString()
- .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
- .indexOf("ui-icon-") === -1;
- }).removeClass(s.item_clsd + " " + s.item_open).addClass(s.item_leaf || "jstree-no-icon");
- }
- },
- defaults : {
- "opened" : "ui-icon-triangle-1-se",
- "closed" : "ui-icon-triangle-1-e",
- "item" : "ui-state-default",
- "item_h" : "ui-state-hover",
- "item_a" : "ui-state-active",
- "item_open" : "ui-icon-folder-open",
- "item_clsd" : "ui-icon-folder-collapsed",
- "item_leaf" : "ui-icon-document"
- }
- });
- $(function() {
- var css_string = '' +
- '.jstree-themeroller .ui-icon { overflow:visible; } ' +
- '.jstree-themeroller a { padding:0 2px; } ' +
- '.jstree-themeroller .jstree-no-icon { display:none; }';
- $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree unique plugin
- * Forces different names amongst siblings (still a bit experimental)
- * NOTE: does not check language versions (it will not be possible to have nodes with the same title, even in different languages)
- */
-(function ($) {
- $.jstree.plugin("unique", {
- __init : function () {
- this.get_container()
- .bind("before.jstree", $.proxy(function (e, data) {
- var nms = [], res = true, p, t;
- if(data.func == "move_node") {
- // obj, ref, position, is_copy, is_prepared, skip_check
- if(data.args[4] === true) {
- if(data.args[0].o && data.args[0].o.length) {
- data.args[0].o.children("a").each(function () { nms.push($(this).text().replace(/^\s+/g,"")); });
- res = this._check_unique(nms, data.args[0].np.find("> ul > li").not(data.args[0].o), "move_node");
- }
- }
- }
- if(data.func == "create_node") {
- // obj, position, js, callback, is_loaded
- if(data.args[4] || this._is_loaded(data.args[0])) {
- p = this._get_node(data.args[0]);
- if(data.args[1] && (data.args[1] === "before" || data.args[1] === "after")) {
- p = this._get_parent(data.args[0]);
- if(!p || p === -1) { p = this.get_container(); }
- }
- if(typeof data.args[2] === "string") { nms.push(data.args[2]); }
- else if(!data.args[2] || !data.args[2].data) { nms.push(this._get_string("new_node")); }
- else { nms.push(data.args[2].data); }
- res = this._check_unique(nms, p.find("> ul > li"), "create_node");
- }
- }
- if(data.func == "rename_node") {
- // obj, val
- nms.push(data.args[1]);
- t = this._get_node(data.args[0]);
- p = this._get_parent(t);
- if(!p || p === -1) { p = this.get_container(); }
- res = this._check_unique(nms, p.find("> ul > li").not(t), "rename_node");
- }
- if(!res) {
- e.stopPropagation();
- return false;
- }
- }, this));
- },
- defaults : {
- error_callback : $.noop
- },
- _fn : {
- _check_unique : function (nms, p, func) {
- var cnms = [], ok = true;
- p.children("a").each(function () { cnms.push($(this).text().replace(/^\s+/g,"")); });
- if(!cnms.length || !nms.length) { return true; }
- $.each(nms, function (i, v) {
- if($.inArray(v, cnms) !== -1) {
- ok = false;
- return false;
- }
- });
- if(!ok) {
- this._get_settings().unique.error_callback.call(null, nms, p, func);
- }
- return ok;
- },
- check_move : function () {
- if(!this.__call_old()) { return false; }
- var p = this._get_move(), nms = [];
- if(p.o && p.o.length) {
- p.o.children("a").each(function () { nms.push($(this).text().replace(/^\s+/g,"")); });
- return this._check_unique(nms, p.np.find("> ul > li").not(p.o), "check_move");
- }
- return true;
- }
- }
- });
-})(jQuery);
-//*/
-
-/*
- * jsTree wholerow plugin
- * Makes select and hover work on the entire width of the node
- * MAY BE HEAVY IN LARGE DOM
- */
-(function ($) {
- $.jstree.plugin("wholerow", {
- __init : function () {
- if(!this.data.ui) { throw "jsTree wholerow: jsTree UI plugin not included."; }
- this.data.wholerow.html = false;
- this.data.wholerow.to = false;
- this.get_container()
- .bind("init.jstree", $.proxy(function (e, data) {
- this._get_settings().core.animation = 0;
- }, this))
- .bind("open_node.jstree create_node.jstree clean_node.jstree loaded.jstree", $.proxy(function (e, data) {
- this._prepare_wholerow_span( data && data.rslt && data.rslt.obj ? data.rslt.obj : -1 );
- }, this))
- .bind("search.jstree clear_search.jstree reopen.jstree after_open.jstree after_close.jstree create_node.jstree delete_node.jstree clean_node.jstree", $.proxy(function (e, data) {
- if(this.data.to) { clearTimeout(this.data.to); }
- this.data.to = setTimeout( (function (t, o) { return function() { t._prepare_wholerow_ul(o); }; })(this, data && data.rslt && data.rslt.obj ? data.rslt.obj : -1), 0);
- }, this))
- .bind("deselect_all.jstree", $.proxy(function (e, data) {
- this.get_container().find(" > .jstree-wholerow .jstree-clicked").removeClass("jstree-clicked " + (this.data.themeroller ? this._get_settings().themeroller.item_a : "" ));
- }, this))
- .bind("select_node.jstree deselect_node.jstree ", $.proxy(function (e, data) {
- data.rslt.obj.each(function () {
- var ref = data.inst.get_container().find(" > .jstree-wholerow li:visible:eq(" + ( parseInt((($(this).offset().top - data.inst.get_container().offset().top + data.inst.get_container()[0].scrollTop) / data.inst.data.core.li_height),10)) + ")");
- // ref.children("a")[e.type === "select_node" ? "addClass" : "removeClass"]("jstree-clicked");
- ref.children("a").attr("class",data.rslt.obj.children("a").attr("class"));
- });
- }, this))
- .bind("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) {
- this.get_container().find(" > .jstree-wholerow .jstree-hovered").removeClass("jstree-hovered " + (this.data.themeroller ? this._get_settings().themeroller.item_h : "" ));
- if(e.type === "hover_node") {
- var ref = this.get_container().find(" > .jstree-wholerow li:visible:eq(" + ( parseInt(((data.rslt.obj.offset().top - this.get_container().offset().top + this.get_container()[0].scrollTop) / this.data.core.li_height),10)) + ")");
- // ref.children("a").addClass("jstree-hovered");
- ref.children("a").attr("class",data.rslt.obj.children(".jstree-hovered").attr("class"));
- }
- }, this))
- .delegate(".jstree-wholerow-span, ins.jstree-icon, li", "click.jstree", function (e) {
- var n = $(e.currentTarget);
- if(e.target.tagName === "A" || (e.target.tagName === "INS" && n.closest("li").is(".jstree-open, .jstree-closed"))) { return; }
- n.closest("li").children("a:visible:eq(0)").click();
- e.stopImmediatePropagation();
- })
- .delegate("li", "mouseover.jstree", $.proxy(function (e) {
- e.stopImmediatePropagation();
- if($(e.currentTarget).children(".jstree-hovered, .jstree-clicked").length) { return false; }
- this.hover_node(e.currentTarget);
- return false;
- }, this))
- .delegate("li", "mouseleave.jstree", $.proxy(function (e) {
- if($(e.currentTarget).children("a").hasClass("jstree-hovered").length) { return; }
- this.dehover_node(e.currentTarget);
- }, this));
- if(is_ie7 || is_ie6) {
- $.vakata.css.add_sheet({ str : ".jstree-" + this.get_index() + " { position:relative; } ", title : "jstree" });
- }
- },
- defaults : {
- },
- __destroy : function () {
- this.get_container().children(".jstree-wholerow").remove();
- this.get_container().find(".jstree-wholerow-span").remove();
- },
- _fn : {
- _prepare_wholerow_span : function (obj) {
- obj = !obj || obj == -1 ? this.get_container().find("> ul > li") : this._get_node(obj);
- if(obj === false) { return; } // added for removing root nodes
- obj.each(function () {
- $(this).find("li").addBack().each(function () {
- var $t = $(this);
- if($t.children(".jstree-wholerow-span").length) { return true; }
- $t.prepend(" ");
- });
- });
- },
- _prepare_wholerow_ul : function () {
- var o = this.get_container().children("ul").eq(0), h = o.html();
- o.addClass("jstree-wholerow-real");
- if(this.data.wholerow.last_html !== h) {
- this.data.wholerow.last_html = h;
- this.get_container().children(".jstree-wholerow").remove();
- this.get_container().append(
- o.clone().removeClass("jstree-wholerow-real")
- .wrapAll("
").parent()
- .width(o.parent()[0].scrollWidth)
- .css("top", (o.height() + ( is_ie7 ? 5 : 0)) * -1 )
- .find("li[id]").each(function () { this.removeAttribute("id"); }).end()
- );
- }
- }
- }
- });
- $(function() {
- var css_string = '' +
- '.jstree .jstree-wholerow-real { position:relative; z-index:1; } ' +
- '.jstree .jstree-wholerow-real li { cursor:pointer; } ' +
- '.jstree .jstree-wholerow-real a { border-left-color:transparent !important; border-right-color:transparent !important; } ' +
- '.jstree .jstree-wholerow { position:relative; z-index:0; height:0; } ' +
- '.jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { width:100%; } ' +
- '.jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li, .jstree .jstree-wholerow a { margin:0 !important; padding:0 !important; } ' +
- '.jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { background:transparent !important; }' +
- '.jstree .jstree-wholerow ins, .jstree .jstree-wholerow span, .jstree .jstree-wholerow input { display:none !important; }' +
- '.jstree .jstree-wholerow a, .jstree .jstree-wholerow a:hover { text-indent:-9999px; !important; width:100%; padding:0 !important; border-right-width:0px !important; border-left-width:0px !important; } ' +
- '.jstree .jstree-wholerow-span { position:absolute; left:0; margin:0px; padding:0; height:18px; border-width:0; padding:0; z-index:0; }';
- if(is_ff2) {
- css_string += '' +
- '.jstree .jstree-wholerow a { display:block; height:18px; margin:0; padding:0; border:0; } ' +
- '.jstree .jstree-wholerow-real a { border-color:transparent !important; } ';
- }
- if(is_ie7 || is_ie6) {
- css_string += '' +
- '.jstree .jstree-wholerow, .jstree .jstree-wholerow li, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow a { margin:0; padding:0; line-height:18px; } ' +
- '.jstree .jstree-wholerow a { display:block; height:18px; line-height:18px; overflow:hidden; } ';
- }
- $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
- });
-})(jQuery);
-//*/
-
-/*
-* jsTree model plugin
-* This plugin gets jstree to use a class model to retrieve data, creating great dynamism
-*/
-(function ($) {
- var nodeInterface = ["getChildren","getChildrenCount","getAttr","getName","getProps"],
- validateInterface = function(obj, inter) {
- var valid = true;
- obj = obj || {};
- inter = [].concat(inter);
- $.each(inter, function (i, v) {
- if(!$.isFunction(obj[v])) { valid = false; return false; }
- });
- return valid;
- };
- $.jstree.plugin("model", {
- __init : function () {
- if(!this.data.json_data) { throw "jsTree model: jsTree json_data plugin not included."; }
- this._get_settings().json_data.data = function (n, b) {
- var obj = (n == -1) ? this._get_settings().model.object : n.data("jstree_model");
- if(!validateInterface(obj, nodeInterface)) { return b.call(null, false); }
- if(this._get_settings().model.async) {
- obj.getChildren($.proxy(function (data) {
- this.model_done(data, b);
- }, this));
- }
- else {
- this.model_done(obj.getChildren(), b);
- }
- };
- },
- defaults : {
- object : false,
- id_prefix : false,
- async : false
- },
- _fn : {
- model_done : function (data, callback) {
- var ret = [],
- s = this._get_settings(),
- _this = this;
-
- if(!$.isArray(data)) { data = [data]; }
- $.each(data, function (i, nd) {
- var r = nd.getProps() || {};
- r.attr = nd.getAttr() || {};
- if(nd.getChildrenCount()) { r.state = "closed"; }
- r.data = nd.getName();
- if(!$.isArray(r.data)) { r.data = [r.data]; }
- if(_this.data.types && $.isFunction(nd.getType)) {
- r.attr[s.types.type_attr] = nd.getType();
- }
- if(r.attr.id && s.model.id_prefix) { r.attr.id = s.model.id_prefix + r.attr.id; }
- if(!r.metadata) { r.metadata = { }; }
- r.metadata.jstree_model = nd;
- ret.push(r);
- });
- callback.call(null, ret);
- }
- }
- });
-})(jQuery);
-//*/
-
-})();
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree1.0/jquery.jstree.min.js b/dashboard-ui/thirdparty/jstree1.0/jquery.jstree.min.js
deleted file mode 100644
index b9349634e..000000000
--- a/dashboard-ui/thirdparty/jstree1.0/jquery.jstree.min.js
+++ /dev/null
@@ -1,831 +0,0 @@
-(function () {
- if (!jQuery || !jQuery.jstree) {
- var r = !1, s = !1, t = !1; (function (b) {
- b.vakata = {}; b.vakata.css = {
- get_css: function (a, b, c) { a = a.toLowerCase(); var e = c.cssRules || c.rules, d = 0; do { if (e.length && d > e.length + 5) break; if (e[d].selectorText && e[d].selectorText.toLowerCase() == a) return !0 === b ? (c.removeRule && c.removeRule(d), c.deleteRule && c.deleteRule(d), !0) : e[d] } while (e[++d]); return !1 }, add_css: function (a, c) { if (b.jstree.css.get_css(a, !1, c)) return !1; c.insertRule ? c.insertRule(a + " { }", 0) : c.addRule(a, null, 0); return b.vakata.css.get_css(a) },
- remove_css: function (a, c) { return b.vakata.css.get_css(a, !0, c) }, add_sheet: function (a) {
- var c = !1, e = !0; if (a.str) return a.title && (c = b("style[id='" + a.title + "-stylesheet']")[0]), c ? e = !1 : (c = document.createElement("style"), c.setAttribute("type", "text/css"), a.title && c.setAttribute("id", a.title + "-stylesheet")), c.styleSheet ? e ? (document.getElementsByTagName("head")[0].appendChild(c), c.styleSheet.cssText = a.str) : c.styleSheet.cssText = c.styleSheet.cssText + " " + a.str : (c.appendChild(document.createTextNode(a.str)), document.getElementsByTagName("head")[0].appendChild(c)),
- c.sheet || c.styleSheet; if (a.url) if (document.createStyleSheet) try { document.createStyleSheet(a.url) } catch (d) { } else return c = document.createElement("link"), c.rel = "stylesheet", c.type = "text/css", c.media = "all", c.href = a.url, document.getElementsByTagName("head")[0].appendChild(c), c.styleSheet
- }
- }; var a = [], c = -1, d = {}, e = {}; b.fn.jstree = function (f) {
- var c = "string" == typeof f, e = Array.prototype.slice.call(arguments, 1), h = this; if (c) {
- if ("_" == f.substring(0, 1)) return h; this.each(function () {
- var c = a[b.data(this, "jstree_instance_id")],
- c = c && b.isFunction(c[f]) ? c[f].apply(c, e) : c; if ("undefined" !== typeof c && (0 === f.indexOf("is_") || !0 !== c && !1 !== c)) return h = c, !1
- })
- } else this.each(function () {
- var c = b.data(this, "jstree_instance_id"), g = [], h = f ? b.extend({}, !0, f) : {}, n = b(this), q = !1, u = [], g = g.concat(e); n.data("jstree") && g.push(n.data("jstree")); h = g.length ? b.extend.apply(null, [!0, h].concat(g)) : h; "undefined" !== typeof c && a[c] && a[c].destroy(); c = parseInt(a.push({}), 10) - 1; b.data(this, "jstree_instance_id", c); h.plugins = b.isArray(h.plugins) ? h.plugins : b.jstree.defaults.plugins.slice();
- h.plugins.unshift("core"); h.plugins = h.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g, "$1$2$4").replace(/,,+/g, ",").replace(/,$/, "").split(","); q = b.extend(!0, {}, b.jstree.defaults, h); q.plugins = h.plugins; b.each(d, function (a, f) { -1 === b.inArray(a, q.plugins) ? (q[a] = null, delete q[a]) : u.push(a) }); q.plugins = u; a[c] = new b.jstree._instance(c, b(this).addClass("jstree jstree-" + c), q); b.each(a[c]._get_settings().plugins, function (b, f) { a[c].data[f] = {} }); b.each(a[c]._get_settings().plugins, function (b, f) {
- d[f] &&
- d[f].__init.apply(a[c])
- }); setTimeout(function () { a[c] && a[c].init() }, 0)
- }); return h
- }; b.jstree = {
- defaults: { plugins: [] }, _focused: function () { return a[c] || null }, _reference: function (f) { if (a[f]) return a[f]; var c = b(f); c.length || "string" !== typeof f || (c = b("#" + f)); return c.length ? a[c.closest(".jstree").data("jstree_instance_id")] || null : null }, _instance: function (a, c, e) {
- this.data = { core: {} }; this.get_settings = function () { return b.extend(!0, {}, e) }; this._get_settings = function () { return e }; this.get_index = function () { return a };
- this.get_container = function () { return c }; this.get_container_ul = function () { return c.children("ul:eq(0)") }; this._set_settings = function (a) { e = b.extend(!0, {}, e, a) }
- }, _fn: {}, plugin: function (a, c) {
- c = b.extend({}, { __init: b.noop, __destroy: b.noop, _fn: {}, defaults: !1 }, c); d[a] = c; b.jstree.defaults[a] = c.defaults; b.each(c._fn, function (c, e) {
- e.plugin = a; e.old = b.jstree._fn[c]; b.jstree._fn[c] = function () {
- var a, f = e, d = Array.prototype.slice.call(arguments); a = new b.Event("before.jstree"); var g = !1; if (!0 !== this.data.core.locked ||
- "unlock" === c || "is_locked" === c) {
- do { if (f && f.plugin && -1 !== b.inArray(f.plugin, this._get_settings().plugins)) break; f = f.old } while (f); if (f) {
- if (0 === c.indexOf("_")) a = f.apply(this, d); else {
- a = this.get_container().triggerHandler(a, { func: c, inst: this, args: d, plugin: f.plugin }); if (!1 === a) return; "undefined" !== typeof a && (d = a); a = f.apply(b.extend({}, this, {
- __callback: function (a) { this.get_container().triggerHandler(c + ".jstree", { inst: this, args: d, rslt: a, rlbk: g }) }, __rollback: function () { return g = this.get_rollback() }, __call_old: function (a) {
- return f.old.apply(this,
- a ? Array.prototype.slice.call(arguments, 1) : d)
- }
- }), d)
- } return a
- }
- }
- }; b.jstree._fn[c].old = e.old; b.jstree._fn[c].plugin = a
- })
- }, rollback: function (f) { f && (b.isArray(f) || (f = [f]), b.each(f, function (b, f) { a[f.i].set_rollback(f.h, f.d) })) }
- }; b.jstree._fn = b.jstree._instance.prototype = {}; b(function () {
- var a = navigator.userAgent.toLowerCase(), c = (a.match(/.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, "0"])[1], e = ".jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } .jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; min-width:18px; } .jstree-rtl li { margin-left:0; margin-right:18px; } .jstree > ul > li { margin-left:0px; } .jstree-rtl > ul > li { margin-right:0px; } .jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } .jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } .jstree a:focus { outline: none; } .jstree a > ins { height:16px; width:16px; } .jstree a > .jstree-icon { margin-right:3px; } .jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } li.jstree-open > ul { display:block; } li.jstree-closed > ul { display:none; } ";
- if (/msie/.test(a) && 6 == parseInt(c, 10)) { r = !0; try { document.execCommand("BackgroundImageCache", !1, !0) } catch (d) { } e += ".jstree li { height:18px; margin-left:0; margin-right:0; } .jstree li li { margin-left:18px; } .jstree-rtl li li { margin-left:0px; margin-right:18px; } li.jstree-open ul { display:block; } li.jstree-closed ul { display:none !important; } .jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } .jstree li a ins { height:16px; width:16px; margin-right:3px; } .jstree-rtl li a ins { margin-right:0px; margin-left:3px; } " } /msie/.test(a) &&
- 7 == parseInt(c, 10) && (s = !0, e += ".jstree li a { border-width:0 !important; padding:0px 2px !important; } "); !/compatible/.test(a) && /mozilla/.test(a) && 1.9 > parseFloat(c, 10) && (t = !0, e += ".jstree ins { display:-moz-inline-box; } .jstree li { line-height:12px; } .jstree a { display:-moz-inline-box; } .jstree .jstree-no-icons .jstree-checkbox { display:-moz-inline-stack !important; } "); b.vakata.css.add_sheet({ str: e, title: "jstree" })
- }); b.jstree.plugin("core", {
- __init: function () {
- this.data.core.locked = !1; this.data.core.to_open =
- this.get_settings().core.initially_open; this.data.core.to_load = this.get_settings().core.initially_load
- }, defaults: { html_titles: !1, animation: 500, initially_open: [], initially_load: [], open_parents: !0, notify_plugins: !0, rtl: !1, load_open: !1, strings: { loading: "Loading ...", new_node: "New node", multiple_selection: "Multiple selection" } }, _fn: {
- init: function () {
- this.set_focus(); this._get_settings().core.rtl && this.get_container().addClass("jstree-rtl").css("direction", "rtl"); this.get_container().html(""); this.data.core.li_height = this.get_container_ul().find("li.jstree-closed, li.jstree-leaf").eq(0).height() || 18; this.get_container().delegate("li > ins", "click.jstree", b.proxy(function (a) { a = b(a.target); this.toggle_node(a) }, this)).bind("mousedown.jstree", b.proxy(function () { this.set_focus() }, this)).bind("dblclick.jstree", function (a) {
- if (document.selection && document.selection.empty) document.selection.empty(); else if (window.getSelection) {
- a = window.getSelection();
- try { a.removeAllRanges(), a.collapse() } catch (b) { }
- }
- }); this._get_settings().core.notify_plugins && this.get_container().bind("load_node.jstree", b.proxy(function (a, c) { var e = this._get_node(c.rslt.obj), d = this; -1 === e && (e = this.get_container_ul()); e.length && e.find("li").each(function () { var a = b(this); a.data("jstree") && b.each(a.data("jstree"), function (c, f) { d.data[c] && b.isFunction(d["_" + c + "_notify"]) && d["_" + c + "_notify"].call(d, a, f) }) }) }, this)); this._get_settings().core.load_open && this.get_container().bind("load_node.jstree",
- b.proxy(function (a, c) { var e = this._get_node(c.rslt.obj), d = this; -1 === e && (e = this.get_container_ul()); e.length && e.find("li.jstree-open:not(:has(ul))").each(function () { d.load_node(this, b.noop, b.noop) }) }, this)); this.__callback(); this.load_node(-1, function () { this.loaded(); this.reload_nodes() })
- }, destroy: function () {
- var f, e = this.get_index(), l = this._get_settings(), h = this; b.each(l.plugins, function (a, b) { try { d[b].__destroy.apply(h) } catch (c) { } }); this.__callback(); if (this.is_focused()) for (f in a) if (a.hasOwnProperty(f) &&
- f != e) { a[f].set_focus(); break } e === c && (c = -1); this.get_container().unbind(".jstree").undelegate(".jstree").removeData("jstree_instance_id").find("[class^='jstree']").addBack().attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig, "") }); b(document).unbind(".jstree-" + e).undelegate(".jstree-" + e); a[e] = null; delete a[e]
- }, _core_notify: function (a, b) { b.opened && this.open_node(a, !1, !0) }, lock: function () {
- this.data.core.locked = !0; this.get_container().children("ul").addClass("jstree-locked").css("opacity",
- "0.7"); this.__callback({})
- }, unlock: function () { this.data.core.locked = !1; this.get_container().children("ul").removeClass("jstree-locked").css("opacity", "1"); this.__callback({}) }, is_locked: function () { return this.data.core.locked }, save_opened: function () {
- var a = this; this.data.core.to_open = []; this.get_container_ul().find("li.jstree-open").each(function () {
- this.id && a.data.core.to_open.push("#" + this.id.toString().replace(/^#/, "").replace(/\\\//g, "/").replace(/\//g, "\\/").replace(/\\\./g, ".").replace(/\./g,
- "\\.").replace(/\:/g, "\\:"))
- }); this.__callback(a.data.core.to_open)
- }, save_loaded: function () { }, reload_nodes: function (a) {
- var c = this, e = !0, d = [], m = []; a || (this.data.core.reopen = !1, this.data.core.refreshing = !0, this.data.core.to_open = b.map(b.makeArray(this.data.core.to_open), function (a) { return "#" + a.toString().replace(/^#/, "").replace(/\\\//g, "/").replace(/\//g, "\\/").replace(/\\\./g, ".").replace(/\./g, "\\.").replace(/\:/g, "\\:") }), this.data.core.to_load = b.map(b.makeArray(this.data.core.to_load), function (a) {
- return "#" +
- a.toString().replace(/^#/, "").replace(/\\\//g, "/").replace(/\//g, "\\/").replace(/\\\./g, ".").replace(/\./g, "\\.").replace(/\:/g, "\\:")
- }), this.data.core.to_open.length && (this.data.core.to_load = this.data.core.to_load.concat(this.data.core.to_open))); this.data.core.to_load.length && (b.each(this.data.core.to_load, function (a, c) { if ("#" == c) return !0; b(c).length ? d.push(c) : m.push(c) }), d.length && (this.data.core.to_load = m, b.each(d, function (a, b) {
- c._is_loaded(b) || (c.load_node(b, function () { c.reload_nodes(!0) }, function () { c.reload_nodes(!0) }),
- e = !1)
- }))); this.data.core.to_open.length && b.each(this.data.core.to_open, function (a, b) { c.open_node(b, !1, !0) }); e && (this.data.core.reopen && clearTimeout(this.data.core.reopen), this.data.core.reopen = setTimeout(function () { c.__callback({}, c) }, 50), this.data.core.refreshing = !1, this.reopen())
- }, reopen: function () { var a = this; this.data.core.to_open.length && b.each(this.data.core.to_open, function (b, c) { a.open_node(c, !1, !0) }); this.__callback({}) }, refresh: function (a) {
- var b = this; this.save_opened(); a || (a = -1); (a = this._get_node(a)) ||
- (a = -1); -1 !== a ? a.children("UL").remove() : this.get_container_ul().empty(); this.load_node(a, function () { b.__callback({ obj: a }); b.reload_nodes() })
- }, loaded: function () { this.__callback() }, set_focus: function () { if (!this.is_focused()) { var a = b.jstree._focused(); a && a.unset_focus(); this.get_container().addClass("jstree-focused"); c = this.get_index(); this.__callback() } }, is_focused: function () { return c == this.get_index() }, unset_focus: function () {
- this.is_focused() && (this.get_container().removeClass("jstree-focused"), c =
- -1); this.__callback()
- }, _get_node: function (a) { var c = b(a, this.get_container()); if (c.is(".jstree") || -1 == a) return -1; c = c.closest("li", this.get_container()); return c.length ? c : !1 }, _get_next: function (a, b) { a = this._get_node(a); return -1 === a ? this.get_container().find("> ul > li:first-child") : a.length ? b ? 0 < a.nextAll("li").size() ? a.nextAll("li:eq(0)") : !1 : a.hasClass("jstree-open") ? a.find("li:eq(0)") : 0 < a.nextAll("li").size() ? a.nextAll("li:eq(0)") : a.parentsUntil(".jstree", "li").next("li").eq(0) : !1 }, _get_prev: function (a,
- b) { a = this._get_node(a); if (-1 === a) return this.get_container().find("> ul > li:last-child"); if (!a.length) return !1; if (b) return 0 < a.prevAll("li").length ? a.prevAll("li:eq(0)") : !1; if (a.prev("li").length) { for (a = a.prev("li").eq(0) ; a.hasClass("jstree-open") ;) a = a.children("ul:eq(0)").children("li:last"); return a } var c = a.parentsUntil(".jstree", "li:eq(0)"); return c.length ? c : !1 }, _get_parent: function (a) { a = this._get_node(a); if (-1 == a || !a.length) return !1; a = a.parentsUntil(".jstree", "li:eq(0)"); return a.length ? a : -1 },
- _get_children: function (a) { a = this._get_node(a); return -1 === a ? this.get_container().children("ul:eq(0)").children("li") : a.length ? a.children("ul:eq(0)").children("li") : !1 }, get_path: function (a, b) { var c = [], e = this; a = this._get_node(a); if (-1 === a || !a || !a.length) return !1; a.parentsUntil(".jstree", "li").each(function () { c.push(b ? this.id : e.get_text(this)) }); c.reverse(); c.push(b ? a.attr("id") : this.get_text(a)); return c }, _get_string: function (a) { return this._get_settings().core.strings[a] || a }, is_open: function (a) {
- return (a =
- this._get_node(a)) && -1 !== a && a.hasClass("jstree-open")
- }, is_closed: function (a) { return (a = this._get_node(a)) && -1 !== a && a.hasClass("jstree-closed") }, is_leaf: function (a) { return (a = this._get_node(a)) && -1 !== a && a.hasClass("jstree-leaf") }, correct_state: function (a) { a = this._get_node(a); if (!a || -1 === a) return !1; a.removeClass("jstree-closed jstree-open").addClass("jstree-leaf").children("ul").remove(); this.__callback({ obj: a }) }, open_node: function (a, b, c) {
- a = this._get_node(a); if (!a.length) return !1; if (!a.hasClass("jstree-closed")) return b &&
- b.call(), !1; var e = c || r ? 0 : this._get_settings().core.animation, d = this; this._is_loaded(a) ? (this._get_settings().core.open_parents && a.parentsUntil(".jstree", ".jstree-closed").each(function () { d.open_node(this, !1, !0) }), e && a.children("ul").css("display", "none"), a.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading"), e ? a.children("ul").stop(!0, !0).slideDown(e, function () { this.style.display = ""; d.after_open(a) }) : d.after_open(a), this.__callback({ obj: a }), b && b.call()) :
- (a.children("a").addClass("jstree-loading"), this.load_node(a, function () { d.open_node(a, b, c) }, b))
- }, after_open: function (a) { this.__callback({ obj: a }) }, close_node: function (a, b) {
- a = this._get_node(a); var c = b || r ? 0 : this._get_settings().core.animation, e = this; if (!a.length || !a.hasClass("jstree-open")) return !1; c && a.children("ul").attr("style", "display:block !important"); a.removeClass("jstree-open").addClass("jstree-closed"); c ? a.children("ul").stop(!0, !0).slideUp(c, function () { this.style.display = ""; e.after_close(a) }) :
- e.after_close(a); this.__callback({ obj: a })
- }, after_close: function (a) { this.__callback({ obj: a }) }, toggle_node: function (a) { a = this._get_node(a); if (a.hasClass("jstree-closed")) return this.open_node(a); if (a.hasClass("jstree-open")) return this.close_node(a) }, open_all: function (a, b, c) {
- (a = a ? this._get_node(a) : -1) && -1 !== a || (a = this.get_container_ul()); c ? a = a.find("li.jstree-closed") : (c = a, a = a.is(".jstree-closed") ? a.find("li.jstree-closed").addBack() : a.find("li.jstree-closed")); var e = this; a.each(function () {
- var a = this;
- e._is_loaded(this) ? e.open_node(this, !1, !b) : e.open_node(this, function () { e.open_all(a, b, c) }, !b)
- }); 0 === c.find("li.jstree-closed").length && this.__callback({ obj: c })
- }, close_all: function (a, b) { var c = this; (a = a ? this._get_node(a) : this.get_container()) && -1 !== a || (a = this.get_container_ul()); a.find("li.jstree-open").addBack().each(function () { c.close_node(this, !b) }); this.__callback({ obj: a }) }, clean_node: function (a) {
- a = a && -1 != a ? b(a) : this.get_container_ul(); a = a.is("li") ? a.find("li").addBack() : a.find("li"); a.removeClass("jstree-last").filter("li:last-child").addClass("jstree-last").end().filter(":has(li)").not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed");
- a.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove(); this.__callback({ obj: a })
- }, get_rollback: function () { this.__callback(); return { i: this.get_index(), h: this.get_container().children("ul").clone(!0), d: this.data } }, set_rollback: function (a, b) { this.get_container().empty().append(a); this.data = b; this.__callback() }, load_node: function (a, b, c) { this.__callback({ obj: a }) }, _is_loaded: function (a) { return !0 }, create_node: function (a, c, e, d, m) {
- a = this._get_node(a); c = "undefined" === typeof c ?
- "last" : c; var k = b(" "), p = this._get_settings().core, n; if (-1 !== a && !a.length) return !1; if (!m && !this._is_loaded(a)) return this.load_node(a, function () { this.create_node(a, c, e, d, !0) }), !1; this.__rollback(); "string" === typeof e && (e = { data: e }); e || (e = {}); e.attr && k.attr(e.attr); e.metadata && k.data(e.metadata); e.state && k.addClass("jstree-" + e.state); e.data || (e.data = this._get_string("new_node")); b.isArray(e.data) || (n = e.data, e.data = [], e.data.push(n)); b.each(e.data, function (a, c) {
- n = b(" "); b.isFunction(c) && (c = c.call(this,
- e)); if ("string" == typeof c) n.attr("href", "#")[p.html_titles ? "html" : "text"](c); else c.attr || (c.attr = {}), c.attr.href || (c.attr.href = "#"), n.attr(c.attr)[p.html_titles ? "html" : "text"](c.title), c.language && n.addClass(c.language); n.prepend(" "); !c.icon && e.icon && (c.icon = e.icon); c.icon && (-1 === c.icon.indexOf("/") ? n.children("ins").addClass(c.icon) : n.children("ins").css("background", "url('" + c.icon + "') center center no-repeat")); k.append(n)
- }); k.prepend(" ");
- -1 === a && (a = this.get_container(), "before" === c && (c = "first"), "after" === c && (c = "last")); switch (c) {
- case "before": a.before(k); n = this._get_parent(a); break; case "after": a.after(k); n = this._get_parent(a); break; case "inside": case "first": a.children("ul").length || a.append(""); a.children("ul").prepend(k); n = a; break; case "last": a.children("ul").length || a.append(""); a.children("ul").append(k); n = a; break; default: a.children("ul").length || a.append(""), c || (c = 0), n = a.children("ul").children("li").eq(c),
- n.length ? n.before(k) : a.children("ul").append(k), n = a
- } if (-1 === n || n.get(0) === this.get_container().get(0)) n = -1; this.clean_node(n); this.__callback({ obj: k, parent: n }); d && d.call(this, k); return k
- }, get_text: function (a) { a = this._get_node(a); if (!a.length) return !1; var c = this._get_settings().core.html_titles; a = a.children("a:eq(0)"); if (c) return a = a.clone(), a.children("INS").remove(), a.html(); a = a.contents().filter(function () { return 3 == this.nodeType })[0]; return a.nodeValue }, set_text: function (a, c) {
- a = this._get_node(a);
- if (!a.length) return !1; a = a.children("a:eq(0)"); if (this._get_settings().core.html_titles) { var b = a.children("INS").clone(); a.html(c).prepend(b); this.__callback({ obj: a, name: c }); return !0 } a = a.contents().filter(function () { return 3 == this.nodeType })[0]; this.__callback({ obj: a, name: c }); return a.nodeValue = c
- }, rename_node: function (a, c) { a = this._get_node(a); this.__rollback(); a && a.length && this.set_text.apply(this, Array.prototype.slice.call(arguments)) && this.__callback({ obj: a, name: c }) }, delete_node: function (a) {
- a = this._get_node(a);
- if (!a.length) return !1; this.__rollback(); var c = this._get_parent(a), e = b([]), d = this; a.each(function () { e = e.add(d._get_prev(this)) }); a = a.detach(); -1 !== c && 0 === c.find("> ul > li").length && c.removeClass("jstree-open jstree-closed").addClass("jstree-leaf"); this.clean_node(c); this.__callback({ obj: a, prev: e, parent: c }); return a
- }, prepare_move: function (a, c, d, h, m) {
- var k = {}; k.ot = b.jstree._reference(a) || this; k.o = k.ot._get_node(a); k.r = -1 === c ? -1 : this._get_node(c); k.p = "undefined" === typeof d || !1 === d ? "last" : d; if (m || !e.o ||
- e.o[0] !== k.o[0] || e.r[0] !== k.r[0] || e.p !== k.p) {
- k.ot = b.jstree._reference(k.o) || this; k.rt = b.jstree._reference(k.r) || this; if (-1 !== k.r && k.r) {
- if (!/^(before|after)$/.test(k.p) && !this._is_loaded(k.r)) return this.load_node(k.r, function () { this.prepare_move(a, c, d, h, !0) }); switch (k.p) {
- case "before": k.cp = k.r.index(); k.cr = k.rt._get_parent(k.r); break; case "after": k.cp = k.r.index() + 1; k.cr = k.rt._get_parent(k.r); break; case "inside": case "first": k.cp = 0; k.cr = k.r; break; case "last": k.cp = k.r.find(" > ul > li").length; k.cr =
- k.r; break; default: k.cp = k.p, k.cr = k.r
- }
- } else switch (k.cr = -1, k.p) { case "first": case "before": case "inside": k.cp = 0; break; case "after": case "last": k.cp = k.rt.get_container().find(" > ul > li").length; break; default: k.cp = k.p } k.np = -1 == k.cr ? k.rt.get_container() : k.cr; k.op = k.ot._get_parent(k.o); k.cop = k.o.index(); -1 === k.op && (k.op = k.ot ? k.ot.get_container() : this.get_container()); !/^(before|after)$/.test(k.p) && k.op && k.np && k.op[0] === k.np[0] && k.o.index() < k.cp && k.cp++; k.or = k.np.find(" > ul > li:nth-child(" + (k.cp + 1) +
- ")"); e = k
- } this.__callback(e); h && h.call(this, e)
- }, check_move: function () { var a = e, c = !0, b = -1 === a.r ? this.get_container() : a.r; if (!a || !a.o || a.or[0] === a.o[0]) return !1; if (!a.cy) { if (a.op && a.np && a.op[0] === a.np[0] && a.cp - 1 === a.o.index()) return !1; a.o.each(function () { if (-1 !== b.parentsUntil(".jstree", "li").addBack().index(this)) return c = !1 }) } return c }, move_node: function (a, c, d, h, m, k) {
- if (!m) return this.prepare_move(a, c, d, function (a) { this.move_node(a, !1, !1, h, !0, k) }); h && (e.cy = !0); if (!k && !this.check_move()) return !1; this.__rollback();
- c = !1; h ? (c = a.o.clone(!0), c.find("*[id]").addBack().each(function () { this.id && (this.id = "copy_" + this.id) })) : c = a.o; a.or.length ? a.or.before(c) : (a.np.children("ul").length || b("").appendTo(a.np), a.np.children("ul:eq(0)").append(c)); try { a.ot.clean_node(a.op), a.rt.clean_node(a.np), a.op.find("> ul > li").length || a.op.removeClass("jstree-open jstree-closed").addClass("jstree-leaf").children("ul").remove() } catch (p) { } h && (e.cy = !0, e.oc = c); this.__callback(e); return e
- }, _get_move: function () { return e }
- }
- })
- })(jQuery);
- (function (b) {
- var a, c, d; b(function () {
- /msie/.test(navigator.userAgent.toLowerCase()) ? (c = b('').css({ position: "absolute", top: -1E3, left: 0 }).appendTo("body"), d = b('').css({ position: "absolute", top: -1E3, left: 0 }).appendTo("body"), a = c.width() - d.width(), c.add(d).remove()) : (c = b("
").css({ width: 100, height: 100, overflow: "auto", position: "absolute", top: -1E3, left: 0 }).prependTo("body").append("
").find("div").css({
- width: "100%",
- height: 200
- }), a = 100 - c.width(), c.parent().remove())
- }); b.jstree.plugin("ui", {
- __init: function () {
- this.data.ui.selected = b(); this.data.ui.last_selected = !1; this.data.ui.hovered = null; this.data.ui.to_select = this.get_settings().ui.initially_select; this.get_container().delegate("a", "click.jstree", b.proxy(function (a) { a.preventDefault(); a.currentTarget.blur(); b(a.currentTarget).hasClass("jstree-loading") || this.select_node(a.currentTarget, !0, a) }, this)).delegate("a", "mouseenter.jstree", b.proxy(function (a) {
- b(a.currentTarget).hasClass("jstree-loading") ||
- this.hover_node(a.target)
- }, this)).delegate("a", "mouseleave.jstree", b.proxy(function (a) { b(a.currentTarget).hasClass("jstree-loading") || this.dehover_node(a.target) }, this)).bind("reopen.jstree", b.proxy(function () { this.reselect() }, this)).bind("get_rollback.jstree", b.proxy(function () { this.dehover_node(); this.save_selected() }, this)).bind("set_rollback.jstree", b.proxy(function () { this.reselect() }, this)).bind("close_node.jstree", b.proxy(function (a, c) {
- var d = this._get_settings().ui, l = this._get_node(c.rslt.obj),
- h = l && l.length ? l.children("ul").find("a.jstree-clicked") : b(), m = this; !1 !== d.selected_parent_close && h.length && h.each(function () { m.deselect_node(this); "select_parent" === d.selected_parent_close && m.select_node(l) })
- }, this)).bind("delete_node.jstree", b.proxy(function (a, c) {
- var b = this._get_settings().ui.select_prev_on_delete, d = this._get_node(c.rslt.obj), d = d && d.length ? d.find("a.jstree-clicked") : [], h = this; d.each(function () { h.deselect_node(this) }); b && d.length && c.rslt.prev.each(function () {
- if (this.parentNode) return h.select_node(this),
- !1
- })
- }, this)).bind("move_node.jstree", b.proxy(function (a, c) { c.rslt.cy && c.rslt.oc.find("a.jstree-clicked").removeClass("jstree-clicked") }, this))
- }, defaults: { select_limit: -1, select_multiple_modifier: "ctrl", select_range_modifier: "shift", selected_parent_close: "select_parent", selected_parent_open: !0, select_prev_on_delete: !0, disable_selecting_children: !1, initially_select: [] }, _fn: {
- _get_node: function (a, c) {
- if ("undefined" === typeof a || null === a) return c ? this.data.ui.selected : this.data.ui.last_selected; var d = b(a,
- this.get_container()); if (d.is(".jstree") || -1 == a) return -1; d = d.closest("li", this.get_container()); return d.length ? d : !1
- }, _ui_notify: function (a, c) { c.selected && this.select_node(a, !1) }, save_selected: function () { var a = this; this.data.ui.to_select = []; this.data.ui.selected.each(function () { this.id && a.data.ui.to_select.push("#" + this.id.toString().replace(/^#/, "").replace(/\\\//g, "/").replace(/\//g, "\\/").replace(/\\\./g, ".").replace(/\./g, "\\.").replace(/\:/g, "\\:")) }); this.__callback(this.data.ui.to_select) },
- reselect: function () { var a = this, c = this.data.ui.to_select, c = b.map(b.makeArray(c), function (a) { return "#" + a.toString().replace(/^#/, "").replace(/\\\//g, "/").replace(/\//g, "\\/").replace(/\\\./g, ".").replace(/\./g, "\\.").replace(/\:/g, "\\:") }); b.each(c, function (c, b) { b && "#" !== b && a.select_node(b) }); this.data.ui.selected = this.data.ui.selected.filter(function () { return this.parentNode }); this.__callback() }, refresh: function (a) { this.save_selected(); return this.__call_old() }, hover_node: function (a) {
- a = this._get_node(a);
- if (!a.length) return !1; a.hasClass("jstree-hovered") || this.dehover_node(); this.data.ui.hovered = a.children("a").addClass("jstree-hovered").parent(); this._fix_scroll(a); this.__callback({ obj: a })
- }, dehover_node: function () { var a = this.data.ui.hovered, c; if (!a || !a.length) return !1; c = a.children("a").removeClass("jstree-hovered").parent(); this.data.ui.hovered[0] === c[0] && (this.data.ui.hovered = null); this.__callback({ obj: a }) }, select_node: function (a, c, b) {
- a = this._get_node(a); if (-1 == a || !a || !a.length) return !1; var d = this._get_settings().ui,
- h = "on" == d.select_multiple_modifier || !1 !== d.select_multiple_modifier && b && b[d.select_multiple_modifier + "Key"], m = !1 !== d.select_range_modifier && b && b[d.select_range_modifier + "Key"] && this.data.ui.last_selected && this.data.ui.last_selected[0] !== a[0] && this.data.ui.last_selected.parent()[0] === a.parent()[0], k = this.is_selected(a), p = !0, n = this; if (c) {
- if (d.disable_selecting_children && h && (a.parentsUntil(".jstree", "li").children("a.jstree-clicked").length || a.children("ul").find("a.jstree-clicked:eq(0)").length)) return !1;
- p = !1; switch (!0) {
- case m: this.data.ui.last_selected.addClass("jstree-last-selected"); a = a[a.index() < this.data.ui.last_selected.index() ? "nextUntil" : "prevUntil"](".jstree-last-selected").addBack(); -1 == d.select_limit || a.length < d.select_limit ? (this.data.ui.last_selected.removeClass("jstree-last-selected"), this.data.ui.selected.each(function () { this !== n.data.ui.last_selected[0] && n.deselect_node(this) }), k = !1, p = !0) : p = !1; break; case k && !h: this.deselect_all(); k = !1; p = !0; break; case !k && !h: if (-1 == d.select_limit ||
- 0 < d.select_limit) this.deselect_all(), p = !0; break; case k && h: this.deselect_node(a); break; case !k && h: if (-1 == d.select_limit || this.data.ui.selected.length + 1 <= d.select_limit) p = !0
- }
- } p && !k && (m || (this.data.ui.last_selected = a), a.children("a").addClass("jstree-clicked"), d.selected_parent_open && a.parents(".jstree-closed").each(function () { n.open_node(this, !1, !0) }), this.data.ui.selected = this.data.ui.selected.add(a), this._fix_scroll(a.eq(0)), this.__callback({ obj: a, e: b }))
- }, _fix_scroll: function (c) {
- var b = this.get_container()[0];
- b.scrollHeight > b.offsetHeight && (c = this._get_node(c)) && -1 !== c && c.length && c.is(":visible") && (c = c.offset().top - this.get_container().offset().top, 0 > c && (b.scrollTop = b.scrollTop + c - 1), c + this.data.core.li_height + (b.scrollWidth > b.offsetWidth ? a : 0) > b.offsetHeight && (b.scrollTop += c - b.offsetHeight + this.data.core.li_height + 1 + (b.scrollWidth > b.offsetWidth ? a : 0)))
- }, deselect_node: function (a) {
- a = this._get_node(a); if (!a.length) return !1; this.is_selected(a) && (a.children("a").removeClass("jstree-clicked"), this.data.ui.selected =
- this.data.ui.selected.not(a), this.data.ui.last_selected.get(0) === a.get(0) && (this.data.ui.last_selected = this.data.ui.selected.eq(0)), this.__callback({ obj: a }))
- }, toggle_select: function (a) { a = this._get_node(a); if (!a.length) return !1; this.is_selected(a) ? this.deselect_node(a) : this.select_node(a) }, is_selected: function (a) { return 0 <= this.data.ui.selected.index(this._get_node(a)) }, get_selected: function (a) { return a ? b(a).find("a.jstree-clicked").parent() : this.data.ui.selected }, deselect_all: function (a) {
- a = a ? b(a).find("a.jstree-clicked").parent() :
- this.get_container().find("a.jstree-clicked").parent(); a.children("a.jstree-clicked").removeClass("jstree-clicked"); this.data.ui.selected = b([]); this.data.ui.last_selected = !1; this.__callback({ obj: a })
- }
- }
- }); b.jstree.defaults.plugins.push("ui")
- })(jQuery); (function (b) {
- b.jstree.plugin("crrm", {
- __init: function () {
- this.get_container().bind("move_node.jstree", b.proxy(function (a, c) {
- if (this._get_settings().crrm.move.open_onmove) {
- var b = this; c.rslt.np.parentsUntil(".jstree").addBack().filter(".jstree-closed").each(function () {
- b.open_node(this,
- !1, !0)
- })
- }
- }, this))
- }, defaults: { input_width_limit: 200, move: { always_copy: !1, open_onmove: !0, default_position: "last", check_move: function (a) { return !0 } } }, _fn: {
- _show_input: function (a, c) {
- a = this._get_node(a); var d = this._get_settings().core.rtl, e = this._get_settings().crrm.input_width_limit, f = a.children("ins").width(), g = a.find("> a:visible > ins").width() * a.find("> a:visible > ins").length, l = this.get_text(a), h = b("
", { css: { position: "absolute", top: "-200px", left: d ? "0px" : "-1000px", visibility: "hidden" } }).appendTo("body"),
- m = a.css("position", "relative").append(b(" ", {
- value: l, "class": "jstree-rename-input", css: { padding: "0", border: "1px solid silver", position: "absolute", left: d ? "auto" : f + g + 4 + "px", right: d ? f + g + 4 + "px" : "auto", top: "0px", height: this.data.core.li_height - 2 + "px", lineHeight: this.data.core.li_height - 2 + "px", width: "150px" }, blur: b.proxy(function () { var b = a.children(".jstree-rename-input"), d = b.val(); "" === d && (d = l); h.remove(); b.remove(); this.set_text(a, l); this.rename_node(a, d); c.call(this, a, d, l); a.css("position", "") },
- this), keyup: function (a) { a = a.keyCode || a.which; 27 == a ? (this.value = l, this.blur()) : 13 == a ? this.blur() : m.width(Math.min(h.text("pW" + this.value).width(), e)) }, keypress: function (a) { if (13 == (a.keyCode || a.which)) return !1 }
- })).children(".jstree-rename-input"); this.set_text(a, ""); h.css({
- fontFamily: m.css("fontFamily") || "", fontSize: m.css("fontSize") || "", fontWeight: m.css("fontWeight") || "", fontStyle: m.css("fontStyle") || "", fontStretch: m.css("fontStretch") || "", fontVariant: m.css("fontVariant") || "", letterSpacing: m.css("letterSpacing") ||
- "", wordSpacing: m.css("wordSpacing") || ""
- }); m.width(Math.min(h.text("pW" + m[0].value).width(), e))[0].select()
- }, rename: function (a) { a = this._get_node(a); this.__rollback(); var c = this.__callback; this._show_input(a, function (a, b, f) { c.call(this, { obj: a, new_name: b, old_name: f }) }) }, create: function (a, c, d, e, f) {
- var g = this; (a = this._get_node(a)) || (a = -1); this.__rollback(); return this.create_node(a, c, d, function (a) {
- var c = this._get_parent(a), d = b(a).index(); e && e.call(this, a); c.length && c.hasClass("jstree-closed") && this.open_node(c,
- !1, !0); f ? g.__callback({ obj: a, name: this.get_text(a), parent: c, position: d }) : this._show_input(a, function (a, b, e) { g.__callback({ obj: a, name: b, parent: c, position: d }) })
- })
- }, remove: function (a) { a = this._get_node(a, !0); var c = this._get_parent(a), b = this._get_prev(a); this.__rollback(); a = this.delete_node(a); !1 !== a && this.__callback({ obj: a, prev: b, parent: c }) }, check_move: function () { return this.__call_old() && this._get_settings().crrm.move.check_move.call(this, this._get_move()) ? !0 : !1 }, move_node: function (a, c, b, e, f, g) {
- var l =
- this._get_settings().crrm.move; if (!f) return "undefined" === typeof b && (b = l.default_position), "inside" !== b || l.default_position.match(/^(before|after)$/) || (b = l.default_position), this.__call_old(!0, a, c, b, e, !1, g); if (!0 === l.always_copy || "multitree" === l.always_copy && a.rt.get_index() !== a.ot.get_index()) e = !0; this.__call_old(!0, a, c, b, e, !0, g)
- }, cut: function (a) { a = this._get_node(a, !0); if (!a || !a.length) return !1; this.data.crrm.cp_nodes = !1; this.data.crrm.ct_nodes = a; this.__callback({ obj: a }) }, copy: function (a) {
- a = this._get_node(a,
- !0); if (!a || !a.length) return !1; this.data.crrm.ct_nodes = !1; this.data.crrm.cp_nodes = a; this.__callback({ obj: a })
- }, paste: function (a) {
- a = this._get_node(a); if (!a || !a.length) return !1; var c = this.data.crrm.ct_nodes ? this.data.crrm.ct_nodes : this.data.crrm.cp_nodes; if (!this.data.crrm.ct_nodes && !this.data.crrm.cp_nodes) return !1; this.data.crrm.ct_nodes && (this.move_node(this.data.crrm.ct_nodes, a), this.data.crrm.ct_nodes = !1); this.data.crrm.cp_nodes && this.move_node(this.data.crrm.cp_nodes, a, !1, !0); this.__callback({
- obj: a,
- nodes: c
- })
- }
- }
- })
- })(jQuery); (function (b) {
- var a = []; b.jstree._themes = !1; b.jstree.plugin("themes", {
- __init: function () { this.get_container().bind("init.jstree", b.proxy(function () { var a = this._get_settings().themes; this.data.themes.dots = a.dots; this.data.themes.icons = a.icons; this.set_theme(a.theme, a.url) }, this)).bind("loaded.jstree", b.proxy(function () { this.data.themes.dots ? this.show_dots() : this.hide_dots(); this.data.themes.icons ? this.show_icons() : this.hide_icons() }, this)) }, defaults: {
- theme: "default", url: !1, dots: !0,
- icons: !0
- }, _fn: {
- set_theme: function (c, d) { if (!c) return !1; d || (d = b.jstree._themes + c + "/style.css"); -1 == b.inArray(d, a) && (b.vakata.css.add_sheet({ url: d }), a.push(d)); this.data.themes.theme != c && (this.get_container().removeClass("jstree-" + this.data.themes.theme), this.data.themes.theme = c); this.get_container().addClass("jstree-" + c); this.data.themes.dots ? this.show_dots() : this.hide_dots(); this.data.themes.icons ? this.show_icons() : this.hide_icons(); this.__callback() }, get_theme: function () { return this.data.themes.theme },
- show_dots: function () { this.data.themes.dots = !0; this.get_container().children("ul").removeClass("jstree-no-dots") }, hide_dots: function () { this.data.themes.dots = !1; this.get_container().children("ul").addClass("jstree-no-dots") }, toggle_dots: function () { this.data.themes.dots ? this.hide_dots() : this.show_dots() }, show_icons: function () { this.data.themes.icons = !0; this.get_container().children("ul").removeClass("jstree-no-icons") }, hide_icons: function () { this.data.themes.icons = !1; this.get_container().children("ul").addClass("jstree-no-icons") },
- toggle_icons: function () { this.data.themes.icons ? this.hide_icons() : this.show_icons() }
- }
- }); b(function () { !1 === b.jstree._themes && b("script").each(function () { if (this.src.toString().match(/jquery\.jstree[^\/]*?\.js(\?.*)?$/)) return b.jstree._themes = this.src.toString().replace(/jquery\.jstree[^\/]*?\.js(\?.*)?$/, "") + "themes/", !1 }); !1 === b.jstree._themes && (b.jstree._themes = "themes/") }); b.jstree.defaults.plugins.push("themes")
- })(jQuery); (function (b) {
- var a = []; b.jstree.plugin("hotkeys", {
- __init: function () {
- if ("undefined" ===
- typeof b.hotkeys) throw "jsTree hotkeys: jQuery hotkeys plugin not included."; if (!this.data.ui) throw "jsTree hotkeys: jsTree UI plugin not included."; b.each(this._get_settings().hotkeys, function (c, d) { !1 !== d && -1 == b.inArray(c, a) && (b(document).bind("keydown", c, function (a) { a: { var d = b.jstree._focused(), g; if (d && d.data && d.data.hotkeys && d.data.hotkeys.enabled && (g = d._get_settings().hotkeys[c])) { a = g.call(d, a); break a } a = void 0 } return a }), a.push(c)) }); this.get_container().bind("lock.jstree", b.proxy(function () {
- this.data.hotkeys.enabled &&
- (this.data.hotkeys.enabled = !1, this.data.hotkeys.revert = !0)
- }, this)).bind("unlock.jstree", b.proxy(function () { this.data.hotkeys.revert && (this.data.hotkeys.enabled = !0) }, this)); this.enable_hotkeys()
- }, defaults: {
- up: function () { this.hover_node(this._get_prev(this.data.ui.hovered || this.data.ui.last_selected || -1)); return !1 }, "ctrl+up": function () { this.hover_node(this._get_prev(this.data.ui.hovered || this.data.ui.last_selected || -1)); return !1 }, "shift+up": function () {
- this.hover_node(this._get_prev(this.data.ui.hovered ||
- this.data.ui.last_selected || -1)); return !1
- }, down: function () { this.hover_node(this._get_next(this.data.ui.hovered || this.data.ui.last_selected || -1)); return !1 }, "ctrl+down": function () { this.hover_node(this._get_next(this.data.ui.hovered || this.data.ui.last_selected || -1)); return !1 }, "shift+down": function () { this.hover_node(this._get_next(this.data.ui.hovered || this.data.ui.last_selected || -1)); return !1 }, left: function () {
- var a = this.data.ui.hovered || this.data.ui.last_selected; a && (a.hasClass("jstree-open") ? this.close_node(a) :
- this.hover_node(this._get_prev(a))); return !1
- }, "ctrl+left": function () { var a = this.data.ui.hovered || this.data.ui.last_selected; a && (a.hasClass("jstree-open") ? this.close_node(a) : this.hover_node(this._get_prev(a))); return !1 }, "shift+left": function () { var a = this.data.ui.hovered || this.data.ui.last_selected; a && (a.hasClass("jstree-open") ? this.close_node(a) : this.hover_node(this._get_prev(a))); return !1 }, right: function () {
- var a = this.data.ui.hovered || this.data.ui.last_selected; a && a.length && (a.hasClass("jstree-closed") ?
- this.open_node(a) : this.hover_node(this._get_next(a))); return !1
- }, "ctrl+right": function () { var a = this.data.ui.hovered || this.data.ui.last_selected; a && a.length && (a.hasClass("jstree-closed") ? this.open_node(a) : this.hover_node(this._get_next(a))); return !1 }, "shift+right": function () { var a = this.data.ui.hovered || this.data.ui.last_selected; a && a.length && (a.hasClass("jstree-closed") ? this.open_node(a) : this.hover_node(this._get_next(a))); return !1 }, space: function () {
- this.data.ui.hovered && this.data.ui.hovered.children("a:eq(0)").click();
- return !1
- }, "ctrl+space": function (a) { a.type = "click"; this.data.ui.hovered && this.data.ui.hovered.children("a:eq(0)").trigger(a); return !1 }, "shift+space": function (a) { a.type = "click"; this.data.ui.hovered && this.data.ui.hovered.children("a:eq(0)").trigger(a); return !1 }, f2: function () { this.rename(this.data.ui.hovered || this.data.ui.last_selected) }, del: function () { this.remove(this.data.ui.hovered || this._get_node(null)) }
- }, _fn: {
- enable_hotkeys: function () { this.data.hotkeys.enabled = !0 }, disable_hotkeys: function () {
- this.data.hotkeys.enabled =
- !1
- }
- }
- })
- })(jQuery); (function (b) {
- b.jstree.plugin("json_data", {
- __init: function () { this._get_settings().json_data.progressive_unload && this.get_container().bind("after_close.jstree", function (a, c) { c.rslt.obj.children("ul").remove() }) }, defaults: { data: !1, ajax: !1, correct_state: !0, progressive_render: !1, progressive_unload: !1 }, _fn: {
- load_node: function (a, c, b) { var e = this; this.load_node_json(a, function () { e.__callback({ obj: e._get_node(a) }); c.call(this) }, b) }, _is_loaded: function (a) {
- var c = this._get_settings().json_data;
- a = this._get_node(a); return -1 == a || !a || !c.ajax && !c.progressive_render && !b.isFunction(c.data) || a.is(".jstree-open, .jstree-leaf") || 0 < a.children("ul").children("li").length
- }, refresh: function (a) { a = this._get_node(a); var c = this._get_settings().json_data; a && -1 !== a && c.progressive_unload && (b.isFunction(c.data) || c.ajax) && a.removeData("jstree_children"); return this.__call_old() }, load_node_json: function (a, c, d) {
- var e = this.get_settings().json_data, f, g = function () { }; f = function () { }; if ((a = this._get_node(a)) && -1 !== a &&
- (e.progressive_render || e.progressive_unload) && !a.is(".jstree-open, .jstree-leaf") && 0 === a.children("ul").children("li").length && a.data("jstree_children")) { if (f = this._parse_json(a.data("jstree_children"), a)) a.append(f), e.progressive_unload || a.removeData("jstree_children"); this.clean_node(a); c && c.call(this) } else {
- if (a && -1 !== a) { if (a.data("jstree_is_loading")) return; a.data("jstree_is_loading", !0) } switch (!0) {
- case !e.data && !e.ajax: throw "Neither data nor ajax settings supplied."; case b.isFunction(e.data): e.data.call(this,
- a, b.proxy(function (b) { (b = this._parse_json(b, a)) ? (-1 !== a && a ? (a.append(b).children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading")) : this.get_container().children("ul").empty().append(b.children()), this.clean_node(a), c && c.call(this)) : (-1 !== a && a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"), e.correct_state && this.correct_state(a)) : e.correct_state && this.get_container().children("ul").empty(), d && d.call(this)) }, this)); break;
- case !!e.data && !e.ajax || !!e.data && !!e.ajax && (!a || -1 === a): a && -1 != a || ((f = this._parse_json(e.data, a)) ? (this.get_container().children("ul").empty().append(f.children()), this.clean_node()) : e.correct_state && this.get_container().children("ul").empty()); c && c.call(this); break; case !e.data && !!e.ajax || !!e.data && !!e.ajax && a && -1 !== a: g = function (b, c, f) {
- var k = this.get_settings().json_data.ajax.error; k && k.call(this, b, c, f); -1 != a && a.length ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"),
- "success" === c && e.correct_state && this.correct_state(a)) : "success" === c && e.correct_state && this.get_container().children("ul").empty(); d && d.call(this)
- }, f = function (d, f, m) {
- var k = this.get_settings().json_data.ajax.success; k && (d = k.call(this, d, f, m) || d); if ("" === d || d && d.toString && "" === d.toString().replace(/^[\s\n]+$/, "") || !b.isArray(d) && !b.isPlainObject(d)) return g.call(this, m, f, ""); (d = this._parse_json(d, a)) ? (-1 !== a && a ? (a.append(d).children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading")) :
- this.get_container().children("ul").empty().append(d.children()), this.clean_node(a), c && c.call(this)) : -1 !== a && a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"), e.correct_state && (this.correct_state(a), c && c.call(this))) : e.correct_state && (this.get_container().children("ul").empty(), c && c.call(this))
- }, e.ajax.context = this, e.ajax.error = g, e.ajax.success = f, e.ajax.dataType || (e.ajax.dataType = "json"), b.isFunction(e.ajax.url) && (e.ajax.url = e.ajax.url.call(this, a)),
- b.isFunction(e.ajax.data) && (e.ajax.data = e.ajax.data.call(this, a)), b.ajax(e.ajax)
- }
- }
- }, _parse_json: function (a, c, d) {
- var e = !1, f = this._get_settings(), g = f.json_data, l = f.core.html_titles, h; if (!a) return e; g.progressive_unload && c && -1 !== c && c.data("jstree_children", e); if (b.isArray(a)) { e = b(""); if (!a.length) return !1; f = 0; for (g = a.length; f < g; f++) h = this._parse_json(a[f], c, !0), h.length && (e = e.append(h)); e = e.children() } else {
- "string" == typeof a && (a = { data: a }); if (!a.data && "" !== a.data) return e; e = b(" "); a.attr && e.attr(a.attr);
- a.metadata && e.data(a.metadata); a.state && e.addClass("jstree-" + a.state); b.isArray(a.data) || (h = a.data, a.data = [], a.data.push(h)); b.each(a.data, function (c, d) {
- h = b(" "); b.isFunction(d) && (d = d.call(this, a)); if ("string" == typeof d) h.attr("href", "#")[l ? "html" : "text"](d); else d.attr || (d.attr = {}), d.attr.href || (d.attr.href = "#"), h.attr(d.attr)[l ? "html" : "text"](d.title), d.language && h.addClass(d.language); h.prepend(" "); !d.icon && a.icon && (d.icon = a.icon); d.icon && (-1 === d.icon.indexOf("/") ?
- h.children("ins").addClass(d.icon) : h.children("ins").css("background", "url('" + d.icon + "') center center no-repeat")); e.append(h)
- }); e.prepend(" "); a.children && (g.progressive_render && "open" !== a.state ? e.addClass("jstree-closed").data("jstree_children", a.children) : (g.progressive_unload && e.data("jstree_children", a.children), b.isArray(a.children) && a.children.length && (h = this._parse_json(a.children, c, !0), h.length && (c = b(""), c.append(h), e.append(c)))))
- } d || (d = b(""),
- d.append(e), e = d); return e
- }, get_json: function (a, c, d, e) {
- var f = [], g = this._get_settings(), l = this, h, m, k, p, n, q; (a = this._get_node(a)) && -1 !== a || (a = this.get_container().find("> ul > li")); c = b.isArray(c) ? c : ["id", "class"]; !e && this.data.types && c.push(g.types.type_attr); d = b.isArray(d) ? d : []; a.each(function () {
- k = b(this); h = { data: [] }; c.length && (h.attr = {}); b.each(c, function (a, b) {
- (m = k.attr(b)) && m.length && m.replace(/jstree[^ ]*/ig, "").length && (h.attr[b] = (" " + m).replace(/ jstree[^ ]*/ig, "").replace(/\s+$/ig, " ").replace(/^ /,
- "").replace(/ $/, ""))
- }); k.hasClass("jstree-open") && (h.state = "open"); k.hasClass("jstree-closed") && (h.state = "closed"); k.data() && (h.metadata = k.data()); p = k.children("a"); p.each(function () {
- n = b(this); d.length || -1 !== b.inArray("languages", g.plugins) || n.children("ins").get(0).style.backgroundImage.length || n.children("ins").get(0).className && n.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig, "").length ? (q = !1, -1 !== b.inArray("languages", g.plugins) && b.isArray(g.languages) && g.languages.length && b.each(g.languages,
- function (a, b) { if (n.hasClass(b)) return q = b, !1 }), m = { attr: {}, title: l.get_text(n, q) }, b.each(d, function (a, b) { m.attr[b] = (" " + (n.attr(b) || "")).replace(/ jstree[^ ]*/ig, "").replace(/\s+$/ig, " ").replace(/^ /, "").replace(/ $/, "") }), -1 !== b.inArray("languages", g.plugins) && b.isArray(g.languages) && g.languages.length && b.each(g.languages, function (a, b) { if (n.hasClass(b)) return m.language = b, !0 }), n.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig, "").replace(/^\s+$/ig, "").length && (m.icon = n.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,
- "").replace(/\s+$/ig, " ").replace(/^ /, "").replace(/ $/, "")), n.children("ins").get(0).style.backgroundImage.length && (m.icon = n.children("ins").get(0).style.backgroundImage.replace("url(", "").replace(")", ""))) : m = l.get_text(n); 1 < p.length ? h.data.push(m) : h.data = m
- }); k = k.find("> ul > li"); k.length && (h.children = l.get_json(k, c, d, !0)); f.push(h)
- }); return f
- }
- }
- })
- })(jQuery); (function (b) {
- var a = !1; b.jstree.plugin("languages", {
- __init: function () { this._load_css() }, defaults: [], _fn: {
- set_lang: function (c) {
- var d = this._get_settings().languages,
- e = !1, f = ".jstree-" + this.get_index() + " a"; if (!b.isArray(d) || 0 === d.length) return !1; if (-1 == b.inArray(c, d)) if (d[c]) c = d[c]; else return !1; if (c == this.data.languages.current_language) return !0; e = b.vakata.css.get_css(f + "." + this.data.languages.current_language, !1, a); !1 !== e && (e.style.display = "none"); e = b.vakata.css.get_css(f + "." + c, !1, a); !1 !== e && (e.style.display = ""); this.data.languages.current_language = c; this.__callback(c); return !0
- }, get_lang: function () { return this.data.languages.current_language }, _get_string: function (a,
- d) { var e = this._get_settings().languages, f = this._get_settings().core.strings; b.isArray(e) && e.length && (d = d && -1 != b.inArray(d, e) ? d : this.data.languages.current_language); return f[d] && f[d][a] ? f[d][a] : f[a] ? f[a] : a }, get_text: function (a, d) {
- a = this._get_node(a) || this.data.ui.last_selected; if (!a.size()) return !1; var e = this._get_settings().languages, f = this._get_settings().core.html_titles; b.isArray(e) && e.length ? (d = d && -1 != b.inArray(d, e) ? d : this.data.languages.current_language, a = a.children("a." + d)) : a = a.children("a:eq(0)");
- if (f) return a = a.clone(), a.children("INS").remove(), a.html(); a = a.contents().filter(function () { return 3 == this.nodeType })[0]; return a.nodeValue
- }, set_text: function (a, d, e) {
- a = this._get_node(a) || this.data.ui.last_selected; if (!a.size()) return !1; var f = this._get_settings().languages, g = this._get_settings().core.html_titles; b.isArray(f) && f.length ? (e = e && -1 != b.inArray(e, f) ? e : this.data.languages.current_language, a = a.children("a." + e)) : a = a.children("a:eq(0)"); if (g) return f = a.children("INS").clone(), a.html(d).prepend(f),
- this.__callback({ obj: a, name: d, lang: e }), !0; a = a.contents().filter(function () { return 3 == this.nodeType })[0]; this.__callback({ obj: a, name: d, lang: e }); return a.nodeValue = d
- }, _load_css: function () {
- var c = this._get_settings().languages, d = "/* languages css */", e = ".jstree-" + this.get_index() + " a", f; if (b.isArray(c) && c.length) {
- this.data.languages.current_language = c[0]; for (f = 0; f < c.length; f++) d += e + "." + c[f] + " {", c[f] != this.data.languages.current_language && (d += " display:none; "), d += " } "; a = b.vakata.css.add_sheet({
- str: d,
- title: "jstree-languages"
- })
- }
- }, create_node: function (a, d, e, f) { return this.__call_old(!0, a, d, e, function (a) { var c = this._get_settings().languages, d = a.children("a"), e; if (b.isArray(c) && c.length) { for (e = 0; e < c.length; e++) d.is("." + c[e]) || a.append(d.eq(0).clone().removeClass(c.join(" ")).addClass(c[e])); d.not("." + c.join(", .")).remove() } f && f.call(this, a) }) }
- }
- })
- })(jQuery); (function (b) {
- b.jstree.plugin("cookies", {
- __init: function () {
- if ("undefined" === typeof b.cookie) throw "jsTree cookie: jQuery cookie plugin not included.";
- var a = this._get_settings().cookies, c; a.save_loaded && (c = b.cookie(a.save_loaded)) && c.length && (this.data.core.to_load = c.split(",")); a.save_opened && (c = b.cookie(a.save_opened)) && c.length && (this.data.core.to_open = c.split(",")); a.save_selected && (c = b.cookie(a.save_selected)) && c.length && this.data.ui && (this.data.ui.to_select = c.split(",")); this.get_container().one((this.data.ui ? "reselect" : "reopen") + ".jstree", b.proxy(function () {
- this.get_container().bind("open_node.jstree close_node.jstree select_node.jstree deselect_node.jstree",
- b.proxy(function (a) { this._get_settings().cookies.auto_save && this.save_cookie((a.handleObj.namespace + a.handleObj.type).replace("jstree", "")) }, this))
- }, this))
- }, defaults: { save_loaded: "jstree_load", save_opened: "jstree_open", save_selected: "jstree_select", auto_save: !0, cookie_options: {} }, _fn: {
- save_cookie: function (a) {
- if (!this.data.core.refreshing) {
- var c = this._get_settings().cookies; if (a) switch (a) {
- case "open_node": case "close_node": c.save_opened && (this.save_opened(), b.cookie(c.save_opened, this.data.core.to_open.join(","),
- c.cookie_options)); c.save_loaded && (this.save_loaded(), b.cookie(c.save_loaded, this.data.core.to_load.join(","), c.cookie_options)); break; case "select_node": case "deselect_node": c.save_selected && this.data.ui && (this.save_selected(), b.cookie(c.save_selected, this.data.ui.to_select.join(","), c.cookie_options))
- } else c.save_loaded && (this.save_loaded(), b.cookie(c.save_loaded, this.data.core.to_load.join(","), c.cookie_options)), c.save_opened && (this.save_opened(), b.cookie(c.save_opened, this.data.core.to_open.join(","),
- c.cookie_options)), c.save_selected && this.data.ui && (this.save_selected(), b.cookie(c.save_selected, this.data.ui.to_select.join(","), c.cookie_options))
- }
- }
- }
- })
- })(jQuery); (function (b) {
- b.jstree.plugin("sort", {
- __init: function () {
- this.get_container().bind("load_node.jstree", b.proxy(function (a, b) { var d = this._get_node(b.rslt.obj), d = -1 === d ? this.get_container().children("ul") : d.children("ul"); this.sort(d) }, this)).bind("rename_node.jstree create_node.jstree create.jstree", b.proxy(function (a, b) { this.sort(b.rslt.obj.parent()) },
- this)).bind("move_node.jstree", b.proxy(function (a, b) { var d = -1 == b.rslt.np ? this.get_container() : b.rslt.np; this.sort(d.children("ul")) }, this))
- }, defaults: function (a, b) { return this.get_text(a) > this.get_text(b) ? 1 : -1 }, _fn: { sort: function (a) { var c = this._get_settings().sort, d = this; a.append(b.makeArray(a.children("li")).sort(b.proxy(c, d))); a.find("> li > ul").each(function () { d.sort(b(this)) }); this.clean_node(a) } }
- })
- })(jQuery); (function (b) {
- var a = !1, c = !1, d = !1, e = !1, f = !1, g = !1, l = !1, h = !1, m = !1; b.vakata.dnd = {
- is_down: !1,
- is_drag: !1, helper: !1, scroll_spd: 10, init_x: 0, init_y: 0, threshold: 5, helper_left: 5, helper_top: 10, user_data: {}, drag_start: function (a, c, d) {
- b.vakata.dnd.is_drag && b.vakata.drag_stop({}); try { a.currentTarget.unselectable = "on", a.currentTarget.onselectstart = function () { return !1 }, a.currentTarget.style && (a.currentTarget.style.MozUserSelect = "none") } catch (e) { } b.vakata.dnd.init_x = a.pageX; b.vakata.dnd.init_y = a.pageY; b.vakata.dnd.user_data = c; b.vakata.dnd.is_down = !0; b.vakata.dnd.helper = b("
").html(d);
- b(document).bind("mousemove", b.vakata.dnd.drag); b(document).bind("mouseup", b.vakata.dnd.drag_stop); return !1
- }, drag: function (a) {
- if (b.vakata.dnd.is_down) {
- if (!b.vakata.dnd.is_drag) if (5 < Math.abs(a.pageX - b.vakata.dnd.init_x) || 5 < Math.abs(a.pageY - b.vakata.dnd.init_y)) b.vakata.dnd.helper.appendTo("body"), b.vakata.dnd.is_drag = !0, b(document).triggerHandler("drag_start.vakata", { event: a, data: b.vakata.dnd.user_data }); else return; if ("mousemove" === a.type) {
- var c = b(document), d = c.scrollTop(), c = c.scrollLeft(); 20 > a.pageY -
- d ? (g && "down" === l && (clearInterval(g), g = !1), g || (l = "up", g = setInterval(function () { b(document).scrollTop(b(document).scrollTop() - b.vakata.dnd.scroll_spd) }, 150))) : g && "up" === l && (clearInterval(g), g = !1); 20 > b(window).height() - (a.pageY - d) ? (g && "up" === l && (clearInterval(g), g = !1), g || (l = "down", g = setInterval(function () { b(document).scrollTop(b(document).scrollTop() + b.vakata.dnd.scroll_spd) }, 150))) : g && "down" === l && (clearInterval(g), g = !1); 20 > a.pageX - c ? (f && "right" === h && (clearInterval(f), f = !1), f || (h = "left", f = setInterval(function () {
- b(document).scrollLeft(b(document).scrollLeft() -
- b.vakata.dnd.scroll_spd)
- }, 150))) : f && "left" === h && (clearInterval(f), f = !1); 20 > b(window).width() - (a.pageX - c) ? (f && "left" === h && (clearInterval(f), f = !1), f || (h = "right", f = setInterval(function () { b(document).scrollLeft(b(document).scrollLeft() + b.vakata.dnd.scroll_spd) }, 150))) : f && "right" === h && (clearInterval(f), f = !1)
- } b.vakata.dnd.helper.css({ left: a.pageX + b.vakata.dnd.helper_left + "px", top: a.pageY + b.vakata.dnd.helper_top + "px" }); b(document).triggerHandler("drag.vakata", { event: a, data: b.vakata.dnd.user_data })
- }
- }, drag_stop: function (a) {
- f &&
- clearInterval(f); g && clearInterval(g); b(document).unbind("mousemove", b.vakata.dnd.drag); b(document).unbind("mouseup", b.vakata.dnd.drag_stop); b(document).triggerHandler("drag_stop.vakata", { event: a, data: b.vakata.dnd.user_data }); b.vakata.dnd.helper.remove(); b.vakata.dnd.init_x = 0; b.vakata.dnd.init_y = 0; b.vakata.dnd.user_data = {}; b.vakata.dnd.is_down = !1; b.vakata.dnd.is_drag = !1
- }
- }; b(function () {
- b.vakata.css.add_sheet({
- str: "#vakata-dragged { display:block; margin:0 0 0 0; padding:4px 4px 4px 24px; position:absolute; top:-2000px; line-height:16px; z-index:10000; } ",
- title: "vakata"
- })
- }); b.jstree.plugin("dnd", {
- __init: function () {
- this.data.dnd = { active: !1, after: !1, inside: !1, before: !1, off: !1, prepared: !1, w: 0, to1: !1, to2: !1, cof: !1, cw: !1, ch: !1, i1: !1, i2: !1, mto: !1 }; this.get_container().bind("mouseenter.jstree", b.proxy(function (c) {
- b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree && (this.data.themes && (d.attr("class", "jstree-" + this.data.themes.theme), e && e.attr("class", "jstree-" + this.data.themes.theme), b.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme)),
- c.currentTarget === c.target && b.vakata.dnd.user_data.obj && b(b.vakata.dnd.user_data.obj).length && b(b.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== c.target && (c = b.jstree._reference(c.target), c.data.dnd.foreign ? (c = c._get_settings().dnd.drag_check.call(this, { o: a, r: c.get_container(), is_root: !0 }), !0 !== c && !0 !== c.inside && !0 !== c.before && !0 !== c.after || b.vakata.dnd.helper.children("ins").attr("class", "jstree-ok")) : (c.prepare_move(a, c.get_container(), "last"), c.check_move() && b.vakata.dnd.helper.children("ins").attr("class",
- "jstree-ok"))))
- }, this)).bind("mouseup.jstree", b.proxy(function (c) {
- if (b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree && c.currentTarget === c.target && b.vakata.dnd.user_data.obj && b(b.vakata.dnd.user_data.obj).length && b(b.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== c.target) {
- var d = b.jstree._reference(c.currentTarget); d.data.dnd.foreign ? (c = d._get_settings().dnd.drag_check.call(this, { o: a, r: d.get_container(), is_root: !0 }), !0 !== c && !0 !== c.inside && !0 !== c.before && !0 !== c.after || d._get_settings().dnd.drag_finish.call(this,
- { o: a, r: d.get_container(), is_root: !0 })) : d.move_node(a, d.get_container(), "last", c[d._get_settings().dnd.copy_modifier + "Key"])
- }
- }, this)).bind("mouseleave.jstree", b.proxy(function (a) {
- if (a.relatedTarget && a.relatedTarget.id && "jstree-marker-line" === a.relatedTarget.id) return !1; b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree && (this.data.dnd.i1 && clearInterval(this.data.dnd.i1), this.data.dnd.i2 && clearInterval(this.data.dnd.i2), this.data.dnd.to1 && clearTimeout(this.data.dnd.to1), this.data.dnd.to2 && clearTimeout(this.data.dnd.to2),
- b.vakata.dnd.helper.children("ins").hasClass("jstree-ok") && b.vakata.dnd.helper.children("ins").attr("class", "jstree-invalid"))
- }, this)).bind("mousemove.jstree", b.proxy(function (a) {
- if (b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree) {
- var c = this.get_container()[0]; a.pageX + 24 > this.data.dnd.cof.left + this.data.dnd.cw ? (this.data.dnd.i1 && clearInterval(this.data.dnd.i1), this.data.dnd.i1 = setInterval(b.proxy(function () { this.scrollLeft += b.vakata.dnd.scroll_spd }, c), 100)) : a.pageX - 24 < this.data.dnd.cof.left ? (this.data.dnd.i1 &&
- clearInterval(this.data.dnd.i1), this.data.dnd.i1 = setInterval(b.proxy(function () { this.scrollLeft -= b.vakata.dnd.scroll_spd }, c), 100)) : this.data.dnd.i1 && clearInterval(this.data.dnd.i1); a.pageY + 24 > this.data.dnd.cof.top + this.data.dnd.ch ? (this.data.dnd.i2 && clearInterval(this.data.dnd.i2), this.data.dnd.i2 = setInterval(b.proxy(function () { this.scrollTop += b.vakata.dnd.scroll_spd }, c), 100)) : a.pageY - 24 < this.data.dnd.cof.top ? (this.data.dnd.i2 && clearInterval(this.data.dnd.i2), this.data.dnd.i2 = setInterval(b.proxy(function () {
- this.scrollTop -=
- b.vakata.dnd.scroll_spd
- }, c), 100)) : this.data.dnd.i2 && clearInterval(this.data.dnd.i2)
- }
- }, this)).bind("scroll.jstree", b.proxy(function (a) { b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree && d && e && (d.hide(), e.hide()) }, this)).delegate("a", "mousedown.jstree", b.proxy(function (a) { if (1 === a.which) return this.start_drag(a.currentTarget, a), !1 }, this)).delegate("a", "mouseenter.jstree", b.proxy(function (a) { b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree && this.dnd_enter(a.currentTarget) }, this)).delegate("a", "mousemove.jstree",
- b.proxy(function (a) { b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree && (c && c.length && c.children("a")[0] === a.currentTarget || this.dnd_enter(a.currentTarget), "undefined" === typeof this.data.dnd.off.top && (this.data.dnd.off = b(a.target).offset()), this.data.dnd.w = (a.pageY - (this.data.dnd.off.top || 0)) % this.data.core.li_height, 0 > this.data.dnd.w && (this.data.dnd.w += this.data.core.li_height), this.dnd_show()) }, this)).delegate("a", "mouseleave.jstree", b.proxy(function (a) {
- if (b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree) {
- if (a.relatedTarget &&
- a.relatedTarget.id && "jstree-marker-line" === a.relatedTarget.id) return !1; d && d.hide(); e && e.hide(); this.data.dnd.mto = setTimeout(function (b) { return function () { b.dnd_leave(a) } }(this), 0)
- }
- }, this)).delegate("a", "mouseup.jstree", b.proxy(function (a) { b.vakata.dnd.is_drag && b.vakata.dnd.user_data.jstree && this.dnd_finish(a) }, this)); b(document).bind("drag_stop.vakata", b.proxy(function () {
- this.data.dnd.to1 && clearTimeout(this.data.dnd.to1); this.data.dnd.to2 && clearTimeout(this.data.dnd.to2); this.data.dnd.i1 && clearInterval(this.data.dnd.i1);
- this.data.dnd.i2 && clearInterval(this.data.dnd.i2); this.data.dnd.after = !1; this.data.dnd.before = !1; this.data.dnd.inside = !1; this.data.dnd.off = !1; this.data.dnd.prepared = !1; this.data.dnd.w = !1; this.data.dnd.to1 = !1; this.data.dnd.to2 = !1; this.data.dnd.i1 = !1; this.data.dnd.i2 = !1; this.data.dnd.active = !1; this.data.dnd.foreign = !1; d && d.css({ top: "-2000px" }); e && e.css({ top: "-2000px" })
- }, this)).bind("drag_start.vakata", b.proxy(function (a, c) {
- if (c.data.jstree) {
- var d = b(c.event.target); d.closest(".jstree").hasClass("jstree-" +
- this.get_index()) && this.dnd_enter(d)
- }
- }, this)); var f = this._get_settings().dnd; f.drag_target && b(document).delegate(f.drag_target, "mousedown.jstree-" + this.get_index(), b.proxy(function (c) {
- a = c.target; b.vakata.dnd.drag_start(c, { jstree: !0, obj: c.target }, " " + b(c.target).text()); this.data.themes && (d && d.attr("class", "jstree-" + this.data.themes.theme), e && e.attr("class", "jstree-" + this.data.themes.theme), b.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme));
- b.vakata.dnd.helper.children("ins").attr("class", "jstree-invalid"); var f = this.get_container(); this.data.dnd.cof = f.offset(); this.data.dnd.cw = parseInt(f.width(), 10); this.data.dnd.ch = parseInt(f.height(), 10); this.data.dnd.foreign = !0; c.preventDefault()
- }, this)); f.drop_target && b(document).delegate(f.drop_target, "mouseenter.jstree-" + this.get_index(), b.proxy(function (c) {
- this.data.dnd.active && this._get_settings().dnd.drop_check.call(this, { o: a, r: b(c.target), e: c }) && b.vakata.dnd.helper.children("ins").attr("class",
- "jstree-ok")
- }, this)).delegate(f.drop_target, "mouseleave.jstree-" + this.get_index(), b.proxy(function (a) { this.data.dnd.active && b.vakata.dnd.helper.children("ins").attr("class", "jstree-invalid") }, this)).delegate(f.drop_target, "mouseup.jstree-" + this.get_index(), b.proxy(function (c) { this.data.dnd.active && b.vakata.dnd.helper.children("ins").hasClass("jstree-ok") && this._get_settings().dnd.drop_finish.call(this, { o: a, r: b(c.target), e: c }) }, this))
- }, defaults: {
- copy_modifier: "ctrl", check_timeout: 100, open_timeout: 500,
- drop_target: ".jstree-drop", drop_check: function (a) { return !0 }, drop_finish: b.noop, drag_target: ".jstree-draggable", drag_finish: b.noop, drag_check: function (a) { return { after: !1, before: !1, inside: !0 } }
- }, _fn: {
- dnd_prepare: function () {
- if (c && c.length) {
- this.data.dnd.off = c.offset(); this._get_settings().core.rtl && (this.data.dnd.off.right = this.data.dnd.off.left + c.width()); if (this.data.dnd.foreign) {
- var b = this._get_settings().dnd.drag_check.call(this, { o: a, r: c }); this.data.dnd.after = b.after; this.data.dnd.before = b.before;
- this.data.dnd.inside = b.inside; this.data.dnd.prepared = !0; return this.dnd_show()
- } this.prepare_move(a, c, "before"); this.data.dnd.before = this.check_move(); this.prepare_move(a, c, "after"); this.data.dnd.after = this.check_move(); this._is_loaded(c) ? (this.prepare_move(a, c, "inside"), this.data.dnd.inside = this.check_move()) : this.data.dnd.inside = !1; this.data.dnd.prepared = !0; return this.dnd_show()
- }
- }, dnd_show: function () {
- if (this.data.dnd.prepared) {
- var a = ["before", "inside", "after"], c = !1, f = this._get_settings().core.rtl,
- a = this.data.dnd.w < this.data.core.li_height / 3 ? ["before", "inside", "after"] : this.data.dnd.w <= 2 * this.data.core.li_height / 3 ? this.data.dnd.w < this.data.core.li_height / 2 ? ["inside", "before", "after"] : ["inside", "after", "before"] : ["after", "inside", "before"]; b.each(a, b.proxy(function (a, d) { if (this.data.dnd[d]) return b.vakata.dnd.helper.children("ins").attr("class", "jstree-ok"), c = d, !1 }, this)); !1 === c && b.vakata.dnd.helper.children("ins").attr("class", "jstree-invalid"); a = f ? this.data.dnd.off.right - 18 : this.data.dnd.off.left +
- 10; switch (c) {
- case "before": d.css({ left: a + "px", top: this.data.dnd.off.top - 6 + "px" }).show(); e && e.css({ left: a + 8 + "px", top: this.data.dnd.off.top - 1 + "px" }).show(); break; case "after": d.css({ left: a + "px", top: this.data.dnd.off.top + this.data.core.li_height - 6 + "px" }).show(); e && e.css({ left: a + 8 + "px", top: this.data.dnd.off.top + this.data.core.li_height - 1 + "px" }).show(); break; case "inside": d.css({ left: a + (f ? -4 : 4) + "px", top: this.data.dnd.off.top + this.data.core.li_height / 2 - 5 + "px" }).show(); e && e.hide(); break; default: d.hide(),
- e && e.hide()
- } return m = c
- }
- }, dnd_open: function () { this.data.dnd.to2 = !1; this.open_node(c, b.proxy(this.dnd_prepare, this), !0) }, dnd_finish: function (b) { this.data.dnd.foreign ? (this.data.dnd.after || this.data.dnd.before || this.data.dnd.inside) && this._get_settings().dnd.drag_finish.call(this, { o: a, r: c, p: m }) : (this.dnd_prepare(), this.move_node(a, c, m, b[this._get_settings().dnd.copy_modifier + "Key"])); c = a = !1; d.hide(); e && e.hide() }, dnd_enter: function (a) {
- this.data.dnd.mto && (clearTimeout(this.data.dnd.mto), this.data.dnd.mto =
- !1); var d = this._get_settings().dnd; this.data.dnd.prepared = !1; c = this._get_node(a); d.check_timeout ? (this.data.dnd.to1 && clearTimeout(this.data.dnd.to1), this.data.dnd.to1 = setTimeout(b.proxy(this.dnd_prepare, this), d.check_timeout)) : this.dnd_prepare(); d.open_timeout ? (this.data.dnd.to2 && clearTimeout(this.data.dnd.to2), c && c.length && c.hasClass("jstree-closed") && (this.data.dnd.to2 = setTimeout(b.proxy(this.dnd_open, this), d.open_timeout))) : c && c.length && c.hasClass("jstree-closed") && this.dnd_open()
- }, dnd_leave: function (a) {
- this.data.dnd.after =
- !1; this.data.dnd.before = !1; this.data.dnd.inside = !1; b.vakata.dnd.helper.children("ins").attr("class", "jstree-invalid"); d.hide(); e && e.hide(); c && c[0] === a.target.parentNode && (this.data.dnd.to1 && (clearTimeout(this.data.dnd.to1), this.data.dnd.to1 = !1), this.data.dnd.to2 && (clearTimeout(this.data.dnd.to2), this.data.dnd.to2 = !1))
- }, start_drag: function (c, f) {
- a = this._get_node(c); this.data.ui && this.is_selected(a) && (a = this._get_node(null, !0)); var g = 1 < a.length ? this._get_string("multiple_selection") : this.get_text(a),
- h = this.get_container(); this._get_settings().core.html_titles || (g = g.replace(//ig, ">")); b.vakata.dnd.drag_start(f, { jstree: !0, obj: a }, " " + g); this.data.themes && (d && d.attr("class", "jstree-" + this.data.themes.theme), e && e.attr("class", "jstree-" + this.data.themes.theme), b.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme)); this.data.dnd.cof = h.offset(); this.data.dnd.cw = parseInt(h.width(), 10); this.data.dnd.ch = parseInt(h.height(),
- 10); this.data.dnd.active = !0
- }
- }
- }); b(function () {
- b.vakata.css.add_sheet({
- str: "#vakata-dragged ins { display:block; text-decoration:none; width:16px; height:16px; margin:0 0 0 0; padding:0; position:absolute; top:4px; left:4px; -moz-border-radius:4px; border-radius:4px; -webkit-border-radius:4px; } #vakata-dragged .jstree-ok { background:green; } #vakata-dragged .jstree-invalid { background:red; } #jstree-marker { padding:0; margin:0; font-size:12px; overflow:hidden; height:12px; width:8px; position:absolute; top:-30px; z-index:10001; background-repeat:no-repeat; display:none; background-color:transparent; text-shadow:1px 1px 1px white; color:black; line-height:10px; } #jstree-marker-line { padding:0; margin:0; line-height:0%; font-size:1px; overflow:hidden; height:1px; width:100px; position:absolute; top:-30px; z-index:10000; background-repeat:no-repeat; display:none; background-color:#456c43; cursor:pointer; border:1px solid #eeeeee; border-left:0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; -moz-border-radius:1px; border-radius:1px; -webkit-border-radius:1px; }",
- title: "jstree"
- }); d = b("
").attr({ id: "jstree-marker" }).hide().html("»").bind("mouseleave mouseenter", function (a) { d.hide(); e.hide(); a.preventDefault(); a.stopImmediatePropagation(); return !1 }).appendTo("body"); e = b("
").attr({ id: "jstree-marker-line" }).hide().bind("mouseup", function (a) { if (c && c.length) return c.children("a").trigger(a), a.preventDefault(), a.stopImmediatePropagation(), !1 }).bind("mouseleave", function (a) {
- var f = b(a.relatedTarget); if ((f.is(".jstree") || 0 === f.closest(".jstree").length) &&
- c && c.length) return c.children("a").trigger(a), d.hide(), e.hide(), a.preventDefault(), a.stopImmediatePropagation(), !1
- }).appendTo("body"); b(document).bind("drag_start.vakata", function (a, b) { b.data.jstree && (d.show(), e && e.show()) }); b(document).bind("drag_stop.vakata", function (a, b) { b.data.jstree && (d.hide(), e && e.hide()) })
- })
- })(jQuery); (function (b) {
- b.jstree.plugin("checkbox", {
- __init: function () {
- this.data.checkbox.noui = this._get_settings().checkbox.override_ui; this.data.ui && this.data.checkbox.noui && (this.select_node =
- this.deselect_node = this.deselect_all = b.noop, this.get_selected = this.get_checked); this.get_container().bind("open_node.jstree create_node.jstree clean_node.jstree refresh.jstree", b.proxy(function (a, b) { this._prepare_checkboxes(b.rslt.obj) }, this)).bind("loaded.jstree", b.proxy(function (a) { this._prepare_checkboxes() }, this)).delegate(this.data.ui && this.data.checkbox.noui ? "a" : "ins.jstree-checkbox", "click.jstree", b.proxy(function (a) {
- a.preventDefault(); this._get_node(a.target).hasClass("jstree-checked") ? this.uncheck_node(a.target) :
- this.check_node(a.target); if (this.data.ui && this.data.checkbox.noui) this.save_selected(), this.data.cookies && this.save_cookie("select_node"); else return a.stopImmediatePropagation(), !1
- }, this))
- }, defaults: { override_ui: !1, two_state: !1, real_checkboxes: !1, checked_parent_open: !0, real_checkboxes_names: function (a) { return ["check_" + (a[0].id || Math.ceil(1E4 * Math.random())), 1] } }, __destroy: function () { this.get_container().find("input.jstree-real-checkbox").removeClass("jstree-real-checkbox").end().find("ins.jstree-checkbox").remove() },
- _fn: {
- _checkbox_notify: function (a, b) { b.checked && this.check_node(a, !1) }, _prepare_checkboxes: function (a) {
- a = a && -1 != a ? this._get_node(a) : this.get_container().find("> ul > li"); if (!1 !== a) {
- var c, d = this, e, f = this._get_settings().checkbox.two_state, g = this._get_settings().checkbox.real_checkboxes, l = this._get_settings().checkbox.real_checkboxes_names; a.each(function () {
- e = b(this); c = e.is("li") && (e.hasClass("jstree-checked") || g && e.children(":checked").length) ? "jstree-checked" : "jstree-unchecked"; e.find("li").addBack().each(function () {
- var a =
- b(this), e; a.children("a" + (d.data.languages ? "" : ":eq(0)")).not(":has(.jstree-checkbox)").prepend(" ").parent().not(".jstree-checked, .jstree-unchecked").addClass(f ? "jstree-unchecked" : c); g && (a.children(":checkbox").length ? a.children(":checkbox").addClass("jstree-real-checkbox") : (e = l.call(d, a), a.prepend(" "))); f ? (a.hasClass("jstree-checked") || a.children(":checked").length) &&
- a.addClass("jstree-checked").children(":checkbox").prop("checked", !0) : ("jstree-checked" === c || a.hasClass("jstree-checked") || a.children(":checked").length) && a.find("li").addBack().addClass("jstree-checked").children(":checkbox").prop("checked", !0)
- })
- }); f || a.find(".jstree-checked").parent().parent().each(function () { d._repair_state(this) })
- }
- }, change_state: function (a, c) {
- a = this._get_node(a); var d = !1, e = this._get_settings().checkbox.real_checkboxes; if (!a || -1 === a) return !1; c = !1 === c || !0 === c ? c : a.hasClass("jstree-checked");
- if (this._get_settings().checkbox.two_state) c ? (a.removeClass("jstree-checked").addClass("jstree-unchecked"), e && a.children(":checkbox").prop("checked", !1)) : (a.removeClass("jstree-unchecked").addClass("jstree-checked"), e && a.children(":checkbox").prop("checked", !0)); else {
- if (c) { d = a.find("li").addBack(); if (!d.filter(".jstree-checked, .jstree-undetermined").length) return !1; d.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked"); e && d.children(":checkbox").prop("checked", !1) } else {
- d =
- a.find("li").addBack(); if (!d.filter(".jstree-unchecked, .jstree-undetermined").length) return !1; d.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked"); e && d.children(":checkbox").prop("checked", !0); this.data.ui && (this.data.ui.last_selected = a); this.data.checkbox.last_selected = a
- } a.parentsUntil(".jstree", "li").each(function () {
- var a = b(this); if (c) {
- if (a.children("ul").children("li.jstree-checked, li.jstree-undetermined").length) return a.parentsUntil(".jstree", "li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"),
- e && a.parentsUntil(".jstree", "li").addBack().children(":checkbox").prop("checked", !1), !1; a.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked"); e && a.children(":checkbox").prop("checked", !1)
- } else {
- if (a.children("ul").children("li.jstree-unchecked, li.jstree-undetermined").length) return a.parentsUntil(".jstree", "li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"), e && a.parentsUntil(".jstree", "li").addBack().children(":checkbox").prop("checked",
- !1), !1; a.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked"); e && a.children(":checkbox").prop("checked", !0)
- }
- })
- } this.data.ui && this.data.checkbox.noui && (this.data.ui.selected = this.get_checked()); this.__callback(a); return !0
- }, check_node: function (a) { if (this.change_state(a, !1)) { a = this._get_node(a); if (this._get_settings().checkbox.checked_parent_open) { var b = this; a.parents(".jstree-closed").each(function () { b.open_node(this, !1, !0) }) } this.__callback({ obj: a }) } }, uncheck_node: function (a) {
- this.change_state(a,
- !0) && this.__callback({ obj: this._get_node(a) })
- }, check_all: function () { var a = this; (this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li")).each(function () { a.change_state(this, !1) }); this.__callback() }, uncheck_all: function () { var a = this; (this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li")).each(function () { a.change_state(this, !0) }); this.__callback() }, is_checked: function (a) {
- a = this._get_node(a);
- return a.length ? a.is(".jstree-checked") : !1
- }, get_checked: function (a, b) { a = a && -1 !== a ? this._get_node(a) : this.get_container(); return b || this._get_settings().checkbox.two_state ? a.find(".jstree-checked") : a.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked") }, get_unchecked: function (a, b) { a = a && -1 !== a ? this._get_node(a) : this.get_container(); return b || this._get_settings().checkbox.two_state ? a.find(".jstree-unchecked") : a.find("> ul > .jstree-unchecked, .jstree-undetermined > ul > .jstree-unchecked") },
- show_checkboxes: function () { this.get_container().children("ul").removeClass("jstree-no-checkboxes") }, hide_checkboxes: function () { this.get_container().children("ul").addClass("jstree-no-checkboxes") }, _repair_state: function (a) {
- a = this._get_node(a); if (a.length) if (this._get_settings().checkbox.two_state) a.find("li").addBack().not(".jstree-checked").removeClass("jstree-undetermined").addClass("jstree-unchecked").children(":checkbox").prop("checked", !0); else {
- var b = this._get_settings().checkbox.real_checkboxes,
- d = a.find("> ul > .jstree-checked").length, e = a.find("> ul > .jstree-undetermined").length, f = a.find("> ul > li").length; 0 === f ? a.hasClass("jstree-undetermined") && this.change_state(a, !1) : 0 === d && 0 === e ? this.change_state(a, !0) : d === f ? this.change_state(a, !1) : (a.parentsUntil(".jstree", "li").addBack().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined"), b && a.parentsUntil(".jstree", "li").addBack().children(":checkbox").prop("checked", !1))
- }
- }, reselect: function () {
- if (this.data.ui && this.data.checkbox.noui) {
- var a =
- this, c = this.data.ui.to_select, c = b.map(b.makeArray(c), function (a) { return "#" + a.toString().replace(/^#/, "").replace(/\\\//g, "/").replace(/\//g, "\\/").replace(/\\\./g, ".").replace(/\./g, "\\.").replace(/\:/g, "\\:") }); this.deselect_all(); b.each(c, function (b, c) { a.check_node(c) }); this.__callback()
- } else this.__call_old()
- }, save_loaded: function () { var a = this; this.data.core.to_load = []; this.get_container_ul().find("li.jstree-closed.jstree-undetermined").each(function () { this.id && a.data.core.to_load.push("#" + this.id) }) }
- }
- });
- b(function () { b.vakata.css.add_sheet({ str: ".jstree .jstree-real-checkbox { display:none; } ", title: "jstree" }) })
- })(jQuery); (function (b) {
- b.vakata.xslt = function (a, c, f) {
- var g = !1, l, h, m; if (!1 === g && window.ActiveXObject) try { g = new ActiveXObject("Msxml2.XSLTemplate"), h = new ActiveXObject("Msxml2.DOMDocument"), h.loadXML(a), m = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"), m.loadXML(c), g.stylesheet = m, l = g.createProcessor(), l.input = h, l.transform(), g = l.output } catch (k) { } a = b.parseXML(a); c = b.parseXML(c); !1 === g &&
- "undefined" !== typeof XSLTProcessor && (l = new XSLTProcessor, l.importStylesheet(c), g = l.transformToFragment(a, document), g = b("
").append(g).html()); !1 === g && "undefined" !== typeof a.transformNode && (g = a.transformNode(c)); f.call(null, g)
- }; var a = {
- nest: '\t\t\t \t \t \t ',
- flat: '\t\t\t\t\t\t\t \t\t\t \t\t \t \t \t \t \t \t\t\t\tjstree-last \t\t\t\t\tjstree-open \t\t\tjstree-closed \t\t\tjstree-leaf \t\t \t\t \t \t\t\t\t\t \t\t \t \t \t\t\t\t\t\t\t\t\t\t\t \t\t\t# \t\t\t \t\t \t\t \t\t \t\t\t\t\t\t\t\t\t \t\t\t \t\t \t\t\t\t\t\t\tjstree-icon \t\t\t\t\t \t\t\t\t \t\t\t\tbackground:url( ) center center no-repeat; \t\t\t\t \t\t\t \t\t\t \t\t \t \t\t\t\t\t\t\t\t\t\t\t\t \t\t\t\t \t\t\t \t\t \t\t \t \t '
- },
- c = function (a) { return a.toString().replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'") }; b.jstree.plugin("xml_data", {
- defaults: { data: !1, ajax: !1, xsl: "flat", clean_node: !1, correct_state: !0, get_skip_empty: !1, get_include_preamble: !0 }, _fn: {
- load_node: function (a, b, c) { var g = this; this.load_node_xml(a, function () { g.__callback({ obj: g._get_node(a) }); b.call(this) }, c) }, _is_loaded: function (a) {
- var c = this._get_settings().xml_data; a = this._get_node(a); return -1 == a ||
- !a || !c.ajax && !b.isFunction(c.data) || a.is(".jstree-open, .jstree-leaf") || 0 < a.children("ul").children("li").size()
- }, load_node_xml: function (a, c, f) {
- var g = this.get_settings().xml_data, l = function () { }, h = function () { }; if ((a = this._get_node(a)) && -1 !== a) { if (a.data("jstree_is_loading")) return; a.data("jstree_is_loading", !0) } switch (!0) {
- case !g.data && !g.ajax: throw "Neither data nor ajax settings supplied."; case b.isFunction(g.data): g.data.call(this, a, b.proxy(function (f) {
- this.parse_xml(f, b.proxy(function (f) {
- f && (f =
- f.replace(/ ?xmlns="[^"]*"/ig, ""), 10 < f.length ? (f = b(f), -1 !== a && a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.append(f), a.removeData("jstree_is_loading")) : this.get_container().children("ul").empty().append(f.children()), g.clean_node && this.clean_node(a), c && c.call(this)) : a && -1 !== a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"), g.correct_state && (this.correct_state(a), c && c.call(this))) : g.correct_state && (this.get_container().children("ul").empty(),
- c && c.call(this)))
- }, this))
- }, this)); break; case !!g.data && !g.ajax || !!g.data && !!g.ajax && (!a || -1 === a): a && -1 != a || this.parse_xml(g.data, b.proxy(function (f) { f ? (f = f.replace(/ ?xmlns="[^"]*"/ig, ""), 10 < f.length && (f = b(f), this.get_container().children("ul").empty().append(f.children()), g.clean_node && this.clean_node(a), c && c.call(this))) : g.correct_state && (this.get_container().children("ul").empty(), c && c.call(this)) }, this)); break; case !g.data && !!g.ajax || !!g.data && !!g.ajax && a && -1 !== a: l = function (b, c, e) {
- var h = this.get_settings().xml_data.ajax.error;
- h && h.call(this, b, c, e); -1 !== a && a.length ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"), "success" === c && g.correct_state && this.correct_state(a)) : "success" === c && g.correct_state && this.get_container().children("ul").empty(); f && f.call(this)
- }, h = function (f, h, p) {
- f = p.responseText; var n = this.get_settings().xml_data.ajax.success; n && (f = n.call(this, f, h, p) || f); if ("" === f || f && f.toString && "" === f.toString().replace(/^[\s\n]+$/, "")) return l.call(this, p, h, ""); this.parse_xml(f,
- b.proxy(function (f) {
- f && (f = f.replace(/ ?xmlns="[^"]*"/ig, ""), 10 < f.length ? (f = b(f), -1 !== a && a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.append(f), a.removeData("jstree_is_loading")) : this.get_container().children("ul").empty().append(f.children()), g.clean_node && this.clean_node(a), c && c.call(this)) : a && -1 !== a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"), g.correct_state && (this.correct_state(a), c && c.call(this))) : g.correct_state && (this.get_container().children("ul").empty(),
- c && c.call(this)))
- }, this))
- }, g.ajax.context = this, g.ajax.error = l, g.ajax.success = h, g.ajax.dataType || (g.ajax.dataType = "xml"), b.isFunction(g.ajax.url) && (g.ajax.url = g.ajax.url.call(this, a)), b.isFunction(g.ajax.data) && (g.ajax.data = g.ajax.data.call(this, a)), b.ajax(g.ajax)
- }
- }, parse_xml: function (c, e) { var f = this._get_settings().xml_data; b.vakata.xslt(c, a[f.xsl], e) }, get_xml: function (a, e, f, g, l) {
- var h = "", m = this._get_settings(), k = this, p, n, q, r, s; a || (a = "flat"); l || (l = 0); (e = this._get_node(e)) && -1 !== e || (e = this.get_container().find("> ul > li"));
- f = b.isArray(f) ? f : ["id", "class"]; !l && this.data.types && -1 === b.inArray(m.types.type_attr, f) && f.push(m.types.type_attr); g = b.isArray(g) ? g : []; l || (m.xml_data.get_include_preamble && (h += ''), h += ""); e.each(function () {
- h += "- "; h += "
"; r = q.children("a"); r.each(function () {
- p = b(this); s = !1; h += ""; h += ""
- }); h += " "; n = q[0].id || !0; q = q.find("> ul > li"); n = q.length ? k.get_xml(a, q, f, g, n) : ""; "nest" == a && (h += n); h += " "; "flat" == a && (h += n)
- }); l || (h += " "); return h
- }
- }
- })
- })(jQuery); (function (b) {
- 8 <= b().jquery.split(".")[1] ? (b.expr[":"].jstree_contains = b.expr.createPseudo(function (a) { return function (b) { return 0 <= (b.textContent || b.innerText || "").toLowerCase().indexOf(a.toLowerCase()) } }), b.expr[":"].jstree_title_contains = b.expr.createPseudo(function (a) {
- return function (b) {
- return 0 <= (b.getAttribute("title") ||
- "").toLowerCase().indexOf(a.toLowerCase())
- }
- })) : (b.expr[":"].jstree_contains = function (a, b, d) { return 0 <= (a.textContent || a.innerText || "").toLowerCase().indexOf(d[3].toLowerCase()) }, b.expr[":"].jstree_title_contains = function (a, b, d) { return 0 <= (a.getAttribute("title") || "").toLowerCase().indexOf(d[3].toLowerCase()) }); b.jstree.plugin("search", {
- __init: function () {
- this.data.search.str = ""; this.data.search.result = b(); this._get_settings().search.show_only_matches && this.get_container().bind("search.jstree", function (a,
- c) { b(this).children("ul").find("li").hide().removeClass("jstree-last"); c.rslt.nodes.parentsUntil(".jstree").addBack().show().filter("ul").each(function () { b(this).children("li:visible").eq(-1).addClass("jstree-last") }) }).bind("clear_search.jstree", function () { b(this).children("ul").find("li").css("display", "").end().end().jstree("clean_node", -1) })
- }, defaults: { ajax: !1, search_method: "jstree_contains", show_only_matches: !1 }, _fn: {
- search: function (a, c) {
- if ("" === b.trim(a)) this.clear_search(); else {
- var d = this.get_settings().search,
- e = this, f = function () { }; this.data.search.str = a; if (!c && !1 !== d.ajax && 0 < this.get_container_ul().find("li.jstree-closed:not(:has(ul)):eq(0)").length) {
- this.search.supress_callback = !0; f = function (a, b, c) { var d = this.get_settings().search.ajax.success; d && (a = d.call(this, a, b, c) || a); this.data.search.to_open = a; this._search_open() }; d.ajax.context = this; d.ajax.error = function () { }; d.ajax.success = f; b.isFunction(d.ajax.url) && (d.ajax.url = d.ajax.url.call(this, a)); b.isFunction(d.ajax.data) && (d.ajax.data = d.ajax.data.call(this,
- a)); d.ajax.data || (d.ajax.data = { search_string: a }); if (!d.ajax.dataType || /^json/.exec(d.ajax.dataType)) d.ajax.dataType = "json"; b.ajax(d.ajax)
- } else this.data.search.result.length && this.clear_search(), this.data.search.result = this.get_container().find("a" + (this.data.languages ? "." + this.get_lang() : "") + ":" + d.search_method + "(" + this.data.search.str + ")"), this.data.search.result.addClass("jstree-search").parent().parents(".jstree-closed").each(function () { e.open_node(this, !1, !0) }), this.__callback({
- nodes: this.data.search.result,
- str: a
- })
- }
- }, clear_search: function (a) { this.data.search.result.removeClass("jstree-search"); this.__callback(this.data.search.result); this.data.search.result = b() }, _search_open: function (a) {
- var c = this; a = !0; var d = [], e = []; this.data.search.to_open.length && (b.each(this.data.search.to_open, function (a, c) { if ("#" == c) return !0; b(c).length && b(c).is(".jstree-closed") ? d.push(c) : e.push(c) }), d.length && (this.data.search.to_open = e, b.each(d, function (a, b) { c.open_node(b, function () { c._search_open(!0) }) }), a = !1)); a && this.search(this.data.search.str,
- !0)
- }
- }
- })
- })(jQuery); (function (b) {
- b.vakata.context = {
- hide_on_mouseleave: !1, cnt: b(""), vis: !1, tgt: !1, par: !1, func: !1, data: !1, rtl: !1, show: function (a, c, d, e, f, g, l) {
- b.vakata.context.rtl = !!l; if (a = b.vakata.context.parse(a)) {
- b.vakata.context.vis = !0; b.vakata.context.tgt = c; b.vakata.context.par = g || c || null; b.vakata.context.data = f || null; b.vakata.context.cnt.html(a).css({ visibility: "hidden", display: "block", left: 0, top: 0 }); if (b.vakata.context.hide_on_mouseleave) b.vakata.context.cnt.one("mouseleave",
- function (a) { b.vakata.context.hide() }); f = b.vakata.context.cnt.height(); g = b.vakata.context.cnt.width(); d + g > b(document).width() && (d = b(document).width() - (g + 5), b.vakata.context.cnt.find("li > ul").addClass("right")); e + f > b(document).height() && (e -= f + c[0].offsetHeight, b.vakata.context.cnt.find("li > ul").addClass("bottom")); b.vakata.context.cnt.css({ left: d, top: e }).find("li:has(ul)").bind("mouseenter", function (a) {
- a = b(document).width(); var c = b(document).height(), d = b(this).children("ul").show(); a !== b(document).width() &&
- d.toggleClass("right"); c !== b(document).height() && d.toggleClass("bottom")
- }).bind("mouseleave", function (a) { b(this).children("ul").hide() }).end().css({ visibility: "visible" }).show(); b(document).triggerHandler("context_show.vakata")
- }
- }, hide: function () { b.vakata.context.vis = !1; b.vakata.context.cnt.attr("class", "").css({ visibility: "hidden" }); b(document).triggerHandler("context_hide.vakata") }, parse: function (a, c) {
- if (!a) return !1; var d = "", e = !1, f = !0; c || (b.vakata.context.func = {}); d += ""; b.each(a, function (a, c) {
- if (!c) return !0;
- b.vakata.context.func[a] = c.action; !f && c.separator_before && (d += " "); f = !1; d += ""; c.separator_after && (d += " ", f = !0)
- }); d = d.replace(/<\/li\>$/, ""); d += " "; b(document).triggerHandler("context_parse.vakata"); return 10 < d.length ? d : !1
- }, exec: function (a) {
- return b.isFunction(b.vakata.context.func[a]) ? (b.vakata.context.func[a].call(b.vakata.context.data, b.vakata.context.par),
- !0) : !1
- }
- }; b(function () {
- b.vakata.css.add_sheet({
- str: "#vakata-contextmenu { display:block; visibility:hidden; left:0; top:-200px; position:absolute; margin:0; padding:0; min-width:180px; background:#ebebeb; border:1px solid silver; z-index:10000; *width:180px; } #vakata-contextmenu ul { min-width:180px; *width:180px; } #vakata-contextmenu ul, #vakata-contextmenu li { margin:0; padding:0; list-style-type:none; display:block; } #vakata-contextmenu li { line-height:20px; min-height:20px; position:relative; padding:0px; } #vakata-contextmenu li a { padding:1px 6px; line-height:17px; display:block; text-decoration:none; margin:1px 1px 0 1px; } #vakata-contextmenu li ins { float:left; width:16px; height:16px; text-decoration:none; margin-right:2px; } #vakata-contextmenu li a:hover, #vakata-contextmenu li.vakata-hover > a { background:gray; color:white; } #vakata-contextmenu li ul { display:none; position:absolute; top:-2px; left:100%; background:#ebebeb; border:1px solid gray; } #vakata-contextmenu .right { right:100%; left:auto; } #vakata-contextmenu .bottom { bottom:-1px; top:auto; } #vakata-contextmenu li.vakata-separator { min-height:0; height:1px; line-height:1px; font-size:1px; overflow:hidden; margin:0 2px; background:silver; /* border-top:1px solid #fefefe; */ padding:0; } ",
- title: "vakata"
- }); b.vakata.context.cnt.delegate("a", "click", function (a) { a.preventDefault() }).delegate("a", "mouseup", function (a) { !b(this).parent().hasClass("jstree-contextmenu-disabled") && b.vakata.context.exec(b(this).attr("rel")) ? b.vakata.context.hide() : b(this).blur() }).delegate("a", "mouseover", function () { b.vakata.context.cnt.find(".vakata-hover").removeClass("vakata-hover") }).appendTo("body"); b(document).bind("mousedown", function (a) {
- b.vakata.context.vis && !b.contains(b.vakata.context.cnt[0], a.target) &&
- b.vakata.context.hide()
- }); "undefined" !== typeof b.hotkeys && b(document).bind("keydown", "up", function (a) { if (b.vakata.context.vis) { var c = b.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").prevAll("li:not(.vakata-separator)").first(); c.length || (c = b.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").last()); c.addClass("vakata-hover"); a.stopImmediatePropagation(); a.preventDefault() } }).bind("keydown", "down", function (a) {
- if (b.vakata.context.vis) {
- var c =
- b.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").nextAll("li:not(.vakata-separator)").first(); c.length || (c = b.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").first()); c.addClass("vakata-hover"); a.stopImmediatePropagation(); a.preventDefault()
- }
- }).bind("keydown", "right", function (a) {
- b.vakata.context.vis && (b.vakata.context.cnt.find(".vakata-hover").children("ul").show().children("li:not(.vakata-separator)").removeClass("vakata-hover").first().addClass("vakata-hover"),
- a.stopImmediatePropagation(), a.preventDefault())
- }).bind("keydown", "left", function (a) { b.vakata.context.vis && (b.vakata.context.cnt.find(".vakata-hover").children("ul").hide().children(".vakata-separator").removeClass("vakata-hover"), a.stopImmediatePropagation(), a.preventDefault()) }).bind("keydown", "esc", function (a) { b.vakata.context.hide(); a.preventDefault() }).bind("keydown", "space", function (a) { b.vakata.context.cnt.find(".vakata-hover").last().children("a").click(); a.preventDefault() })
- }); b.jstree.plugin("contextmenu",
- {
- __init: function () {
- this.get_container().delegate("a", "contextmenu.jstree", b.proxy(function (a) { a.preventDefault(); b(a.currentTarget).hasClass("jstree-loading") || this.show_contextmenu(a.currentTarget, a.pageX, a.pageY) }, this)).delegate("a", "click.jstree", b.proxy(function (a) { this.data.contextmenu && b.vakata.context.hide() }, this)).bind("destroy.jstree", b.proxy(function () { this.data.contextmenu && b.vakata.context.hide() }, this)); b(document).bind("context_hide.vakata", b.proxy(function () {
- this.data.contextmenu =
- !1
- }, this))
- }, defaults: {
- select_node: !1, show_at_node: !0, items: {
- create: { separator_before: !1, separator_after: !0, label: "Create", action: function (a) { this.create(a) } }, rename: { separator_before: !1, separator_after: !1, label: "Rename", action: function (a) { this.rename(a) } }, remove: { separator_before: !1, icon: !1, separator_after: !1, label: "Delete", action: function (a) { this.is_selected(a) ? this.remove() : this.remove(a) } }, ccp: {
- separator_before: !0, icon: !1, separator_after: !1, label: "Edit", action: !1, submenu: {
- cut: {
- separator_before: !1,
- separator_after: !1, label: "Cut", action: function (a) { this.cut(a) }
- }, copy: { separator_before: !1, icon: !1, separator_after: !1, label: "Copy", action: function (a) { this.copy(a) } }, paste: { separator_before: !1, icon: !1, separator_after: !1, label: "Paste", action: function (a) { this.paste(a) } }
- }
- }
- }
- }, _fn: {
- show_contextmenu: function (a, c, d) {
- a = this._get_node(a); var e = this.get_settings().contextmenu, f = a.children("a:visible:eq(0)"), g = !1, g = !1; e.select_node && this.data.ui && !this.is_selected(a) && (this.deselect_all(), this.select_node(a, !0));
- if (e.show_at_node || "undefined" === typeof c || "undefined" === typeof d) g = f.offset(), c = g.left, d = g.top + this.data.core.li_height; g = a.data("jstree") && a.data("jstree").contextmenu ? a.data("jstree").contextmenu : e.items; b.isFunction(g) && (g = g.call(this, a)); this.data.contextmenu = !0; b.vakata.context.show(g, f, c, d, this, a, this._get_settings().core.rtl); this.data.themes && b.vakata.context.cnt.attr("class", "jstree-" + this.data.themes.theme + "-context")
- }
- }
- })
- })(jQuery); (function (b) {
- b.jstree.plugin("types", {
- __init: function () {
- var a =
- this._get_settings().types; this.data.types.attach_to = []; this.get_container().bind("init.jstree", b.proxy(function () {
- var c = a.type_attr, d = "", e = this; b.each(a.types, function (a, g) {
- b.each(g, function (a, b) { /^(max_depth|max_children|icon|valid_children)$/.test(a) || e.data.types.attach_to.push(a) }); if (!g.icon) return !0; if (g.icon.image || g.icon.position) d = "default" == a ? d + (".jstree-" + e.get_index() + " a > .jstree-icon { ") : d + (".jstree-" + e.get_index() + " li[" + c + '="' + a + '"] > a > .jstree-icon { '), g.icon.image && (d += " background-image:url(" +
- g.icon.image + "); "), d = g.icon.position ? d + (" background-position:" + g.icon.position + "; ") : d + " background-position:0 0; ", d += "} "
- }); "" !== d && b.vakata.css.add_sheet({ str: d, title: "jstree-types" })
- }, this)).bind("before.jstree", b.proxy(function (a, d) {
- var e, f; if ((e = (e = this._get_settings().types.use_data ? this._get_node(d.args[0]) : !1) && -1 !== e && e.length ? e.data("jstree") : !1) && e.types && !1 === e.types[d.func] || -1 !== b.inArray(d.func, this.data.types.attach_to) && d.args[0] && (d.args[0].tagName || d.args[0].jquery) && (e = this._get_settings().types.types,
- f = this._get_type(d.args[0]), (e[f] && "undefined" !== typeof e[f][d.func] || e["default"] && "undefined" !== typeof e["default"][d.func]) && !1 === this._check(d.func, d.args[0]))) return a.stopImmediatePropagation(), !1
- }, this)); r && this.get_container().bind("load_node.jstree set_type.jstree", b.proxy(function (a, d) {
- var e = d && d.rslt && d.rslt.obj && -1 !== d.rslt.obj ? this._get_node(d.rslt.obj).parent() : this.get_container_ul(), f = !1, g = this._get_settings().types; b.each(g.types, function (a, b) {
- b.icon && (b.icon.image || b.icon.position) &&
- (f = "default" === a ? e.find("li > a > .jstree-icon") : e.find("li[" + g.type_attr + "='" + a + "'] > a > .jstree-icon"), b.icon.image && f.css("backgroundImage", "url(" + b.icon.image + ")"), f.css("backgroundPosition", b.icon.position || "0 0"))
- })
- }, this))
- }, defaults: { max_children: -1, max_depth: -1, valid_children: "all", use_data: !1, type_attr: "rel", types: { "default": { max_children: -1, max_depth: -1, valid_children: "all" } } }, _fn: {
- _types_notify: function (a, b) { b.type && this._get_settings().types.use_data && this.set_type(b.type, a) }, _get_type: function (a) {
- return (a =
- this._get_node(a)) && a.length ? a.attr(this._get_settings().types.type_attr) || "default" : !1
- }, set_type: function (a, b) { b = this._get_node(b); var d = b.length && a ? b.attr(this._get_settings().types.type_attr, a) : !1; d && this.__callback({ obj: b, type: a }); return d }, _check: function (a, c, d) {
- c = this._get_node(c); var e = !1, f = this._get_type(c), g = 0, l = this, h = this._get_settings().types, m = !1; if (-1 === c) if (h[a]) e = h[a]; else return; else {
- if (!1 === f) return; (m = h.use_data ? c.data("jstree") : !1) && m.types && "undefined" !== typeof m.types[a] ? e = m.types[a] :
- h.types[f] && "undefined" !== typeof h.types[f][a] ? e = h.types[f][a] : h.types["default"] && "undefined" !== typeof h.types["default"][a] && (e = h.types["default"][a])
- } b.isFunction(e) && (e = e.call(this, c)); "max_depth" === a && -1 !== c && !1 !== d && -2 !== h.max_depth && 0 !== e && c.children("a:eq(0)").parentsUntil(".jstree", "li").each(function (b) {
- if (-1 !== h.max_depth && 0 >= h.max_depth - (b + 1)) return e = 0, !1; g = 0 === b ? e : l._check(a, this, !1); if (-1 !== g && 0 >= g - (b + 1)) return e = 0, !1; 0 <= g && (g - (b + 1) < e || 0 > e) && (e = g - (b + 1)); 0 <= h.max_depth && (h.max_depth -
- (b + 1) < e || 0 > e) && (e = h.max_depth - (b + 1))
- }); return e
- }, check_move: function () {
- if (!this.__call_old()) return !1; var a = this._get_move(), c = a.rt._get_settings().types, d = a.rt._check("max_children", a.cr), e = a.rt._check("max_depth", a.cr), f = a.rt._check("valid_children", a.cr), g = 0, l = 1; if ("none" === f || b.isArray(f) && a.ot && a.ot._get_type && (a.o.each(function () { if (-1 === b.inArray(a.ot._get_type(this), f)) return l = !1 }), !1 === l) || -2 !== c.max_children && -1 !== d && (g = -1 === a.cr ? this.get_container().find("> ul > li").not(a.o).length : a.cr.find("> ul > li").not(a.o).length,
- g + a.o.length > d)) return !1; if (-2 !== c.max_depth && -1 !== e) { l = 0; if (0 === e) return !1; if ("undefined" === typeof a.o.d) { for (c = a.o; 0 < c.length;) c = c.find("> ul > li"), l++; a.o.d = l } if (0 > e - a.o.d) return !1 } return !0
- }, create_node: function (a, c, d, e, f, g) {
- if (!g && (f || this._is_loaded(a))) {
- var l = "string" == typeof c && c.match(/^before|after$/i) && -1 !== a ? this._get_parent(a) : this._get_node(a), h = this._get_settings().types, m = this._check("max_children", l), k = this._check("max_depth", l), p = this._check("valid_children", l); "string" === typeof d &&
- (d = { data: d }); d || (d = {}); if ("none" === p) return !1; if (b.isArray(p)) if (!d.attr || !d.attr[h.type_attr]) d.attr || (d.attr = {}), d.attr[h.type_attr] = p[0]; else if (-1 === b.inArray(d.attr[h.type_attr], p)) return !1; if (-2 !== h.max_children && -1 !== m && (l = -1 === l ? this.get_container().find("> ul > li").length : l.find("> ul > li").length, l + 1 > m) || -2 !== h.max_depth && -1 !== k && 0 > k - 1) return !1
- } return this.__call_old(!0, a, c, d, e, f, g)
- }
- }
- })
- })(jQuery); (function (b) {
- b.jstree.plugin("html_data", {
- __init: function () {
- this.data.html_data.original_container_html =
- this.get_container().find(" > ul > li").clone(!0); this.data.html_data.original_container_html.find("li").addBack().contents().filter(function () { return 3 == this.nodeType }).remove()
- }, defaults: { data: !1, ajax: !1, correct_state: !0 }, _fn: {
- load_node: function (a, b, d) { var e = this; this.load_node_html(a, function () { e.__callback({ obj: e._get_node(a) }); b.call(this) }, d) }, _is_loaded: function (a) {
- a = this._get_node(a); return -1 == a || !a || !this._get_settings().html_data.ajax && !b.isFunction(this._get_settings().html_data.data) ||
- a.is(".jstree-open, .jstree-leaf") || 0 < a.children("ul").children("li").size()
- }, load_node_html: function (a, c, d) {
- var e, f = this.get_settings().html_data, g = function () { }; e = function () { }; if ((a = this._get_node(a)) && -1 !== a) { if (a.data("jstree_is_loading")) return; a.data("jstree_is_loading", !0) } switch (!0) {
- case b.isFunction(f.data): f.data.call(this, a, b.proxy(function (d) {
- d && "" !== d && d.toString && "" !== d.toString().replace(/^[\s\n]+$/, "") ? (d = b(d), d.is("ul") || (d = b("").append(d)), -1 != a && a ? (a.children("a.jstree-loading").removeClass("jstree-loading"),
- a.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || "INS" !== this.firstChild.tagName }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"), a.removeData("jstree_is_loading")) : this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || "INS" !== this.firstChild.tagName }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"),
- this.clean_node(a), c && c.call(this)) : a && -1 !== a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"), f.correct_state && (this.correct_state(a), c && c.call(this))) : f.correct_state && (this.get_container().children("ul").empty(), c && c.call(this))
- }, this)); break; case !f.data && !f.ajax: a && -1 != a || (this.get_container().children("ul").empty().append(this.data.html_data.original_container_html).find("li, a").filter(function () {
- return !this.firstChild || !this.firstChild.tagName ||
- "INS" !== this.firstChild.tagName
- }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"), this.clean_node()); c && c.call(this); break; case !!f.data && !f.ajax || !!f.data && !!f.ajax && (!a || -1 === a): a && -1 != a || (e = b(f.data), e.is("ul") || (e = b("").append(e)), this.get_container().children("ul").empty().append(e.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || "INS" !== this.firstChild.tagName }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"),
- this.clean_node()); c && c.call(this); break; case !f.data && !!f.ajax || !!f.data && !!f.ajax && a && -1 !== a: a = this._get_node(a), g = function (b, c, e) { var g = this.get_settings().html_data.ajax.error; g && g.call(this, b, c, e); -1 != a && a.length ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"), "success" === c && f.correct_state && this.correct_state(a)) : "success" === c && f.correct_state && this.get_container().children("ul").empty(); d && d.call(this) }, e = function (d, e, m) {
- var k = this.get_settings().html_data.ajax.success;
- k && (d = k.call(this, d, e, m) || d); if ("" === d || d && d.toString && "" === d.toString().replace(/^[\s\n]+$/, "")) return g.call(this, m, e, ""); d ? (d = b(d), d.is("ul") || (d = b("").append(d)), -1 != a && a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || "INS" !== this.firstChild.tagName }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"),
- a.removeData("jstree_is_loading")) : this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || "INS" !== this.firstChild.tagName }).prepend(" ").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"), this.clean_node(a), c && c.call(this)) : a && -1 !== a ? (a.children("a.jstree-loading").removeClass("jstree-loading"), a.removeData("jstree_is_loading"), f.correct_state &&
- (this.correct_state(a), c && c.call(this))) : f.correct_state && (this.get_container().children("ul").empty(), c && c.call(this))
- }, f.ajax.context = this, f.ajax.error = g, f.ajax.success = e, f.ajax.dataType || (f.ajax.dataType = "html"), b.isFunction(f.ajax.url) && (f.ajax.url = f.ajax.url.call(this, a)), b.isFunction(f.ajax.data) && (f.ajax.data = f.ajax.data.call(this, a)), b.ajax(f.ajax)
- }
- }
- }
- }); b.jstree.defaults.plugins.push("html_data")
- })(jQuery); (function (b) {
- b.jstree.plugin("themeroller", {
- __init: function () {
- var a = this._get_settings().themeroller;
- this.get_container().addClass("ui-widget-content").addClass("jstree-themeroller").delegate("a", "mouseenter.jstree", function (c) { b(c.currentTarget).hasClass("jstree-loading") || b(this).addClass(a.item_h) }).delegate("a", "mouseleave.jstree", function () { b(this).removeClass(a.item_h) }).bind("init.jstree", b.proxy(function (a, b) { b.inst.get_container().find("> ul > li > .jstree-loading > ins").addClass("ui-icon-refresh"); this._themeroller(b.inst.get_container().find("> ul > li")) }, this)).bind("open_node.jstree create_node.jstree",
- b.proxy(function (a, b) { this._themeroller(b.rslt.obj) }, this)).bind("loaded.jstree refresh.jstree", b.proxy(function (a) { this._themeroller() }, this)).bind("close_node.jstree", b.proxy(function (a, b) { this._themeroller(b.rslt.obj) }, this)).bind("delete_node.jstree", b.proxy(function (a, b) { this._themeroller(b.rslt.parent) }, this)).bind("correct_state.jstree", b.proxy(function (b, d) {
- d.rslt.obj.children("ins.jstree-icon").removeClass(a.opened + " " + a.closed + " ui-icon").end().find("> a > ins.ui-icon").filter(function () {
- return -1 ===
- this.className.toString().replace(a.item_clsd, "").replace(a.item_open, "").replace(a.item_leaf, "").indexOf("ui-icon-")
- }).removeClass(a.item_open + " " + a.item_clsd).addClass(a.item_leaf || "jstree-no-icon")
- }, this)).bind("select_node.jstree", b.proxy(function (b, d) { d.rslt.obj.children("a").addClass(a.item_a) }, this)).bind("deselect_node.jstree deselect_all.jstree", b.proxy(function (b, d) { this.get_container().find("a." + a.item_a).removeClass(a.item_a).end().find("a.jstree-clicked").addClass(a.item_a) }, this)).bind("dehover_node.jstree",
- b.proxy(function (b, d) { d.rslt.obj.children("a").removeClass(a.item_h) }, this)).bind("hover_node.jstree", b.proxy(function (b, d) { this.get_container().find("a." + a.item_h).not(d.rslt.obj).removeClass(a.item_h); d.rslt.obj.children("a").addClass(a.item_h) }, this)).bind("move_node.jstree", b.proxy(function (a, b) { this._themeroller(b.rslt.o); this._themeroller(b.rslt.op) }, this))
- }, __destroy: function () {
- var a = this._get_settings().themeroller, c = ["ui-icon"]; b.each(a, function (a, b) { b = b.split(" "); b.length && (c = c.concat(b)) });
- this.get_container().removeClass("ui-widget-content").find("." + c.join(", .")).removeClass(c.join(" "))
- }, _fn: {
- _themeroller: function (a) {
- var b = this._get_settings().themeroller; a = (a = a && -1 != a ? this._get_node(a) : this.get_container_ul()) && -1 != a ? a.parent() : this.get_container_ul(); a.find("li.jstree-closed").children("ins.jstree-icon").removeClass(b.opened).addClass("ui-icon " + b.closed).end().children("a").addClass(b.item).children("ins.jstree-icon").addClass("ui-icon").filter(function () {
- return -1 === this.className.toString().replace(b.item_clsd,
- "").replace(b.item_open, "").replace(b.item_leaf, "").indexOf("ui-icon-")
- }).removeClass(b.item_leaf + " " + b.item_open).addClass(b.item_clsd || "jstree-no-icon").end().end().end().end().find("li.jstree-open").children("ins.jstree-icon").removeClass(b.closed).addClass("ui-icon " + b.opened).end().children("a").addClass(b.item).children("ins.jstree-icon").addClass("ui-icon").filter(function () { return -1 === this.className.toString().replace(b.item_clsd, "").replace(b.item_open, "").replace(b.item_leaf, "").indexOf("ui-icon-") }).removeClass(b.item_leaf +
- " " + b.item_clsd).addClass(b.item_open || "jstree-no-icon").end().end().end().end().find("li.jstree-leaf").children("ins.jstree-icon").removeClass(b.closed + " ui-icon " + b.opened).end().children("a").addClass(b.item).children("ins.jstree-icon").addClass("ui-icon").filter(function () { return -1 === this.className.toString().replace(b.item_clsd, "").replace(b.item_open, "").replace(b.item_leaf, "").indexOf("ui-icon-") }).removeClass(b.item_clsd + " " + b.item_open).addClass(b.item_leaf || "jstree-no-icon")
- }
- }, defaults: {
- opened: "ui-icon-triangle-1-se",
- closed: "ui-icon-triangle-1-e", item: "ui-state-default", item_h: "ui-state-hover", item_a: "ui-state-active", item_open: "ui-icon-folder-open", item_clsd: "ui-icon-folder-collapsed", item_leaf: "ui-icon-document"
- }
- }); b(function () { b.vakata.css.add_sheet({ str: ".jstree-themeroller .ui-icon { overflow:visible; } .jstree-themeroller a { padding:0 2px; } .jstree-themeroller .jstree-no-icon { display:none; }", title: "jstree" }) })
- })(jQuery); (function (b) {
- b.jstree.plugin("unique", {
- __init: function () {
- this.get_container().bind("before.jstree",
- b.proxy(function (a, c) {
- var d = [], e = !0, f; "move_node" == c.func && !0 === c.args[4] && c.args[0].o && c.args[0].o.length && (c.args[0].o.children("a").each(function () { d.push(b(this).text().replace(/^\s+/g, "")) }), e = this._check_unique(d, c.args[0].np.find("> ul > li").not(c.args[0].o), "move_node")); "create_node" == c.func && (c.args[4] || this._is_loaded(c.args[0])) && (e = this._get_node(c.args[0]), !c.args[1] || "before" !== c.args[1] && "after" !== c.args[1] || (e = this._get_parent(c.args[0])) && -1 !== e || (e = this.get_container()), "string" ===
- typeof c.args[2] ? d.push(c.args[2]) : c.args[2] && c.args[2].data ? d.push(c.args[2].data) : d.push(this._get_string("new_node")), e = this._check_unique(d, e.find("> ul > li"), "create_node")); "rename_node" == c.func && (d.push(c.args[1]), f = this._get_node(c.args[0]), (e = this._get_parent(f)) && -1 !== e || (e = this.get_container()), e = this._check_unique(d, e.find("> ul > li").not(f), "rename_node")); if (!e) return a.stopPropagation(), !1
- }, this))
- }, defaults: { error_callback: b.noop }, _fn: {
- _check_unique: function (a, c, d) {
- var e = [], f = !0;
- c.children("a").each(function () { e.push(b(this).text().replace(/^\s+/g, "")) }); if (!e.length || !a.length) return !0; b.each(a, function (a, c) { if (-1 !== b.inArray(c, e)) return f = !1 }); f || this._get_settings().unique.error_callback.call(null, a, c, d); return f
- }, check_move: function () { if (!this.__call_old()) return !1; var a = this._get_move(), c = []; return a.o && a.o.length ? (a.o.children("a").each(function () { c.push(b(this).text().replace(/^\s+/g, "")) }), this._check_unique(c, a.np.find("> ul > li").not(a.o), "check_move")) : !0 }
- }
- })
- })(jQuery);
- (function (b) {
- b.jstree.plugin("wholerow", {
- __init: function () {
- if (!this.data.ui) throw "jsTree wholerow: jsTree UI plugin not included."; this.data.wholerow.html = !1; this.data.wholerow.to = !1; this.get_container().bind("init.jstree", b.proxy(function (a, b) { this._get_settings().core.animation = 0 }, this)).bind("open_node.jstree create_node.jstree clean_node.jstree loaded.jstree", b.proxy(function (a, b) { this._prepare_wholerow_span(b && b.rslt && b.rslt.obj ? b.rslt.obj : -1) }, this)).bind("search.jstree clear_search.jstree reopen.jstree after_open.jstree after_close.jstree create_node.jstree delete_node.jstree clean_node.jstree",
- b.proxy(function (a, b) { this.data.to && clearTimeout(this.data.to); this.data.to = setTimeout(function (a, b) { return function () { a._prepare_wholerow_ul(b) } }(this, b && b.rslt && b.rslt.obj ? b.rslt.obj : -1), 0) }, this)).bind("deselect_all.jstree", b.proxy(function (a, b) { this.get_container().find(" > .jstree-wholerow .jstree-clicked").removeClass("jstree-clicked " + (this.data.themeroller ? this._get_settings().themeroller.item_a : "")) }, this)).bind("select_node.jstree deselect_node.jstree ", b.proxy(function (a, c) {
- c.rslt.obj.each(function () {
- c.inst.get_container().find(" > .jstree-wholerow li:visible:eq(" +
- parseInt((b(this).offset().top - c.inst.get_container().offset().top + c.inst.get_container()[0].scrollTop) / c.inst.data.core.li_height, 10) + ")").children("a").attr("class", c.rslt.obj.children("a").attr("class"))
- })
- }, this)).bind("hover_node.jstree dehover_node.jstree", b.proxy(function (a, b) {
- this.get_container().find(" > .jstree-wholerow .jstree-hovered").removeClass("jstree-hovered " + (this.data.themeroller ? this._get_settings().themeroller.item_h : "")); "hover_node" === a.type && this.get_container().find(" > .jstree-wholerow li:visible:eq(" +
- parseInt((b.rslt.obj.offset().top - this.get_container().offset().top + this.get_container()[0].scrollTop) / this.data.core.li_height, 10) + ")").children("a").attr("class", b.rslt.obj.children(".jstree-hovered").attr("class"))
- }, this)).delegate(".jstree-wholerow-span, ins.jstree-icon, li", "click.jstree", function (a) { var c = b(a.currentTarget); "A" === a.target.tagName || "INS" === a.target.tagName && c.closest("li").is(".jstree-open, .jstree-closed") || (c.closest("li").children("a:visible:eq(0)").click(), a.stopImmediatePropagation()) }).delegate("li",
- "mouseover.jstree", b.proxy(function (a) { a.stopImmediatePropagation(); if (b(a.currentTarget).children(".jstree-hovered, .jstree-clicked").length) return !1; this.hover_node(a.currentTarget); return !1 }, this)).delegate("li", "mouseleave.jstree", b.proxy(function (a) { b(a.currentTarget).children("a").hasClass("jstree-hovered").length || this.dehover_node(a.currentTarget) }, this)); (s || r) && b.vakata.css.add_sheet({ str: ".jstree-" + this.get_index() + " { position:relative; } ", title: "jstree" })
- }, defaults: {}, __destroy: function () {
- this.get_container().children(".jstree-wholerow").remove();
- this.get_container().find(".jstree-wholerow-span").remove()
- }, _fn: {
- _prepare_wholerow_span: function (a) { a = a && -1 != a ? this._get_node(a) : this.get_container().find("> ul > li"); !1 !== a && a.each(function () { b(this).find("li").addBack().each(function () { var a = b(this); if (a.children(".jstree-wholerow-span").length) return !0; a.prepend(" ") }) }) }, _prepare_wholerow_ul: function () {
- var a = this.get_container().children("ul").eq(0),
- b = a.html(); a.addClass("jstree-wholerow-real"); this.data.wholerow.last_html !== b && (this.data.wholerow.last_html = b, this.get_container().children(".jstree-wholerow").remove(), this.get_container().append(a.clone().removeClass("jstree-wholerow-real").wrapAll("
").parent().width(a.parent()[0].scrollWidth).css("top", -1 * (a.height() + (s ? 5 : 0))).find("li[id]").each(function () { this.removeAttribute("id") }).end()))
- }
- }
- }); b(function () {
- var a = ".jstree .jstree-wholerow-real { position:relative; z-index:1; } .jstree .jstree-wholerow-real li { cursor:pointer; } .jstree .jstree-wholerow-real a { border-left-color:transparent !important; border-right-color:transparent !important; } .jstree .jstree-wholerow { position:relative; z-index:0; height:0; } .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { width:100%; } .jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li, .jstree .jstree-wholerow a { margin:0 !important; padding:0 !important; } .jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { background:transparent !important; }.jstree .jstree-wholerow ins, .jstree .jstree-wholerow span, .jstree .jstree-wholerow input { display:none !important; }.jstree .jstree-wholerow a, .jstree .jstree-wholerow a:hover { text-indent:-9999px; !important; width:100%; padding:0 !important; border-right-width:0px !important; border-left-width:0px !important; } .jstree .jstree-wholerow-span { position:absolute; left:0; margin:0px; padding:0; height:18px; border-width:0; padding:0; z-index:0; }";
- t && (a += ".jstree .jstree-wholerow a { display:block; height:18px; margin:0; padding:0; border:0; } .jstree .jstree-wholerow-real a { border-color:transparent !important; } "); if (s || r) a += ".jstree .jstree-wholerow, .jstree .jstree-wholerow li, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow a { margin:0; padding:0; line-height:18px; } .jstree .jstree-wholerow a { display:block; height:18px; line-height:18px; overflow:hidden; } "; b.vakata.css.add_sheet({ str: a, title: "jstree" })
- })
- })(jQuery); (function (b) {
- var a =
- ["getChildren", "getChildrenCount", "getAttr", "getName", "getProps"], c = function (a, c) { var f = !0; a = a || {}; c = [].concat(c); b.each(c, function (c, e) { if (!b.isFunction(a[e])) return f = !1 }); return f }; b.jstree.plugin("model", {
- __init: function () {
- if (!this.data.json_data) throw "jsTree model: jsTree json_data plugin not included."; this._get_settings().json_data.data = function (d, e) {
- var f = -1 == d ? this._get_settings().model.object : d.data("jstree_model"); if (!c(f, a)) return e.call(null, !1); this._get_settings().model.async ? f.getChildren(b.proxy(function (a) {
- this.model_done(a,
- e)
- }, this)) : this.model_done(f.getChildren(), e)
- }
- }, defaults: { object: !1, id_prefix: !1, async: !1 }, _fn: {
- model_done: function (a, c) {
- var f = [], g = this._get_settings(), l = this; b.isArray(a) || (a = [a]); b.each(a, function (a, c) {
- var d = c.getProps() || {}; d.attr = c.getAttr() || {}; c.getChildrenCount() && (d.state = "closed"); d.data = c.getName(); b.isArray(d.data) || (d.data = [d.data]); l.data.types && b.isFunction(c.getType) && (d.attr[g.types.type_attr] = c.getType()); d.attr.id && g.model.id_prefix && (d.attr.id = g.model.id_prefix + d.attr.id); d.metadata ||
- (d.metadata = {}); d.metadata.jstree_model = c; f.push(d)
- }); c.call(null, f)
- }
- }
- })
- })(jQuery)
- }
-})();
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/apple/bg.jpg b/dashboard-ui/thirdparty/jstree1.0/themes/apple/bg.jpg
deleted file mode 100644
index 3aad05d8f..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/apple/bg.jpg and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/apple/d.png b/dashboard-ui/thirdparty/jstree1.0/themes/apple/d.png
deleted file mode 100644
index 2463ba6df..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/apple/d.png and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/apple/dot_for_ie.gif b/dashboard-ui/thirdparty/jstree1.0/themes/apple/dot_for_ie.gif
deleted file mode 100644
index c0cc5fda7..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/apple/dot_for_ie.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/apple/style.css b/dashboard-ui/thirdparty/jstree1.0/themes/apple/style.css
deleted file mode 100644
index d0c4163ce..000000000
--- a/dashboard-ui/thirdparty/jstree1.0/themes/apple/style.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * jsTree apple theme 1.0
- * Supported features: dots/no-dots, icons/no-icons, focused, loading
- * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
- */
-
-.jstree-apple > ul { background:url("bg.jpg") left top repeat; }
-.jstree-apple li,
-.jstree-apple ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
-.jstree-apple li { background-position:-90px 0; background-repeat:repeat-y; }
-.jstree-apple li.jstree-last { background:transparent; }
-.jstree-apple .jstree-open > ins { background-position:-72px 0; }
-.jstree-apple .jstree-closed > ins { background-position:-54px 0; }
-.jstree-apple .jstree-leaf > ins { background-position:-36px 0; }
-
-.jstree-apple a { border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; text-shadow:1px 1px 1px white; }
-.jstree-apple .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 3px 0 1px; text-shadow:1px 1px 1px silver; }
-.jstree-apple .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 3px 0 1px; }
-.jstree-apple a .jstree-icon { background-position:-56px -20px; }
-.jstree-apple a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
-
-.jstree-apple.jstree-focused { background:white; }
-
-.jstree-apple .jstree-no-dots li,
-.jstree-apple .jstree-no-dots .jstree-leaf > ins { background:transparent; }
-.jstree-apple .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
-.jstree-apple .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
-
-.jstree-apple .jstree-no-icons a .jstree-icon { display:none; }
-
-.jstree-apple .jstree-search { font-style:italic; }
-
-.jstree-apple .jstree-no-icons .jstree-checkbox { display:inline-block; }
-.jstree-apple .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
-.jstree-apple .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
-.jstree-apple .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
-.jstree-apple .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
-.jstree-apple .jstree-checked > a > .checkbox:hover { background-position:-38px -37px; }
-.jstree-apple .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
-.jstree-apple .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
-
-#vakata-dragged.jstree-apple ins { background:transparent !important; }
-#vakata-dragged.jstree-apple .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
-#vakata-dragged.jstree-apple .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
-#jstree-marker.jstree-apple { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
-
-.jstree-apple a.jstree-search { color:aqua; }
-.jstree-apple .jstree-locked a { color:silver; cursor:default; }
-
-#vakata-contextmenu.jstree-apple-context,
-#vakata-contextmenu.jstree-apple-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
-#vakata-contextmenu.jstree-apple-context li { }
-#vakata-contextmenu.jstree-apple-context a { color:black; }
-#vakata-contextmenu.jstree-apple-context a:hover,
-#vakata-contextmenu.jstree-apple-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
-#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a,
-#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
-#vakata-contextmenu.jstree-apple-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
-#vakata-contextmenu.jstree-apple-context li ul { margin-left:-4px; }
-
-/* TODO: IE6 support - the `>` selectors */
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/apple/throbber.gif b/dashboard-ui/thirdparty/jstree1.0/themes/apple/throbber.gif
deleted file mode 100644
index 5b33f7e54..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/apple/throbber.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/classic/d.gif b/dashboard-ui/thirdparty/jstree1.0/themes/classic/d.gif
deleted file mode 100644
index 6eb0004ce..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/classic/d.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/classic/d.png b/dashboard-ui/thirdparty/jstree1.0/themes/classic/d.png
deleted file mode 100644
index 275daeca2..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/classic/d.png and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/classic/dot_for_ie.gif b/dashboard-ui/thirdparty/jstree1.0/themes/classic/dot_for_ie.gif
deleted file mode 100644
index c0cc5fda7..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/classic/dot_for_ie.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/classic/style.css b/dashboard-ui/thirdparty/jstree1.0/themes/classic/style.css
deleted file mode 100644
index 0351b4cef..000000000
--- a/dashboard-ui/thirdparty/jstree1.0/themes/classic/style.css
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * jsTree classic theme 1.0
- * Supported features: dots/no-dots, icons/no-icons, focused, loading
- * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
- */
-
-.jstree-classic li,
-.jstree-classic ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
-.jstree-classic li { background-position:-90px 0; background-repeat:repeat-y; }
-.jstree-classic li.jstree-last { background:transparent; }
-.jstree-classic .jstree-open > ins { background-position:-72px 0; }
-.jstree-classic .jstree-closed > ins { background-position:-54px 0; }
-.jstree-classic .jstree-leaf > ins { background-position:-36px 0; }
-
-.jstree-classic .jstree-hovered { background:#e7f4f9; border:1px solid #e7f4f9; padding:0 2px 0 1px; }
-.jstree-classic .jstree-clicked { background:navy; border:1px solid navy; padding:0 2px 0 1px; color:white; }
-.jstree-classic a .jstree-icon { background-position:-56px -19px; }
-.jstree-classic .jstree-open > a .jstree-icon { background-position:-56px -36px; }
-.jstree-classic a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
-
-.jstree-classic.jstree-focused { background:white; }
-
-.jstree-classic .jstree-no-dots li,
-.jstree-classic .jstree-no-dots .jstree-leaf > ins { background:transparent; }
-.jstree-classic .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
-.jstree-classic .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
-
-.jstree-classic .jstree-no-icons a .jstree-icon { display:none; }
-
-.jstree-classic .jstree-search { font-style:italic; }
-
-.jstree-classic .jstree-no-icons .jstree-checkbox { display:inline-block; }
-.jstree-classic .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
-.jstree-classic .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
-.jstree-classic .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
-.jstree-classic .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
-.jstree-classic .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
-.jstree-classic .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
-.jstree-classic .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
-
-#vakata-dragged.jstree-classic ins { background:transparent !important; }
-#vakata-dragged.jstree-classic .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
-#vakata-dragged.jstree-classic .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
-#jstree-marker.jstree-classic { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
-
-.jstree-classic a.jstree-search { color:aqua; }
-.jstree-classic .jstree-locked a { color:silver; cursor:default; }
-
-#vakata-contextmenu.jstree-classic-context,
-#vakata-contextmenu.jstree-classic-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
-#vakata-contextmenu.jstree-classic-context li { }
-#vakata-contextmenu.jstree-classic-context a { color:black; }
-#vakata-contextmenu.jstree-classic-context a:hover,
-#vakata-contextmenu.jstree-classic-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
-#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a,
-#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
-#vakata-contextmenu.jstree-classic-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
-#vakata-contextmenu.jstree-classic-context li ul { margin-left:-4px; }
-
-/* IE6 BEGIN */
-.jstree-classic li,
-.jstree-classic ins,
-#vakata-dragged.jstree-classic .jstree-invalid,
-#vakata-dragged.jstree-classic .jstree-ok,
-#jstree-marker.jstree-classic { _background-image:url("d.gif"); }
-.jstree-classic .jstree-open ins { _background-position:-72px 0; }
-.jstree-classic .jstree-closed ins { _background-position:-54px 0; }
-.jstree-classic .jstree-leaf ins { _background-position:-36px 0; }
-.jstree-classic .jstree-open a ins.jstree-icon { _background-position:-56px -36px; }
-.jstree-classic .jstree-closed a ins.jstree-icon { _background-position:-56px -19px; }
-.jstree-classic .jstree-leaf a ins.jstree-icon { _background-position:-56px -19px; }
-#vakata-contextmenu.jstree-classic-context ins { _display:none; }
-#vakata-contextmenu.jstree-classic-context li { _zoom:1; }
-.jstree-classic .jstree-undetermined a .jstree-checkbox { _background-position:-20px -19px; }
-.jstree-classic .jstree-checked a .jstree-checkbox { _background-position:-38px -19px; }
-.jstree-classic .jstree-unchecked a .jstree-checkbox { _background-position:-2px -19px; }
-/* IE6 END */
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/classic/throbber.gif b/dashboard-ui/thirdparty/jstree1.0/themes/classic/throbber.gif
deleted file mode 100644
index 5b33f7e54..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/classic/throbber.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/d.gif b/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/d.gif
deleted file mode 100644
index d85aba049..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/d.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/d.png b/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/d.png
deleted file mode 100644
index 5179cf64e..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/d.png and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/dots.gif b/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/dots.gif
deleted file mode 100644
index 00433648c..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/dots.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/style.css b/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/style.css
deleted file mode 100644
index 1343cf343..000000000
--- a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/style.css
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * jsTree default-rtl theme 1.0
- * Supported features: dots/no-dots, icons/no-icons, focused, loading
- * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
- */
-
-.jstree-default-rtl li,
-.jstree-default-rtl ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
-.jstree-default-rtl li { background-position:-90px 0; background-repeat:repeat-y; }
-.jstree-default-rtl li.jstree-last { background:transparent; }
-.jstree-default-rtl .jstree-open > ins { background-position:-72px 0; }
-.jstree-default-rtl .jstree-closed > ins { background-position:-54px 0; }
-.jstree-default-rtl .jstree-leaf > ins { background-position:-36px 0; }
-
-.jstree-default-rtl .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px; }
-.jstree-default-rtl .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px; }
-.jstree-default-rtl a .jstree-icon { background-position:-56px -19px; }
-.jstree-default-rtl a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
-
-.jstree-default-rtl.jstree-focused { background:#ffffee; }
-
-.jstree-default-rtl .jstree-no-dots li,
-.jstree-default-rtl .jstree-no-dots .jstree-leaf > ins { background:transparent; }
-.jstree-default-rtl .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
-.jstree-default-rtl .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
-
-.jstree-default-rtl .jstree-no-icons a .jstree-icon { display:none; }
-
-.jstree-default-rtl .jstree-search { font-style:italic; }
-
-.jstree-default-rtl .jstree-no-icons .jstree-checkbox { display:inline-block; }
-.jstree-default-rtl .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
-.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
-.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
-.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
-.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
-.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
-.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
-
-#vakata-dragged.jstree-default-rtl ins { background:transparent !important; }
-#vakata-dragged.jstree-default-rtl .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
-#vakata-dragged.jstree-default-rtl .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
-#jstree-marker.jstree-default-rtl { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
-
-.jstree-default-rtl a.jstree-search { color:aqua; }
-.jstree-default-rtl .jstree-locked a { color:silver; cursor:default; }
-
-#vakata-contextmenu.jstree-default-rtl-context,
-#vakata-contextmenu.jstree-default-rtl-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
-#vakata-contextmenu.jstree-default-rtl-context li { }
-#vakata-contextmenu.jstree-default-rtl-context a { color:black; }
-#vakata-contextmenu.jstree-default-rtl-context a:hover,
-#vakata-contextmenu.jstree-default-rtl-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
-#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a,
-#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
-#vakata-contextmenu.jstree-default-rtl-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
-#vakata-contextmenu.jstree-default-rtl-context li ul { margin-left:-4px; }
-
-/* IE6 BEGIN */
-.jstree-default-rtl li,
-.jstree-default-rtl ins,
-#vakata-dragged.jstree-default-rtl .jstree-invalid,
-#vakata-dragged.jstree-default-rtl .jstree-ok,
-#jstree-marker.jstree-default-rtl { _background-image:url("d.gif"); }
-.jstree-default-rtl .jstree-open ins { _background-position:-72px 0; }
-.jstree-default-rtl .jstree-closed ins { _background-position:-54px 0; }
-.jstree-default-rtl .jstree-leaf ins { _background-position:-36px 0; }
-.jstree-default-rtl a ins.jstree-icon { _background-position:-56px -19px; }
-#vakata-contextmenu.jstree-default-rtl-context ins { _display:none; }
-#vakata-contextmenu.jstree-default-rtl-context li { _zoom:1; }
-.jstree-default-rtl .jstree-undetermined a .jstree-checkbox { _background-position:-18px -19px; }
-.jstree-default-rtl .jstree-checked a .jstree-checkbox { _background-position:-36px -19px; }
-.jstree-default-rtl .jstree-unchecked a .jstree-checkbox { _background-position:0px -19px; }
-/* IE6 END */
-
-/* RTL part */
-.jstree-default-rtl .jstree-hovered, .jstree-default-rtl .jstree-clicked { padding:0 1px 0 2px; }
-.jstree-default-rtl li { background-image:url("dots.gif"); background-position: 100% 0px; }
-.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-36px -19px; margin-left:2px; }
-.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:0px -19px; margin-left:2px; }
-.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-18px -19px; margin-left:2px; }
-.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-36px -37px; }
-.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:0px -37px; }
-.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-18px -37px; }
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/throbber.gif b/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/throbber.gif
deleted file mode 100644
index 5b33f7e54..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/default-rtl/throbber.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default/d.gif b/dashboard-ui/thirdparty/jstree1.0/themes/default/d.gif
deleted file mode 100644
index 0e958d387..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/default/d.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default/d.png b/dashboard-ui/thirdparty/jstree1.0/themes/default/d.png
deleted file mode 100644
index 8540175a0..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/default/d.png and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default/style.css b/dashboard-ui/thirdparty/jstree1.0/themes/default/style.css
deleted file mode 100644
index 7ef6a0430..000000000
--- a/dashboard-ui/thirdparty/jstree1.0/themes/default/style.css
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * jsTree default theme 1.0
- * Supported features: dots/no-dots, icons/no-icons, focused, loading
- * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
- */
-
-.jstree-default li,
-.jstree-default ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
-.jstree-default li { background-position:-90px 0; background-repeat:repeat-y; }
-.jstree-default li.jstree-last { background:transparent; }
-.jstree-default .jstree-open > ins { background-position:-72px 0; }
-.jstree-default .jstree-closed > ins { background-position:-54px 0; }
-.jstree-default .jstree-leaf > ins { background-position:-36px 0; }
-
-.jstree-default .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px; }
-.jstree-default .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px; }
-.jstree-default a .jstree-icon { background-position:-56px -19px; }
-.jstree-default a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
-
-.jstree-default.jstree-focused { background:#ffffee; }
-
-.jstree-default .jstree-no-dots li,
-.jstree-default .jstree-no-dots .jstree-leaf > ins { background:transparent; }
-.jstree-default .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
-.jstree-default .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
-
-.jstree-default .jstree-no-icons a .jstree-icon { display:none; }
-
-.jstree-default .jstree-search { font-style:italic; }
-
-.jstree-default .jstree-no-icons .jstree-checkbox { display:inline-block; }
-.jstree-default .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
-.jstree-default .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
-.jstree-default .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
-.jstree-default .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
-.jstree-default .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
-.jstree-default .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
-.jstree-default .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
-
-#vakata-dragged.jstree-default ins { background:transparent !important; }
-#vakata-dragged.jstree-default .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
-#vakata-dragged.jstree-default .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
-#jstree-marker.jstree-default { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
-
-.jstree-default a.jstree-search { color:aqua; }
-.jstree-default .jstree-locked a { color:silver; cursor:default; }
-
-#vakata-contextmenu.jstree-default-context,
-#vakata-contextmenu.jstree-default-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
-#vakata-contextmenu.jstree-default-context li { }
-#vakata-contextmenu.jstree-default-context a { color:black; }
-#vakata-contextmenu.jstree-default-context a:hover,
-#vakata-contextmenu.jstree-default-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
-#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a,
-#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
-#vakata-contextmenu.jstree-default-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
-#vakata-contextmenu.jstree-default-context li ul { margin-left:-4px; }
-
-/* IE6 BEGIN */
-.jstree-default li,
-.jstree-default ins,
-#vakata-dragged.jstree-default .jstree-invalid,
-#vakata-dragged.jstree-default .jstree-ok,
-#jstree-marker.jstree-default { _background-image:url("d.gif"); }
-.jstree-default .jstree-open ins { _background-position:-72px 0; }
-.jstree-default .jstree-closed ins { _background-position:-54px 0; }
-.jstree-default .jstree-leaf ins { _background-position:-36px 0; }
-.jstree-default a ins.jstree-icon { _background-position:-56px -19px; }
-#vakata-contextmenu.jstree-default-context ins { _display:none; }
-#vakata-contextmenu.jstree-default-context li { _zoom:1; }
-.jstree-default .jstree-undetermined a .jstree-checkbox { _background-position:-20px -19px; }
-.jstree-default .jstree-checked a .jstree-checkbox { _background-position:-38px -19px; }
-.jstree-default .jstree-unchecked a .jstree-checkbox { _background-position:-2px -19px; }
-/* IE6 END */
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/default/throbber.gif b/dashboard-ui/thirdparty/jstree1.0/themes/default/throbber.gif
deleted file mode 100644
index 5b33f7e54..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/default/throbber.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/mb3/d.gif b/dashboard-ui/thirdparty/jstree1.0/themes/mb3/d.gif
deleted file mode 100644
index 0e958d387..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/mb3/d.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/mb3/d.png b/dashboard-ui/thirdparty/jstree1.0/themes/mb3/d.png
deleted file mode 100644
index 787d3651d..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/mb3/d.png and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/mb3/style.css b/dashboard-ui/thirdparty/jstree1.0/themes/mb3/style.css
deleted file mode 100644
index 797849b73..000000000
--- a/dashboard-ui/thirdparty/jstree1.0/themes/mb3/style.css
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * jsTree default theme 1.0
- * Supported features: dots/no-dots, icons/no-icons, focused, loading
- * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
- */
-
-.jstree-mb3 li,
-.jstree-mb3 ins {cursor: pointer; background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
-.jstree-mb3 ins {position: relative;top: 6px; }
-.jstree-mb3 li { background-position:-90px 0; background-repeat:repeat-y; }
-.jstree-mb3 li.jstree-last { background:transparent; }
-.jstree-mb3 .jstree-open > ins { background-position:-72px 0; }
-.jstree-mb3 .jstree-closed > ins { background-position:-54px 0; }
-.jstree-mb3 .jstree-leaf > ins { background-position:-36px 0; }
-
-.jstree-mb3 .jstree-hovered { background:#666; border:1px solid transparent; padding:0 2px 0 1px; }
-.jstree-mb3 .jstree-clicked { background:#3388CC;border:1px solid transparent; padding:0 2px 0 1px; }
-
-.jstree-mb3 a .jstree-icon { background-position:-56px -19px; }
-.jstree-mb3 a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
-
-.jstree-mb3.jstree-focused { background: transparent !important; }
-
-.jstree-mb3 .jstree-no-dots li,
-.jstree-mb3 .jstree-no-dots .jstree-leaf > ins { background:transparent; }
-.jstree-mb3 .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
-.jstree-mb3 .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
-
-.jstree-mb3 .jstree-no-icons a .jstree-icon { display:none; }
-
-.jstree-mb3 .jstree-search { font-style:italic; }
-
-.jstree-mb3 .jstree-no-icons .jstree-checkbox { display:inline-block; }
-.jstree-mb3 .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
-.jstree-mb3 .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
-.jstree-mb3 .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
-.jstree-mb3 .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
-.jstree-mb3 .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
-.jstree-mb3 .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
-.jstree-mb3 .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
-
-#vakata-dragged.jstree-mb3 ins { background:transparent !important; }
-#vakata-dragged.jstree-mb3 .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
-#vakata-dragged.jstree-mb3 .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
-#jstree-marker.jstree-mb3 { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
-
-.jstree-mb3 a.jstree-search { color:aqua; }
-.jstree-mb3 .jstree-locked a { color:silver; cursor:default; }
-
-#vakata-contextmenu.jstree-mb3-context,
-#vakata-contextmenu.jstree-mb3-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
-#vakata-contextmenu.jstree-mb3-context li { }
-#vakata-contextmenu.jstree-mb3-context a { color:black; }
-#vakata-contextmenu.jstree-mb3-context a:hover,
-#vakata-contextmenu.jstree-mb3-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:white; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
-#vakata-contextmenu.jstree-mb3-context li.jstree-contextmenu-disabled a,
-#vakata-contextmenu.jstree-mb3-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
-#vakata-contextmenu.jstree-mb3-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
-#vakata-contextmenu.jstree-mb3-context li ul { margin-left:-4px; }
-
-.jstree a {
- color: #fff!important;
- font-weight: normal;
-}
-.jstree-mb3 .jstree-clicked {
- color: #fff!important;
-}
-
-.jstree a ins {
- display: none!important;
-}
-
-.jstree li {
- margin-left: 10px;
- min-width: 10px;
- border-bottom: 1px solid #404040;
-}
-
-.jstree li:last-child {
- border-color: transparent;
-}
-
-.jstree li { min-height:32px; line-height:32px; }
-.jstree a { line-height:32px; height:32px; }
-.jstree a ins { height:28px; width:28px; }
diff --git a/dashboard-ui/thirdparty/jstree1.0/themes/mb3/throbber.gif b/dashboard-ui/thirdparty/jstree1.0/themes/mb3/throbber.gif
deleted file mode 100644
index 5b33f7e54..000000000
Binary files a/dashboard-ui/thirdparty/jstree1.0/themes/mb3/throbber.gif and /dev/null differ
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/jstree.js b/dashboard-ui/thirdparty/jstree3.0.8/jstree.js
new file mode 100644
index 000000000..a64cc9894
--- /dev/null
+++ b/dashboard-ui/thirdparty/jstree3.0.8/jstree.js
@@ -0,0 +1,7073 @@
+/*globals jQuery, define, exports, require, window, document, postMessage */
+(function (factory) {
+ "use strict";
+ if (typeof define === 'function' && define.amd) {
+ define(['jquery'], factory);
+ }
+ else if(typeof exports === 'object') {
+ factory(require('jquery'));
+ }
+ else {
+ factory(jQuery);
+ }
+}(function ($, undefined) {
+ "use strict";
+/*!
+ * jsTree 3.0.8
+ * http://jstree.com/
+ *
+ * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
+ *
+ * Licensed same as jquery - under the terms of the MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+/*!
+ * if using jslint please allow for the jQuery global and use following options:
+ * jslint: browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true
+ */
+
+ // prevent another load? maybe there is a better way?
+ if($.jstree) {
+ return;
+ }
+
+ /**
+ * ### jsTree core functionality
+ */
+
+ // internal variables
+ var instance_counter = 0,
+ ccp_node = false,
+ ccp_mode = false,
+ ccp_inst = false,
+ themes_loaded = [],
+ src = $('script:last').attr('src'),
+ _d = document, _node = _d.createElement('LI'), _temp1, _temp2;
+
+ _node.setAttribute('role', 'treeitem');
+ _temp1 = _d.createElement('I');
+ _temp1.className = 'jstree-icon jstree-ocl';
+ _temp1.setAttribute('role', 'presentation');
+ _node.appendChild(_temp1);
+ _temp1 = _d.createElement('A');
+ _temp1.className = 'jstree-anchor';
+ _temp1.setAttribute('href','#');
+ _temp1.setAttribute('tabindex','-1');
+ _temp2 = _d.createElement('I');
+ _temp2.className = 'jstree-icon jstree-themeicon';
+ _temp2.setAttribute('role', 'presentation');
+ _temp1.appendChild(_temp2);
+ _node.appendChild(_temp1);
+ _temp1 = _temp2 = null;
+
+
+ /**
+ * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances.
+ * @name $.jstree
+ */
+ $.jstree = {
+ /**
+ * specifies the jstree version in use
+ * @name $.jstree.version
+ */
+ version : '3.0.8',
+ /**
+ * holds all the default options used when creating new instances
+ * @name $.jstree.defaults
+ */
+ defaults : {
+ /**
+ * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]`
+ * @name $.jstree.defaults.plugins
+ */
+ plugins : []
+ },
+ /**
+ * stores all loaded jstree plugins (used internally)
+ * @name $.jstree.plugins
+ */
+ plugins : {},
+ path : src && src.indexOf('/') !== -1 ? src.replace(/\/[^\/]+$/,'') : '',
+ idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%]/g
+ };
+ /**
+ * creates a jstree instance
+ * @name $.jstree.create(el [, options])
+ * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector
+ * @param {Object} options options for this instance (extends `$.jstree.defaults`)
+ * @return {jsTree} the new instance
+ */
+ $.jstree.create = function (el, options) {
+ var tmp = new $.jstree.core(++instance_counter),
+ opt = options;
+ options = $.extend(true, {}, $.jstree.defaults, options);
+ if(opt && opt.plugins) {
+ options.plugins = opt.plugins;
+ }
+ $.each(options.plugins, function (i, k) {
+ if(i !== 'core') {
+ tmp = tmp.plugin(k, options[k]);
+ }
+ });
+ tmp.init(el, options);
+ return tmp;
+ };
+ /**
+ * remove all traces of jstree from the DOM and destroy all instances
+ * @name $.jstree.destroy()
+ */
+ $.jstree.destroy = function () {
+ $('.jstree:jstree').jstree('destroy');
+ $(document).off('.jstree');
+ };
+ /**
+ * the jstree class constructor, used only internally
+ * @private
+ * @name $.jstree.core(id)
+ * @param {Number} id this instance's index
+ */
+ $.jstree.core = function (id) {
+ this._id = id;
+ this._cnt = 0;
+ this._wrk = null;
+ this._data = {
+ core : {
+ themes : {
+ name : false,
+ dots : false,
+ icons : false
+ },
+ selected : [],
+ last_error : {},
+ working : false,
+ worker_queue : [],
+ focused : null
+ }
+ };
+ };
+ /**
+ * get a reference to an existing instance
+ *
+ * __Examples__
+ *
+ * // provided a container with an ID of "tree", and a nested node with an ID of "branch"
+ * // all of there will return the same instance
+ * $.jstree.reference('tree');
+ * $.jstree.reference('#tree');
+ * $.jstree.reference($('#tree'));
+ * $.jstree.reference(document.getElementByID('tree'));
+ * $.jstree.reference('branch');
+ * $.jstree.reference('#branch');
+ * $.jstree.reference($('#branch'));
+ * $.jstree.reference(document.getElementByID('branch'));
+ *
+ * @name $.jstree.reference(needle)
+ * @param {DOMElement|jQuery|String} needle
+ * @return {jsTree|null} the instance or `null` if not found
+ */
+ $.jstree.reference = function (needle) {
+ var tmp = null,
+ obj = null;
+ if(needle && needle.id) { needle = needle.id; }
+
+ if(!obj || !obj.length) {
+ try { obj = $(needle); } catch (ignore) { }
+ }
+ if(!obj || !obj.length) {
+ try { obj = $('#' + needle.replace($.jstree.idregex,'\\$&')); } catch (ignore) { }
+ }
+ if(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) {
+ tmp = obj;
+ }
+ else {
+ $('.jstree').each(function () {
+ var inst = $(this).data('jstree');
+ if(inst && inst._model.data[needle]) {
+ tmp = inst;
+ return false;
+ }
+ });
+ }
+ return tmp;
+ };
+ /**
+ * Create an instance, get an instance or invoke a command on a instance.
+ *
+ * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken).
+ *
+ * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function).
+ *
+ * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`).
+ *
+ * In any other case - nothing is returned and chaining is not broken.
+ *
+ * __Examples__
+ *
+ * $('#tree1').jstree(); // creates an instance
+ * $('#tree2').jstree({ plugins : [] }); // create an instance with some options
+ * $('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments
+ * $('#tree2').jstree(); // get an existing instance (or create an instance)
+ * $('#tree2').jstree(true); // get an existing instance (will not create new instance)
+ * $('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method)
+ *
+ * @name $().jstree([arg])
+ * @param {String|Object} arg
+ * @return {Mixed}
+ */
+ $.fn.jstree = function (arg) {
+ // check for string argument
+ var is_method = (typeof arg === 'string'),
+ args = Array.prototype.slice.call(arguments, 1),
+ result = null;
+ if(arg === true && !this.length) { return false; }
+ this.each(function () {
+ // get the instance (if there is one) and method (if it exists)
+ var instance = $.jstree.reference(this),
+ method = is_method && instance ? instance[arg] : null;
+ // if calling a method, and method is available - execute on the instance
+ result = is_method && method ?
+ method.apply(instance, args) :
+ null;
+ // if there is no instance and no method is being called - create one
+ if(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) {
+ $(this).data('jstree', new $.jstree.create(this, arg));
+ }
+ // if there is an instance and no method is called - return the instance
+ if( (instance && !is_method) || arg === true ) {
+ result = instance || false;
+ }
+ // if there was a method call which returned a result - break and return the value
+ if(result !== null && result !== undefined) {
+ return false;
+ }
+ });
+ // if there was a method call with a valid return value - return that, otherwise continue the chain
+ return result !== null && result !== undefined ?
+ result : this;
+ };
+ /**
+ * used to find elements containing an instance
+ *
+ * __Examples__
+ *
+ * $('div:jstree').each(function () {
+ * $(this).jstree('destroy');
+ * });
+ *
+ * @name $(':jstree')
+ * @return {jQuery}
+ */
+ $.expr[':'].jstree = $.expr.createPseudo(function(search) {
+ return function(a) {
+ return $(a).hasClass('jstree') &&
+ $(a).data('jstree') !== undefined;
+ };
+ });
+
+ /**
+ * stores all defaults for the core
+ * @name $.jstree.defaults.core
+ */
+ $.jstree.defaults.core = {
+ /**
+ * data configuration
+ *
+ * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items).
+ *
+ * You can also pass in a HTML string or a JSON array here.
+ *
+ * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree.
+ * In addition to the standard jQuery ajax options here you can suppy functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used.
+ *
+ * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result.
+ *
+ * __Examples__
+ *
+ * // AJAX
+ * $('#tree').jstree({
+ * 'core' : {
+ * 'data' : {
+ * 'url' : '/get/children/',
+ * 'data' : function (node) {
+ * return { 'id' : node.id };
+ * }
+ * }
+ * });
+ *
+ * // direct data
+ * $('#tree').jstree({
+ * 'core' : {
+ * 'data' : [
+ * 'Simple root node',
+ * {
+ * 'id' : 'node_2',
+ * 'text' : 'Root node with options',
+ * 'state' : { 'opened' : true, 'selected' : true },
+ * 'children' : [ { 'text' : 'Child 1' }, 'Child 2']
+ * }
+ * ]
+ * });
+ *
+ * // function
+ * $('#tree').jstree({
+ * 'core' : {
+ * 'data' : function (obj, callback) {
+ * callback.call(this, ['Root 1', 'Root 2']);
+ * }
+ * });
+ *
+ * @name $.jstree.defaults.core.data
+ */
+ data : false,
+ /**
+ * configure the various strings used throughout the tree
+ *
+ * You can use an object where the key is the string you need to replace and the value is your replacement.
+ * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement.
+ * If left as `false` no replacement is made.
+ *
+ * __Examples__
+ *
+ * $('#tree').jstree({
+ * 'core' : {
+ * 'strings' : {
+ * 'Loading ...' : 'Please wait ...'
+ * }
+ * }
+ * });
+ *
+ * @name $.jstree.defaults.core.strings
+ */
+ strings : false,
+ /**
+ * determines what happens when a user tries to modify the structure of the tree
+ * If left as `false` all operations like create, rename, delete, move or copy are prevented.
+ * You can set this to `true` to allow all interactions or use a function to have better control.
+ *
+ * __Examples__
+ *
+ * $('#tree').jstree({
+ * 'core' : {
+ * 'check_callback' : function (operation, node, node_parent, node_position, more) {
+ * // operation can be 'create_node', 'rename_node', 'delete_node', 'move_node' or 'copy_node'
+ * // in case of 'rename_node' node_position is filled with the new node name
+ * return operation === 'rename_node' ? true : false;
+ * }
+ * }
+ * });
+ *
+ * @name $.jstree.defaults.core.check_callback
+ */
+ check_callback : false,
+ /**
+ * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc)
+ * @name $.jstree.defaults.core.error
+ */
+ error : $.noop,
+ /**
+ * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`)
+ * @name $.jstree.defaults.core.animation
+ */
+ animation : 200,
+ /**
+ * a boolean indicating if multiple nodes can be selected
+ * @name $.jstree.defaults.core.multiple
+ */
+ multiple : true,
+ /**
+ * theme configuration object
+ * @name $.jstree.defaults.core.themes
+ */
+ themes : {
+ /**
+ * the name of the theme to use (if left as `false` the default theme is used)
+ * @name $.jstree.defaults.core.themes.name
+ */
+ name : false,
+ /**
+ * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme.
+ * @name $.jstree.defaults.core.themes.url
+ */
+ url : false,
+ /**
+ * the location of all jstree themes - only used if `url` is set to `true`
+ * @name $.jstree.defaults.core.themes.dir
+ */
+ dir : false,
+ /**
+ * a boolean indicating if connecting dots are shown
+ * @name $.jstree.defaults.core.themes.dots
+ */
+ dots : true,
+ /**
+ * a boolean indicating if node icons are shown
+ * @name $.jstree.defaults.core.themes.icons
+ */
+ icons : true,
+ /**
+ * a boolean indicating if the tree background is striped
+ * @name $.jstree.defaults.core.themes.stripes
+ */
+ stripes : false,
+ /**
+ * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants)
+ * @name $.jstree.defaults.core.themes.variant
+ */
+ variant : false,
+ /**
+ * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`.
+ * @name $.jstree.defaults.core.themes.responsive
+ */
+ responsive : false
+ },
+ /**
+ * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user)
+ * @name $.jstree.defaults.core.expand_selected_onload
+ */
+ expand_selected_onload : true,
+ /**
+ * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true`
+ * @name $.jstree.defaults.core.worker
+ */
+ worker : true,
+ /**
+ * Force node text to plain text (and escape HTML). Defaults to `false`
+ * @name $.jstree.defaults.core.force_text
+ */
+ force_text : false
+ };
+ $.jstree.core.prototype = {
+ /**
+ * used to decorate an instance with a plugin. Used internally.
+ * @private
+ * @name plugin(deco [, opts])
+ * @param {String} deco the plugin to decorate with
+ * @param {Object} opts options for the plugin
+ * @return {jsTree}
+ */
+ plugin : function (deco, opts) {
+ var Child = $.jstree.plugins[deco];
+ if(Child) {
+ this._data[deco] = {};
+ Child.prototype = this;
+ return new Child(opts, this);
+ }
+ return this;
+ },
+ /**
+ * used to decorate an instance with a plugin. Used internally.
+ * @private
+ * @name init(el, optons)
+ * @param {DOMElement|jQuery|String} el the element we are transforming
+ * @param {Object} options options for this instance
+ * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree
+ */
+ init : function (el, options) {
+ this._model = {
+ data : {
+ '#' : {
+ id : '#',
+ parent : null,
+ parents : [],
+ children : [],
+ children_d : [],
+ state : { loaded : false }
+ }
+ },
+ changed : [],
+ force_full_redraw : false,
+ redraw_timeout : false,
+ default_state : {
+ loaded : true,
+ opened : false,
+ selected : false,
+ disabled : false
+ }
+ };
+
+ this.element = $(el).addClass('jstree jstree-' + this._id);
+ this.settings = options;
+ this.element.bind("destroyed", $.proxy(this.teardown, this));
+
+ this._data.core.ready = false;
+ this._data.core.loaded = false;
+ this._data.core.rtl = (this.element.css("direction") === "rtl");
+ this.element[this._data.core.rtl ? 'addClass' : 'removeClass']("jstree-rtl");
+ this.element.attr('role','tree');
+ if(this.settings.core.multiple) {
+ this.element.attr('aria-multiselectable', true);
+ }
+ if(!this.element.attr('tabindex')) {
+ this.element.attr('tabindex','0');
+ }
+
+ this.bind();
+ /**
+ * triggered after all events are bound
+ * @event
+ * @name init.jstree
+ */
+ this.trigger("init");
+
+ this._data.core.original_container_html = this.element.find(" > ul > li").clone(true);
+ this._data.core.original_container_html
+ .find("li").addBack()
+ .contents().filter(function() {
+ return this.nodeType === 3 && (!this.nodeValue || /^\s+$/.test(this.nodeValue));
+ })
+ .remove();
+ this.element.html("<"+"ul class='jstree-container-ul jstree-children' role='group'><"+"li id='j"+this._id+"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'> <"+"a class='jstree-anchor' href='#'> " + this.get_string("Loading ...") + " ");
+ this.element.attr('aria-activedescendant','j' + this._id + '_loading');
+ this._data.core.li_height = this.get_container_ul().children("li").first().height() || 24;
+ /**
+ * triggered after the loading text is shown and before loading starts
+ * @event
+ * @name loading.jstree
+ */
+ this.trigger("loading");
+ this.load_node('#');
+ },
+ /**
+ * destroy an instance
+ * @name destroy()
+ * @param {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact
+ */
+ destroy : function (keep_html) {
+ if(this._wrk) {
+ try {
+ window.URL.revokeObjectURL(this._wrk);
+ this._wrk = null;
+ }
+ catch (ignore) { }
+ }
+ if(!keep_html) { this.element.empty(); }
+ this.element.unbind("destroyed", this.teardown);
+ this.teardown();
+ },
+ /**
+ * part of the destroying of an instance. Used internally.
+ * @private
+ * @name teardown()
+ */
+ teardown : function () {
+ this.unbind();
+ this.element
+ .removeClass('jstree')
+ .removeData('jstree')
+ .find("[class^='jstree']")
+ .addBack()
+ .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
+ this.element = null;
+ },
+ /**
+ * bind all events. Used internally.
+ * @private
+ * @name bind()
+ */
+ bind : function () {
+ var word = '',
+ tout = null;
+ this.element
+ .on("dblclick.jstree", function () {
+ if(document.selection && document.selection.empty) {
+ document.selection.empty();
+ }
+ else {
+ if(window.getSelection) {
+ var sel = window.getSelection();
+ try {
+ sel.removeAllRanges();
+ sel.collapse();
+ } catch (ignore) { }
+ }
+ }
+ })
+ .on("click.jstree", ".jstree-ocl", $.proxy(function (e) {
+ this.toggle_node(e.target);
+ }, this))
+ .on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
+ e.preventDefault();
+ if(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); }
+ this.activate_node(e.currentTarget, e);
+ }, this))
+ .on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {
+ if(e.target.tagName === "INPUT") { return true; }
+ var o = null;
+ if(this._data.core.rtl) {
+ if(e.which === 37) { e.which = 39; }
+ else if(e.which === 39) { e.which = 37; }
+ }
+ switch(e.which) {
+ case 32: // aria defines space only with Ctrl
+ if(e.ctrlKey) {
+ e.type = "click";
+ $(e.currentTarget).trigger(e);
+ }
+ break;
+ case 13: // enter
+ e.type = "click";
+ $(e.currentTarget).trigger(e);
+ break;
+ case 37: // right
+ e.preventDefault();
+ if(this.is_open(e.currentTarget)) {
+ this.close_node(e.currentTarget);
+ }
+ else {
+ o = this.get_parent(e.currentTarget);
+ if(o && o.id !== '#') { this.get_node(o, true).children('.jstree-anchor').focus(); }
+ }
+ break;
+ case 38: // up
+ e.preventDefault();
+ o = this.get_prev_dom(e.currentTarget);
+ if(o && o.length) { o.children('.jstree-anchor').focus(); }
+ break;
+ case 39: // left
+ e.preventDefault();
+ if(this.is_closed(e.currentTarget)) {
+ this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });
+ }
+ else if (this.is_open(e.currentTarget)) {
+ o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];
+ if(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }
+ }
+ break;
+ case 40: // down
+ e.preventDefault();
+ o = this.get_next_dom(e.currentTarget);
+ if(o && o.length) { o.children('.jstree-anchor').focus(); }
+ break;
+ case 106: // aria defines * on numpad as open_all - not very common
+ this.open_all();
+ break;
+ case 36: // home
+ e.preventDefault();
+ o = this._firstChild(this.get_container_ul()[0]);
+ if(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }
+ break;
+ case 35: // end
+ e.preventDefault();
+ this.element.find('.jstree-anchor').filter(':visible').last().focus();
+ break;
+ /*
+ // delete
+ case 46:
+ e.preventDefault();
+ o = this.get_node(e.currentTarget);
+ if(o && o.id && o.id !== '#') {
+ o = this.is_selected(o) ? this.get_selected() : o;
+ this.delete_node(o);
+ }
+ break;
+ // f2
+ case 113:
+ e.preventDefault();
+ o = this.get_node(e.currentTarget);
+ if(o && o.id && o.id !== '#') {
+ // this.edit(o);
+ }
+ break;
+ default:
+ // console.log(e.which);
+ break;
+ */
+ }
+ }, this))
+ .on("load_node.jstree", $.proxy(function (e, data) {
+ if(data.status) {
+ if(data.node.id === '#' && !this._data.core.loaded) {
+ this._data.core.loaded = true;
+ if(this._firstChild(this.get_container_ul()[0])) {
+ this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
+ }
+ /**
+ * triggered after the root node is loaded for the first time
+ * @event
+ * @name loaded.jstree
+ */
+ this.trigger("loaded");
+ }
+ if(!this._data.core.ready && !this.get_container_ul().find('.jstree-loading').length) {
+ this._data.core.ready = true;
+ if(this._data.core.selected.length) {
+ if(this.settings.core.expand_selected_onload) {
+ var tmp = [], i, j;
+ for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+ tmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents);
+ }
+ tmp = $.vakata.array_unique(tmp);
+ for(i = 0, j = tmp.length; i < j; i++) {
+ this.open_node(tmp[i], false, 0);
+ }
+ }
+ this.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected });
+ }
+ /**
+ * triggered after all nodes are finished loading
+ * @event
+ * @name ready.jstree
+ */
+ setTimeout($.proxy(function () { this.trigger("ready"); }, this), 0);
+ }
+ }
+ }, this))
+ // quick searching when the tree is focused
+ .on('keypress.jstree', $.proxy(function (e) {
+ if(e.target.tagName === "INPUT") { return true; }
+ if(tout) { clearTimeout(tout); }
+ tout = setTimeout(function () {
+ word = '';
+ }, 500);
+
+ var chr = String.fromCharCode(e.which).toLowerCase(),
+ col = this.element.find('.jstree-anchor').filter(':visible'),
+ ind = col.index(document.activeElement) || 0,
+ end = false;
+ word += chr;
+
+ // match for whole word from current node down (including the current node)
+ if(word.length > 1) {
+ col.slice(ind).each($.proxy(function (i, v) {
+ if($(v).text().toLowerCase().indexOf(word) === 0) {
+ $(v).focus();
+ end = true;
+ return false;
+ }
+ }, this));
+ if(end) { return; }
+
+ // match for whole word from the beginning of the tree
+ col.slice(0, ind).each($.proxy(function (i, v) {
+ if($(v).text().toLowerCase().indexOf(word) === 0) {
+ $(v).focus();
+ end = true;
+ return false;
+ }
+ }, this));
+ if(end) { return; }
+ }
+ // list nodes that start with that letter (only if word consists of a single char)
+ if(new RegExp('^' + chr + '+$').test(word)) {
+ // search for the next node starting with that letter
+ col.slice(ind + 1).each($.proxy(function (i, v) {
+ if($(v).text().toLowerCase().charAt(0) === chr) {
+ $(v).focus();
+ end = true;
+ return false;
+ }
+ }, this));
+ if(end) { return; }
+
+ // search from the beginning
+ col.slice(0, ind + 1).each($.proxy(function (i, v) {
+ if($(v).text().toLowerCase().charAt(0) === chr) {
+ $(v).focus();
+ end = true;
+ return false;
+ }
+ }, this));
+ if(end) { return; }
+ }
+ }, this))
+ // THEME RELATED
+ .on("init.jstree", $.proxy(function () {
+ var s = this.settings.core.themes;
+ this._data.core.themes.dots = s.dots;
+ this._data.core.themes.stripes = s.stripes;
+ this._data.core.themes.icons = s.icons;
+ this.set_theme(s.name || "default", s.url);
+ this.set_theme_variant(s.variant);
+ }, this))
+ .on("loading.jstree", $.proxy(function () {
+ this[ this._data.core.themes.dots ? "show_dots" : "hide_dots" ]();
+ this[ this._data.core.themes.icons ? "show_icons" : "hide_icons" ]();
+ this[ this._data.core.themes.stripes ? "show_stripes" : "hide_stripes" ]();
+ }, this))
+ .on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {
+ this._data.core.focused = null;
+ $(e.currentTarget).filter('.jstree-hovered').mouseleave();
+ }, this))
+ .on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {
+ var tmp = this.get_node(e.currentTarget);
+ if(tmp && tmp.id) {
+ this._data.core.focused = tmp.id;
+ }
+ this.element.find('.jstree-hovered').not(e.currentTarget).mouseleave();
+ $(e.currentTarget).mouseenter();
+ }, this))
+ .on('focus.jstree', $.proxy(function () {
+ if(!this._data.core.focused) {
+ this.get_node(this.element.attr('aria-activedescendant'), true).find('> .jstree-anchor').focus();
+ }
+ }, this))
+ .on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) {
+ this.hover_node(e.currentTarget);
+ }, this))
+ .on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) {
+ this.dehover_node(e.currentTarget);
+ }, this));
+ },
+ /**
+ * part of the destroying of an instance. Used internally.
+ * @private
+ * @name unbind()
+ */
+ unbind : function () {
+ this.element.off('.jstree');
+ $(document).off('.jstree-' + this._id);
+ },
+ /**
+ * trigger an event. Used internally.
+ * @private
+ * @name trigger(ev [, data])
+ * @param {String} ev the name of the event to trigger
+ * @param {Object} data additional data to pass with the event
+ */
+ trigger : function (ev, data) {
+ if(!data) {
+ data = {};
+ }
+ data.instance = this;
+ this.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data);
+ },
+ /**
+ * returns the jQuery extended instance container
+ * @name get_container()
+ * @return {jQuery}
+ */
+ get_container : function () {
+ return this.element;
+ },
+ /**
+ * returns the jQuery extended main UL node inside the instance container. Used internally.
+ * @private
+ * @name get_container_ul()
+ * @return {jQuery}
+ */
+ get_container_ul : function () {
+ return this.element.children(".jstree-children").first();
+ },
+ /**
+ * gets string replacements (localization). Used internally.
+ * @private
+ * @name get_string(key)
+ * @param {String} key
+ * @return {String}
+ */
+ get_string : function (key) {
+ var a = this.settings.core.strings;
+ if($.isFunction(a)) { return a.call(this, key); }
+ if(a && a[key]) { return a[key]; }
+ return key;
+ },
+ /**
+ * gets the first child of a DOM node. Used internally.
+ * @private
+ * @name _firstChild(dom)
+ * @param {DOMElement} dom
+ * @return {DOMElement}
+ */
+ _firstChild : function (dom) {
+ dom = dom ? dom.firstChild : null;
+ while(dom !== null && dom.nodeType !== 1) {
+ dom = dom.nextSibling;
+ }
+ return dom;
+ },
+ /**
+ * gets the next sibling of a DOM node. Used internally.
+ * @private
+ * @name _nextSibling(dom)
+ * @param {DOMElement} dom
+ * @return {DOMElement}
+ */
+ _nextSibling : function (dom) {
+ dom = dom ? dom.nextSibling : null;
+ while(dom !== null && dom.nodeType !== 1) {
+ dom = dom.nextSibling;
+ }
+ return dom;
+ },
+ /**
+ * gets the previous sibling of a DOM node. Used internally.
+ * @private
+ * @name _previousSibling(dom)
+ * @param {DOMElement} dom
+ * @return {DOMElement}
+ */
+ _previousSibling : function (dom) {
+ dom = dom ? dom.previousSibling : null;
+ while(dom !== null && dom.nodeType !== 1) {
+ dom = dom.previousSibling;
+ }
+ return dom;
+ },
+ /**
+ * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc)
+ * @name get_node(obj [, as_dom])
+ * @param {mixed} obj
+ * @param {Boolean} as_dom
+ * @return {Object|jQuery}
+ */
+ get_node : function (obj, as_dom) {
+ if(obj && obj.id) {
+ obj = obj.id;
+ }
+ var dom;
+ try {
+ if(this._model.data[obj]) {
+ obj = this._model.data[obj];
+ }
+ else if(typeof obj === "string" && this._model.data[obj.replace(/^#/, '')]) {
+ obj = this._model.data[obj.replace(/^#/, '')];
+ }
+ else if(typeof obj === "string" && (dom = $('#' + obj.replace($.jstree.idregex,'\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
+ obj = this._model.data[dom.closest('.jstree-node').attr('id')];
+ }
+ else if((dom = $(obj, this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
+ obj = this._model.data[dom.closest('.jstree-node').attr('id')];
+ }
+ else if((dom = $(obj, this.element)).length && dom.hasClass('jstree')) {
+ obj = this._model.data['#'];
+ }
+ else {
+ return false;
+ }
+
+ if(as_dom) {
+ obj = obj.id === '#' ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
+ }
+ return obj;
+ } catch (ex) { return false; }
+ },
+ /**
+ * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array)
+ * @name get_path(obj [, glue, ids])
+ * @param {mixed} obj the node
+ * @param {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned
+ * @param {Boolean} ids if set to true build the path using ID, otherwise node text is used
+ * @return {mixed}
+ */
+ get_path : function (obj, glue, ids) {
+ obj = obj.parents ? obj : this.get_node(obj);
+ if(!obj || obj.id === '#' || !obj.parents) {
+ return false;
+ }
+ var i, j, p = [];
+ p.push(ids ? obj.id : obj.text);
+ for(i = 0, j = obj.parents.length; i < j; i++) {
+ p.push(ids ? obj.parents[i] : this.get_text(obj.parents[i]));
+ }
+ p = p.reverse().slice(1);
+ return glue ? p.join(glue) : p;
+ },
+ /**
+ * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned.
+ * @name get_next_dom(obj [, strict])
+ * @param {mixed} obj
+ * @param {Boolean} strict
+ * @return {jQuery}
+ */
+ get_next_dom : function (obj, strict) {
+ var tmp;
+ obj = this.get_node(obj, true);
+ if(obj[0] === this.element[0]) {
+ tmp = this._firstChild(this.get_container_ul()[0]);
+ while (tmp && tmp.offsetHeight === 0) {
+ tmp = this._nextSibling(tmp);
+ }
+ return tmp ? $(tmp) : false;
+ }
+ if(!obj || !obj.length) {
+ return false;
+ }
+ if(strict) {
+ tmp = obj[0];
+ do {
+ tmp = this._nextSibling(tmp);
+ } while (tmp && tmp.offsetHeight === 0);
+ return tmp ? $(tmp) : false;
+ }
+ if(obj.hasClass("jstree-open")) {
+ tmp = this._firstChild(obj.children('.jstree-children')[0]);
+ while (tmp && tmp.offsetHeight === 0) {
+ tmp = this._nextSibling(tmp);
+ }
+ if(tmp !== null) {
+ return $(tmp);
+ }
+ }
+ tmp = obj[0];
+ do {
+ tmp = this._nextSibling(tmp);
+ } while (tmp && tmp.offsetHeight === 0);
+ if(tmp !== null) {
+ return $(tmp);
+ }
+ return obj.parentsUntil(".jstree",".jstree-node").next(".jstree-node:visible").first();
+ },
+ /**
+ * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned.
+ * @name get_prev_dom(obj [, strict])
+ * @param {mixed} obj
+ * @param {Boolean} strict
+ * @return {jQuery}
+ */
+ get_prev_dom : function (obj, strict) {
+ var tmp;
+ obj = this.get_node(obj, true);
+ if(obj[0] === this.element[0]) {
+ tmp = this.get_container_ul()[0].lastChild;
+ while (tmp && tmp.offsetHeight === 0) {
+ tmp = this._previousSibling(tmp);
+ }
+ return tmp ? $(tmp) : false;
+ }
+ if(!obj || !obj.length) {
+ return false;
+ }
+ if(strict) {
+ tmp = obj[0];
+ do {
+ tmp = this._previousSibling(tmp);
+ } while (tmp && tmp.offsetHeight === 0);
+ return tmp ? $(tmp) : false;
+ }
+ tmp = obj[0];
+ do {
+ tmp = this._previousSibling(tmp);
+ } while (tmp && tmp.offsetHeight === 0);
+ if(tmp !== null) {
+ obj = $(tmp);
+ while(obj.hasClass("jstree-open")) {
+ obj = obj.children(".jstree-children").first().children(".jstree-node:visible:last");
+ }
+ return obj;
+ }
+ tmp = obj[0].parentNode.parentNode;
+ return tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false;
+ },
+ /**
+ * get the parent ID of a node
+ * @name get_parent(obj)
+ * @param {mixed} obj
+ * @return {String}
+ */
+ get_parent : function (obj) {
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ return obj.parent;
+ },
+ /**
+ * get a jQuery collection of all the children of a node (node must be rendered)
+ * @name get_children_dom(obj)
+ * @param {mixed} obj
+ * @return {jQuery}
+ */
+ get_children_dom : function (obj) {
+ obj = this.get_node(obj, true);
+ if(obj[0] === this.element[0]) {
+ return this.get_container_ul().children(".jstree-node");
+ }
+ if(!obj || !obj.length) {
+ return false;
+ }
+ return obj.children(".jstree-children").children(".jstree-node");
+ },
+ /**
+ * checks if a node has children
+ * @name is_parent(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ is_parent : function (obj) {
+ obj = this.get_node(obj);
+ return obj && (obj.state.loaded === false || obj.children.length > 0);
+ },
+ /**
+ * checks if a node is loaded (its children are available)
+ * @name is_loaded(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ is_loaded : function (obj) {
+ obj = this.get_node(obj);
+ return obj && obj.state.loaded;
+ },
+ /**
+ * check if a node is currently loading (fetching children)
+ * @name is_loading(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ is_loading : function (obj) {
+ obj = this.get_node(obj);
+ return obj && obj.state && obj.state.loading;
+ },
+ /**
+ * check if a node is opened
+ * @name is_open(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ is_open : function (obj) {
+ obj = this.get_node(obj);
+ return obj && obj.state.opened;
+ },
+ /**
+ * check if a node is in a closed state
+ * @name is_closed(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ is_closed : function (obj) {
+ obj = this.get_node(obj);
+ return obj && this.is_parent(obj) && !obj.state.opened;
+ },
+ /**
+ * check if a node has no children
+ * @name is_leaf(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ is_leaf : function (obj) {
+ return !this.is_parent(obj);
+ },
+ /**
+ * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array.
+ * @name load_node(obj [, callback])
+ * @param {mixed} obj
+ * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status
+ * @return {Boolean}
+ * @trigger load_node.jstree
+ */
+ load_node : function (obj, callback) {
+ var k, l, i, j, c;
+ if($.isArray(obj)) {
+ this._load_nodes(obj.slice(), callback);
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj) {
+ if(callback) { callback.call(this, obj, false); }
+ return false;
+ }
+ // if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again?
+ if(obj.state.loaded) {
+ obj.state.loaded = false;
+ for(k = 0, l = obj.children_d.length; k < l; k++) {
+ for(i = 0, j = obj.parents.length; i < j; i++) {
+ this._model.data[obj.parents[i]].children_d = $.vakata.array_remove_item(this._model.data[obj.parents[i]].children_d, obj.children_d[k]);
+ }
+ if(this._model.data[obj.children_d[k]].state.selected) {
+ c = true;
+ this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.children_d[k]);
+ }
+ delete this._model.data[obj.children_d[k]];
+ }
+ obj.children = [];
+ obj.children_d = [];
+ if(c) {
+ this.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected });
+ }
+ }
+ obj.state.loading = true;
+ this.get_node(obj, true).addClass("jstree-loading").attr('aria-busy',true);
+ this._load_node(obj, $.proxy(function (status) {
+ obj = this._model.data[obj.id];
+ obj.state.loading = false;
+ obj.state.loaded = status;
+ var dom = this.get_node(obj, true);
+ if(obj.state.loaded && !obj.children.length && dom && dom.length && !dom.hasClass('jstree-leaf')) {
+ dom.removeClass('jstree-closed jstree-open').addClass('jstree-leaf');
+ }
+ dom.removeClass("jstree-loading").attr('aria-busy',false);
+ /**
+ * triggered after a node is loaded
+ * @event
+ * @name load_node.jstree
+ * @param {Object} node the node that was loading
+ * @param {Boolean} status was the node loaded successfully
+ */
+ this.trigger('load_node', { "node" : obj, "status" : status });
+ if(callback) {
+ callback.call(this, obj, status);
+ }
+ }, this));
+ return true;
+ },
+ /**
+ * load an array of nodes (will also load unavailable nodes as soon as the appear in the structure). Used internally.
+ * @private
+ * @name _load_nodes(nodes [, callback])
+ * @param {array} nodes
+ * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes
+ */
+ _load_nodes : function (nodes, callback, is_callback) {
+ var r = true,
+ c = function () { this._load_nodes(nodes, callback, true); },
+ m = this._model.data, i, j;
+ for(i = 0, j = nodes.length; i < j; i++) {
+ if(m[nodes[i]] && (!m[nodes[i]].state.loaded || !is_callback)) {
+ if(!this.is_loading(nodes[i])) {
+ this.load_node(nodes[i], c);
+ }
+ r = false;
+ }
+ }
+ if(r) {
+ if(callback && !callback.done) {
+ callback.call(this, nodes);
+ callback.done = true;
+ }
+ }
+ },
+ /**
+ * loads all unloaded nodes
+ * @name load_all([obj, callback])
+ * @param {mixed} obj the node to load recursively, omit to load all nodes in the tree
+ * @param {function} callback a function to be executed once loading all the nodes is complete,
+ * @trigger load_all.jstree
+ */
+ load_all : function (obj, callback) {
+ if(!obj) { obj = '#'; }
+ obj = this.get_node(obj);
+ if(!obj) { return false; }
+ var to_load = [],
+ m = this._model.data,
+ c = m[obj.id].children_d,
+ i, j;
+ if(obj.state && !obj.state.loaded) {
+ to_load.push(obj.id);
+ }
+ for(i = 0, j = c.length; i < j; i++) {
+ if(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) {
+ to_load.push(c[i]);
+ }
+ }
+ if(to_load.length) {
+ this._load_nodes(to_load, function () {
+ this.load_all(obj, callback);
+ });
+ }
+ else {
+ /**
+ * triggered after a load_all call completes
+ * @event
+ * @name load_all.jstree
+ * @param {Object} node the recursively loaded node
+ */
+ if(callback) { callback.call(this, obj); }
+ this.trigger('load_all', { "node" : obj });
+ }
+ },
+ /**
+ * handles the actual loading of a node. Used only internally.
+ * @private
+ * @name _load_node(obj [, callback])
+ * @param {mixed} obj
+ * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status
+ * @return {Boolean}
+ */
+ _load_node : function (obj, callback) {
+ var s = this.settings.core.data, t;
+ // use original HTML
+ if(!s) {
+ if(obj.id === '#') {
+ return this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) {
+ callback.call(this, status);
+ });
+ }
+ else {
+ return callback.call(this, false);
+ }
+ // return callback.call(this, obj.id === '#' ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false);
+ }
+ if($.isFunction(s)) {
+ return s.call(this, obj, $.proxy(function (d) {
+ if(d === false) {
+ callback.call(this, false);
+ }
+ this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d, function (status) {
+ callback.call(this, status);
+ });
+ // return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d));
+ }, this));
+ }
+ if(typeof s === 'object') {
+ if(s.url) {
+ s = $.extend(true, {}, s);
+ if($.isFunction(s.url)) {
+ s.url = s.url.call(this, obj);
+ }
+ if($.isFunction(s.data)) {
+ s.data = s.data.call(this, obj);
+ }
+ return $.ajax(s)
+ .done($.proxy(function (d,t,x) {
+ var type = x.getResponseHeader('Content-Type');
+ if(type.indexOf('json') !== -1 || typeof d === "object") {
+ return this._append_json_data(obj, d, function (status) { callback.call(this, status); });
+ //return callback.call(this, this._append_json_data(obj, d));
+ }
+ if(type.indexOf('html') !== -1 || typeof d === "string") {
+ return this._append_html_data(obj, $(d), function (status) { callback.call(this, status); });
+ // return callback.call(this, this._append_html_data(obj, $(d)));
+ }
+ this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) };
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return callback.call(this, false);
+ }, this))
+ .fail($.proxy(function (f) {
+ callback.call(this, false);
+ this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) };
+ this.settings.core.error.call(this, this._data.core.last_error);
+ }, this));
+ }
+ t = ($.isArray(s) || $.isPlainObject(s)) ? JSON.parse(JSON.stringify(s)) : s;
+ if(obj.id === '#') {
+ return this._append_json_data(obj, t, function (status) {
+ callback.call(this, status);
+ });
+ }
+ else {
+ this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return callback.call(this, false);
+ }
+ //return callback.call(this, (obj.id === "#" ? this._append_json_data(obj, t) : false) );
+ }
+ if(typeof s === 'string') {
+ if(obj.id === '#') {
+ return this._append_html_data(obj, $(s), function (status) {
+ callback.call(this, status);
+ });
+ }
+ else {
+ this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return callback.call(this, false);
+ }
+ //return callback.call(this, (obj.id === "#" ? this._append_html_data(obj, $(s)) : false) );
+ }
+ return callback.call(this, false);
+ },
+ /**
+ * adds a node to the list of nodes to redraw. Used only internally.
+ * @private
+ * @name _node_changed(obj [, callback])
+ * @param {mixed} obj
+ */
+ _node_changed : function (obj) {
+ obj = this.get_node(obj);
+ if(obj) {
+ this._model.changed.push(obj.id);
+ }
+ },
+ /**
+ * appends HTML content to the tree. Used internally.
+ * @private
+ * @name _append_html_data(obj, data)
+ * @param {mixed} obj the node to append to
+ * @param {String} data the HTML string to parse and append
+ * @trigger model.jstree, changed.jstree
+ */
+ _append_html_data : function (dom, data, cb) {
+ dom = this.get_node(dom);
+ dom.children = [];
+ dom.children_d = [];
+ var dat = data.is('ul') ? data.children() : data,
+ par = dom.id,
+ chd = [],
+ dpc = [],
+ m = this._model.data,
+ p = m[par],
+ s = this._data.core.selected.length,
+ tmp, i, j;
+ dat.each($.proxy(function (i, v) {
+ tmp = this._parse_model_from_html($(v), par, p.parents.concat());
+ if(tmp) {
+ chd.push(tmp);
+ dpc.push(tmp);
+ if(m[tmp].children_d.length) {
+ dpc = dpc.concat(m[tmp].children_d);
+ }
+ }
+ }, this));
+ p.children = chd;
+ p.children_d = dpc;
+ for(i = 0, j = p.parents.length; i < j; i++) {
+ m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+ }
+ /**
+ * triggered when new data is inserted to the tree model
+ * @event
+ * @name model.jstree
+ * @param {Array} nodes an array of node IDs
+ * @param {String} parent the parent ID of the nodes
+ */
+ this.trigger('model', { "nodes" : dpc, 'parent' : par });
+ if(par !== '#') {
+ this._node_changed(par);
+ this.redraw();
+ }
+ else {
+ this.get_container_ul().children('.jstree-initial-node').remove();
+ this.redraw(true);
+ }
+ if(this._data.core.selected.length !== s) {
+ this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
+ }
+ cb.call(this, true);
+ },
+ /**
+ * appends JSON content to the tree. Used internally.
+ * @private
+ * @name _append_json_data(obj, data)
+ * @param {mixed} obj the node to append to
+ * @param {String} data the JSON object to parse and append
+ * @param {Boolean} force_processing internal param - do not set
+ * @trigger model.jstree, changed.jstree
+ */
+ _append_json_data : function (dom, data, cb, force_processing) {
+ dom = this.get_node(dom);
+ dom.children = [];
+ dom.children_d = [];
+ // *%$@!!!
+ if(data.d) {
+ data = data.d;
+ if(typeof data === "string") {
+ data = JSON.parse(data);
+ }
+ }
+ if(!$.isArray(data)) { data = [data]; }
+ var w = null,
+ args = {
+ 'df' : this._model.default_state,
+ 'dat' : data,
+ 'par' : dom.id,
+ 'm' : this._model.data,
+ 't_id' : this._id,
+ 't_cnt' : this._cnt,
+ 'sel' : this._data.core.selected
+ },
+ func = function (data, undefined) {
+ if(data.data) { data = data.data; }
+ var dat = data.dat,
+ par = data.par,
+ chd = [],
+ dpc = [],
+ add = [],
+ df = data.df,
+ t_id = data.t_id,
+ t_cnt = data.t_cnt,
+ m = data.m,
+ p = m[par],
+ sel = data.sel,
+ tmp, i, j, rslt,
+ parse_flat = function (d, p, ps) {
+ if(!ps) { ps = []; }
+ else { ps = ps.concat(); }
+ if(p) { ps.unshift(p); }
+ var tid = d.id.toString(),
+ i, j, c, e,
+ tmp = {
+ id : tid,
+ text : d.text || '',
+ icon : d.icon !== undefined ? d.icon : true,
+ parent : p,
+ parents : ps,
+ children : d.children || [],
+ children_d : d.children_d || [],
+ data : d.data,
+ state : { },
+ li_attr : { id : false },
+ a_attr : { href : '#' },
+ original : false
+ };
+ for(i in df) {
+ if(df.hasOwnProperty(i)) {
+ tmp.state[i] = df[i];
+ }
+ }
+ if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+ tmp.icon = d.data.jstree.icon;
+ }
+ if(d && d.data) {
+ tmp.data = d.data;
+ if(d.data.jstree) {
+ for(i in d.data.jstree) {
+ if(d.data.jstree.hasOwnProperty(i)) {
+ tmp.state[i] = d.data.jstree[i];
+ }
+ }
+ }
+ }
+ if(d && typeof d.state === 'object') {
+ for (i in d.state) {
+ if(d.state.hasOwnProperty(i)) {
+ tmp.state[i] = d.state[i];
+ }
+ }
+ }
+ if(d && typeof d.li_attr === 'object') {
+ for (i in d.li_attr) {
+ if(d.li_attr.hasOwnProperty(i)) {
+ tmp.li_attr[i] = d.li_attr[i];
+ }
+ }
+ }
+ if(!tmp.li_attr.id) {
+ tmp.li_attr.id = tid;
+ }
+ if(d && typeof d.a_attr === 'object') {
+ for (i in d.a_attr) {
+ if(d.a_attr.hasOwnProperty(i)) {
+ tmp.a_attr[i] = d.a_attr[i];
+ }
+ }
+ }
+ if(d && d.children && d.children === true) {
+ tmp.state.loaded = false;
+ tmp.children = [];
+ tmp.children_d = [];
+ }
+ m[tmp.id] = tmp;
+ for(i = 0, j = tmp.children.length; i < j; i++) {
+ c = parse_flat(m[tmp.children[i]], tmp.id, ps);
+ e = m[c];
+ tmp.children_d.push(c);
+ if(e.children_d.length) {
+ tmp.children_d = tmp.children_d.concat(e.children_d);
+ }
+ }
+ delete d.data;
+ delete d.children;
+ m[tmp.id].original = d;
+ if(tmp.state.selected) {
+ add.push(tmp.id);
+ }
+ return tmp.id;
+ },
+ parse_nest = function (d, p, ps) {
+ if(!ps) { ps = []; }
+ else { ps = ps.concat(); }
+ if(p) { ps.unshift(p); }
+ var tid = false, i, j, c, e, tmp;
+ do {
+ tid = 'j' + t_id + '_' + (++t_cnt);
+ } while(m[tid]);
+
+ tmp = {
+ id : false,
+ text : typeof d === 'string' ? d : '',
+ icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true,
+ parent : p,
+ parents : ps,
+ children : [],
+ children_d : [],
+ data : null,
+ state : { },
+ li_attr : { id : false },
+ a_attr : { href : '#' },
+ original : false
+ };
+ for(i in df) {
+ if(df.hasOwnProperty(i)) {
+ tmp.state[i] = df[i];
+ }
+ }
+ if(d && d.id) { tmp.id = d.id.toString(); }
+ if(d && d.text) { tmp.text = d.text; }
+ if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+ tmp.icon = d.data.jstree.icon;
+ }
+ if(d && d.data) {
+ tmp.data = d.data;
+ if(d.data.jstree) {
+ for(i in d.data.jstree) {
+ if(d.data.jstree.hasOwnProperty(i)) {
+ tmp.state[i] = d.data.jstree[i];
+ }
+ }
+ }
+ }
+ if(d && typeof d.state === 'object') {
+ for (i in d.state) {
+ if(d.state.hasOwnProperty(i)) {
+ tmp.state[i] = d.state[i];
+ }
+ }
+ }
+ if(d && typeof d.li_attr === 'object') {
+ for (i in d.li_attr) {
+ if(d.li_attr.hasOwnProperty(i)) {
+ tmp.li_attr[i] = d.li_attr[i];
+ }
+ }
+ }
+ if(tmp.li_attr.id && !tmp.id) {
+ tmp.id = tmp.li_attr.id.toString();
+ }
+ if(!tmp.id) {
+ tmp.id = tid;
+ }
+ if(!tmp.li_attr.id) {
+ tmp.li_attr.id = tmp.id;
+ }
+ if(d && typeof d.a_attr === 'object') {
+ for (i in d.a_attr) {
+ if(d.a_attr.hasOwnProperty(i)) {
+ tmp.a_attr[i] = d.a_attr[i];
+ }
+ }
+ }
+ if(d && d.children && d.children.length) {
+ for(i = 0, j = d.children.length; i < j; i++) {
+ c = parse_nest(d.children[i], tmp.id, ps);
+ e = m[c];
+ tmp.children.push(c);
+ if(e.children_d.length) {
+ tmp.children_d = tmp.children_d.concat(e.children_d);
+ }
+ }
+ tmp.children_d = tmp.children_d.concat(tmp.children);
+ }
+ if(d && d.children && d.children === true) {
+ tmp.state.loaded = false;
+ tmp.children = [];
+ tmp.children_d = [];
+ }
+ delete d.data;
+ delete d.children;
+ tmp.original = d;
+ m[tmp.id] = tmp;
+ if(tmp.state.selected) {
+ add.push(tmp.id);
+ }
+ return tmp.id;
+ };
+
+ if(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) {
+ // Flat JSON support (for easy import from DB):
+ // 1) convert to object (foreach)
+ for(i = 0, j = dat.length; i < j; i++) {
+ if(!dat[i].children) {
+ dat[i].children = [];
+ }
+ m[dat[i].id.toString()] = dat[i];
+ }
+ // 2) populate children (foreach)
+ for(i = 0, j = dat.length; i < j; i++) {
+ m[dat[i].parent.toString()].children.push(dat[i].id.toString());
+ // populate parent.children_d
+ p.children_d.push(dat[i].id.toString());
+ }
+ // 3) normalize && populate parents and children_d with recursion
+ for(i = 0, j = p.children.length; i < j; i++) {
+ tmp = parse_flat(m[p.children[i]], par, p.parents.concat());
+ dpc.push(tmp);
+ if(m[tmp].children_d.length) {
+ dpc = dpc.concat(m[tmp].children_d);
+ }
+ }
+ for(i = 0, j = p.parents.length; i < j; i++) {
+ m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+ }
+ // ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true;
+ rslt = {
+ 'cnt' : t_cnt,
+ 'mod' : m,
+ 'sel' : sel,
+ 'par' : par,
+ 'dpc' : dpc,
+ 'add' : add
+ };
+ }
+ else {
+ for(i = 0, j = dat.length; i < j; i++) {
+ tmp = parse_nest(dat[i], par, p.parents.concat());
+ if(tmp) {
+ chd.push(tmp);
+ dpc.push(tmp);
+ if(m[tmp].children_d.length) {
+ dpc = dpc.concat(m[tmp].children_d);
+ }
+ }
+ }
+ p.children = chd;
+ p.children_d = dpc;
+ for(i = 0, j = p.parents.length; i < j; i++) {
+ m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);
+ }
+ rslt = {
+ 'cnt' : t_cnt,
+ 'mod' : m,
+ 'sel' : sel,
+ 'par' : par,
+ 'dpc' : dpc,
+ 'add' : add
+ };
+ }
+ if(typeof window === 'undefined' || typeof window.document === 'undefined') {
+ postMessage(rslt);
+ }
+ else {
+ return rslt;
+ }
+ },
+ rslt = function (rslt, worker) {
+ this._cnt = rslt.cnt;
+ this._model.data = rslt.mod; // breaks the reference in load_node - careful
+
+ if(worker) {
+ var i, j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice(), m = this._model.data;
+ // if selection was changed while calculating in worker
+ if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {
+ // deselect nodes that are no longer selected
+ for(i = 0, j = r.length; i < j; i++) {
+ if($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) {
+ m[r[i]].state.selected = false;
+ }
+ }
+ // select nodes that were selected in the mean time
+ for(i = 0, j = s.length; i < j; i++) {
+ if($.inArray(s[i], r) === -1) {
+ m[s[i]].state.selected = true;
+ }
+ }
+ }
+ }
+ if(rslt.add.length) {
+ this._data.core.selected = this._data.core.selected.concat(rslt.add);
+ }
+
+ this.trigger('model', { "nodes" : rslt.dpc, 'parent' : rslt.par });
+
+ if(rslt.par !== '#') {
+ this._node_changed(rslt.par);
+ this.redraw();
+ }
+ else {
+ // this.get_container_ul().children('.jstree-initial-node').remove();
+ this.redraw(true);
+ }
+ if(rslt.add.length) {
+ this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });
+ }
+ cb.call(this, true);
+ };
+ if(this.settings.core.worker && window.Blob && window.URL && window.Worker) {
+ try {
+ if(this._wrk === null) {
+ this._wrk = window.URL.createObjectURL(
+ new window.Blob(
+ ['self.onmessage = ' + func.toString()],
+ {type:"text/javascript"}
+ )
+ );
+ }
+ if(!this._data.core.working || force_processing) {
+ this._data.core.working = true;
+ w = new window.Worker(this._wrk);
+ w.onmessage = $.proxy(function (e) {
+ rslt.call(this, e.data, true);
+ try { w.terminate(); w = null; } catch(ignore) { }
+ if(this._data.core.worker_queue.length) {
+ this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+ }
+ else {
+ this._data.core.working = false;
+ }
+ }, this);
+ if(!args.par) {
+ if(this._data.core.worker_queue.length) {
+ this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+ }
+ else {
+ this._data.core.working = false;
+ }
+ }
+ else {
+ w.postMessage(args);
+ }
+ }
+ else {
+ this._data.core.worker_queue.push([dom, data, cb, true]);
+ }
+ }
+ catch(e) {
+ rslt.call(this, func(args), false);
+ if(this._data.core.worker_queue.length) {
+ this._append_json_data.apply(this, this._data.core.worker_queue.shift());
+ }
+ else {
+ this._data.core.working = false;
+ }
+ }
+ }
+ else {
+ rslt.call(this, func(args), false);
+ }
+ },
+ /**
+ * parses a node from a jQuery object and appends them to the in memory tree model. Used internally.
+ * @private
+ * @name _parse_model_from_html(d [, p, ps])
+ * @param {jQuery} d the jQuery object to parse
+ * @param {String} p the parent ID
+ * @param {Array} ps list of all parents
+ * @return {String} the ID of the object added to the model
+ */
+ _parse_model_from_html : function (d, p, ps) {
+ if(!ps) { ps = []; }
+ else { ps = [].concat(ps); }
+ if(p) { ps.unshift(p); }
+ var c, e, m = this._model.data,
+ data = {
+ id : false,
+ text : false,
+ icon : true,
+ parent : p,
+ parents : ps,
+ children : [],
+ children_d : [],
+ data : null,
+ state : { },
+ li_attr : { id : false },
+ a_attr : { href : '#' },
+ original : false
+ }, i, tmp, tid;
+ for(i in this._model.default_state) {
+ if(this._model.default_state.hasOwnProperty(i)) {
+ data.state[i] = this._model.default_state[i];
+ }
+ }
+ tmp = $.vakata.attributes(d, true);
+ $.each(tmp, function (i, v) {
+ v = $.trim(v);
+ if(!v.length) { return true; }
+ data.li_attr[i] = v;
+ if(i === 'id') {
+ data.id = v.toString();
+ }
+ });
+ tmp = d.children('a').first();
+ if(tmp.length) {
+ tmp = $.vakata.attributes(tmp, true);
+ $.each(tmp, function (i, v) {
+ v = $.trim(v);
+ if(v.length) {
+ data.a_attr[i] = v;
+ }
+ });
+ }
+ tmp = d.children("a").first().length ? d.children("a").first().clone() : d.clone();
+ tmp.children("ins, i, ul").remove();
+ tmp = tmp.html();
+ tmp = $('
').html(tmp);
+ data.text = this.settings.core.force_text ? tmp.text() : tmp.html();
+ tmp = d.data();
+ data.data = tmp ? $.extend(true, {}, tmp) : null;
+ data.state.opened = d.hasClass('jstree-open');
+ data.state.selected = d.children('a').hasClass('jstree-clicked');
+ data.state.disabled = d.children('a').hasClass('jstree-disabled');
+ if(data.data && data.data.jstree) {
+ for(i in data.data.jstree) {
+ if(data.data.jstree.hasOwnProperty(i)) {
+ data.state[i] = data.data.jstree[i];
+ }
+ }
+ }
+ tmp = d.children("a").children(".jstree-themeicon");
+ if(tmp.length) {
+ data.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel');
+ }
+ if(data.state.icon) {
+ data.icon = data.state.icon;
+ }
+ tmp = d.children("ul").children("li");
+ do {
+ tid = 'j' + this._id + '_' + (++this._cnt);
+ } while(m[tid]);
+ data.id = data.li_attr.id ? data.li_attr.id.toString() : tid;
+ if(tmp.length) {
+ tmp.each($.proxy(function (i, v) {
+ c = this._parse_model_from_html($(v), data.id, ps);
+ e = this._model.data[c];
+ data.children.push(c);
+ if(e.children_d.length) {
+ data.children_d = data.children_d.concat(e.children_d);
+ }
+ }, this));
+ data.children_d = data.children_d.concat(data.children);
+ }
+ else {
+ if(d.hasClass('jstree-closed')) {
+ data.state.loaded = false;
+ }
+ }
+ if(data.li_attr['class']) {
+ data.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open','');
+ }
+ if(data.a_attr['class']) {
+ data.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled','');
+ }
+ m[data.id] = data;
+ if(data.state.selected) {
+ this._data.core.selected.push(data.id);
+ }
+ return data.id;
+ },
+ /**
+ * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally.
+ * @private
+ * @name _parse_model_from_flat_json(d [, p, ps])
+ * @param {Object} d the JSON object to parse
+ * @param {String} p the parent ID
+ * @param {Array} ps list of all parents
+ * @return {String} the ID of the object added to the model
+ */
+ _parse_model_from_flat_json : function (d, p, ps) {
+ if(!ps) { ps = []; }
+ else { ps = ps.concat(); }
+ if(p) { ps.unshift(p); }
+ var tid = d.id.toString(),
+ m = this._model.data,
+ df = this._model.default_state,
+ i, j, c, e,
+ tmp = {
+ id : tid,
+ text : d.text || '',
+ icon : d.icon !== undefined ? d.icon : true,
+ parent : p,
+ parents : ps,
+ children : d.children || [],
+ children_d : d.children_d || [],
+ data : d.data,
+ state : { },
+ li_attr : { id : false },
+ a_attr : { href : '#' },
+ original : false
+ };
+ for(i in df) {
+ if(df.hasOwnProperty(i)) {
+ tmp.state[i] = df[i];
+ }
+ }
+ if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+ tmp.icon = d.data.jstree.icon;
+ }
+ if(d && d.data) {
+ tmp.data = d.data;
+ if(d.data.jstree) {
+ for(i in d.data.jstree) {
+ if(d.data.jstree.hasOwnProperty(i)) {
+ tmp.state[i] = d.data.jstree[i];
+ }
+ }
+ }
+ }
+ if(d && typeof d.state === 'object') {
+ for (i in d.state) {
+ if(d.state.hasOwnProperty(i)) {
+ tmp.state[i] = d.state[i];
+ }
+ }
+ }
+ if(d && typeof d.li_attr === 'object') {
+ for (i in d.li_attr) {
+ if(d.li_attr.hasOwnProperty(i)) {
+ tmp.li_attr[i] = d.li_attr[i];
+ }
+ }
+ }
+ if(!tmp.li_attr.id) {
+ tmp.li_attr.id = tid;
+ }
+ if(d && typeof d.a_attr === 'object') {
+ for (i in d.a_attr) {
+ if(d.a_attr.hasOwnProperty(i)) {
+ tmp.a_attr[i] = d.a_attr[i];
+ }
+ }
+ }
+ if(d && d.children && d.children === true) {
+ tmp.state.loaded = false;
+ tmp.children = [];
+ tmp.children_d = [];
+ }
+ m[tmp.id] = tmp;
+ for(i = 0, j = tmp.children.length; i < j; i++) {
+ c = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps);
+ e = m[c];
+ tmp.children_d.push(c);
+ if(e.children_d.length) {
+ tmp.children_d = tmp.children_d.concat(e.children_d);
+ }
+ }
+ delete d.data;
+ delete d.children;
+ m[tmp.id].original = d;
+ if(tmp.state.selected) {
+ this._data.core.selected.push(tmp.id);
+ }
+ return tmp.id;
+ },
+ /**
+ * parses a node from a JSON object and appends it to the in memory tree model. Used internally.
+ * @private
+ * @name _parse_model_from_json(d [, p, ps])
+ * @param {Object} d the JSON object to parse
+ * @param {String} p the parent ID
+ * @param {Array} ps list of all parents
+ * @return {String} the ID of the object added to the model
+ */
+ _parse_model_from_json : function (d, p, ps) {
+ if(!ps) { ps = []; }
+ else { ps = ps.concat(); }
+ if(p) { ps.unshift(p); }
+ var tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp;
+ do {
+ tid = 'j' + this._id + '_' + (++this._cnt);
+ } while(m[tid]);
+
+ tmp = {
+ id : false,
+ text : typeof d === 'string' ? d : '',
+ icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true,
+ parent : p,
+ parents : ps,
+ children : [],
+ children_d : [],
+ data : null,
+ state : { },
+ li_attr : { id : false },
+ a_attr : { href : '#' },
+ original : false
+ };
+ for(i in df) {
+ if(df.hasOwnProperty(i)) {
+ tmp.state[i] = df[i];
+ }
+ }
+ if(d && d.id) { tmp.id = d.id.toString(); }
+ if(d && d.text) { tmp.text = d.text; }
+ if(d && d.data && d.data.jstree && d.data.jstree.icon) {
+ tmp.icon = d.data.jstree.icon;
+ }
+ if(d && d.data) {
+ tmp.data = d.data;
+ if(d.data.jstree) {
+ for(i in d.data.jstree) {
+ if(d.data.jstree.hasOwnProperty(i)) {
+ tmp.state[i] = d.data.jstree[i];
+ }
+ }
+ }
+ }
+ if(d && typeof d.state === 'object') {
+ for (i in d.state) {
+ if(d.state.hasOwnProperty(i)) {
+ tmp.state[i] = d.state[i];
+ }
+ }
+ }
+ if(d && typeof d.li_attr === 'object') {
+ for (i in d.li_attr) {
+ if(d.li_attr.hasOwnProperty(i)) {
+ tmp.li_attr[i] = d.li_attr[i];
+ }
+ }
+ }
+ if(tmp.li_attr.id && !tmp.id) {
+ tmp.id = tmp.li_attr.id.toString();
+ }
+ if(!tmp.id) {
+ tmp.id = tid;
+ }
+ if(!tmp.li_attr.id) {
+ tmp.li_attr.id = tmp.id;
+ }
+ if(d && typeof d.a_attr === 'object') {
+ for (i in d.a_attr) {
+ if(d.a_attr.hasOwnProperty(i)) {
+ tmp.a_attr[i] = d.a_attr[i];
+ }
+ }
+ }
+ if(d && d.children && d.children.length) {
+ for(i = 0, j = d.children.length; i < j; i++) {
+ c = this._parse_model_from_json(d.children[i], tmp.id, ps);
+ e = m[c];
+ tmp.children.push(c);
+ if(e.children_d.length) {
+ tmp.children_d = tmp.children_d.concat(e.children_d);
+ }
+ }
+ tmp.children_d = tmp.children_d.concat(tmp.children);
+ }
+ if(d && d.children && d.children === true) {
+ tmp.state.loaded = false;
+ tmp.children = [];
+ tmp.children_d = [];
+ }
+ delete d.data;
+ delete d.children;
+ tmp.original = d;
+ m[tmp.id] = tmp;
+ if(tmp.state.selected) {
+ this._data.core.selected.push(tmp.id);
+ }
+ return tmp.id;
+ },
+ /**
+ * redraws all nodes that need to be redrawn. Used internally.
+ * @private
+ * @name _redraw()
+ * @trigger redraw.jstree
+ */
+ _redraw : function () {
+ var nodes = this._model.force_full_redraw ? this._model.data['#'].children.concat([]) : this._model.changed.concat([]),
+ f = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused;
+ for(i = 0, j = nodes.length; i < j; i++) {
+ tmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw);
+ if(tmp && this._model.force_full_redraw) {
+ f.appendChild(tmp);
+ }
+ }
+ if(this._model.force_full_redraw) {
+ f.className = this.get_container_ul()[0].className;
+ f.setAttribute('role','group');
+ this.element.empty().append(f);
+ //this.get_container_ul()[0].appendChild(f);
+ }
+ if(fe !== null) {
+ tmp = this.get_node(fe, true);
+ if(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {
+ tmp.children('.jstree-anchor').focus();
+ }
+ else {
+ this._data.core.focused = null;
+ }
+ }
+ this._model.force_full_redraw = false;
+ this._model.changed = [];
+ /**
+ * triggered after nodes are redrawn
+ * @event
+ * @name redraw.jstree
+ * @param {array} nodes the redrawn nodes
+ */
+ this.trigger('redraw', { "nodes" : nodes });
+ },
+ /**
+ * redraws all nodes that need to be redrawn or optionally - the whole tree
+ * @name redraw([full])
+ * @param {Boolean} full if set to `true` all nodes are redrawn.
+ */
+ redraw : function (full) {
+ if(full) {
+ this._model.force_full_redraw = true;
+ }
+ //if(this._model.redraw_timeout) {
+ // clearTimeout(this._model.redraw_timeout);
+ //}
+ //this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0);
+ this._redraw();
+ },
+ /**
+ * redraws a single node. Used internally.
+ * @private
+ * @name redraw_node(node, deep, is_callback, force_render)
+ * @param {mixed} node the node to redraw
+ * @param {Boolean} deep should child nodes be redrawn too
+ * @param {Boolean} is_callback is this a recursion call
+ * @param {Boolean} force_render should children of closed parents be drawn anyway
+ */
+ redraw_node : function (node, deep, is_callback, force_render) {
+ var obj = this.get_node(node),
+ par = false,
+ ind = false,
+ old = false,
+ i = false,
+ j = false,
+ k = false,
+ c = '',
+ d = document,
+ m = this._model.data,
+ f = false,
+ s = false,
+ tmp = null;
+ if(!obj) { return false; }
+ if(obj.id === '#') { return this.redraw(true); }
+ deep = deep || obj.children.length === 0;
+ node = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + ("0123456789".indexOf(obj.id[0]) !== -1 ? '\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\$&') : obj.id.replace($.jstree.idregex,'\\$&')) ); //, this.element);
+ if(!node) {
+ deep = true;
+ //node = d.createElement('LI');
+ if(!is_callback) {
+ par = obj.parent !== '#' ? $('#' + obj.parent.replace($.jstree.idregex,'\\$&'), this.element)[0] : null;
+ if(par !== null && (!par || !m[obj.parent].state.opened)) {
+ return false;
+ }
+ ind = $.inArray(obj.id, par === null ? m['#'].children : m[obj.parent].children);
+ }
+ }
+ else {
+ node = $(node);
+ if(!is_callback) {
+ par = node.parent().parent()[0];
+ if(par === this.element[0]) {
+ par = null;
+ }
+ ind = node.index();
+ }
+ // m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage
+ if(!deep && obj.children.length && !node.children('.jstree-children').length) {
+ deep = true;
+ }
+ if(!deep) {
+ old = node.children('.jstree-children')[0];
+ }
+ f = node.children('.jstree-anchor')[0] === document.activeElement;
+ node.remove();
+ //node = d.createElement('LI');
+ //node = node[0];
+ }
+ node = _node.cloneNode(true);
+ // node is DOM, deep is boolean
+
+ c = 'jstree-node ';
+ for(i in obj.li_attr) {
+ if(obj.li_attr.hasOwnProperty(i)) {
+ if(i === 'id') { continue; }
+ if(i !== 'class') {
+ node.setAttribute(i, obj.li_attr[i]);
+ }
+ else {
+ c += obj.li_attr[i];
+ }
+ }
+ }
+ if(!obj.a_attr.id) {
+ obj.a_attr.id = obj.id + '_anchor';
+ }
+ node.setAttribute('aria-selected', !!obj.state.selected);
+ node.setAttribute('aria-level', obj.parents.length);
+ node.setAttribute('aria-labelledby', obj.a_attr.id);
+ if(obj.state.disabled) {
+ node.setAttribute('aria-disabled', true);
+ }
+
+ if(obj.state.loaded && !obj.children.length) {
+ c += ' jstree-leaf';
+ }
+ else {
+ c += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';
+ node.setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );
+ }
+ if(obj.parent !== null && m[obj.parent].children[m[obj.parent].children.length - 1] === obj.id) {
+ c += ' jstree-last';
+ }
+ node.id = obj.id;
+ node.className = c;
+ c = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');
+ for(j in obj.a_attr) {
+ if(obj.a_attr.hasOwnProperty(j)) {
+ if(j === 'href' && obj.a_attr[j] === '#') { continue; }
+ if(j !== 'class') {
+ node.childNodes[1].setAttribute(j, obj.a_attr[j]);
+ }
+ else {
+ c += ' ' + obj.a_attr[j];
+ }
+ }
+ }
+ if(c.length) {
+ node.childNodes[1].className = 'jstree-anchor ' + c;
+ }
+ if((obj.icon && obj.icon !== true) || obj.icon === false) {
+ if(obj.icon === false) {
+ node.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';
+ }
+ else if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {
+ node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';
+ }
+ else {
+ node.childNodes[1].childNodes[0].style.backgroundImage = 'url('+obj.icon+')';
+ node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';
+ node.childNodes[1].childNodes[0].style.backgroundSize = 'auto';
+ node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';
+ }
+ }
+
+ if(this.settings.core.force_text) {
+ node.childNodes[1].appendChild(d.createTextNode(obj.text));
+ }
+ else {
+ node.childNodes[1].innerHTML += obj.text;
+ }
+
+ if(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {
+ k = d.createElement('UL');
+ k.setAttribute('role', 'group');
+ k.className = 'jstree-children';
+ for(i = 0, j = obj.children.length; i < j; i++) {
+ k.appendChild(this.redraw_node(obj.children[i], deep, true));
+ }
+ node.appendChild(k);
+ }
+ if(old) {
+ node.appendChild(old);
+ }
+ if(!is_callback) {
+ // append back using par / ind
+ if(!par) {
+ par = this.element[0];
+ }
+ for(i = 0, j = par.childNodes.length; i < j; i++) {
+ if(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {
+ tmp = par.childNodes[i];
+ break;
+ }
+ }
+ if(!tmp) {
+ tmp = d.createElement('UL');
+ tmp.setAttribute('role', 'group');
+ tmp.className = 'jstree-children';
+ par.appendChild(tmp);
+ }
+ par = tmp;
+
+ if(ind < par.childNodes.length) {
+ par.insertBefore(node, par.childNodes[ind]);
+ }
+ else {
+ par.appendChild(node);
+ }
+ if(f) {
+ node.childNodes[1].focus();
+ }
+ }
+ if(obj.state.opened && !obj.state.loaded) {
+ obj.state.opened = false;
+ setTimeout($.proxy(function () {
+ this.open_node(obj.id, false, 0);
+ }, this), 0);
+ }
+ return node;
+ },
+ /**
+ * opens a node, revaling its children. If the node is not loaded it will be loaded and opened once ready.
+ * @name open_node(obj [, callback, animation])
+ * @param {mixed} obj the node to open
+ * @param {Function} callback a function to execute once the node is opened
+ * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation.
+ * @trigger open_node.jstree, after_open.jstree, before_open.jstree
+ */
+ open_node : function (obj, callback, animation) {
+ var t1, t2, d, t;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.open_node(obj[t1], callback, animation);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ animation = animation === undefined ? this.settings.core.animation : animation;
+ if(!this.is_closed(obj)) {
+ if(callback) {
+ callback.call(this, obj, false);
+ }
+ return false;
+ }
+ if(!this.is_loaded(obj)) {
+ if(this.is_loading(obj)) {
+ return setTimeout($.proxy(function () {
+ this.open_node(obj, callback, animation);
+ }, this), 500);
+ }
+ this.load_node(obj, function (o, ok) {
+ return ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false);
+ });
+ }
+ else {
+ d = this.get_node(obj, true);
+ t = this;
+ if(d.length) {
+ if(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) {
+ this.redraw_node(obj, true, false, true);
+ d = this.get_node(obj, true);
+ }
+ if(!animation) {
+ this.trigger('before_open', { "node" : obj });
+ d[0].className = d[0].className.replace('jstree-closed', 'jstree-open');
+ d[0].setAttribute("aria-expanded", true);
+ }
+ else {
+ this.trigger('before_open', { "node" : obj });
+ d
+ .children(".jstree-children").css("display","none").end()
+ .removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded", true)
+ .children(".jstree-children").stop(true, true)
+ .slideDown(animation, function () {
+ this.style.display = "";
+ t.trigger("after_open", { "node" : obj });
+ });
+ }
+ }
+ obj.state.opened = true;
+ if(callback) {
+ callback.call(this, obj, true);
+ }
+ if(!d.length) {
+ /**
+ * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet)
+ * @event
+ * @name before_open.jstree
+ * @param {Object} node the opened node
+ */
+ this.trigger('before_open', { "node" : obj });
+ }
+ /**
+ * triggered when a node is opened (if there is an animation it will not be completed yet)
+ * @event
+ * @name open_node.jstree
+ * @param {Object} node the opened node
+ */
+ this.trigger('open_node', { "node" : obj });
+ if(!animation || !d.length) {
+ /**
+ * triggered when a node is opened and the animation is complete
+ * @event
+ * @name after_open.jstree
+ * @param {Object} node the opened node
+ */
+ this.trigger("after_open", { "node" : obj });
+ }
+ }
+ },
+ /**
+ * opens every parent of a node (node should be loaded)
+ * @name _open_to(obj)
+ * @param {mixed} obj the node to reveal
+ * @private
+ */
+ _open_to : function (obj) {
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ var i, j, p = obj.parents;
+ for(i = 0, j = p.length; i < j; i+=1) {
+ if(i !== '#') {
+ this.open_node(p[i], false, 0);
+ }
+ }
+ return $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element);
+ },
+ /**
+ * closes a node, hiding its children
+ * @name close_node(obj [, animation])
+ * @param {mixed} obj the node to close
+ * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation.
+ * @trigger close_node.jstree, after_close.jstree
+ */
+ close_node : function (obj, animation) {
+ var t1, t2, t, d;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.close_node(obj[t1], animation);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ if(this.is_closed(obj)) {
+ return false;
+ }
+ animation = animation === undefined ? this.settings.core.animation : animation;
+ t = this;
+ d = this.get_node(obj, true);
+ if(d.length) {
+ if(!animation) {
+ d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
+ d.attr("aria-expanded", false).children('.jstree-children').remove();
+ }
+ else {
+ d
+ .children(".jstree-children").attr("style","display:block !important").end()
+ .removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
+ .children(".jstree-children").stop(true, true).slideUp(animation, function () {
+ this.style.display = "";
+ d.children('.jstree-children').remove();
+ t.trigger("after_close", { "node" : obj });
+ });
+ }
+ }
+ obj.state.opened = false;
+ /**
+ * triggered when a node is closed (if there is an animation it will not be complete yet)
+ * @event
+ * @name close_node.jstree
+ * @param {Object} node the closed node
+ */
+ this.trigger('close_node',{ "node" : obj });
+ if(!animation || !d.length) {
+ /**
+ * triggered when a node is closed and the animation is complete
+ * @event
+ * @name after_close.jstree
+ * @param {Object} node the closed node
+ */
+ this.trigger("after_close", { "node" : obj });
+ }
+ },
+ /**
+ * toggles a node - closing it if it is open, opening it if it is closed
+ * @name toggle_node(obj)
+ * @param {mixed} obj the node to toggle
+ */
+ toggle_node : function (obj) {
+ var t1, t2;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.toggle_node(obj[t1]);
+ }
+ return true;
+ }
+ if(this.is_closed(obj)) {
+ return this.open_node(obj);
+ }
+ if(this.is_open(obj)) {
+ return this.close_node(obj);
+ }
+ },
+ /**
+ * opens all nodes within a node (or the tree), revaling their children. If the node is not loaded it will be loaded and opened once ready.
+ * @name open_all([obj, animation, original_obj])
+ * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree
+ * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation
+ * @param {jQuery} reference to the node that started the process (internal use)
+ * @trigger open_all.jstree
+ */
+ open_all : function (obj, animation, original_obj) {
+ if(!obj) { obj = '#'; }
+ obj = this.get_node(obj);
+ if(!obj) { return false; }
+ var dom = obj.id === '#' ? this.get_container_ul() : this.get_node(obj, true), i, j, _this;
+ if(!dom.length) {
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ if(this.is_closed(this._model.data[obj.children_d[i]])) {
+ this._model.data[obj.children_d[i]].state.opened = true;
+ }
+ }
+ return this.trigger('open_all', { "node" : obj });
+ }
+ original_obj = original_obj || dom;
+ _this = this;
+ dom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed');
+ dom.each(function () {
+ _this.open_node(
+ this,
+ function(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } },
+ animation || 0
+ );
+ });
+ if(original_obj.find('.jstree-closed').length === 0) {
+ /**
+ * triggered when an `open_all` call completes
+ * @event
+ * @name open_all.jstree
+ * @param {Object} node the opened node
+ */
+ this.trigger('open_all', { "node" : this.get_node(original_obj) });
+ }
+ },
+ /**
+ * closes all nodes within a node (or the tree), revaling their children
+ * @name close_all([obj, animation])
+ * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree
+ * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation
+ * @trigger close_all.jstree
+ */
+ close_all : function (obj, animation) {
+ if(!obj) { obj = '#'; }
+ obj = this.get_node(obj);
+ if(!obj) { return false; }
+ var dom = obj.id === '#' ? this.get_container_ul() : this.get_node(obj, true),
+ _this = this, i, j;
+ if(!dom.length) {
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ this._model.data[obj.children_d[i]].state.opened = false;
+ }
+ return this.trigger('close_all', { "node" : obj });
+ }
+ dom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open');
+ $(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); });
+ /**
+ * triggered when an `close_all` call completes
+ * @event
+ * @name close_all.jstree
+ * @param {Object} node the closed node
+ */
+ this.trigger('close_all', { "node" : obj });
+ },
+ /**
+ * checks if a node is disabled (not selectable)
+ * @name is_disabled(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ is_disabled : function (obj) {
+ obj = this.get_node(obj);
+ return obj && obj.state && obj.state.disabled;
+ },
+ /**
+ * enables a node - so that it can be selected
+ * @name enable_node(obj)
+ * @param {mixed} obj the node to enable
+ * @trigger enable_node.jstree
+ */
+ enable_node : function (obj) {
+ var t1, t2;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.enable_node(obj[t1]);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ obj.state.disabled = false;
+ this.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false);
+ /**
+ * triggered when an node is enabled
+ * @event
+ * @name enable_node.jstree
+ * @param {Object} node the enabled node
+ */
+ this.trigger('enable_node', { 'node' : obj });
+ },
+ /**
+ * disables a node - so that it can not be selected
+ * @name disable_node(obj)
+ * @param {mixed} obj the node to disable
+ * @trigger disable_node.jstree
+ */
+ disable_node : function (obj) {
+ var t1, t2;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.disable_node(obj[t1]);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ obj.state.disabled = true;
+ this.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true);
+ /**
+ * triggered when an node is disabled
+ * @event
+ * @name disable_node.jstree
+ * @param {Object} node the disabled node
+ */
+ this.trigger('disable_node', { 'node' : obj });
+ },
+ /**
+ * called when a node is selected by the user. Used internally.
+ * @private
+ * @name activate_node(obj, e)
+ * @param {mixed} obj the node
+ * @param {Object} e the related event
+ * @trigger activate_node.jstree, changed.jstree
+ */
+ activate_node : function (obj, e) {
+ if(this.is_disabled(obj)) {
+ return false;
+ }
+
+ // ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node
+ this._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null;
+ if(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; }
+ if(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); }
+
+ if(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) {
+ if(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) {
+ this.deselect_node(obj, false, e);
+ }
+ else {
+ this.deselect_all(true);
+ this.select_node(obj, false, false, e);
+ this._data.core.last_clicked = this.get_node(obj);
+ }
+ }
+ else {
+ if(e.shiftKey) {
+ var o = this.get_node(obj).id,
+ l = this._data.core.last_clicked.id,
+ p = this.get_node(this._data.core.last_clicked.parent).children,
+ c = false,
+ i, j;
+ for(i = 0, j = p.length; i < j; i += 1) {
+ // separate IFs work whem o and l are the same
+ if(p[i] === o) {
+ c = !c;
+ }
+ if(p[i] === l) {
+ c = !c;
+ }
+ if(c || p[i] === o || p[i] === l) {
+ this.select_node(p[i], true, false, e);
+ }
+ else {
+ this.deselect_node(p[i], true, e);
+ }
+ }
+ this.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e });
+ }
+ else {
+ if(!this.is_selected(obj)) {
+ this.select_node(obj, false, false, e);
+ }
+ else {
+ this.deselect_node(obj, false, e);
+ }
+ }
+ }
+ /**
+ * triggered when an node is clicked or intercated with by the user
+ * @event
+ * @name activate_node.jstree
+ * @param {Object} node
+ */
+ this.trigger('activate_node', { 'node' : this.get_node(obj) });
+ },
+ /**
+ * applies the hover state on a node, called when a node is hovered by the user. Used internally.
+ * @private
+ * @name hover_node(obj)
+ * @param {mixed} obj
+ * @trigger hover_node.jstree
+ */
+ hover_node : function (obj) {
+ obj = this.get_node(obj, true);
+ if(!obj || !obj.length || obj.children('.jstree-hovered').length) {
+ return false;
+ }
+ var o = this.element.find('.jstree-hovered'), t = this.element;
+ if(o && o.length) { this.dehover_node(o); }
+
+ obj.children('.jstree-anchor').addClass('jstree-hovered');
+ /**
+ * triggered when an node is hovered
+ * @event
+ * @name hover_node.jstree
+ * @param {Object} node
+ */
+ this.trigger('hover_node', { 'node' : this.get_node(obj) });
+ setTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0);
+ },
+ /**
+ * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally.
+ * @private
+ * @name dehover_node(obj)
+ * @param {mixed} obj
+ * @trigger dehover_node.jstree
+ */
+ dehover_node : function (obj) {
+ obj = this.get_node(obj, true);
+ if(!obj || !obj.length || !obj.children('.jstree-hovered').length) {
+ return false;
+ }
+ obj.children('.jstree-anchor').removeClass('jstree-hovered');
+ /**
+ * triggered when an node is no longer hovered
+ * @event
+ * @name dehover_node.jstree
+ * @param {Object} node
+ */
+ this.trigger('dehover_node', { 'node' : this.get_node(obj) });
+ },
+ /**
+ * select a node
+ * @name select_node(obj [, supress_event, prevent_open])
+ * @param {mixed} obj an array can be used to select multiple nodes
+ * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+ * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened
+ * @trigger select_node.jstree, changed.jstree
+ */
+ select_node : function (obj, supress_event, prevent_open, e) {
+ var dom, t1, t2, th;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.select_node(obj[t1], supress_event, prevent_open, e);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ dom = this.get_node(obj, true);
+ if(!obj.state.selected) {
+ obj.state.selected = true;
+ this._data.core.selected.push(obj.id);
+ if(!prevent_open) {
+ dom = this._open_to(obj);
+ }
+ if(dom && dom.length) {
+ dom.attr('aria-selected', true).children('.jstree-anchor').addClass('jstree-clicked');
+ }
+ /**
+ * triggered when an node is selected
+ * @event
+ * @name select_node.jstree
+ * @param {Object} node
+ * @param {Array} selected the current selection
+ * @param {Object} event the event (if any) that triggered this select_node
+ */
+ this.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+ if(!supress_event) {
+ /**
+ * triggered when selection changes
+ * @event
+ * @name changed.jstree
+ * @param {Object} node
+ * @param {Object} action the action that caused the selection to change
+ * @param {Array} selected the current selection
+ * @param {Object} event the event (if any) that triggered this changed event
+ */
+ this.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+ }
+ }
+ },
+ /**
+ * deselect a node
+ * @name deselect_node(obj [, supress_event])
+ * @param {mixed} obj an array can be used to deselect multiple nodes
+ * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+ * @trigger deselect_node.jstree, changed.jstree
+ */
+ deselect_node : function (obj, supress_event, e) {
+ var t1, t2, dom;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.deselect_node(obj[t1], supress_event, e);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ dom = this.get_node(obj, true);
+ if(obj.state.selected) {
+ obj.state.selected = false;
+ this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id);
+ if(dom.length) {
+ dom.attr('aria-selected', false).children('.jstree-anchor').removeClass('jstree-clicked');
+ }
+ /**
+ * triggered when an node is deselected
+ * @event
+ * @name deselect_node.jstree
+ * @param {Object} node
+ * @param {Array} selected the current selection
+ * @param {Object} event the event (if any) that triggered this deselect_node
+ */
+ this.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+ if(!supress_event) {
+ this.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });
+ }
+ }
+ },
+ /**
+ * select all nodes in the tree
+ * @name select_all([supress_event])
+ * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+ * @trigger select_all.jstree, changed.jstree
+ */
+ select_all : function (supress_event) {
+ var tmp = this._data.core.selected.concat([]), i, j;
+ this._data.core.selected = this._model.data['#'].children_d.concat();
+ for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+ if(this._model.data[this._data.core.selected[i]]) {
+ this._model.data[this._data.core.selected[i]].state.selected = true;
+ }
+ }
+ this.redraw(true);
+ /**
+ * triggered when all nodes are selected
+ * @event
+ * @name select_all.jstree
+ * @param {Array} selected the current selection
+ */
+ this.trigger('select_all', { 'selected' : this._data.core.selected });
+ if(!supress_event) {
+ this.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
+ }
+ },
+ /**
+ * deselect all selected nodes
+ * @name deselect_all([supress_event])
+ * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered
+ * @trigger deselect_all.jstree, changed.jstree
+ */
+ deselect_all : function (supress_event) {
+ var tmp = this._data.core.selected.concat([]), i, j;
+ for(i = 0, j = this._data.core.selected.length; i < j; i++) {
+ if(this._model.data[this._data.core.selected[i]]) {
+ this._model.data[this._data.core.selected[i]].state.selected = false;
+ }
+ }
+ this._data.core.selected = [];
+ this.element.find('.jstree-clicked').removeClass('jstree-clicked').parent().attr('aria-selected', false);
+ /**
+ * triggered when all nodes are deselected
+ * @event
+ * @name deselect_all.jstree
+ * @param {Object} node the previous selection
+ * @param {Array} selected the current selection
+ */
+ this.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp });
+ if(!supress_event) {
+ this.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });
+ }
+ },
+ /**
+ * checks if a node is selected
+ * @name is_selected(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ is_selected : function (obj) {
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ return obj.state.selected;
+ },
+ /**
+ * get an array of all selected nodes
+ * @name get_selected([full])
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+ * @return {Array}
+ */
+ get_selected : function (full) {
+ return full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice();
+ },
+ /**
+ * get an array of all top level selected nodes (ignoring children of selected nodes)
+ * @name get_top_selected([full])
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+ * @return {Array}
+ */
+ get_top_selected : function (full) {
+ var tmp = this.get_selected(true),
+ obj = {}, i, j, k, l;
+ for(i = 0, j = tmp.length; i < j; i++) {
+ obj[tmp[i].id] = tmp[i];
+ }
+ for(i = 0, j = tmp.length; i < j; i++) {
+ for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
+ if(obj[tmp[i].children_d[k]]) {
+ delete obj[tmp[i].children_d[k]];
+ }
+ }
+ }
+ tmp = [];
+ for(i in obj) {
+ if(obj.hasOwnProperty(i)) {
+ tmp.push(i);
+ }
+ }
+ return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
+ },
+ /**
+ * get an array of all bottom level selected nodes (ignoring selected parents)
+ * @name get_bottom_selected([full])
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+ * @return {Array}
+ */
+ get_bottom_selected : function (full) {
+ var tmp = this.get_selected(true),
+ obj = [], i, j;
+ for(i = 0, j = tmp.length; i < j; i++) {
+ if(!tmp[i].children.length) {
+ obj.push(tmp[i].id);
+ }
+ }
+ return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
+ },
+ /**
+ * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally.
+ * @name get_state()
+ * @private
+ * @return {Object}
+ */
+ get_state : function () {
+ var state = {
+ 'core' : {
+ 'open' : [],
+ 'scroll' : {
+ 'left' : this.element.scrollLeft(),
+ 'top' : this.element.scrollTop()
+ },
+ /*!
+ 'themes' : {
+ 'name' : this.get_theme(),
+ 'icons' : this._data.core.themes.icons,
+ 'dots' : this._data.core.themes.dots
+ },
+ */
+ 'selected' : []
+ }
+ }, i;
+ for(i in this._model.data) {
+ if(this._model.data.hasOwnProperty(i)) {
+ if(i !== '#') {
+ if(this._model.data[i].state.opened) {
+ state.core.open.push(i);
+ }
+ if(this._model.data[i].state.selected) {
+ state.core.selected.push(i);
+ }
+ }
+ }
+ }
+ return state;
+ },
+ /**
+ * sets the state of the tree. Used internally.
+ * @name set_state(state [, callback])
+ * @private
+ * @param {Object} state the state to restore
+ * @param {Function} callback an optional function to execute once the state is restored.
+ * @trigger set_state.jstree
+ */
+ set_state : function (state, callback) {
+ if(state) {
+ if(state.core) {
+ var res, n, t, _this;
+ if(state.core.open) {
+ if(!$.isArray(state.core.open)) {
+ delete state.core.open;
+ this.set_state(state, callback);
+ return false;
+ }
+ res = true;
+ n = false;
+ t = this;
+ $.each(state.core.open.concat([]), function (i, v) {
+ n = t.get_node(v);
+ if(n) {
+ if(t.is_loaded(v)) {
+ if(t.is_closed(v)) {
+ t.open_node(v, false, 0);
+ }
+ if(state && state.core && state.core.open) {
+ $.vakata.array_remove_item(state.core.open, v);
+ }
+ }
+ else {
+ if(!t.is_loading(v)) {
+ t.open_node(v, $.proxy(function (o, s) {
+ if(!s && state && state.core && state.core.open) {
+ $.vakata.array_remove_item(state.core.open, o.id);
+ }
+ this.set_state(state, callback);
+ }, t), 0);
+ }
+ // there will be some async activity - so wait for it
+ res = false;
+ }
+ }
+ });
+ if(res) {
+ delete state.core.open;
+ this.set_state(state, callback);
+ }
+ return false;
+ }
+ if(state.core.scroll) {
+ if(state.core.scroll && state.core.scroll.left !== undefined) {
+ this.element.scrollLeft(state.core.scroll.left);
+ }
+ if(state.core.scroll && state.core.scroll.top !== undefined) {
+ this.element.scrollTop(state.core.scroll.top);
+ }
+ delete state.core.scroll;
+ this.set_state(state, callback);
+ return false;
+ }
+ /*!
+ if(state.core.themes) {
+ if(state.core.themes.name) {
+ this.set_theme(state.core.themes.name);
+ }
+ if(typeof state.core.themes.dots !== 'undefined') {
+ this[ state.core.themes.dots ? "show_dots" : "hide_dots" ]();
+ }
+ if(typeof state.core.themes.icons !== 'undefined') {
+ this[ state.core.themes.icons ? "show_icons" : "hide_icons" ]();
+ }
+ delete state.core.themes;
+ delete state.core.open;
+ this.set_state(state, callback);
+ return false;
+ }
+ */
+ if(state.core.selected) {
+ _this = this;
+ this.deselect_all();
+ $.each(state.core.selected, function (i, v) {
+ _this.select_node(v);
+ });
+ delete state.core.selected;
+ this.set_state(state, callback);
+ return false;
+ }
+ if($.isEmptyObject(state.core)) {
+ delete state.core;
+ this.set_state(state, callback);
+ return false;
+ }
+ }
+ if($.isEmptyObject(state)) {
+ state = null;
+ if(callback) { callback.call(this); }
+ /**
+ * triggered when a `set_state` call completes
+ * @event
+ * @name set_state.jstree
+ */
+ this.trigger('set_state');
+ return false;
+ }
+ return true;
+ }
+ return false;
+ },
+ /**
+ * refreshes the tree - all nodes are reloaded with calls to `load_node`.
+ * @name refresh()
+ * @param {Boolean} skip_loading an option to skip showing the loading indicator
+ * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state
+ * @trigger refresh.jstree
+ */
+ refresh : function (skip_loading, forget_state) {
+ this._data.core.state = forget_state === true ? {} : this.get_state();
+ if(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); }
+ this._cnt = 0;
+ this._model.data = {
+ '#' : {
+ id : '#',
+ parent : null,
+ parents : [],
+ children : [],
+ children_d : [],
+ state : { loaded : false }
+ }
+ };
+ var c = this.get_container_ul()[0].className;
+ if(!skip_loading) {
+ this.element.html("<"+"ul class='"+c+"' role='group'><"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j"+this._id+"_loading'> <"+"a class='jstree-anchor' href='#'> " + this.get_string("Loading ...") + " ");
+ this.element.attr('aria-activedescendant','j'+this._id+'_loading');
+ }
+ this.load_node('#', function (o, s) {
+ if(s) {
+ this.get_container_ul()[0].className = c;
+ if(this._firstChild(this.get_container_ul()[0])) {
+ this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);
+ }
+ this.set_state($.extend(true, {}, this._data.core.state), function () {
+ /**
+ * triggered when a `refresh` call completes
+ * @event
+ * @name refresh.jstree
+ */
+ this.trigger('refresh');
+ });
+ }
+ this._data.core.state = null;
+ });
+ },
+ /**
+ * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`.
+ * @name refresh_node(obj)
+ * @param {mixed} obj the node
+ * @trigger refresh_node.jstree
+ */
+ refresh_node : function (obj) {
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+ var opened = [], to_load = [], s = this._data.core.selected.concat([]);
+ to_load.push(obj.id);
+ if(obj.state.opened === true) { opened.push(obj.id); }
+ this.get_node(obj, true).find('.jstree-open').each(function() { opened.push(this.id); });
+ this._load_nodes(to_load, $.proxy(function (nodes) {
+ this.open_node(opened, false, 0);
+ this.select_node(this._data.core.selected);
+ /**
+ * triggered when a node is refreshed
+ * @event
+ * @name refresh_node.jstree
+ * @param {Object} node - the refreshed node
+ * @param {Array} nodes - an array of the IDs of the nodes that were reloaded
+ */
+ this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });
+ }, this));
+ },
+ /**
+ * set (change) the ID of a node
+ * @name set_id(obj, id)
+ * @param {mixed} obj the node
+ * @param {String} id the new ID
+ * @return {Boolean}
+ */
+ set_id : function (obj, id) {
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+ var i, j, m = this._model.data;
+ id = id.toString();
+ // update parents (replace current ID with new one in children and children_d)
+ m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;
+ for(i = 0, j = obj.parents.length; i < j; i++) {
+ m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id;
+ }
+ // update children (replace current ID with new one in parent and parents)
+ for(i = 0, j = obj.children.length; i < j; i++) {
+ m[obj.children[i]].parent = id;
+ }
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id;
+ }
+ i = $.inArray(obj.id, this._data.core.selected);
+ if(i !== -1) { this._data.core.selected[i] = id; }
+ // update model and obj itself (obj.id, this._model.data[KEY])
+ i = this.get_node(obj.id, true);
+ if(i) {
+ i.attr('id', id);
+ }
+ delete m[obj.id];
+ obj.id = id;
+ m[id] = obj;
+ return true;
+ },
+ /**
+ * get the text value of a node
+ * @name get_text(obj)
+ * @param {mixed} obj the node
+ * @return {String}
+ */
+ get_text : function (obj) {
+ obj = this.get_node(obj);
+ return (!obj || obj.id === '#') ? false : obj.text;
+ },
+ /**
+ * set the text value of a node. Used internally, please use `rename_node(obj, val)`.
+ * @private
+ * @name set_text(obj, val)
+ * @param {mixed} obj the node, you can pass an array to set the text on multiple nodes
+ * @param {String} val the new text value
+ * @return {Boolean}
+ * @trigger set_text.jstree
+ */
+ set_text : function (obj, val) {
+ var t1, t2;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.set_text(obj[t1], val);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+ obj.text = val;
+ if(this.get_node(obj, true).length) {
+ this.redraw_node(obj.id);
+ }
+ /**
+ * triggered when a node text value is changed
+ * @event
+ * @name set_text.jstree
+ * @param {Object} obj
+ * @param {String} text the new value
+ */
+ this.trigger('set_text',{ "obj" : obj, "text" : val });
+ return true;
+ },
+ /**
+ * gets a JSON representation of a node (or the whole tree)
+ * @name get_json([obj, options])
+ * @param {mixed} obj
+ * @param {Object} options
+ * @param {Boolean} options.no_state do not return state information
+ * @param {Boolean} options.no_id do not return ID
+ * @param {Boolean} options.no_children do not include children
+ * @param {Boolean} options.no_data do not include node data
+ * @param {Boolean} options.flat return flat JSON instead of nested
+ * @return {Object}
+ */
+ get_json : function (obj, options, flat) {
+ obj = this.get_node(obj || '#');
+ if(!obj) { return false; }
+ if(options && options.flat && !flat) { flat = []; }
+ var tmp = {
+ 'id' : obj.id,
+ 'text' : obj.text,
+ 'icon' : this.get_icon(obj),
+ 'li_attr' : $.extend(true, {}, obj.li_attr),
+ 'a_attr' : $.extend(true, {}, obj.a_attr),
+ 'state' : {},
+ 'data' : options && options.no_data ? false : $.extend(true, {}, obj.data)
+ //( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ),
+ }, i, j;
+ if(options && options.flat) {
+ tmp.parent = obj.parent;
+ }
+ else {
+ tmp.children = [];
+ }
+ if(!options || !options.no_state) {
+ for(i in obj.state) {
+ if(obj.state.hasOwnProperty(i)) {
+ tmp.state[i] = obj.state[i];
+ }
+ }
+ }
+ if(options && options.no_id) {
+ delete tmp.id;
+ if(tmp.li_attr && tmp.li_attr.id) {
+ delete tmp.li_attr.id;
+ }
+ if(tmp.a_attr && tmp.a_attr.id) {
+ delete tmp.a_attr.id;
+ }
+ }
+ if(options && options.flat && obj.id !== '#') {
+ flat.push(tmp);
+ }
+ if(!options || !options.no_children) {
+ for(i = 0, j = obj.children.length; i < j; i++) {
+ if(options && options.flat) {
+ this.get_json(obj.children[i], options, flat);
+ }
+ else {
+ tmp.children.push(this.get_json(obj.children[i], options));
+ }
+ }
+ }
+ return options && options.flat ? flat : (obj.id === '#' ? tmp.children : tmp);
+ },
+ /**
+ * create a new node (do not confuse with load_node)
+ * @name create_node([obj, node, pos, callback, is_loaded])
+ * @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`)
+ * @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name)
+ * @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last"
+ * @param {Function} callback a function to be called once the node is created
+ * @param {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded
+ * @return {String} the ID of the newly create node
+ * @trigger model.jstree, create_node.jstree
+ */
+ create_node : function (par, node, pos, callback, is_loaded) {
+ if(par === null) { par = "#"; }
+ par = this.get_node(par);
+ if(!par) { return false; }
+ pos = pos === undefined ? "last" : pos;
+ if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+ return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });
+ }
+ if(!node) { node = { "text" : this.get_string('New node') }; }
+ if(node.text === undefined) { node.text = this.get_string('New node'); }
+ var tmp, dpc, i, j;
+
+ if(par.id === '#') {
+ if(pos === "before") { pos = "first"; }
+ if(pos === "after") { pos = "last"; }
+ }
+ switch(pos) {
+ case "before":
+ tmp = this.get_node(par.parent);
+ pos = $.inArray(par.id, tmp.children);
+ par = tmp;
+ break;
+ case "after" :
+ tmp = this.get_node(par.parent);
+ pos = $.inArray(par.id, tmp.children) + 1;
+ par = tmp;
+ break;
+ case "inside":
+ case "first":
+ pos = 0;
+ break;
+ case "last":
+ pos = par.children.length;
+ break;
+ default:
+ if(!pos) { pos = 0; }
+ break;
+ }
+ if(pos > par.children.length) { pos = par.children.length; }
+ if(!node.id) { node.id = true; }
+ if(!this.check("create_node", node, par, pos)) {
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return false;
+ }
+ if(node.id === true) { delete node.id; }
+ node = this._parse_model_from_json(node, par.id, par.parents.concat());
+ if(!node) { return false; }
+ tmp = this.get_node(node);
+ dpc = [];
+ dpc.push(node);
+ dpc = dpc.concat(tmp.children_d);
+ this.trigger('model', { "nodes" : dpc, "parent" : par.id });
+
+ par.children_d = par.children_d.concat(dpc);
+ for(i = 0, j = par.parents.length; i < j; i++) {
+ this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);
+ }
+ node = tmp;
+ tmp = [];
+ for(i = 0, j = par.children.length; i < j; i++) {
+ tmp[i >= pos ? i+1 : i] = par.children[i];
+ }
+ tmp[pos] = node.id;
+ par.children = tmp;
+
+ this.redraw_node(par, true);
+ if(callback) { callback.call(this, this.get_node(node)); }
+ /**
+ * triggered when a node is created
+ * @event
+ * @name create_node.jstree
+ * @param {Object} node
+ * @param {String} parent the parent's ID
+ * @param {Number} position the position of the new node among the parent's children
+ */
+ this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos });
+ return node.id;
+ },
+ /**
+ * set the text value of a node
+ * @name rename_node(obj, val)
+ * @param {mixed} obj the node, you can pass an array to rename multiple nodes to the same name
+ * @param {String} val the new text value
+ * @return {Boolean}
+ * @trigger rename_node.jstree
+ */
+ rename_node : function (obj, val) {
+ var t1, t2, old;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.rename_node(obj[t1], val);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+ old = obj.text;
+ if(!this.check("rename_node", obj, this.get_parent(obj), val)) {
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return false;
+ }
+ this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments))
+ /**
+ * triggered when a node is renamed
+ * @event
+ * @name rename_node.jstree
+ * @param {Object} node
+ * @param {String} text the new value
+ * @param {String} old the old value
+ */
+ this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old });
+ return true;
+ },
+ /**
+ * remove a node
+ * @name delete_node(obj)
+ * @param {mixed} obj the node, you can pass an array to delete multiple nodes
+ * @return {Boolean}
+ * @trigger delete_node.jstree, changed.jstree
+ */
+ delete_node : function (obj) {
+ var t1, t2, par, pos, tmp, i, j, k, l, c;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.delete_node(obj[t1]);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+ par = this.get_node(obj.parent);
+ pos = $.inArray(obj.id, par.children);
+ c = false;
+ if(!this.check("delete_node", obj, par, pos)) {
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return false;
+ }
+ if(pos !== -1) {
+ par.children = $.vakata.array_remove(par.children, pos);
+ }
+ tmp = obj.children_d.concat([]);
+ tmp.push(obj.id);
+ for(k = 0, l = tmp.length; k < l; k++) {
+ for(i = 0, j = obj.parents.length; i < j; i++) {
+ pos = $.inArray(tmp[k], this._model.data[obj.parents[i]].children_d);
+ if(pos !== -1) {
+ this._model.data[obj.parents[i]].children_d = $.vakata.array_remove(this._model.data[obj.parents[i]].children_d, pos);
+ }
+ }
+ if(this._model.data[tmp[k]].state.selected) {
+ c = true;
+ pos = $.inArray(tmp[k], this._data.core.selected);
+ if(pos !== -1) {
+ this._data.core.selected = $.vakata.array_remove(this._data.core.selected, pos);
+ }
+ }
+ }
+ /**
+ * triggered when a node is deleted
+ * @event
+ * @name delete_node.jstree
+ * @param {Object} node
+ * @param {String} parent the parent's ID
+ */
+ this.trigger('delete_node', { "node" : obj, "parent" : par.id });
+ if(c) {
+ this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id });
+ }
+ for(k = 0, l = tmp.length; k < l; k++) {
+ delete this._model.data[tmp[k]];
+ }
+ this.redraw_node(par, true);
+ return true;
+ },
+ /**
+ * check if an operation is premitted on the tree. Used internally.
+ * @private
+ * @name check(chk, obj, par, pos)
+ * @param {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node"
+ * @param {mixed} obj the node
+ * @param {mixed} par the parent
+ * @param {mixed} pos the position to insert at, or if "rename_node" - the new name
+ * @param {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node
+ * @return {Boolean}
+ */
+ check : function (chk, obj, par, pos, more) {
+ obj = obj && obj.id ? obj : this.get_node(obj);
+ par = par && par.id ? par : this.get_node(par);
+ var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,
+ chc = this.settings.core.check_callback;
+ if(chk === "move_node" || chk === "copy_node") {
+ if((!more || !more.is_multi) && (obj.id === par.id || $.inArray(obj.id, par.children) === pos || $.inArray(par.id, obj.children_d) !== -1)) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ return false;
+ }
+ }
+ if(tmp && tmp.data) { tmp = tmp.data; }
+ if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) {
+ if(tmp.functions[chk] === false) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ }
+ return tmp.functions[chk];
+ }
+ if(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ return false;
+ }
+ return true;
+ },
+ /**
+ * get the last error
+ * @name last_error()
+ * @return {Object}
+ */
+ last_error : function () {
+ return this._data.core.last_error;
+ },
+ /**
+ * move a node to a new parent
+ * @name move_node(obj, par [, pos, callback, is_loaded])
+ * @param {mixed} obj the node to move, pass an array to move multiple nodes
+ * @param {mixed} par the new parent
+ * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0`
+ * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position
+ * @param {Boolean} internal parameter indicating if the parent node has been loaded
+ * @param {Boolean} internal parameter indicating if the tree should be redrawn
+ * @trigger move_node.jstree
+ */
+ move_node : function (obj, par, pos, callback, is_loaded, skip_redraw) {
+ var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p;
+
+ par = this.get_node(par);
+ pos = pos === undefined ? 0 : pos;
+ if(!par) { return false; }
+ if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+ return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true); });
+ }
+
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ if(this.move_node(obj[t1], par, pos, callback, is_loaded, true)) {
+ par = obj[t1];
+ pos = "after";
+ }
+ }
+ this.redraw();
+ return true;
+ }
+ obj = obj && obj.id ? obj : this.get_node(obj);
+
+ if(!obj || obj.id === '#') { return false; }
+
+ old_par = (obj.parent || '#').toString();
+ new_par = (!pos.toString().match(/^(before|after)$/) || par.id === '#') ? par : this.get_node(par.parent);
+ old_ins = obj.instance ? obj.instance : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
+ is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
+ old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1;
+ if(is_multi) {
+ if(this.copy_node(obj, par, pos, callback, is_loaded)) {
+ if(old_ins) { old_ins.delete_node(obj); }
+ return true;
+ }
+ return false;
+ }
+ //var m = this._model.data;
+ if(par.id === '#') {
+ if(pos === "before") { pos = "first"; }
+ if(pos === "after") { pos = "last"; }
+ }
+ switch(pos) {
+ case "before":
+ pos = $.inArray(par.id, new_par.children);
+ break;
+ case "after" :
+ pos = $.inArray(par.id, new_par.children) + 1;
+ break;
+ case "inside":
+ case "first":
+ pos = 0;
+ break;
+ case "last":
+ pos = new_par.children.length;
+ break;
+ default:
+ if(!pos) { pos = 0; }
+ break;
+ }
+ if(pos > new_par.children.length) { pos = new_par.children.length; }
+ if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return false;
+ }
+ if(obj.parent === new_par.id) {
+ dpc = new_par.children.concat();
+ tmp = $.inArray(obj.id, dpc);
+ if(tmp !== -1) {
+ dpc = $.vakata.array_remove(dpc, tmp);
+ if(pos > tmp) { pos--; }
+ }
+ tmp = [];
+ for(i = 0, j = dpc.length; i < j; i++) {
+ tmp[i >= pos ? i+1 : i] = dpc[i];
+ }
+ tmp[pos] = obj.id;
+ new_par.children = tmp;
+ this._node_changed(new_par.id);
+ this.redraw(new_par.id === '#');
+ }
+ else {
+ // clean old parent and up
+ tmp = obj.children_d.concat();
+ tmp.push(obj.id);
+ for(i = 0, j = obj.parents.length; i < j; i++) {
+ dpc = [];
+ p = old_ins._model.data[obj.parents[i]].children_d;
+ for(k = 0, l = p.length; k < l; k++) {
+ if($.inArray(p[k], tmp) === -1) {
+ dpc.push(p[k]);
+ }
+ }
+ old_ins._model.data[obj.parents[i]].children_d = dpc;
+ }
+ old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id);
+
+ // insert into new parent and up
+ for(i = 0, j = new_par.parents.length; i < j; i++) {
+ this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp);
+ }
+ dpc = [];
+ for(i = 0, j = new_par.children.length; i < j; i++) {
+ dpc[i >= pos ? i+1 : i] = new_par.children[i];
+ }
+ dpc[pos] = obj.id;
+ new_par.children = dpc;
+ new_par.children_d.push(obj.id);
+ new_par.children_d = new_par.children_d.concat(obj.children_d);
+
+ // update object
+ obj.parent = new_par.id;
+ tmp = new_par.parents.concat();
+ tmp.unshift(new_par.id);
+ p = obj.parents.length;
+ obj.parents = tmp;
+
+ // update object children
+ tmp = tmp.concat();
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1);
+ Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp);
+ }
+
+ if(old_par === '#' || new_par.id === '#') {
+ this._model.force_full_redraw = true;
+ }
+ if(!this._model.force_full_redraw) {
+ this._node_changed(old_par);
+ this._node_changed(new_par.id);
+ }
+ if(!skip_redraw) {
+ this.redraw();
+ }
+ }
+ if(callback) { callback.call(this, obj, new_par, pos); }
+ /**
+ * triggered when a node is moved
+ * @event
+ * @name move_node.jstree
+ * @param {Object} node
+ * @param {String} parent the parent's ID
+ * @param {Number} position the position of the node among the parent's children
+ * @param {String} old_parent the old parent of the node
+ * @param {Number} old_position the old position of the node
+ * @param {Boolean} is_multi do the node and new parent belong to different instances
+ * @param {jsTree} old_instance the instance the node came from
+ * @param {jsTree} new_instance the instance of the new parent
+ */
+ this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
+ return true;
+ },
+ /**
+ * copy a node to a new parent
+ * @name copy_node(obj, par [, pos, callback, is_loaded])
+ * @param {mixed} obj the node to copy, pass an array to copy multiple nodes
+ * @param {mixed} par the new parent
+ * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0`
+ * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position
+ * @param {Boolean} internal parameter indicating if the parent node has been loaded
+ * @param {Boolean} internal parameter indicating if the tree should be redrawn
+ * @trigger model.jstree copy_node.jstree
+ */
+ copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw) {
+ var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi;
+
+ par = this.get_node(par);
+ pos = pos === undefined ? 0 : pos;
+ if(!par) { return false; }
+ if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+ return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true); });
+ }
+
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true);
+ if(tmp) {
+ par = tmp;
+ pos = "after";
+ }
+ }
+ this.redraw();
+ return true;
+ }
+ obj = obj && obj.id ? obj : this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+
+ old_par = (obj.parent || '#').toString();
+ new_par = (!pos.toString().match(/^(before|after)$/) || par.id === '#') ? par : this.get_node(par.parent);
+ old_ins = obj.instance ? obj.instance : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));
+ is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);
+ if(par.id === '#') {
+ if(pos === "before") { pos = "first"; }
+ if(pos === "after") { pos = "last"; }
+ }
+ switch(pos) {
+ case "before":
+ pos = $.inArray(par.id, new_par.children);
+ break;
+ case "after" :
+ pos = $.inArray(par.id, new_par.children) + 1;
+ break;
+ case "inside":
+ case "first":
+ pos = 0;
+ break;
+ case "last":
+ pos = new_par.children.length;
+ break;
+ default:
+ if(!pos) { pos = 0; }
+ break;
+ }
+ if(pos > new_par.children.length) { pos = new_par.children.length; }
+ if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return false;
+ }
+ node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj;
+ if(!node) { return false; }
+ if(node.id === true) { delete node.id; }
+ node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat());
+ if(!node) { return false; }
+ tmp = this.get_node(node);
+ if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; }
+ dpc = [];
+ dpc.push(node);
+ dpc = dpc.concat(tmp.children_d);
+ this.trigger('model', { "nodes" : dpc, "parent" : new_par.id });
+
+ // insert into new parent and up
+ for(i = 0, j = new_par.parents.length; i < j; i++) {
+ this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc);
+ }
+ dpc = [];
+ for(i = 0, j = new_par.children.length; i < j; i++) {
+ dpc[i >= pos ? i+1 : i] = new_par.children[i];
+ }
+ dpc[pos] = tmp.id;
+ new_par.children = dpc;
+ new_par.children_d.push(tmp.id);
+ new_par.children_d = new_par.children_d.concat(tmp.children_d);
+
+ if(new_par.id === '#') {
+ this._model.force_full_redraw = true;
+ }
+ if(!this._model.force_full_redraw) {
+ this._node_changed(new_par.id);
+ }
+ if(!skip_redraw) {
+ this.redraw(new_par.id === '#');
+ }
+ if(callback) { callback.call(this, tmp, new_par, pos); }
+ /**
+ * triggered when a node is copied
+ * @event
+ * @name copy_node.jstree
+ * @param {Object} node the copied node
+ * @param {Object} original the original node
+ * @param {String} parent the parent's ID
+ * @param {Number} position the position of the node among the parent's children
+ * @param {String} old_parent the old parent of the node
+ * @param {Number} old_position the position of the original node
+ * @param {Boolean} is_multi do the node and new parent belong to different instances
+ * @param {jsTree} old_instance the instance the node came from
+ * @param {jsTree} new_instance the instance of the new parent
+ */
+ this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });
+ return tmp.id;
+ },
+ /**
+ * cut a node (a later call to `paste(obj)` would move the node)
+ * @name cut(obj)
+ * @param {mixed} obj multiple objects can be passed using an array
+ * @trigger cut.jstree
+ */
+ cut : function (obj) {
+ if(!obj) { obj = this._data.core.selected.concat(); }
+ if(!$.isArray(obj)) { obj = [obj]; }
+ if(!obj.length) { return false; }
+ var tmp = [], o, t1, t2;
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ o = this.get_node(obj[t1]);
+ if(o && o.id && o.id !== '#') { tmp.push(o); }
+ }
+ if(!tmp.length) { return false; }
+ ccp_node = tmp;
+ ccp_inst = this;
+ ccp_mode = 'move_node';
+ /**
+ * triggered when nodes are added to the buffer for moving
+ * @event
+ * @name cut.jstree
+ * @param {Array} node
+ */
+ this.trigger('cut', { "node" : obj });
+ },
+ /**
+ * copy a node (a later call to `paste(obj)` would copy the node)
+ * @name copy(obj)
+ * @param {mixed} obj multiple objects can be passed using an array
+ * @trigger copy.jstre
+ */
+ copy : function (obj) {
+ if(!obj) { obj = this._data.core.selected.concat(); }
+ if(!$.isArray(obj)) { obj = [obj]; }
+ if(!obj.length) { return false; }
+ var tmp = [], o, t1, t2;
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ o = this.get_node(obj[t1]);
+ if(o && o.id && o.id !== '#') { tmp.push(o); }
+ }
+ if(!tmp.length) { return false; }
+ ccp_node = tmp;
+ ccp_inst = this;
+ ccp_mode = 'copy_node';
+ /**
+ * triggered when nodes are added to the buffer for copying
+ * @event
+ * @name copy.jstree
+ * @param {Array} node
+ */
+ this.trigger('copy', { "node" : obj });
+ },
+ /**
+ * get the current buffer (any nodes that are waiting for a paste operation)
+ * @name get_buffer()
+ * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance)
+ */
+ get_buffer : function () {
+ return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst };
+ },
+ /**
+ * check if there is something in the buffer to paste
+ * @name can_paste()
+ * @return {Boolean}
+ */
+ can_paste : function () {
+ return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node];
+ },
+ /**
+ * copy or move the previously cut or copied nodes to a new parent
+ * @name paste(obj [, pos])
+ * @param {mixed} obj the new parent
+ * @param {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0`
+ * @trigger paste.jstree
+ */
+ paste : function (obj, pos) {
+ obj = this.get_node(obj);
+ if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }
+ if(this[ccp_mode](ccp_node, obj, pos)) {
+ /**
+ * triggered when paste is invoked
+ * @event
+ * @name paste.jstree
+ * @param {String} parent the ID of the receiving node
+ * @param {Array} node the nodes in the buffer
+ * @param {String} mode the performed operation - "copy_node" or "move_node"
+ */
+ this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode });
+ }
+ ccp_node = false;
+ ccp_mode = false;
+ ccp_inst = false;
+ },
+ /**
+ * clear the buffer of previously copied or cut nodes
+ * @name clear_buffer()
+ * @trigger clear_buffer.jstree
+ */
+ clear_buffer : function () {
+ ccp_node = false;
+ ccp_mode = false;
+ ccp_inst = false;
+ /**
+ * triggered when the copy / cut buffer is cleared
+ * @event
+ * @name clear_buffer.jstree
+ */
+ this.trigger('clear_buffer');
+ },
+ /**
+ * put a node in edit mode (input field to rename the node)
+ * @name edit(obj [, default_text])
+ * @param {mixed} obj
+ * @param {String} default_text the text to populate the input with (if omitted the node text value is used)
+ */
+ edit : function (obj, default_text) {
+ obj = this.get_node(obj);
+ if(!obj) { return false; }
+ if(this.settings.core.check_callback === false) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Could not edit node because of check_callback' };
+ this.settings.core.error.call(this, this._data.core.last_error);
+ return false;
+ }
+ default_text = typeof default_text === 'string' ? default_text : obj.text;
+ this.set_text(obj, "");
+ obj = this._open_to(obj);
+
+ var rtl = this._data.core.rtl,
+ w = this.element.width(),
+ a = obj.children('.jstree-anchor'),
+ s = $('
'),
+ /*!
+ oi = obj.children("i:visible"),
+ ai = a.children("i:visible"),
+ w1 = oi.width() * oi.length,
+ w2 = ai.width() * ai.length,
+ */
+ t = default_text,
+ h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"),
+ h2 = $("<"+"input />", {
+ "value" : t,
+ "class" : "jstree-rename-input",
+ // "size" : t.length,
+ "css" : {
+ "padding" : "0",
+ "border" : "1px solid silver",
+ "box-sizing" : "border-box",
+ "display" : "inline-block",
+ "height" : (this._data.core.li_height) + "px",
+ "lineHeight" : (this._data.core.li_height) + "px",
+ "width" : "150px" // will be set a bit further down
+ },
+ "blur" : $.proxy(function () {
+ var i = s.children(".jstree-rename-input"),
+ v = i.val();
+ if(v === "") { v = t; }
+ h1.remove();
+ s.replaceWith(a);
+ s.remove();
+ this.set_text(obj, t);
+ if(this.rename_node(obj, $('
').text(v)[this.settings.core.force_text ? 'text' : 'html']()) === false) {
+ this.set_text(obj, t); // move this up? and fix #483
+ }
+ }, this),
+ "keydown" : function (event) {
+ var key = event.which;
+ if(key === 27) {
+ this.value = t;
+ }
+ if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) {
+ event.stopImmediatePropagation();
+ }
+ if(key === 27 || key === 13) {
+ event.preventDefault();
+ this.blur();
+ }
+ },
+ "click" : function (e) { e.stopImmediatePropagation(); },
+ "mousedown" : function (e) { e.stopImmediatePropagation(); },
+ "keyup" : function (event) {
+ h2.width(Math.min(h1.text("pW" + this.value).width(),w));
+ },
+ "keypress" : function(event) {
+ if(event.which === 13) { return false; }
+ }
+ }),
+ fn = {
+ fontFamily : a.css('fontFamily') || '',
+ fontSize : a.css('fontSize') || '',
+ fontWeight : a.css('fontWeight') || '',
+ fontStyle : a.css('fontStyle') || '',
+ fontStretch : a.css('fontStretch') || '',
+ fontVariant : a.css('fontVariant') || '',
+ letterSpacing : a.css('letterSpacing') || '',
+ wordSpacing : a.css('wordSpacing') || ''
+ };
+ s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2);
+ a.replaceWith(s);
+ h1.css(fn);
+ h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
+ },
+
+
+ /**
+ * changes the theme
+ * @name set_theme(theme_name [, theme_url])
+ * @param {String} theme_name the name of the new theme to apply
+ * @param {mixed} theme_url the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory.
+ * @trigger set_theme.jstree
+ */
+ set_theme : function (theme_name, theme_url) {
+ if(!theme_name) { return false; }
+ if(theme_url === true) {
+ var dir = this.settings.core.themes.dir;
+ if(!dir) { dir = $.jstree.path + '/themes'; }
+ theme_url = dir + '/' + theme_name + '/style.css';
+ }
+ if(theme_url && $.inArray(theme_url, themes_loaded) === -1) {
+ $('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />');
+ themes_loaded.push(theme_url);
+ }
+ if(this._data.core.themes.name) {
+ this.element.removeClass('jstree-' + this._data.core.themes.name);
+ }
+ this._data.core.themes.name = theme_name;
+ this.element.addClass('jstree-' + theme_name);
+ this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive');
+ /**
+ * triggered when a theme is set
+ * @event
+ * @name set_theme.jstree
+ * @param {String} theme the new theme
+ */
+ this.trigger('set_theme', { 'theme' : theme_name });
+ },
+ /**
+ * gets the name of the currently applied theme name
+ * @name get_theme()
+ * @return {String}
+ */
+ get_theme : function () { return this._data.core.themes.name; },
+ /**
+ * changes the theme variant (if the theme has variants)
+ * @name set_theme_variant(variant_name)
+ * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed)
+ */
+ set_theme_variant : function (variant_name) {
+ if(this._data.core.themes.variant) {
+ this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
+ }
+ this._data.core.themes.variant = variant_name;
+ if(variant_name) {
+ this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);
+ }
+ },
+ /**
+ * gets the name of the currently applied theme variant
+ * @name get_theme()
+ * @return {String}
+ */
+ get_theme_variant : function () { return this._data.core.themes.variant; },
+ /**
+ * shows a striped background on the container (if the theme supports it)
+ * @name show_stripes()
+ */
+ show_stripes : function () { this._data.core.themes.stripes = true; this.get_container_ul().addClass("jstree-striped"); },
+ /**
+ * hides the striped background on the container
+ * @name hide_stripes()
+ */
+ hide_stripes : function () { this._data.core.themes.stripes = false; this.get_container_ul().removeClass("jstree-striped"); },
+ /**
+ * toggles the striped background on the container
+ * @name toggle_stripes()
+ */
+ toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } },
+ /**
+ * shows the connecting dots (if the theme supports it)
+ * @name show_dots()
+ */
+ show_dots : function () { this._data.core.themes.dots = true; this.get_container_ul().removeClass("jstree-no-dots"); },
+ /**
+ * hides the connecting dots
+ * @name hide_dots()
+ */
+ hide_dots : function () { this._data.core.themes.dots = false; this.get_container_ul().addClass("jstree-no-dots"); },
+ /**
+ * toggles the connecting dots
+ * @name toggle_dots()
+ */
+ toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },
+ /**
+ * show the node icons
+ * @name show_icons()
+ */
+ show_icons : function () { this._data.core.themes.icons = true; this.get_container_ul().removeClass("jstree-no-icons"); },
+ /**
+ * hide the node icons
+ * @name hide_icons()
+ */
+ hide_icons : function () { this._data.core.themes.icons = false; this.get_container_ul().addClass("jstree-no-icons"); },
+ /**
+ * toggle the node icons
+ * @name toggle_icons()
+ */
+ toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },
+ /**
+ * set the node icon for a node
+ * @name set_icon(obj, icon)
+ * @param {mixed} obj
+ * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
+ */
+ set_icon : function (obj, icon) {
+ var t1, t2, dom, old;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.set_icon(obj[t1], icon);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+ old = obj.icon;
+ obj.icon = icon;
+ dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon");
+ if(icon === false) {
+ this.hide_icon(obj);
+ }
+ else if(icon === true) {
+ dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
+ if(old === false) { this.show_icon(obj); }
+ }
+ else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) {
+ dom.removeClass(old).css("background","");
+ dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon);
+ if(old === false) { this.show_icon(obj); }
+ }
+ else {
+ dom.removeClass(old).css("background","");
+ dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon);
+ if(old === false) { this.show_icon(obj); }
+ }
+ return true;
+ },
+ /**
+ * get the node icon for a node
+ * @name get_icon(obj)
+ * @param {mixed} obj
+ * @return {String}
+ */
+ get_icon : function (obj) {
+ obj = this.get_node(obj);
+ return (!obj || obj.id === '#') ? false : obj.icon;
+ },
+ /**
+ * hide the icon on an individual node
+ * @name hide_icon(obj)
+ * @param {mixed} obj
+ */
+ hide_icon : function (obj) {
+ var t1, t2;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.hide_icon(obj[t1]);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj === '#') { return false; }
+ obj.icon = false;
+ this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden');
+ return true;
+ },
+ /**
+ * show the icon on an individual node
+ * @name show_icon(obj)
+ * @param {mixed} obj
+ */
+ show_icon : function (obj) {
+ var t1, t2, dom;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.show_icon(obj[t1]);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj === '#') { return false; }
+ dom = this.get_node(obj, true);
+ obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true;
+ if(!obj.icon) { obj.icon = true; }
+ dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden');
+ return true;
+ }
+ };
+
+ // helpers
+ $.vakata = {};
+ // collect attributes
+ $.vakata.attributes = function(node, with_values) {
+ node = $(node)[0];
+ var attr = with_values ? {} : [];
+ if(node && node.attributes) {
+ $.each(node.attributes, function (i, v) {
+ if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; }
+ if(v.value !== null && $.trim(v.value) !== '') {
+ if(with_values) { attr[v.name] = v.value; }
+ else { attr.push(v.name); }
+ }
+ });
+ }
+ return attr;
+ };
+ $.vakata.array_unique = function(array) {
+ var a = [], i, j, l;
+ for(i = 0, l = array.length; i < l; i++) {
+ for(j = 0; j <= i; j++) {
+ if(array[i] === array[j]) {
+ break;
+ }
+ }
+ if(j === i) { a.push(array[i]); }
+ }
+ return a;
+ };
+ // remove item from array
+ $.vakata.array_remove = function(array, from, to) {
+ var rest = array.slice((to || from) + 1 || array.length);
+ array.length = from < 0 ? array.length + from : from;
+ array.push.apply(array, rest);
+ return array;
+ };
+ // remove item from array
+ $.vakata.array_remove_item = function(array, item) {
+ var tmp = $.inArray(item, array);
+ return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;
+ };
+
+/**
+ * ### Checkbox plugin
+ *
+ * This plugin renders checkbox icons in front of each node, making multiple selection much easier.
+ * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up.
+ */
+
+ var _i = document.createElement('I');
+ _i.className = 'jstree-icon jstree-checkbox';
+ _i.setAttribute('role', 'presentation');
+ /**
+ * stores all defaults for the checkbox plugin
+ * @name $.jstree.defaults.checkbox
+ * @plugin checkbox
+ */
+ $.jstree.defaults.checkbox = {
+ /**
+ * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`.
+ * @name $.jstree.defaults.checkbox.visible
+ * @plugin checkbox
+ */
+ visible : true,
+ /**
+ * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`.
+ * @name $.jstree.defaults.checkbox.three_state
+ * @plugin checkbox
+ */
+ three_state : true,
+ /**
+ * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`.
+ * @name $.jstree.defaults.checkbox.whole_node
+ * @plugin checkbox
+ */
+ whole_node : true,
+ /**
+ * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`.
+ * @name $.jstree.defaults.checkbox.keep_selected_style
+ * @plugin checkbox
+ */
+ keep_selected_style : true,
+ /**
+ * This setting controls how cascading and undetermined nodes are applied.
+ * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used.
+ * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''.
+ * @name $.jstree.defaults.checkbox.cascade
+ * @plugin checkbox
+ */
+ cascade : '',
+ /**
+ * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing.
+ * @name $.jstree.defaults.checkbox.tie_selection
+ * @plugin checkbox
+ */
+ tie_selection : true
+ };
+ $.jstree.plugins.checkbox = function (options, parent) {
+ this.bind = function () {
+ parent.bind.call(this);
+ this._data.checkbox.uto = false;
+ this._data.checkbox.selected = [];
+ if(this.settings.checkbox.three_state) {
+ this.settings.checkbox.cascade = 'up+down+undetermined';
+ }
+ this.element
+ .on("init.jstree", $.proxy(function () {
+ this._data.checkbox.visible = this.settings.checkbox.visible;
+ if(!this.settings.checkbox.keep_selected_style) {
+ this.element.addClass('jstree-checkbox-no-clicked');
+ }
+ if(this.settings.checkbox.tie_selection) {
+ this.element.addClass('jstree-checkbox-selection');
+ }
+ }, this))
+ .on("loading.jstree", $.proxy(function () {
+ this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ]();
+ }, this));
+ if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
+ this.element
+ .on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () {
+ // only if undetermined is in setting
+ if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
+ this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
+ }, this));
+ }
+ if(!this.settings.checkbox.tie_selection) {
+ this.element
+ .on('model.jstree', $.proxy(function (e, data) {
+ var m = this._model.data,
+ p = m[data.parent],
+ dpc = data.nodes,
+ i, j;
+ for(i = 0, j = dpc.length; i < j; i++) {
+ m[dpc[i]].state.checked = (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked);
+ if(m[dpc[i]].state.checked) {
+ this._data.checkbox.selected.push(dpc[i]);
+ }
+ }
+ }, this));
+ }
+ if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) {
+ this.element
+ .on('model.jstree', $.proxy(function (e, data) {
+ var m = this._model.data,
+ p = m[data.parent],
+ dpc = data.nodes,
+ chd = [],
+ c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;
+
+ if(s.indexOf('down') !== -1) {
+ // apply down
+ if(p.state[ t ? 'selected' : 'checked' ]) {
+ for(i = 0, j = dpc.length; i < j; i++) {
+ m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true;
+ }
+ this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc);
+ }
+ else {
+ for(i = 0, j = dpc.length; i < j; i++) {
+ if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) {
+ for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) {
+ m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true;
+ }
+ this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d);
+ }
+ }
+ }
+ }
+
+ if(s.indexOf('up') !== -1) {
+ // apply up
+ for(i = 0, j = p.children_d.length; i < j; i++) {
+ if(!m[p.children_d[i]].children.length) {
+ chd.push(m[p.children_d[i]].parent);
+ }
+ }
+ chd = $.vakata.array_unique(chd);
+ for(k = 0, l = chd.length; k < l; k++) {
+ p = m[chd[k]];
+ while(p && p.id !== '#') {
+ c = 0;
+ for(i = 0, j = p.children.length; i < j; i++) {
+ c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+ }
+ if(c === j) {
+ p.state[ t ? 'selected' : 'checked' ] = true;
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+ tmp = this.get_node(p, true);
+ if(tmp && tmp.length) {
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked');
+ }
+ }
+ else {
+ break;
+ }
+ p = this.get_node(p.parent);
+ }
+ }
+ }
+
+ this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected);
+ }, this))
+ .on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) {
+ var obj = data.node,
+ m = this._model.data,
+ par = this.get_node(obj.parent),
+ dom = this.get_node(obj, true),
+ i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;
+
+ // apply down
+ if(s.indexOf('down') !== -1) {
+ this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ tmp = m[obj.children_d[i]];
+ tmp.state[ t ? 'selected' : 'checked' ] = true;
+ if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
+ tmp.original.state.undetermined = false;
+ }
+ }
+ }
+
+ // apply up
+ if(s.indexOf('up') !== -1) {
+ while(par && par.id !== '#') {
+ c = 0;
+ for(i = 0, j = par.children.length; i < j; i++) {
+ c += m[par.children[i]].state[ t ? 'selected' : 'checked' ];
+ }
+ if(c === j) {
+ par.state[ t ? 'selected' : 'checked' ] = true;
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);
+ tmp = this.get_node(par, true);
+ if(tmp && tmp.length) {
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+ }
+ }
+ else {
+ break;
+ }
+ par = this.get_node(par.parent);
+ }
+ }
+
+ // apply down (process .children separately?)
+ if(s.indexOf('down') !== -1 && dom.length) {
+ dom.find('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', true);
+ }
+ }, this))
+ .on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) {
+ var obj = this.get_node('#'),
+ m = this._model.data,
+ i, j, tmp;
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ tmp = m[obj.children_d[i]];
+ if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
+ tmp.original.state.undetermined = false;
+ }
+ }
+ }, this))
+ .on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {
+ var obj = data.node,
+ dom = this.get_node(obj, true),
+ i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;
+ if(obj && obj.original && obj.original.state && obj.original.state.undetermined) {
+ obj.original.state.undetermined = false;
+ }
+
+ // apply down
+ if(s.indexOf('down') !== -1) {
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ tmp = this._model.data[obj.children_d[i]];
+ tmp.state[ t ? 'selected' : 'checked' ] = false;
+ if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
+ tmp.original.state.undetermined = false;
+ }
+ }
+ }
+
+ // apply up
+ if(s.indexOf('up') !== -1) {
+ for(i = 0, j = obj.parents.length; i < j; i++) {
+ tmp = this._model.data[obj.parents[i]];
+ tmp.state[ t ? 'selected' : 'checked' ] = false;
+ if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
+ tmp.original.state.undetermined = false;
+ }
+ tmp = this.get_node(obj.parents[i], true);
+ if(tmp && tmp.length) {
+ tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+ }
+ }
+ }
+ tmp = [];
+ for(i = 0, j = this._data[ t ? 'core' : 'checkbox' ].selected.length; i < j; i++) {
+ // apply down + apply up
+ if(
+ (s.indexOf('down') === -1 || $.inArray(this._data[ t ? 'core' : 'checkbox' ].selected[i], obj.children_d) === -1) &&
+ (s.indexOf('up') === -1 || $.inArray(this._data[ t ? 'core' : 'checkbox' ].selected[i], obj.parents) === -1)
+ ) {
+ tmp.push(this._data[ t ? 'core' : 'checkbox' ].selected[i]);
+ }
+ }
+ this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(tmp);
+
+ // apply down (process .children separately?)
+ if(s.indexOf('down') !== -1 && dom.length) {
+ dom.find('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', false);
+ }
+ }, this));
+ }
+ if(this.settings.checkbox.cascade.indexOf('up') !== -1) {
+ this.element
+ .on('delete_node.jstree', $.proxy(function (e, data) {
+ // apply up (whole handler)
+ var p = this.get_node(data.parent),
+ m = this._model.data,
+ i, j, c, tmp, t = this.settings.checkbox.tie_selection;
+ while(p && p.id !== '#') {
+ c = 0;
+ for(i = 0, j = p.children.length; i < j; i++) {
+ c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+ }
+ if(c === j) {
+ p.state[ t ? 'selected' : 'checked' ] = true;
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+ tmp = this.get_node(p, true);
+ if(tmp && tmp.length) {
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+ }
+ }
+ else {
+ break;
+ }
+ p = this.get_node(p.parent);
+ }
+ }, this))
+ .on('move_node.jstree', $.proxy(function (e, data) {
+ // apply up (whole handler)
+ var is_multi = data.is_multi,
+ old_par = data.old_parent,
+ new_par = this.get_node(data.parent),
+ m = this._model.data,
+ p, c, i, j, tmp, t = this.settings.checkbox.tie_selection;
+ if(!is_multi) {
+ p = this.get_node(old_par);
+ while(p && p.id !== '#') {
+ c = 0;
+ for(i = 0, j = p.children.length; i < j; i++) {
+ c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+ }
+ if(c === j) {
+ p.state[ t ? 'selected' : 'checked' ] = true;
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+ tmp = this.get_node(p, true);
+ if(tmp && tmp.length) {
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+ }
+ }
+ else {
+ break;
+ }
+ p = this.get_node(p.parent);
+ }
+ }
+ p = new_par;
+ while(p && p.id !== '#') {
+ c = 0;
+ for(i = 0, j = p.children.length; i < j; i++) {
+ c += m[p.children[i]].state[ t ? 'selected' : 'checked' ];
+ }
+ if(c === j) {
+ if(!p.state[ t ? 'selected' : 'checked' ]) {
+ p.state[ t ? 'selected' : 'checked' ] = true;
+ this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);
+ tmp = this.get_node(p, true);
+ if(tmp && tmp.length) {
+ tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
+ }
+ }
+ }
+ else {
+ if(p.state[ t ? 'selected' : 'checked' ]) {
+ p.state[ t ? 'selected' : 'checked' ] = false;
+ this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id);
+ tmp = this.get_node(p, true);
+ if(tmp && tmp.length) {
+ tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
+ }
+ }
+ else {
+ break;
+ }
+ }
+ p = this.get_node(p.parent);
+ }
+ }, this));
+ }
+ };
+ /**
+ * set the undetermined state where and if necessary. Used internally.
+ * @private
+ * @name _undetermined()
+ * @plugin checkbox
+ */
+ this._undetermined = function () {
+ var i, j, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this;
+ for(i = 0, j = s.length; i < j; i++) {
+ if(m[s[i]] && m[s[i]].parents) {
+ p = p.concat(m[s[i]].parents);
+ }
+ }
+ // attempt for server side undetermined state
+ this.element.find('.jstree-closed').not(':has(.jstree-children)')
+ .each(function () {
+ var tmp = tt.get_node(this), tmp2;
+ if(!tmp.state.loaded) {
+ if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) {
+ p.push(tmp.id);
+ p = p.concat(tmp.parents);
+ }
+ }
+ else {
+ for(i = 0, j = tmp.children_d.length; i < j; i++) {
+ tmp2 = m[tmp.children_d[i]];
+ if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) {
+ p.push(tmp2.id);
+ p = p.concat(tmp2.parents);
+ }
+ }
+ }
+ });
+ p = $.vakata.array_unique(p);
+ p = $.vakata.array_remove_item(p,'#');
+
+ this.element.find('.jstree-undetermined').removeClass('jstree-undetermined');
+ for(i = 0, j = p.length; i < j; i++) {
+ if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {
+ s = this.get_node(p[i], true);
+ if(s && s.length) {
+ s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');
+ }
+ }
+ }
+ };
+ this.redraw_node = function(obj, deep, is_callback, force_render) {
+ obj = parent.redraw_node.apply(this, arguments);
+ if(obj) {
+ var i, j, tmp = null;
+ for(i = 0, j = obj.childNodes.length; i < j; i++) {
+ if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
+ tmp = obj.childNodes[i];
+ break;
+ }
+ }
+ if(tmp) {
+ if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; }
+ tmp.insertBefore(_i.cloneNode(false), tmp.childNodes[0]);
+ }
+ }
+ if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {
+ if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }
+ this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);
+ }
+ return obj;
+ };
+ /**
+ * show the node checkbox icons
+ * @name show_checkboxes()
+ * @plugin checkbox
+ */
+ this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); };
+ /**
+ * hide the node checkbox icons
+ * @name hide_checkboxes()
+ * @plugin checkbox
+ */
+ this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); };
+ /**
+ * toggle the node icons
+ * @name toggle_checkboxes()
+ * @plugin checkbox
+ */
+ this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } };
+ /**
+ * checks if a node is in an undetermined state
+ * @name is_undetermined(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ */
+ this.is_undetermined = function (obj) {
+ obj = this.get_node(obj);
+ var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data;
+ if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) {
+ return false;
+ }
+ if(!obj.state.loaded && obj.original.state.undetermined === true) {
+ return true;
+ }
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ this.activate_node = function (obj, e) {
+ if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) {
+ e.ctrlKey = true;
+ }
+ if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) {
+ return parent.activate_node.call(this, obj, e);
+ }
+ if(this.is_checked(obj)) {
+ this.uncheck_node(obj, e);
+ }
+ else {
+ this.check_node(obj, e);
+ }
+ this.trigger('activate_node', { 'node' : this.get_node(obj) });
+ };
+
+ /**
+ * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally)
+ * @name check_node(obj)
+ * @param {mixed} obj an array can be used to check multiple nodes
+ * @trigger check_node.jstree
+ * @plugin checkbox
+ */
+ this.check_node = function (obj, e) {
+ if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }
+ var dom, t1, t2, th;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.check_node(obj[t1], e);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ dom = this.get_node(obj, true);
+ if(!obj.state.checked) {
+ obj.state.checked = true;
+ this._data.checkbox.selected.push(obj.id);
+ if(dom && dom.length) {
+ dom.children('.jstree-anchor').addClass('jstree-checked');
+ }
+ /**
+ * triggered when an node is checked (only if tie_selection in checkbox settings is false)
+ * @event
+ * @name check_node.jstree
+ * @param {Object} node
+ * @param {Array} selected the current selection
+ * @param {Object} event the event (if any) that triggered this check_node
+ * @plugin checkbox
+ */
+ this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
+ }
+ };
+ /**
+ * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally)
+ * @name deselect_node(obj)
+ * @param {mixed} obj an array can be used to deselect multiple nodes
+ * @trigger uncheck_node.jstree
+ * @plugin checkbox
+ */
+ this.uncheck_node = function (obj, e) {
+ if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); }
+ var t1, t2, dom;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.uncheck_node(obj[t1], e);
+ }
+ return true;
+ }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') {
+ return false;
+ }
+ dom = this.get_node(obj, true);
+ if(obj.state.checked) {
+ obj.state.checked = false;
+ this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id);
+ if(dom.length) {
+ dom.children('.jstree-anchor').removeClass('jstree-checked');
+ }
+ /**
+ * triggered when an node is unchecked (only if tie_selection in checkbox settings is false)
+ * @event
+ * @name uncheck_node.jstree
+ * @param {Object} node
+ * @param {Array} selected the current selection
+ * @param {Object} event the event (if any) that triggered this uncheck_node
+ * @plugin checkbox
+ */
+ this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });
+ }
+ };
+ /**
+ * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally)
+ * @name check_all()
+ * @trigger check_all.jstree, changed.jstree
+ * @plugin checkbox
+ */
+ this.check_all = function () {
+ if(this.settings.checkbox.tie_selection) { return this.select_all(); }
+ var tmp = this._data.checkbox.selected.concat([]), i, j;
+ this._data.checkbox.selected = this._model.data['#'].children_d.concat();
+ for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
+ if(this._model.data[this._data.checkbox.selected[i]]) {
+ this._model.data[this._data.checkbox.selected[i]].state.checked = true;
+ }
+ }
+ this.redraw(true);
+ /**
+ * triggered when all nodes are checked (only if tie_selection in checkbox settings is false)
+ * @event
+ * @name check_all.jstree
+ * @param {Array} selected the current selection
+ * @plugin checkbox
+ */
+ this.trigger('check_all', { 'selected' : this._data.checkbox.selected });
+ };
+ /**
+ * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally)
+ * @name uncheck_all()
+ * @trigger uncheck_all.jstree
+ * @plugin checkbox
+ */
+ this.uncheck_all = function () {
+ if(this.settings.checkbox.tie_selection) { return this.deselect_all(); }
+ var tmp = this._data.checkbox.selected.concat([]), i, j;
+ for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {
+ if(this._model.data[this._data.checkbox.selected[i]]) {
+ this._model.data[this._data.checkbox.selected[i]].state.checked = false;
+ }
+ }
+ this._data.checkbox.selected = [];
+ this.element.find('.jstree-checked').removeClass('jstree-checked');
+ /**
+ * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false)
+ * @event
+ * @name uncheck_all.jstree
+ * @param {Object} node the previous selection
+ * @param {Array} selected the current selection
+ * @plugin checkbox
+ */
+ this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp });
+ };
+ /**
+ * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected)
+ * @name is_checked(obj)
+ * @param {mixed} obj
+ * @return {Boolean}
+ * @plugin checkbox
+ */
+ this.is_checked = function (obj) {
+ if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); }
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+ return obj.state.checked;
+ };
+ /**
+ * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected)
+ * @name get_checked([full])
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+ * @return {Array}
+ * @plugin checkbox
+ */
+ this.get_checked = function (full) {
+ if(this.settings.checkbox.tie_selection) { return this.get_selected(full); }
+ return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected;
+ };
+ /**
+ * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected)
+ * @name get_top_checked([full])
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+ * @return {Array}
+ * @plugin checkbox
+ */
+ this.get_top_checked = function (full) {
+ if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); }
+ var tmp = this.get_checked(true),
+ obj = {}, i, j, k, l;
+ for(i = 0, j = tmp.length; i < j; i++) {
+ obj[tmp[i].id] = tmp[i];
+ }
+ for(i = 0, j = tmp.length; i < j; i++) {
+ for(k = 0, l = tmp[i].children_d.length; k < l; k++) {
+ if(obj[tmp[i].children_d[k]]) {
+ delete obj[tmp[i].children_d[k]];
+ }
+ }
+ }
+ tmp = [];
+ for(i in obj) {
+ if(obj.hasOwnProperty(i)) {
+ tmp.push(i);
+ }
+ }
+ return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;
+ };
+ /**
+ * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected)
+ * @name get_bottom_checked([full])
+ * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
+ * @return {Array}
+ * @plugin checkbox
+ */
+ this.get_bottom_checked = function (full) {
+ if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); }
+ var tmp = this.get_checked(true),
+ obj = [], i, j;
+ for(i = 0, j = tmp.length; i < j; i++) {
+ if(!tmp[i].children.length) {
+ obj.push(tmp[i].id);
+ }
+ }
+ return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;
+ };
+ };
+
+ // include the checkbox plugin by default
+ // $.jstree.defaults.plugins.push("checkbox");
+
+/**
+ * ### Contextmenu plugin
+ *
+ * Shows a context menu when a node is right-clicked.
+ */
+
+ /**
+ * stores all defaults for the contextmenu plugin
+ * @name $.jstree.defaults.contextmenu
+ * @plugin contextmenu
+ */
+ $.jstree.defaults.contextmenu = {
+ /**
+ * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`.
+ * @name $.jstree.defaults.contextmenu.select_node
+ * @plugin contextmenu
+ */
+ select_node : true,
+ /**
+ * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used.
+ * @name $.jstree.defaults.contextmenu.show_at_node
+ * @plugin contextmenu
+ */
+ show_at_node : true,
+ /**
+ * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too).
+ *
+ * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required):
+ *
+ * * `separator_before` - a boolean indicating if there should be a separator before this item
+ * * `separator_after` - a boolean indicating if there should be a separator after this item
+ * * `_disabled` - a boolean indicating if this action should be disabled
+ * * `label` - a string - the name of the action (could be a function returning a string)
+ * * `action` - a function to be executed if this item is chosen
+ * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
+ * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)
+ * * `shortcut_label` - shortcut label (like for example `F2` for rename)
+ *
+ * @name $.jstree.defaults.contextmenu.items
+ * @plugin contextmenu
+ */
+ items : function (o, cb) { // Could be an object directly
+ return {
+ "create" : {
+ "separator_before" : false,
+ "separator_after" : true,
+ "_disabled" : false, //(this.check("create_node", data.reference, {}, "last")),
+ "label" : "Create",
+ "action" : function (data) {
+ var inst = $.jstree.reference(data.reference),
+ obj = inst.get_node(data.reference);
+ inst.create_node(obj, {}, "last", function (new_node) {
+ setTimeout(function () { inst.edit(new_node); },0);
+ });
+ }
+ },
+ "rename" : {
+ "separator_before" : false,
+ "separator_after" : false,
+ "_disabled" : false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")),
+ "label" : "Rename",
+ /*
+ "shortcut" : 113,
+ "shortcut_label" : 'F2',
+ "icon" : "glyphicon glyphicon-leaf",
+ */
+ "action" : function (data) {
+ var inst = $.jstree.reference(data.reference),
+ obj = inst.get_node(data.reference);
+ inst.edit(obj);
+ }
+ },
+ "remove" : {
+ "separator_before" : false,
+ "icon" : false,
+ "separator_after" : false,
+ "_disabled" : false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")),
+ "label" : "Delete",
+ "action" : function (data) {
+ var inst = $.jstree.reference(data.reference),
+ obj = inst.get_node(data.reference);
+ if(inst.is_selected(obj)) {
+ inst.delete_node(inst.get_selected());
+ }
+ else {
+ inst.delete_node(obj);
+ }
+ }
+ },
+ "ccp" : {
+ "separator_before" : true,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Edit",
+ "action" : false,
+ "submenu" : {
+ "cut" : {
+ "separator_before" : false,
+ "separator_after" : false,
+ "label" : "Cut",
+ "action" : function (data) {
+ var inst = $.jstree.reference(data.reference),
+ obj = inst.get_node(data.reference);
+ if(inst.is_selected(obj)) {
+ inst.cut(inst.get_selected());
+ }
+ else {
+ inst.cut(obj);
+ }
+ }
+ },
+ "copy" : {
+ "separator_before" : false,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Copy",
+ "action" : function (data) {
+ var inst = $.jstree.reference(data.reference),
+ obj = inst.get_node(data.reference);
+ if(inst.is_selected(obj)) {
+ inst.copy(inst.get_selected());
+ }
+ else {
+ inst.copy(obj);
+ }
+ }
+ },
+ "paste" : {
+ "separator_before" : false,
+ "icon" : false,
+ "_disabled" : function (data) {
+ return !$.jstree.reference(data.reference).can_paste();
+ },
+ "separator_after" : false,
+ "label" : "Paste",
+ "action" : function (data) {
+ var inst = $.jstree.reference(data.reference),
+ obj = inst.get_node(data.reference);
+ inst.paste(obj);
+ }
+ }
+ }
+ }
+ };
+ }
+ };
+
+ $.jstree.plugins.contextmenu = function (options, parent) {
+ this.bind = function () {
+ parent.bind.call(this);
+
+ var last_ts = 0;
+ this.element
+ .on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e) {
+ e.preventDefault();
+ last_ts = e.ctrlKey ? e.timeStamp : 0;
+ if(!this.is_loading(e.currentTarget)) {
+ this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e);
+ }
+ }, this))
+ .on("click.jstree", ".jstree-anchor", $.proxy(function (e) {
+ if(this._data.contextmenu.visible && (!last_ts || e.timeStamp - last_ts > 250)) { // work around safari & macOS ctrl+click
+ $.vakata.context.hide();
+ }
+ }, this));
+ /*
+ if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) {
+ var el = null, tm = null;
+ this.element
+ .on("touchstart", ".jstree-anchor", function (e) {
+ el = e.currentTarget;
+ tm = +new Date();
+ $(document).one("touchend", function (e) {
+ e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset);
+ e.currentTarget = e.target;
+ tm = ((+(new Date())) - tm);
+ if(e.target === el && tm > 600 && tm < 1000) {
+ e.preventDefault();
+ $(el).trigger('contextmenu', e);
+ }
+ el = null;
+ tm = null;
+ });
+ });
+ }
+ */
+ $(document).on("context_hide.vakata.jstree", $.proxy(function () { this._data.contextmenu.visible = false; }, this));
+ };
+ this.teardown = function () {
+ if(this._data.contextmenu.visible) {
+ $.vakata.context.hide();
+ }
+ parent.teardown.call(this);
+ };
+
+ /**
+ * prepare and show the context menu for a node
+ * @name show_contextmenu(obj [, x, y])
+ * @param {mixed} obj the node
+ * @param {Number} x the x-coordinate relative to the document to show the menu at
+ * @param {Number} y the y-coordinate relative to the document to show the menu at
+ * @param {Object} e the event if available that triggered the contextmenu
+ * @plugin contextmenu
+ * @trigger show_contextmenu.jstree
+ */
+ this.show_contextmenu = function (obj, x, y, e) {
+ obj = this.get_node(obj);
+ if(!obj || obj.id === '#') { return false; }
+ var s = this.settings.contextmenu,
+ d = this.get_node(obj, true),
+ a = d.children(".jstree-anchor"),
+ o = false,
+ i = false;
+ if(s.show_at_node || x === undefined || y === undefined) {
+ o = a.offset();
+ x = o.left;
+ y = o.top + this._data.core.li_height;
+ }
+ if(this.settings.contextmenu.select_node && !this.is_selected(obj)) {
+ this.activate_node(obj, e);
+ }
+
+ i = s.items;
+ if($.isFunction(i)) {
+ i = i.call(this, obj, $.proxy(function (i) {
+ this._show_contextmenu(obj, x, y, i);
+ }, this));
+ }
+ if($.isPlainObject(i)) {
+ this._show_contextmenu(obj, x, y, i);
+ }
+ };
+ /**
+ * show the prepared context menu for a node
+ * @name _show_contextmenu(obj, x, y, i)
+ * @param {mixed} obj the node
+ * @param {Number} x the x-coordinate relative to the document to show the menu at
+ * @param {Number} y the y-coordinate relative to the document to show the menu at
+ * @param {Number} i the object of items to show
+ * @plugin contextmenu
+ * @trigger show_contextmenu.jstree
+ * @private
+ */
+ this._show_contextmenu = function (obj, x, y, i) {
+ var d = this.get_node(obj, true),
+ a = d.children(".jstree-anchor");
+ $(document).one("context_show.vakata.jstree", $.proxy(function (e, data) {
+ var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';
+ $(data.element).addClass(cls);
+ }, this));
+ this._data.contextmenu.visible = true;
+ $.vakata.context.show(a, { 'x' : x, 'y' : y }, i);
+ /**
+ * triggered when the contextmenu is shown for a node
+ * @event
+ * @name show_contextmenu.jstree
+ * @param {Object} node the node
+ * @param {Number} x the x-coordinate of the menu relative to the document
+ * @param {Number} y the y-coordinate of the menu relative to the document
+ * @plugin contextmenu
+ */
+ this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y });
+ };
+ };
+
+ // contextmenu helper
+ (function ($) {
+ var right_to_left = false,
+ vakata_context = {
+ element : false,
+ reference : false,
+ position_x : 0,
+ position_y : 0,
+ items : [],
+ html : "",
+ is_visible : false
+ };
+
+ $.vakata.context = {
+ settings : {
+ hide_onmouseleave : 0,
+ icons : true
+ },
+ _trigger : function (event_name) {
+ $(document).triggerHandler("context_" + event_name + ".vakata", {
+ "reference" : vakata_context.reference,
+ "element" : vakata_context.element,
+ "position" : {
+ "x" : vakata_context.position_x,
+ "y" : vakata_context.position_y
+ }
+ });
+ },
+ _execute : function (i) {
+ i = vakata_context.items[i];
+ return i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, {
+ "item" : i,
+ "reference" : vakata_context.reference,
+ "element" : vakata_context.element,
+ "position" : {
+ "x" : vakata_context.position_x,
+ "y" : vakata_context.position_y
+ }
+ }) : false;
+ },
+ _parse : function (o, is_callback) {
+ if(!o) { return false; }
+ if(!is_callback) {
+ vakata_context.html = "";
+ vakata_context.items = [];
+ }
+ var str = "",
+ sep = false,
+ tmp;
+
+ if(is_callback) { str += "<"+"ul>"; }
+ $.each(o, function (i, val) {
+ if(!val) { return true; }
+ vakata_context.items.push(val);
+ if(!sep && val.separator_before) {
+ str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>";
+ }
+ sep = false;
+ str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">";
+ str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "'>";
+ if($.vakata.context.settings.icons) {
+ str += "<"+"i ";
+ if(val.icon) {
+ if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; }
+ else { str += " class='" + val.icon + "' "; }
+ }
+ str += "><"+"/i><"+"span class='vakata-contextmenu-sep'> <"+"/span>";
+ }
+ str += ($.isFunction(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' ':'') + "<"+"/a>";
+ if(val.submenu) {
+ tmp = $.vakata.context._parse(val.submenu, true);
+ if(tmp) { str += tmp; }
+ }
+ str += "<"+"/li>";
+ if(val.separator_after) {
+ str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>";
+ sep = true;
+ }
+ });
+ str = str.replace(/<\/li\>$/,"");
+ if(is_callback) { str += ""; }
+ /**
+ * triggered on the document when the contextmenu is parsed (HTML is built)
+ * @event
+ * @plugin contextmenu
+ * @name context_parse.vakata
+ * @param {jQuery} reference the element that was right clicked
+ * @param {jQuery} element the DOM element of the menu itself
+ * @param {Object} position the x & y coordinates of the menu
+ */
+ if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); }
+ return str.length > 10 ? str : false;
+ },
+ _show_submenu : function (o) {
+ o = $(o);
+ if(!o.length || !o.children("ul").length) { return; }
+ var e = o.children("ul"),
+ x = o.offset().left + o.outerWidth(),
+ y = o.offset().top,
+ w = e.width(),
+ h = e.height(),
+ dw = $(window).width() + $(window).scrollLeft(),
+ dh = $(window).height() + $(window).scrollTop();
+ // може да се спести е една проверка - дали няма някой от класовете вече нагоре
+ if(right_to_left) {
+ o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left");
+ }
+ else {
+ o[x + w + 10 > dw ? "addClass" : "removeClass"]("vakata-context-right");
+ }
+ if(y + h + 10 > dh) {
+ e.css("bottom","-1px");
+ }
+ e.show();
+ },
+ show : function (reference, position, data) {
+ var o, e, x, y, w, h, dw, dh, cond = true;
+ if(vakata_context.element && vakata_context.element.length) {
+ vakata_context.element.width('');
+ }
+ switch(cond) {
+ case (!position && !reference):
+ return false;
+ case (!!position && !!reference):
+ vakata_context.reference = reference;
+ vakata_context.position_x = position.x;
+ vakata_context.position_y = position.y;
+ break;
+ case (!position && !!reference):
+ vakata_context.reference = reference;
+ o = reference.offset();
+ vakata_context.position_x = o.left + reference.outerHeight();
+ vakata_context.position_y = o.top;
+ break;
+ case (!!position && !reference):
+ vakata_context.position_x = position.x;
+ vakata_context.position_y = position.y;
+ break;
+ }
+ if(!!reference && !data && $(reference).data('vakata_contextmenu')) {
+ data = $(reference).data('vakata_contextmenu');
+ }
+ if($.vakata.context._parse(data)) {
+ vakata_context.element.html(vakata_context.html);
+ }
+ if(vakata_context.items.length) {
+ vakata_context.element.appendTo("body");
+ e = vakata_context.element;
+ x = vakata_context.position_x;
+ y = vakata_context.position_y;
+ w = e.width();
+ h = e.height();
+ dw = $(window).width() + $(window).scrollLeft();
+ dh = $(window).height() + $(window).scrollTop();
+ if(right_to_left) {
+ x -= e.outerWidth();
+ if(x < $(window).scrollLeft() + 20) {
+ x = $(window).scrollLeft() + 20;
+ }
+ }
+ if(x + w + 20 > dw) {
+ x = dw - (w + 20);
+ }
+ if(y + h + 20 > dh) {
+ y = dh - (h + 20);
+ }
+
+ vakata_context.element
+ .css({ "left" : x, "top" : y })
+ .show()
+ .find('a').first().focus().parent().addClass("vakata-context-hover");
+ vakata_context.is_visible = true;
+ /**
+ * triggered on the document when the contextmenu is shown
+ * @event
+ * @plugin contextmenu
+ * @name context_show.vakata
+ * @param {jQuery} reference the element that was right clicked
+ * @param {jQuery} element the DOM element of the menu itself
+ * @param {Object} position the x & y coordinates of the menu
+ */
+ $.vakata.context._trigger("show");
+ }
+ },
+ hide : function () {
+ if(vakata_context.is_visible) {
+ vakata_context.element.hide().find("ul").hide().end().find(':focus').blur().end().detach();
+ vakata_context.is_visible = false;
+ /**
+ * triggered on the document when the contextmenu is hidden
+ * @event
+ * @plugin contextmenu
+ * @name context_hide.vakata
+ * @param {jQuery} reference the element that was right clicked
+ * @param {jQuery} element the DOM element of the menu itself
+ * @param {Object} position the x & y coordinates of the menu
+ */
+ $.vakata.context._trigger("hide");
+ }
+ }
+ };
+ $(function () {
+ right_to_left = $("body").css("direction") === "rtl";
+ var to = false;
+
+ vakata_context.element = $("");
+ vakata_context.element
+ .on("mouseenter", "li", function (e) {
+ e.stopImmediatePropagation();
+
+ if($.contains(this, e.relatedTarget)) {
+ // премахнато заради delegate mouseleave по-долу
+ // $(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
+ return;
+ }
+
+ if(to) { clearTimeout(to); }
+ vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end();
+
+ $(this)
+ .siblings().find("ul").hide().end().end()
+ .parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover");
+ $.vakata.context._show_submenu(this);
+ })
+ // тестово - дали не натоварва?
+ .on("mouseleave", "li", function (e) {
+ if($.contains(this, e.relatedTarget)) { return; }
+ $(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover");
+ })
+ .on("mouseleave", function (e) {
+ $(this).find(".vakata-context-hover").removeClass("vakata-context-hover");
+ if($.vakata.context.settings.hide_onmouseleave) {
+ to = setTimeout(
+ (function (t) {
+ return function () { $.vakata.context.hide(); };
+ }(this)), $.vakata.context.settings.hide_onmouseleave);
+ }
+ })
+ .on("click", "a", function (e) {
+ e.preventDefault();
+ //})
+ //.on("mouseup", "a", function (e) {
+ if(!$(this).blur().parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) {
+ $.vakata.context.hide();
+ }
+ })
+ .on('keydown', 'a', function (e) {
+ var o = null;
+ switch(e.which) {
+ case 13:
+ case 32:
+ e.type = "mouseup";
+ e.preventDefault();
+ $(e.currentTarget).trigger(e);
+ break;
+ case 37:
+ if(vakata_context.is_visible) {
+ vakata_context.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').focus();
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ break;
+ case 38:
+ if(vakata_context.is_visible) {
+ o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first();
+ if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); }
+ o.addClass("vakata-context-hover").children('a').focus();
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ break;
+ case 39:
+ if(vakata_context.is_visible) {
+ vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').focus();
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ break;
+ case 40:
+ if(vakata_context.is_visible) {
+ o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first();
+ if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); }
+ o.addClass("vakata-context-hover").children('a').focus();
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ break;
+ case 27:
+ $.vakata.context.hide();
+ e.preventDefault();
+ break;
+ default:
+ //console.log(e.which);
+ break;
+ }
+ })
+ .on('keydown', function (e) {
+ e.preventDefault();
+ var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent();
+ if(a.parent().not('.vakata-context-disabled')) {
+ a.click();
+ }
+ });
+
+ $(document)
+ .on("mousedown.vakata.jstree", function (e) {
+ if(vakata_context.is_visible && !$.contains(vakata_context.element[0], e.target)) { $.vakata.context.hide(); }
+ })
+ .on("context_show.vakata.jstree", function (e, data) {
+ vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent");
+ if(right_to_left) {
+ vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl");
+ }
+ // also apply a RTL class?
+ vakata_context.element.find("ul").hide().end();
+ });
+ });
+ }($));
+ // $.jstree.defaults.plugins.push("contextmenu");
+
+/**
+ * ### Drag'n'drop plugin
+ *
+ * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations.
+ */
+
+ /**
+ * stores all defaults for the drag'n'drop plugin
+ * @name $.jstree.defaults.dnd
+ * @plugin dnd
+ */
+ $.jstree.defaults.dnd = {
+ /**
+ * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`.
+ * @name $.jstree.defaults.dnd.copy
+ * @plugin dnd
+ */
+ copy : true,
+ /**
+ * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`.
+ * @name $.jstree.defaults.dnd.open_timeout
+ * @plugin dnd
+ */
+ open_timeout : 500,
+ /**
+ * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) - return `false` to prevent dragging
+ * @name $.jstree.defaults.dnd.is_draggable
+ * @plugin dnd
+ */
+ is_draggable : true,
+ /**
+ * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true`
+ * @name $.jstree.defaults.dnd.check_while_dragging
+ * @plugin dnd
+ */
+ check_while_dragging : true,
+ /**
+ * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false`
+ * @name $.jstree.defaults.dnd.always_copy
+ * @plugin dnd
+ */
+ always_copy : false,
+ /**
+ * when dropping a node "inside", this setting indicates the position the node should go to - it can be an integer or a string: "first" (same as 0) or "last", default is `0`
+ * @name $.jstree.defaults.dnd.inside_pos
+ * @plugin dnd
+ */
+ inside_pos : 0
+ };
+ // TODO: now check works by checking for each node individually, how about max_children, unique, etc?
+ $.jstree.plugins.dnd = function (options, parent) {
+ this.bind = function () {
+ parent.bind.call(this);
+
+ this.element
+ .on('mousedown.jstree touchstart.jstree', '.jstree-anchor', $.proxy(function (e) {
+ var obj = this.get_node(e.target),
+ mlt = this.is_selected(obj) ? this.get_selected().length : 1;
+ if(obj && obj.id && obj.id !== "#" && (e.which === 1 || e.type === "touchstart") &&
+ (this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_selected(true) : [obj]))))
+ ) {
+ this.element.trigger('mousedown.jstree');
+ return $.vakata.dnd.start(e, { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_selected() : [obj.id] }, ' ' + (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget, true)) + '+
');
+ }
+ }, this));
+ };
+ };
+
+ $(function() {
+ // bind only once for all instances
+ var lastmv = false,
+ laster = false,
+ opento = false,
+ marker = $('
').hide(); //.appendTo('body');
+
+ $(document)
+ .on('dnd_start.vakata.jstree', function (e, data) {
+ lastmv = false;
+ if(!data || !data.data || !data.data.jstree) { return; }
+ marker.appendTo('body'); //.show();
+ })
+ .on('dnd_move.vakata.jstree', function (e, data) {
+ if(opento) { clearTimeout(opento); }
+ if(!data || !data.data || !data.data.jstree) { return; }
+
+ // if we are hovering the marker image do nothing (can happen on "inside" drags)
+ if(data.event.target.id && data.event.target.id === 'jstree-marker') {
+ return;
+ }
+
+ var ins = $.jstree.reference(data.event.target),
+ ref = false,
+ off = false,
+ rel = false,
+ l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm;
+ // if we are over an instance
+ if(ins && ins._data && ins._data.dnd) {
+ marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));
+ data.helper
+ .children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))
+ .find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'show' : 'hide' ]();
+
+
+ // if are hovering the container itself add a new root node
+ if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {
+ ok = true;
+ for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
+ ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), '#', 'last', { 'dnd' : true, 'ref' : ins.get_node('#'), 'pos' : 'i', 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) });
+ if(!ok) { break; }
+ }
+ if(ok) {
+ lastmv = { 'ins' : ins, 'par' : '#', 'pos' : 'last' };
+ marker.hide();
+ data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
+ return;
+ }
+ }
+ else {
+ // if we are hovering a tree node
+ ref = $(data.event.target).closest('.jstree-anchor');
+ if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {
+ off = ref.offset();
+ rel = data.event.pageY - off.top;
+ h = ref.height();
+ if(rel < h / 3) {
+ o = ['b', 'i', 'a'];
+ }
+ else if(rel > h - h / 3) {
+ o = ['a', 'i', 'b'];
+ }
+ else {
+ o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a'];
+ }
+ $.each(o, function (j, v) {
+ switch(v) {
+ case 'b':
+ l = off.left - 6;
+ t = off.top;
+ p = ins.get_parent(ref);
+ i = ref.parent().index();
+ break;
+ case 'i':
+ ip = ins.settings.dnd.inside_pos;
+ tm = ins.get_node(ref.parent());
+ l = off.left - 2;
+ t = off.top + h / 2 + 1;
+ p = tm.id;
+ i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length));
+ break;
+ case 'a':
+ l = off.left - 6;
+ t = off.top + h;
+ p = ins.get_parent(ref);
+ i = ref.parent().index() + 1;
+ break;
+ }
+ ok = true;
+ for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
+ op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node";
+ ps = i;
+ if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) {
+ pr = ins.get_node(p);
+ if(ps > $.inArray(data.data.nodes[t1], pr.children)) {
+ ps -= 1;
+ }
+ }
+ ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) );
+ if(!ok) {
+ if(ins && ins.last_error) { laster = ins.last_error(); }
+ break;
+ }
+ }
+ if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) {
+ opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);
+ }
+ if(ok) {
+ lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };
+ marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();
+ data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
+ laster = {};
+ o = true;
+ return false;
+ }
+ });
+ if(o === true) { return; }
+ }
+ }
+ }
+ lastmv = false;
+ data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');
+ marker.hide();
+ })
+ .on('dnd_scroll.vakata.jstree', function (e, data) {
+ if(!data || !data.data || !data.data.jstree) { return; }
+ marker.hide();
+ lastmv = false;
+ data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');
+ })
+ .on('dnd_stop.vakata.jstree', function (e, data) {
+ if(opento) { clearTimeout(opento); }
+ if(!data || !data.data || !data.data.jstree) { return; }
+ marker.hide().detach();
+ var i, j, nodes = [];
+ if(lastmv) {
+ for(i = 0, j = data.data.nodes.length; i < j; i++) {
+ nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i];
+ if(data.data.origin) {
+ nodes[i].instance = data.data.origin;
+ }
+ }
+ lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos);
+ for(i = 0, j = nodes.length; i < j; i++) {
+ if(nodes[i].instance) {
+ nodes[i].instance = null;
+ }
+ }
+ }
+ else {
+ i = $(data.event.target).closest('.jstree');
+ if(i.length && laster && laster.error && laster.error === 'check') {
+ i = i.jstree(true);
+ if(i) {
+ i.settings.core.error.call(this, laster);
+ }
+ }
+ }
+ })
+ .on('keyup.jstree keydown.jstree', function (e, data) {
+ data = $.vakata.dnd._get();
+ if(data && data.data && data.data.jstree) {
+ data.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ]();
+ }
+ });
+ });
+
+ // helpers
+ (function ($) {
+ // private variable
+ var vakata_dnd = {
+ element : false,
+ target : false,
+ is_down : false,
+ is_drag : false,
+ helper : false,
+ helper_w: 0,
+ data : false,
+ init_x : 0,
+ init_y : 0,
+ scroll_l: 0,
+ scroll_t: 0,
+ scroll_e: false,
+ scroll_i: false,
+ is_touch: false
+ };
+ $.vakata.dnd = {
+ settings : {
+ scroll_speed : 10,
+ scroll_proximity : 20,
+ helper_left : 5,
+ helper_top : 10,
+ threshold : 5,
+ threshold_touch : 50
+ },
+ _trigger : function (event_name, e) {
+ var data = $.vakata.dnd._get();
+ data.event = e;
+ $(document).triggerHandler("dnd_" + event_name + ".vakata", data);
+ },
+ _get : function () {
+ return {
+ "data" : vakata_dnd.data,
+ "element" : vakata_dnd.element,
+ "helper" : vakata_dnd.helper
+ };
+ },
+ _clean : function () {
+ if(vakata_dnd.helper) { vakata_dnd.helper.remove(); }
+ if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
+ vakata_dnd = {
+ element : false,
+ target : false,
+ is_down : false,
+ is_drag : false,
+ helper : false,
+ helper_w: 0,
+ data : false,
+ init_x : 0,
+ init_y : 0,
+ scroll_l: 0,
+ scroll_t: 0,
+ scroll_e: false,
+ scroll_i: false,
+ is_touch: false
+ };
+ $(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
+ $(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
+ },
+ _scroll : function (init_only) {
+ if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) {
+ if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }
+ return false;
+ }
+ if(!vakata_dnd.scroll_i) {
+ vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100);
+ return false;
+ }
+ if(init_only === true) { return false; }
+
+ var i = vakata_dnd.scroll_e.scrollTop(),
+ j = vakata_dnd.scroll_e.scrollLeft();
+ vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed);
+ vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed);
+ if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) {
+ /**
+ * triggered on the document when a drag causes an element to scroll
+ * @event
+ * @plugin dnd
+ * @name dnd_scroll.vakata
+ * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+ * @param {DOM} element the DOM element being dragged
+ * @param {jQuery} helper the helper shown next to the mouse
+ * @param {jQuery} event the element that is scrolling
+ */
+ $.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e);
+ }
+ },
+ start : function (e, data, html) {
+ if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+ e.pageX = e.originalEvent.changedTouches[0].pageX;
+ e.pageY = e.originalEvent.changedTouches[0].pageY;
+ e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+ }
+ if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); }
+ try {
+ e.currentTarget.unselectable = "on";
+ e.currentTarget.onselectstart = function() { return false; };
+ if(e.currentTarget.style) { e.currentTarget.style.MozUserSelect = "none"; }
+ } catch(ignore) { }
+ vakata_dnd.init_x = e.pageX;
+ vakata_dnd.init_y = e.pageY;
+ vakata_dnd.data = data;
+ vakata_dnd.is_down = true;
+ vakata_dnd.element = e.currentTarget;
+ vakata_dnd.target = e.target;
+ vakata_dnd.is_touch = e.type === "touchstart";
+ if(html !== false) {
+ vakata_dnd.helper = $("
").html(html).css({
+ "display" : "block",
+ "margin" : "0",
+ "padding" : "0",
+ "position" : "absolute",
+ "top" : "-2000px",
+ "lineHeight" : "16px",
+ "zIndex" : "10000"
+ });
+ }
+ $(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag);
+ $(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop);
+ return false;
+ },
+ drag : function (e) {
+ if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+ e.pageX = e.originalEvent.changedTouches[0].pageX;
+ e.pageY = e.originalEvent.changedTouches[0].pageY;
+ e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+ }
+ if(!vakata_dnd.is_down) { return; }
+ if(!vakata_dnd.is_drag) {
+ if(
+ Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ||
+ Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)
+ ) {
+ if(vakata_dnd.helper) {
+ vakata_dnd.helper.appendTo("body");
+ vakata_dnd.helper_w = vakata_dnd.helper.outerWidth();
+ }
+ vakata_dnd.is_drag = true;
+ /**
+ * triggered on the document when a drag starts
+ * @event
+ * @plugin dnd
+ * @name dnd_start.vakata
+ * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+ * @param {DOM} element the DOM element being dragged
+ * @param {jQuery} helper the helper shown next to the mouse
+ * @param {Object} event the event that caused the start (probably mousemove)
+ */
+ $.vakata.dnd._trigger("start", e);
+ }
+ else { return; }
+ }
+
+ var d = false, w = false,
+ dh = false, wh = false,
+ dw = false, ww = false,
+ dt = false, dl = false,
+ ht = false, hl = false;
+
+ vakata_dnd.scroll_t = 0;
+ vakata_dnd.scroll_l = 0;
+ vakata_dnd.scroll_e = false;
+ $($(e.target).parentsUntil("body").addBack().get().reverse())
+ .filter(function () {
+ return (/^auto|scroll$/).test($(this).css("overflow")) &&
+ (this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth);
+ })
+ .each(function () {
+ var t = $(this), o = t.offset();
+ if(this.scrollHeight > this.offsetHeight) {
+ if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; }
+ if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; }
+ }
+ if(this.scrollWidth > this.offsetWidth) {
+ if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; }
+ if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; }
+ }
+ if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
+ vakata_dnd.scroll_e = $(this);
+ return false;
+ }
+ });
+
+ if(!vakata_dnd.scroll_e) {
+ d = $(document); w = $(window);
+ dh = d.height(); wh = w.height();
+ dw = d.width(); ww = w.width();
+ dt = d.scrollTop(); dl = d.scrollLeft();
+ if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; }
+ if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; }
+ if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; }
+ if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; }
+ if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {
+ vakata_dnd.scroll_e = d;
+ }
+ }
+ if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); }
+
+ if(vakata_dnd.helper) {
+ ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10);
+ hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10);
+ if(dh && ht + 25 > dh) { ht = dh - 50; }
+ if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); }
+ vakata_dnd.helper.css({
+ left : hl + "px",
+ top : ht + "px"
+ });
+ }
+ /**
+ * triggered on the document when a drag is in progress
+ * @event
+ * @plugin dnd
+ * @name dnd_move.vakata
+ * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+ * @param {DOM} element the DOM element being dragged
+ * @param {jQuery} helper the helper shown next to the mouse
+ * @param {Object} event the event that caused this to trigger (most likely mousemove)
+ */
+ $.vakata.dnd._trigger("move", e);
+ return false;
+ },
+ stop : function (e) {
+ if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {
+ e.pageX = e.originalEvent.changedTouches[0].pageX;
+ e.pageY = e.originalEvent.changedTouches[0].pageY;
+ e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);
+ }
+ if(vakata_dnd.is_drag) {
+ /**
+ * triggered on the document when a drag stops (the dragged element is dropped)
+ * @event
+ * @plugin dnd
+ * @name dnd_stop.vakata
+ * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start
+ * @param {DOM} element the DOM element being dragged
+ * @param {jQuery} helper the helper shown next to the mouse
+ * @param {Object} event the event that caused the stop
+ */
+ $.vakata.dnd._trigger("stop", e);
+ }
+ else {
+ if(e.type === "touchend" && e.target === vakata_dnd.target) {
+ var to = setTimeout(function () { $(e.target).click(); }, 100);
+ $(e.target).one('click', function() { if(to) { clearTimeout(to); } });
+ }
+ }
+ $.vakata.dnd._clean();
+ return false;
+ }
+ };
+ }($));
+
+ // include the dnd plugin by default
+ // $.jstree.defaults.plugins.push("dnd");
+
+
+/**
+ * ### Search plugin
+ *
+ * Adds search functionality to jsTree.
+ */
+
+ /**
+ * stores all defaults for the search plugin
+ * @name $.jstree.defaults.search
+ * @plugin search
+ */
+ $.jstree.defaults.search = {
+ /**
+ * a jQuery-like AJAX config, which jstree uses if a server should be queried for results.
+ *
+ * A `str` (which is the search string) parameter will be added with the request. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed.
+ * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 2 parameters - the search string and the callback to call with the array of nodes to load.
+ * @name $.jstree.defaults.search.ajax
+ * @plugin search
+ */
+ ajax : false,
+ /**
+ * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`.
+ * @name $.jstree.defaults.search.fuzzy
+ * @plugin search
+ */
+ fuzzy : false,
+ /**
+ * Indicates if the search should be case sensitive. Default is `false`.
+ * @name $.jstree.defaults.search.case_sensitive
+ * @plugin search
+ */
+ case_sensitive : false,
+ /**
+ * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).
+ * This setting can be changed at runtime when calling the search method. Default is `false`.
+ * @name $.jstree.defaults.search.show_only_matches
+ * @plugin search
+ */
+ show_only_matches : false,
+ /**
+ * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`.
+ * @name $.jstree.defaults.search.close_opened_onclear
+ * @plugin search
+ */
+ close_opened_onclear : true,
+ /**
+ * Indicates if only leaf nodes should be included in search results. Default is `false`.
+ * @name $.jstree.defaults.search.search_leaves_only
+ * @plugin search
+ */
+ search_leaves_only : false,
+ /**
+ * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution).
+ * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`.
+ * @name $.jstree.defaults.search.search_callback
+ * @plugin search
+ */
+ search_callback : false
+ };
+
+ $.jstree.plugins.search = function (options, parent) {
+ this.bind = function () {
+ parent.bind.call(this);
+
+ this._data.search.str = "";
+ this._data.search.dom = $();
+ this._data.search.res = [];
+ this._data.search.opn = [];
+ this._data.search.som = false;
+
+ this.element
+ .on('before_open.jstree', $.proxy(function (e, data) {
+ var i, j, f, r = this._data.search.res, s = [], o = $();
+ if(r && r.length) {
+ this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')));
+ this._data.search.dom.children(".jstree-anchor").addClass('jstree-search');
+ if(this._data.search.som && this._data.search.res.length) {
+ for(i = 0, j = r.length; i < j; i++) {
+ s = s.concat(this.get_node(r[i]).parents);
+ }
+ s = $.vakata.array_remove_item($.vakata.array_unique(s),'#');
+ o = s.length ? $(this.element[0].querySelectorAll('#' + $.map(s, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))) : $();
+
+ this.element.find(".jstree-node").hide().filter('.jstree-last').filter(function() { return this.nextSibling; }).removeClass('jstree-last');
+ o = o.add(this._data.search.dom);
+ o.parentsUntil(".jstree").addBack().show()
+ .filter(".jstree-children").each(function () { $(this).children(".jstree-node:visible").eq(-1).addClass("jstree-last"); });
+ }
+ }
+ }, this))
+ .on("search.jstree", $.proxy(function (e, data) {
+ if(this._data.search.som) {
+ if(data.nodes.length) {
+ this.element.find(".jstree-node").hide().filter('.jstree-last').filter(function() { return this.nextSibling; }).removeClass('jstree-last');
+ data.nodes.parentsUntil(".jstree").addBack().show()
+ .filter(".jstree-children").each(function () { $(this).children(".jstree-node:visible").eq(-1).addClass("jstree-last"); });
+ }
+ }
+ }, this))
+ .on("clear_search.jstree", $.proxy(function (e, data) {
+ if(this._data.search.som && data.nodes.length) {
+ this.element.find(".jstree-node").css("display","").filter('.jstree-last').filter(function() { return this.nextSibling; }).removeClass('jstree-last');
+ }
+ }, this));
+ };
+ /**
+ * used to search the tree nodes for a given string
+ * @name search(str [, skip_async])
+ * @param {String} str the search string
+ * @param {Boolean} skip_async if set to true server will not be queried even if configured
+ * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers)
+ * @plugin search
+ * @trigger search.jstree
+ */
+ this.search = function (str, skip_async, show_only_matches) {
+ if(str === false || $.trim(str.toString()) === "") {
+ return this.clear_search();
+ }
+ str = str.toString();
+ var s = this.settings.search,
+ a = s.ajax ? s.ajax : false,
+ f = null,
+ r = [],
+ p = [], i, j;
+ if(this._data.search.res.length) {
+ this.clear_search();
+ }
+ if(show_only_matches === undefined) {
+ show_only_matches = s.show_only_matches;
+ }
+ if(!skip_async && a !== false) {
+ if($.isFunction(a)) {
+ return a.call(this, str, $.proxy(function (d) {
+ if(d && d.d) { d = d.d; }
+ this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
+ this.search(str, true, show_only_matches);
+ }, true);
+ }, this));
+ }
+ else {
+ a = $.extend({}, a);
+ if(!a.data) { a.data = {}; }
+ a.data.str = str;
+ return $.ajax(a)
+ .fail($.proxy(function () {
+ this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };
+ this.settings.core.error.call(this, this._data.core.last_error);
+ }, this))
+ .done($.proxy(function (d) {
+ if(d && d.d) { d = d.d; }
+ this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
+ this.search(str, true, show_only_matches);
+ }, true);
+ }, this));
+ }
+ }
+ this._data.search.str = str;
+ this._data.search.dom = $();
+ this._data.search.res = [];
+ this._data.search.opn = [];
+ this._data.search.som = show_only_matches;
+
+ f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });
+
+ $.each(this._model.data, function (i, v) {
+ if(v.text && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) ) {
+ r.push(i);
+ p = p.concat(v.parents);
+ }
+ });
+ if(r.length) {
+ p = $.vakata.array_unique(p);
+ this._search_open(p);
+ this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')));
+ this._data.search.res = r;
+ this._data.search.dom.children(".jstree-anchor").addClass('jstree-search');
+ }
+ /**
+ * triggered after search is complete
+ * @event
+ * @name search.jstree
+ * @param {jQuery} nodes a jQuery collection of matching nodes
+ * @param {String} str the search string
+ * @param {Array} res a collection of objects represeing the matching nodes
+ * @plugin search
+ */
+ this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches });
+ };
+ /**
+ * used to clear the last search (removes classes and shows all nodes if filtering is on)
+ * @name clear_search()
+ * @plugin search
+ * @trigger clear_search.jstree
+ */
+ this.clear_search = function () {
+ this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search");
+ if(this.settings.search.close_opened_onclear) {
+ this.close_node(this._data.search.opn, 0);
+ }
+ /**
+ * triggered after search is complete
+ * @event
+ * @name clear_search.jstree
+ * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search)
+ * @param {String} str the search string (the last search string)
+ * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search)
+ * @plugin search
+ */
+ this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res });
+ this._data.search.str = "";
+ this._data.search.res = [];
+ this._data.search.opn = [];
+ this._data.search.dom = $();
+ };
+ /**
+ * opens nodes that need to be opened to reveal the search results. Used only internally.
+ * @private
+ * @name _search_open(d)
+ * @param {Array} d an array of node IDs
+ * @plugin search
+ */
+ this._search_open = function (d) {
+ var t = this;
+ $.each(d.concat([]), function (i, v) {
+ if(v === "#") { return true; }
+ try { v = $('#' + v.replace($.jstree.idregex,'\\$&'), t.element); } catch(ignore) { }
+ if(v && v.length) {
+ if(t.is_closed(v)) {
+ t._data.search.opn.push(v[0].id);
+ t.open_node(v, function () { t._search_open(d); }, 0);
+ }
+ }
+ });
+ };
+ };
+
+ // helpers
+ (function ($) {
+ // from http://kiro.me/projects/fuse.html
+ $.vakata.search = function(pattern, txt, options) {
+ options = options || {};
+ if(options.fuzzy !== false) {
+ options.fuzzy = true;
+ }
+ pattern = options.caseSensitive ? pattern : pattern.toLowerCase();
+ var MATCH_LOCATION = options.location || 0,
+ MATCH_DISTANCE = options.distance || 100,
+ MATCH_THRESHOLD = options.threshold || 0.6,
+ patternLen = pattern.length,
+ matchmask, pattern_alphabet, match_bitapScore, search;
+ if(patternLen > 32) {
+ options.fuzzy = false;
+ }
+ if(options.fuzzy) {
+ matchmask = 1 << (patternLen - 1);
+ pattern_alphabet = (function () {
+ var mask = {},
+ i = 0;
+ for (i = 0; i < patternLen; i++) {
+ mask[pattern.charAt(i)] = 0;
+ }
+ for (i = 0; i < patternLen; i++) {
+ mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1);
+ }
+ return mask;
+ }());
+ match_bitapScore = function (e, x) {
+ var accuracy = e / patternLen,
+ proximity = Math.abs(MATCH_LOCATION - x);
+ if(!MATCH_DISTANCE) {
+ return proximity ? 1.0 : accuracy;
+ }
+ return accuracy + (proximity / MATCH_DISTANCE);
+ };
+ }
+ search = function (text) {
+ text = options.caseSensitive ? text : text.toLowerCase();
+ if(pattern === text || text.indexOf(pattern) !== -1) {
+ return {
+ isMatch: true,
+ score: 0
+ };
+ }
+ if(!options.fuzzy) {
+ return {
+ isMatch: false,
+ score: 1
+ };
+ }
+ var i, j,
+ textLen = text.length,
+ scoreThreshold = MATCH_THRESHOLD,
+ bestLoc = text.indexOf(pattern, MATCH_LOCATION),
+ binMin, binMid,
+ binMax = patternLen + textLen,
+ lastRd, start, finish, rd, charMatch,
+ score = 1,
+ locations = [];
+ if (bestLoc !== -1) {
+ scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
+ bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen);
+ if (bestLoc !== -1) {
+ scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);
+ }
+ }
+ bestLoc = -1;
+ for (i = 0; i < patternLen; i++) {
+ binMin = 0;
+ binMid = binMax;
+ while (binMin < binMid) {
+ if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) {
+ binMin = binMid;
+ } else {
+ binMax = binMid;
+ }
+ binMid = Math.floor((binMax - binMin) / 2 + binMin);
+ }
+ binMax = binMid;
+ start = Math.max(1, MATCH_LOCATION - binMid + 1);
+ finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen;
+ rd = new Array(finish + 2);
+ rd[finish + 1] = (1 << i) - 1;
+ for (j = finish; j >= start; j--) {
+ charMatch = pattern_alphabet[text.charAt(j - 1)];
+ if (i === 0) {
+ rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;
+ } else {
+ rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];
+ }
+ if (rd[j] & matchmask) {
+ score = match_bitapScore(i, j - 1);
+ if (score <= scoreThreshold) {
+ scoreThreshold = score;
+ bestLoc = j - 1;
+ locations.push(bestLoc);
+ if (bestLoc > MATCH_LOCATION) {
+ start = Math.max(1, 2 * MATCH_LOCATION - bestLoc);
+ } else {
+ break;
+ }
+ }
+ }
+ }
+ if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) {
+ break;
+ }
+ lastRd = rd;
+ }
+ return {
+ isMatch: bestLoc >= 0,
+ score: score
+ };
+ };
+ return txt === true ? { 'search' : search } : search(txt);
+ };
+ }($));
+
+ // include the search plugin by default
+ // $.jstree.defaults.plugins.push("search");
+
+/**
+ * ### Sort plugin
+ *
+ * Automatically sorts all siblings in the tree according to a sorting function.
+ */
+
+ /**
+ * the settings function used to sort the nodes.
+ * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`.
+ * @name $.jstree.defaults.sort
+ * @plugin sort
+ */
+ $.jstree.defaults.sort = function (a, b) {
+ //return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b);
+ return this.get_text(a) > this.get_text(b) ? 1 : -1;
+ };
+ $.jstree.plugins.sort = function (options, parent) {
+ this.bind = function () {
+ parent.bind.call(this);
+ this.element
+ .on("model.jstree", $.proxy(function (e, data) {
+ this.sort(data.parent, true);
+ }, this))
+ .on("rename_node.jstree create_node.jstree", $.proxy(function (e, data) {
+ this.sort(data.parent || data.node.parent, false);
+ this.redraw_node(data.parent || data.node.parent, true);
+ }, this))
+ .on("move_node.jstree copy_node.jstree", $.proxy(function (e, data) {
+ this.sort(data.parent, false);
+ this.redraw_node(data.parent, true);
+ }, this));
+ };
+ /**
+ * used to sort a node's children
+ * @private
+ * @name sort(obj [, deep])
+ * @param {mixed} obj the node
+ * @param {Boolean} deep if set to `true` nodes are sorted recursively.
+ * @plugin sort
+ * @trigger search.jstree
+ */
+ this.sort = function (obj, deep) {
+ var i, j;
+ obj = this.get_node(obj);
+ if(obj && obj.children && obj.children.length) {
+ obj.children.sort($.proxy(this.settings.sort, this));
+ if(deep) {
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ this.sort(obj.children_d[i], false);
+ }
+ }
+ }
+ };
+ };
+
+ // include the sort plugin by default
+ // $.jstree.defaults.plugins.push("sort");
+
+/**
+ * ### State plugin
+ *
+ * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc)
+ */
+
+ var to = false;
+ /**
+ * stores all defaults for the state plugin
+ * @name $.jstree.defaults.state
+ * @plugin state
+ */
+ $.jstree.defaults.state = {
+ /**
+ * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`.
+ * @name $.jstree.defaults.state.key
+ * @plugin state
+ */
+ key : 'jstree',
+ /**
+ * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`.
+ * @name $.jstree.defaults.state.events
+ * @plugin state
+ */
+ events : 'changed.jstree open_node.jstree close_node.jstree',
+ /**
+ * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire.
+ * @name $.jstree.defaults.state.ttl
+ * @plugin state
+ */
+ ttl : false,
+ /**
+ * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state.
+ * @name $.jstree.defaults.state.filter
+ * @plugin state
+ */
+ filter : false
+ };
+ $.jstree.plugins.state = function (options, parent) {
+ this.bind = function () {
+ parent.bind.call(this);
+ var bind = $.proxy(function () {
+ this.element.on(this.settings.state.events, $.proxy(function () {
+ if(to) { clearTimeout(to); }
+ to = setTimeout($.proxy(function () { this.save_state(); }, this), 100);
+ }, this));
+ }, this);
+ this.element
+ .on("ready.jstree", $.proxy(function (e, data) {
+ this.element.one("restore_state.jstree", bind);
+ if(!this.restore_state()) { bind(); }
+ }, this));
+ };
+ /**
+ * save the state
+ * @name save_state()
+ * @plugin state
+ */
+ this.save_state = function () {
+ var st = { 'state' : this.get_state(), 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };
+ $.vakata.storage.set(this.settings.state.key, JSON.stringify(st));
+ };
+ /**
+ * restore the state from the user's computer
+ * @name restore_state()
+ * @plugin state
+ */
+ this.restore_state = function () {
+ var k = $.vakata.storage.get(this.settings.state.key);
+ if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } }
+ if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; }
+ if(!!k && k.state) { k = k.state; }
+ if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }
+ if(!!k) {
+ this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });
+ this.set_state(k);
+ return true;
+ }
+ return false;
+ };
+ /**
+ * clear the state on the user's computer
+ * @name clear_state()
+ * @plugin state
+ */
+ this.clear_state = function () {
+ return $.vakata.storage.del(this.settings.state.key);
+ };
+ };
+
+ (function ($, undefined) {
+ $.vakata.storage = {
+ // simply specifying the functions in FF throws an error
+ set : function (key, val) { return window.localStorage.setItem(key, val); },
+ get : function (key) { return window.localStorage.getItem(key); },
+ del : function (key) { return window.localStorage.removeItem(key); }
+ };
+ }($));
+
+ // include the state plugin by default
+ // $.jstree.defaults.plugins.push("state");
+
+/**
+ * ### Types plugin
+ *
+ * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group.
+ */
+
+ /**
+ * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional).
+ *
+ * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited.
+ * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.
+ * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.
+ * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.
+ *
+ * There are two predefined types:
+ *
+ * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes.
+ * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified.
+ *
+ * @name $.jstree.defaults.types
+ * @plugin types
+ */
+ $.jstree.defaults.types = {
+ '#' : {},
+ 'default' : {}
+ };
+
+ $.jstree.plugins.types = function (options, parent) {
+ this.init = function (el, options) {
+ var i, j;
+ if(options && options.types && options.types['default']) {
+ for(i in options.types) {
+ if(i !== "default" && i !== "#" && options.types.hasOwnProperty(i)) {
+ for(j in options.types['default']) {
+ if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {
+ options.types[i][j] = options.types['default'][j];
+ }
+ }
+ }
+ }
+ }
+ parent.init.call(this, el, options);
+ this._model.data['#'].type = '#';
+ };
+ this.refresh = function (skip_loading, forget_state) {
+ parent.refresh.call(this, skip_loading, forget_state);
+ this._model.data['#'].type = '#';
+ };
+ this.bind = function () {
+ this.element
+ .on('model.jstree', $.proxy(function (e, data) {
+ var m = this._model.data,
+ dpc = data.nodes,
+ t = this.settings.types,
+ i, j, c = 'default';
+ for(i = 0, j = dpc.length; i < j; i++) {
+ c = 'default';
+ if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {
+ c = m[dpc[i]].original.type;
+ }
+ if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {
+ c = m[dpc[i]].data.jstree.type;
+ }
+ m[dpc[i]].type = c;
+ if(m[dpc[i]].icon === true && t[c].icon !== undefined) {
+ m[dpc[i]].icon = t[c].icon;
+ }
+ }
+ m['#'].type = '#';
+ }, this));
+ parent.bind.call(this);
+ };
+ this.get_json = function (obj, options, flat) {
+ var i, j,
+ m = this._model.data,
+ opt = options ? $.extend(true, {}, options, {no_id:false}) : {},
+ tmp = parent.get_json.call(this, obj, opt, flat);
+ if(tmp === false) { return false; }
+ if($.isArray(tmp)) {
+ for(i = 0, j = tmp.length; i < j; i++) {
+ tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default";
+ if(options && options.no_id) {
+ delete tmp[i].id;
+ if(tmp[i].li_attr && tmp[i].li_attr.id) {
+ delete tmp[i].li_attr.id;
+ }
+ if(tmp[i].a_attr && tmp[i].a_attr.id) {
+ delete tmp[i].a_attr.id;
+ }
+ }
+ }
+ }
+ else {
+ tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default";
+ if(options && options.no_id) {
+ tmp = this._delete_ids(tmp);
+ }
+ }
+ return tmp;
+ };
+ this._delete_ids = function (tmp) {
+ if($.isArray(tmp)) {
+ for(var i = 0, j = tmp.length; i < j; i++) {
+ tmp[i] = this._delete_ids(tmp[i]);
+ }
+ return tmp;
+ }
+ delete tmp.id;
+ if(tmp.li_attr && tmp.li_attr.id) {
+ delete tmp.li_attr.id;
+ }
+ if(tmp.a_attr && tmp.a_attr.id) {
+ delete tmp.a_attr.id;
+ }
+ if(tmp.children && $.isArray(tmp.children)) {
+ tmp.children = this._delete_ids(tmp.children);
+ }
+ return tmp;
+ };
+ this.check = function (chk, obj, par, pos, more) {
+ if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
+ obj = obj && obj.id ? obj : this.get_node(obj);
+ par = par && par.id ? par : this.get_node(par);
+ var m = obj && obj.id ? $.jstree.reference(obj.id) : null, tmp, d, i, j;
+ m = m && m._model && m._model.data ? m._model.data : null;
+ switch(chk) {
+ case "create_node":
+ case "move_node":
+ case "copy_node":
+ if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {
+ tmp = this.get_rules(par);
+ if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ return false;
+ }
+ if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ return false;
+ }
+ if(m && obj.children_d && obj.parents) {
+ d = 0;
+ for(i = 0, j = obj.children_d.length; i < j; i++) {
+ d = Math.max(d, m[obj.children_d[i]].parents.length);
+ }
+ d = d - obj.parents.length + 1;
+ }
+ if(d <= 0 || d === undefined) { d = 1; }
+ do {
+ if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ return false;
+ }
+ par = this.get_node(par.parent);
+ tmp = this.get_rules(par);
+ d++;
+ } while(par);
+ }
+ break;
+ }
+ return true;
+ };
+ /**
+ * used to retrieve the type settings object for a node
+ * @name get_rules(obj)
+ * @param {mixed} obj the node to find the rules for
+ * @return {Object}
+ * @plugin types
+ */
+ this.get_rules = function (obj) {
+ obj = this.get_node(obj);
+ if(!obj) { return false; }
+ var tmp = this.get_type(obj, true);
+ if(tmp.max_depth === undefined) { tmp.max_depth = -1; }
+ if(tmp.max_children === undefined) { tmp.max_children = -1; }
+ if(tmp.valid_children === undefined) { tmp.valid_children = -1; }
+ return tmp;
+ };
+ /**
+ * used to retrieve the type string or settings object for a node
+ * @name get_type(obj [, rules])
+ * @param {mixed} obj the node to find the rules for
+ * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned
+ * @return {String|Object}
+ * @plugin types
+ */
+ this.get_type = function (obj, rules) {
+ obj = this.get_node(obj);
+ return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);
+ };
+ /**
+ * used to change a node's type
+ * @name set_type(obj, type)
+ * @param {mixed} obj the node to change
+ * @param {String} type the new type
+ * @plugin types
+ */
+ this.set_type = function (obj, type) {
+ var t, t1, t2, old_type, old_icon;
+ if($.isArray(obj)) {
+ obj = obj.slice();
+ for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
+ this.set_type(obj[t1], type);
+ }
+ return true;
+ }
+ t = this.settings.types;
+ obj = this.get_node(obj);
+ if(!t[type] || !obj) { return false; }
+ old_type = obj.type;
+ old_icon = this.get_icon(obj);
+ obj.type = type;
+ if(old_icon === true || (t[old_type] && t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {
+ this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);
+ }
+ return true;
+ };
+ };
+ // include the types plugin by default
+ // $.jstree.defaults.plugins.push("types");
+
+/**
+ * ### Unique plugin
+ *
+ * Enforces that no nodes with the same name can coexist as siblings.
+ */
+
+ /**
+ * stores all defaults for the unique plugin
+ * @name $.jstree.defaults.unique
+ * @plugin unique
+ */
+ $.jstree.defaults.unique = {
+ /**
+ * Indicates if the comparison should be case sensitive. Default is `false`.
+ * @name $.jstree.defaults.unique.case_sensitive
+ * @plugin unique
+ */
+ case_sensitive : false,
+ /**
+ * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`.
+ * @name $.jstree.defaults.unique.duplicate
+ * @plugin unique
+ */
+ duplicate : function (name, counter) {
+ return name + ' (' + counter + ')';
+ }
+ };
+
+ $.jstree.plugins.unique = function (options, parent) {
+ this.check = function (chk, obj, par, pos, more) {
+ if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
+ obj = obj && obj.id ? obj : this.get_node(obj);
+ par = par && par.id ? par : this.get_node(par);
+ if(!par || !par.children) { return true; }
+ var n = chk === "rename_node" ? pos : obj.text,
+ c = [],
+ s = this.settings.unique.case_sensitive,
+ m = this._model.data, i, j;
+ for(i = 0, j = par.children.length; i < j; i++) {
+ c.push(s ? m[par.children[i]].text : m[par.children[i]].text.toLowerCase());
+ }
+ if(!s) { n = n.toLowerCase(); }
+ switch(chk) {
+ case "delete_node":
+ return true;
+ case "rename_node":
+ i = ($.inArray(n, c) === -1 || (obj.text && obj.text[ s ? 'toString' : 'toLowerCase']() === n));
+ if(!i) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ }
+ return i;
+ case "create_node":
+ i = ($.inArray(n, c) === -1);
+ if(!i) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ }
+ return i;
+ case "copy_node":
+ i = ($.inArray(n, c) === -1);
+ if(!i) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ }
+ return i;
+ case "move_node":
+ i = (obj.parent === par.id || $.inArray(n, c) === -1);
+ if(!i) {
+ this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
+ }
+ return i;
+ }
+ return true;
+ };
+ this.create_node = function (par, node, pos, callback, is_loaded) {
+ if(!node || node.text === undefined) {
+ if(par === null) {
+ par = "#";
+ }
+ par = this.get_node(par);
+ if(!par) {
+ return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+ }
+ pos = pos === undefined ? "last" : pos;
+ if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
+ return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+ }
+ if(!node) { node = {}; }
+ var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, cb = this.settings.unique.duplicate;
+ n = tmp = this.get_string('New node');
+ dpc = [];
+ for(i = 0, j = par.children.length; i < j; i++) {
+ dpc.push(s ? m[par.children[i]].text : m[par.children[i]].text.toLowerCase());
+ }
+ i = 1;
+ while($.inArray(s ? n : n.toLowerCase(), dpc) !== -1) {
+ n = cb.call(this, tmp, (++i)).toString();
+ }
+ node.text = n;
+ }
+ return parent.create_node.call(this, par, node, pos, callback, is_loaded);
+ };
+ };
+
+ // include the unique plugin by default
+ // $.jstree.defaults.plugins.push("unique");
+
+
+/**
+ * ### Wholerow plugin
+ *
+ * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers.
+ */
+
+ var div = document.createElement('DIV');
+ div.setAttribute('unselectable','on');
+ div.setAttribute('role','presentation');
+ div.className = 'jstree-wholerow';
+ div.innerHTML = ' ';
+ $.jstree.plugins.wholerow = function (options, parent) {
+ this.bind = function () {
+ parent.bind.call(this);
+
+ this.element
+ .on('ready.jstree set_state.jstree', $.proxy(function () {
+ this.hide_dots();
+ }, this))
+ .on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
+ //div.style.height = this._data.core.li_height + 'px';
+ this.get_container_ul().addClass('jstree-wholerow-ul');
+ }, this))
+ .on("deselect_all.jstree", $.proxy(function (e, data) {
+ this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
+ }, this))
+ .on("changed.jstree", $.proxy(function (e, data) {
+ this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
+ var tmp = false, i, j;
+ for(i = 0, j = data.selected.length; i < j; i++) {
+ tmp = this.get_node(data.selected[i], true);
+ if(tmp && tmp.length) {
+ tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
+ }
+ }
+ }, this))
+ .on("open_node.jstree", $.proxy(function (e, data) {
+ this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
+ }, this))
+ .on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) {
+ if(e.type === "hover_node" && this.is_disabled(data.node)) { return; }
+ this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered');
+ }, this))
+ .on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) {
+ e.preventDefault();
+ var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });
+ $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp);
+ }, this))
+ .on("click.jstree", ".jstree-wholerow", function (e) {
+ e.stopImmediatePropagation();
+ var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
+ $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
+ })
+ .on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) {
+ e.stopImmediatePropagation();
+ var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
+ $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
+ }, this))
+ .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) {
+ e.stopImmediatePropagation();
+ if(!this.is_disabled(e.currentTarget)) {
+ this.hover_node(e.currentTarget);
+ }
+ return false;
+ }, this))
+ .on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) {
+ this.dehover_node(e.currentTarget);
+ }, this));
+ };
+ this.teardown = function () {
+ if(this.settings.wholerow) {
+ this.element.find(".jstree-wholerow").remove();
+ }
+ parent.teardown.call(this);
+ };
+ this.redraw_node = function(obj, deep, callback, force_render) {
+ obj = parent.redraw_node.apply(this, arguments);
+ if(obj) {
+ var tmp = div.cloneNode(true);
+ //tmp.style.height = this._data.core.li_height + 'px';
+ if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }
+ if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }
+ obj.insertBefore(tmp, obj.childNodes[0]);
+ }
+ return obj;
+ };
+ };
+ // include the wholerow plugin by default
+ // $.jstree.defaults.plugins.push("wholerow");
+
+
+(function ($) {
+ if(document.registerElement && Object && Object.create) {
+ var proto = Object.create(HTMLElement.prototype);
+ proto.createdCallback = function () {
+ var c = { core : {}, plugins : [] }, i;
+ for(i in $.jstree.plugins) {
+ if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) {
+ c.plugins.push(i);
+ if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) {
+ c[i] = JSON.parse(this.getAttribute(i));
+ }
+ }
+ }
+ for(i in $.jstree.defaults.core) {
+ if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) {
+ c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i);
+ }
+ }
+ jQuery(this).jstree(c);
+ };
+ // proto.attributeChangedCallback = function (name, previous, value) { };
+ try {
+ document.registerElement("vakata-jstree", { prototype: proto });
+ } catch(ignore) { }
+ }
+}(jQuery));
+}));
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/jstree.min.js b/dashboard-ui/thirdparty/jstree3.0.8/jstree.min.js
new file mode 100644
index 000000000..1c455cdf7
--- /dev/null
+++ b/dashboard-ui/thirdparty/jstree3.0.8/jstree.min.js
@@ -0,0 +1,5 @@
+/*! jsTree - v3.0.8 - 2014-10-23 - (MIT) */
+(function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(jQuery)})(function(e,t){"use strict";if(!e.jstree){var i=0,r=!1,s=!1,n=!1,a=[],d=e("script:last").attr("src"),o=document,c=o.createElement("LI"),l,h;c.setAttribute("role","treeitem"),l=o.createElement("I"),l.className="jstree-icon jstree-ocl",l.setAttribute("role","presentation"),c.appendChild(l),l=o.createElement("A"),l.className="jstree-anchor",l.setAttribute("href","#"),l.setAttribute("tabindex","-1"),h=o.createElement("I"),h.className="jstree-icon jstree-themeicon",h.setAttribute("role","presentation"),l.appendChild(h),c.appendChild(l),l=h=null,e.jstree={version:"3.0.8",defaults:{plugins:[]},plugins:{},path:d&&-1!==d.indexOf("/")?d.replace(/\/[^\/]+$/,""):"",idregex:/[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%]/g},e.jstree.create=function(t,r){var s=new e.jstree.core(++i),n=r;return r=e.extend(!0,{},e.jstree.defaults,r),n&&n.plugins&&(r.plugins=n.plugins),e.each(r.plugins,function(e,t){"core"!==e&&(s=s.plugin(t,r[t]))}),s.init(t,r),s},e.jstree.destroy=function(){e(".jstree:jstree").jstree("destroy"),e(document).off(".jstree")},e.jstree.core=function(e){this._id=e,this._cnt=0,this._wrk=null,this._data={core:{themes:{name:!1,dots:!1,icons:!1},selected:[],last_error:{},working:!1,worker_queue:[],focused:null}}},e.jstree.reference=function(i){var r=null,s=null;if(i&&i.id&&(i=i.id),!s||!s.length)try{s=e(i)}catch(n){}if(!s||!s.length)try{s=e("#"+i.replace(e.jstree.idregex,"\\$&"))}catch(n){}return s&&s.length&&(s=s.closest(".jstree")).length&&(s=s.data("jstree"))?r=s:e(".jstree").each(function(){var s=e(this).data("jstree");return s&&s._model.data[i]?(r=s,!1):t}),r},e.fn.jstree=function(i){var r="string"==typeof i,s=Array.prototype.slice.call(arguments,1),n=null;return i!==!0||this.length?(this.each(function(){var a=e.jstree.reference(this),d=r&&a?a[i]:null;return n=r&&d?d.apply(a,s):null,a||r||i!==t&&!e.isPlainObject(i)||e(this).data("jstree",new e.jstree.create(this,i)),(a&&!r||i===!0)&&(n=a||!1),null!==n&&n!==t?!1:t}),null!==n&&n!==t?n:this):!1},e.expr[":"].jstree=e.expr.createPseudo(function(i){return function(i){return e(i).hasClass("jstree")&&e(i).data("jstree")!==t}}),e.jstree.defaults.core={data:!1,strings:!1,check_callback:!1,error:e.noop,animation:200,multiple:!0,themes:{name:!1,url:!1,dir:!1,dots:!0,icons:!0,stripes:!1,variant:!1,responsive:!1},expand_selected_onload:!0,worker:!0,force_text:!1},e.jstree.core.prototype={plugin:function(t,i){var r=e.jstree.plugins[t];return r?(this._data[t]={},r.prototype=this,new r(i,this)):this},init:function(t,i){this._model={data:{"#":{id:"#",parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}}},changed:[],force_full_redraw:!1,redraw_timeout:!1,default_state:{loaded:!0,opened:!1,selected:!1,disabled:!1}},this.element=e(t).addClass("jstree jstree-"+this._id),this.settings=i,this.element.bind("destroyed",e.proxy(this.teardown,this)),this._data.core.ready=!1,this._data.core.loaded=!1,this._data.core.rtl="rtl"===this.element.css("direction"),this.element[this._data.core.rtl?"addClass":"removeClass"]("jstree-rtl"),this.element.attr("role","tree"),this.settings.core.multiple&&this.element.attr("aria-multiselectable",!0),this.element.attr("tabindex")||this.element.attr("tabindex","0"),this.bind(),this.trigger("init"),this._data.core.original_container_html=this.element.find(" > ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html(" <"+"a class='jstree-anchor' href='#'> "+this.get_string("Loading ...")+" "),this.element.attr("aria-activedescendant","j"+this._id+"_loading"),this._data.core.li_height=this.get_container_ul().children("li").first().height()||24,this.trigger("loading"),this.load_node("#")},destroy:function(e){if(this._wrk)try{window.URL.revokeObjectURL(this._wrk),this._wrk=null}catch(t){}e||this.element.empty(),this.element.unbind("destroyed",this.teardown),this.teardown()},teardown:function(){this.unbind(),this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/gi,"")}),this.element=null},bind:function(){var i="",r=null;this.element.on("dblclick.jstree",function(){if(document.selection&&document.selection.empty)document.selection.empty();else if(window.getSelection){var e=window.getSelection();try{e.removeAllRanges(),e.collapse()}catch(t){}}}).on("click.jstree",".jstree-ocl",e.proxy(function(e){this.toggle_node(e.target)},this)).on("click.jstree",".jstree-anchor",e.proxy(function(t){t.preventDefault(),t.currentTarget!==document.activeElement&&e(t.currentTarget).focus(),this.activate_node(t.currentTarget,t)},this)).on("keydown.jstree",".jstree-anchor",e.proxy(function(t){if("INPUT"===t.target.tagName)return!0;var i=null;switch(this._data.core.rtl&&(37===t.which?t.which=39:39===t.which&&(t.which=37)),t.which){case 32:t.ctrlKey&&(t.type="click",e(t.currentTarget).trigger(t));break;case 13:t.type="click",e(t.currentTarget).trigger(t);break;case 37:t.preventDefault(),this.is_open(t.currentTarget)?this.close_node(t.currentTarget):(i=this.get_parent(t.currentTarget),i&&"#"!==i.id&&this.get_node(i,!0).children(".jstree-anchor").focus());break;case 38:t.preventDefault(),i=this.get_prev_dom(t.currentTarget),i&&i.length&&i.children(".jstree-anchor").focus();break;case 39:t.preventDefault(),this.is_closed(t.currentTarget)?this.open_node(t.currentTarget,function(e){this.get_node(e,!0).children(".jstree-anchor").focus()}):this.is_open(t.currentTarget)&&(i=this.get_node(t.currentTarget,!0).children(".jstree-children")[0],i&&e(this._firstChild(i)).children(".jstree-anchor").focus());break;case 40:t.preventDefault(),i=this.get_next_dom(t.currentTarget),i&&i.length&&i.children(".jstree-anchor").focus();break;case 106:this.open_all();break;case 36:t.preventDefault(),i=this._firstChild(this.get_container_ul()[0]),i&&e(i).children(".jstree-anchor").filter(":visible").focus();break;case 35:t.preventDefault(),this.element.find(".jstree-anchor").filter(":visible").last().focus()}},this)).on("load_node.jstree",e.proxy(function(t,i){if(i.status&&("#"!==i.node.id||this._data.core.loaded||(this._data.core.loaded=!0,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.trigger("loaded")),!this._data.core.ready&&!this.get_container_ul().find(".jstree-loading").length)){if(this._data.core.ready=!0,this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var r=[],s,n;for(s=0,n=this._data.core.selected.length;n>s;s++)r=r.concat(this._model.data[this._data.core.selected[s]].parents);for(r=e.vakata.array_unique(r),s=0,n=r.length;n>s;s++)this.open_node(r[s],!1,0)}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}setTimeout(e.proxy(function(){this.trigger("ready")},this),0)}},this)).on("keypress.jstree",e.proxy(function(s){if("INPUT"===s.target.tagName)return!0;r&&clearTimeout(r),r=setTimeout(function(){i=""},500);var n=String.fromCharCode(s.which).toLowerCase(),a=this.element.find(".jstree-anchor").filter(":visible"),d=a.index(document.activeElement)||0,o=!1;if(i+=n,i.length>1){if(a.slice(d).each(e.proxy(function(r,s){return 0===e(s).text().toLowerCase().indexOf(i)?(e(s).focus(),o=!0,!1):t},this)),o)return;if(a.slice(0,d).each(e.proxy(function(r,s){return 0===e(s).text().toLowerCase().indexOf(i)?(e(s).focus(),o=!0,!1):t},this)),o)return}if(RegExp("^"+n+"+$").test(i)){if(a.slice(d+1).each(e.proxy(function(i,r){return e(r).text().toLowerCase().charAt(0)===n?(e(r).focus(),o=!0,!1):t},this)),o)return;if(a.slice(0,d+1).each(e.proxy(function(i,r){return e(r).text().toLowerCase().charAt(0)===n?(e(r).focus(),o=!0,!1):t},this)),o)return}},this)).on("init.jstree",e.proxy(function(){var e=this.settings.core.themes;this._data.core.themes.dots=e.dots,this._data.core.themes.stripes=e.stripes,this._data.core.themes.icons=e.icons,this.set_theme(e.name||"default",e.url),this.set_theme_variant(e.variant)},this)).on("loading.jstree",e.proxy(function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"](),this[this._data.core.themes.icons?"show_icons":"hide_icons"](),this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"]()},this)).on("blur.jstree",".jstree-anchor",e.proxy(function(t){this._data.core.focused=null,e(t.currentTarget).filter(".jstree-hovered").mouseleave()},this)).on("focus.jstree",".jstree-anchor",e.proxy(function(t){var i=this.get_node(t.currentTarget);i&&i.id&&(this._data.core.focused=i.id),this.element.find(".jstree-hovered").not(t.currentTarget).mouseleave(),e(t.currentTarget).mouseenter()},this)).on("focus.jstree",e.proxy(function(){this._data.core.focused||this.get_node(this.element.attr("aria-activedescendant"),!0).find("> .jstree-anchor").focus()},this)).on("mouseenter.jstree",".jstree-anchor",e.proxy(function(e){this.hover_node(e.currentTarget)},this)).on("mouseleave.jstree",".jstree-anchor",e.proxy(function(e){this.dehover_node(e.currentTarget)},this))},unbind:function(){this.element.off(".jstree"),e(document).off(".jstree-"+this._id)},trigger:function(e,t){t||(t={}),t.instance=this,this.element.triggerHandler(e.replace(".jstree","")+".jstree",t)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children(".jstree-children").first()},get_string:function(t){var i=this.settings.core.strings;return e.isFunction(i)?i.call(this,t):i&&i[t]?i[t]:t},_firstChild:function(e){e=e?e.firstChild:null;while(null!==e&&1!==e.nodeType)e=e.nextSibling;return e},_nextSibling:function(e){e=e?e.nextSibling:null;while(null!==e&&1!==e.nodeType)e=e.nextSibling;return e},_previousSibling:function(e){e=e?e.previousSibling:null;while(null!==e&&1!==e.nodeType)e=e.previousSibling;return e},get_node:function(t,i){t&&t.id&&(t=t.id);var r;try{if(this._model.data[t])t=this._model.data[t];else if("string"==typeof t&&this._model.data[t.replace(/^#/,"")])t=this._model.data[t.replace(/^#/,"")];else if("string"==typeof t&&(r=e("#"+t.replace(e.jstree.idregex,"\\$&"),this.element)).length&&this._model.data[r.closest(".jstree-node").attr("id")])t=this._model.data[r.closest(".jstree-node").attr("id")];else if((r=e(t,this.element)).length&&this._model.data[r.closest(".jstree-node").attr("id")])t=this._model.data[r.closest(".jstree-node").attr("id")];else{if(!(r=e(t,this.element)).length||!r.hasClass("jstree"))return!1;t=this._model.data["#"]}return i&&(t="#"===t.id?this.element:e("#"+t.id.replace(e.jstree.idregex,"\\$&"),this.element)),t}catch(s){return!1}},get_path:function(e,t,i){if(e=e.parents?e:this.get_node(e),!e||"#"===e.id||!e.parents)return!1;var r,s,n=[];for(n.push(i?e.id:e.text),r=0,s=e.parents.length;s>r;r++)n.push(i?e.parents[r]:this.get_text(e.parents[r]));return n=n.reverse().slice(1),t?n.join(t):n},get_next_dom:function(t,i){var r;if(t=this.get_node(t,!0),t[0]===this.element[0]){r=this._firstChild(this.get_container_ul()[0]);while(r&&0===r.offsetHeight)r=this._nextSibling(r);return r?e(r):!1}if(!t||!t.length)return!1;if(i){r=t[0];do r=this._nextSibling(r);while(r&&0===r.offsetHeight);return r?e(r):!1}if(t.hasClass("jstree-open")){r=this._firstChild(t.children(".jstree-children")[0]);while(r&&0===r.offsetHeight)r=this._nextSibling(r);if(null!==r)return e(r)}r=t[0];do r=this._nextSibling(r);while(r&&0===r.offsetHeight);return null!==r?e(r):t.parentsUntil(".jstree",".jstree-node").next(".jstree-node:visible").first()},get_prev_dom:function(t,i){var r;if(t=this.get_node(t,!0),t[0]===this.element[0]){r=this.get_container_ul()[0].lastChild;while(r&&0===r.offsetHeight)r=this._previousSibling(r);return r?e(r):!1}if(!t||!t.length)return!1;if(i){r=t[0];do r=this._previousSibling(r);while(r&&0===r.offsetHeight);return r?e(r):!1}r=t[0];do r=this._previousSibling(r);while(r&&0===r.offsetHeight);if(null!==r){t=e(r);while(t.hasClass("jstree-open"))t=t.children(".jstree-children").first().children(".jstree-node:visible:last");return t}return r=t[0].parentNode.parentNode,r&&r.className&&-1!==r.className.indexOf("jstree-node")?e(r):!1},get_parent:function(e){return e=this.get_node(e),e&&"#"!==e.id?e.parent:!1},get_children_dom:function(e){return e=this.get_node(e,!0),e[0]===this.element[0]?this.get_container_ul().children(".jstree-node"):e&&e.length?e.children(".jstree-children").children(".jstree-node"):!1},is_parent:function(e){return e=this.get_node(e),e&&(e.state.loaded===!1||e.children.length>0)},is_loaded:function(e){return e=this.get_node(e),e&&e.state.loaded},is_loading:function(e){return e=this.get_node(e),e&&e.state&&e.state.loading},is_open:function(e){return e=this.get_node(e),e&&e.state.opened},is_closed:function(e){return e=this.get_node(e),e&&this.is_parent(e)&&!e.state.opened},is_leaf:function(e){return!this.is_parent(e)},load_node:function(t,i){var r,s,n,a,d;if(e.isArray(t))return this._load_nodes(t.slice(),i),!0;if(t=this.get_node(t),!t)return i&&i.call(this,t,!1),!1;if(t.state.loaded){for(t.state.loaded=!1,r=0,s=t.children_d.length;s>r;r++){for(n=0,a=t.parents.length;a>n;n++)this._model.data[t.parents[n]].children_d=e.vakata.array_remove_item(this._model.data[t.parents[n]].children_d,t.children_d[r]);this._model.data[t.children_d[r]].state.selected&&(d=!0,this._data.core.selected=e.vakata.array_remove_item(this._data.core.selected,t.children_d[r])),delete this._model.data[t.children_d[r]]}t.children=[],t.children_d=[],d&&this.trigger("changed",{action:"load_node",node:t,selected:this._data.core.selected})}return t.state.loading=!0,this.get_node(t,!0).addClass("jstree-loading").attr("aria-busy",!0),this._load_node(t,e.proxy(function(e){t=this._model.data[t.id],t.state.loading=!1,t.state.loaded=e;var r=this.get_node(t,!0);t.state.loaded&&!t.children.length&&r&&r.length&&!r.hasClass("jstree-leaf")&&r.removeClass("jstree-closed jstree-open").addClass("jstree-leaf"),r.removeClass("jstree-loading").attr("aria-busy",!1),this.trigger("load_node",{node:t,status:e}),i&&i.call(this,t,e)},this)),!0},_load_nodes:function(e,t,i){var r=!0,s=function(){this._load_nodes(e,t,!0)},n=this._model.data,a,d;for(a=0,d=e.length;d>a;a++)!n[e[a]]||n[e[a]].state.loaded&&i||(this.is_loading(e[a])||this.load_node(e[a],s),r=!1);r&&t&&!t.done&&(t.call(this,e),t.done=!0)},load_all:function(e,t){if(e||(e="#"),e=this.get_node(e),!e)return!1;var i=[],r=this._model.data,s=r[e.id].children_d,n,a;for(e.state&&!e.state.loaded&&i.push(e.id),n=0,a=s.length;a>n;n++)r[s[n]]&&r[s[n]].state&&!r[s[n]].state.loaded&&i.push(s[n]);i.length?this._load_nodes(i,function(){this.load_all(e,t)}):(t&&t.call(this,e),this.trigger("load_all",{node:e}))},_load_node:function(t,i){var r=this.settings.core.data,s;return r?e.isFunction(r)?r.call(this,t,e.proxy(function(r){r===!1&&i.call(this,!1),this["string"==typeof r?"_append_html_data":"_append_json_data"](t,"string"==typeof r?e(r):r,function(e){i.call(this,e)})},this)):"object"==typeof r?r.url?(r=e.extend(!0,{},r),e.isFunction(r.url)&&(r.url=r.url.call(this,t)),e.isFunction(r.data)&&(r.data=r.data.call(this,t)),e.ajax(r).done(e.proxy(function(r,s,n){var a=n.getResponseHeader("Content-Type");return-1!==a.indexOf("json")||"object"==typeof r?this._append_json_data(t,r,function(e){i.call(this,e)}):-1!==a.indexOf("html")||"string"==typeof r?this._append_html_data(t,e(r),function(e){i.call(this,e)}):(this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:t.id,xhr:n})},this.settings.core.error.call(this,this._data.core.last_error),i.call(this,!1))},this)).fail(e.proxy(function(e){i.call(this,!1),this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:t.id,xhr:e})},this.settings.core.error.call(this,this._data.core.last_error)},this))):(s=e.isArray(r)||e.isPlainObject(r)?JSON.parse(JSON.stringify(r)):r,"#"===t.id?this._append_json_data(t,s,function(e){i.call(this,e)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:t.id})},this.settings.core.error.call(this,this._data.core.last_error),i.call(this,!1))):"string"==typeof r?"#"===t.id?this._append_html_data(t,e(r),function(e){i.call(this,e)}):(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:t.id})},this.settings.core.error.call(this,this._data.core.last_error),i.call(this,!1)):i.call(this,!1):"#"===t.id?this._append_html_data(t,this._data.core.original_container_html.clone(!0),function(e){i.call(this,e)}):i.call(this,!1)},_node_changed:function(e){e=this.get_node(e),e&&this._model.changed.push(e.id)},_append_html_data:function(t,i,r){t=this.get_node(t),t.children=[],t.children_d=[];var s=i.is("ul")?i.children():i,n=t.id,a=[],d=[],o=this._model.data,c=o[n],l=this._data.core.selected.length,h,_,u;for(s.each(e.proxy(function(t,i){h=this._parse_model_from_html(e(i),n,c.parents.concat()),h&&(a.push(h),d.push(h),o[h].children_d.length&&(d=d.concat(o[h].children_d)))},this)),c.children=a,c.children_d=d,_=0,u=c.parents.length;u>_;_++)o[c.parents[_]].children_d=o[c.parents[_]].children_d.concat(d);this.trigger("model",{nodes:d,parent:n}),"#"!==n?(this._node_changed(n),this.redraw()):(this.get_container_ul().children(".jstree-initial-node").remove(),this.redraw(!0)),this._data.core.selected.length!==l&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),r.call(this,!0)},_append_json_data:function(t,i,r,s){t=this.get_node(t),t.children=[],t.children_d=[],i.d&&(i=i.d,"string"==typeof i&&(i=JSON.parse(i))),e.isArray(i)||(i=[i]);var n=null,a={df:this._model.default_state,dat:i,par:t.id,m:this._model.data,t_id:this._id,t_cnt:this._cnt,sel:this._data.core.selected},d=function(e,t){e.data&&(e=e.data);var i=e.dat,r=e.par,s=[],n=[],a=[],d=e.df,o=e.t_id,c=e.t_cnt,l=e.m,h=l[r],_=e.sel,u,g,f,p,m=function(e,i,r){r=r?r.concat():[],i&&r.unshift(i);var s=""+e.id,n,o,c,h,_={id:s,text:e.text||"",icon:e.icon!==t?e.icon:!0,parent:i,parents:r,children:e.children||[],children_d:e.children_d||[],data:e.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(n in d)d.hasOwnProperty(n)&&(_.state[n]=d[n]);if(e&&e.data&&e.data.jstree&&e.data.jstree.icon&&(_.icon=e.data.jstree.icon),e&&e.data&&(_.data=e.data,e.data.jstree))for(n in e.data.jstree)e.data.jstree.hasOwnProperty(n)&&(_.state[n]=e.data.jstree[n]);if(e&&"object"==typeof e.state)for(n in e.state)e.state.hasOwnProperty(n)&&(_.state[n]=e.state[n]);if(e&&"object"==typeof e.li_attr)for(n in e.li_attr)e.li_attr.hasOwnProperty(n)&&(_.li_attr[n]=e.li_attr[n]);if(_.li_attr.id||(_.li_attr.id=s),e&&"object"==typeof e.a_attr)for(n in e.a_attr)e.a_attr.hasOwnProperty(n)&&(_.a_attr[n]=e.a_attr[n]);for(e&&e.children&&e.children===!0&&(_.state.loaded=!1,_.children=[],_.children_d=[]),l[_.id]=_,n=0,o=_.children.length;o>n;n++)c=m(l[_.children[n]],_.id,r),h=l[c],_.children_d.push(c),h.children_d.length&&(_.children_d=_.children_d.concat(h.children_d));return delete e.data,delete e.children,l[_.id].original=e,_.state.selected&&a.push(_.id),_.id},v=function(e,i,r){r=r?r.concat():[],i&&r.unshift(i);var s=!1,n,h,_,u,g;do s="j"+o+"_"+ ++c;while(l[s]);g={id:!1,text:"string"==typeof e?e:"",icon:"object"==typeof e&&e.icon!==t?e.icon:!0,parent:i,parents:r,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(n in d)d.hasOwnProperty(n)&&(g.state[n]=d[n]);if(e&&e.id&&(g.id=""+e.id),e&&e.text&&(g.text=e.text),e&&e.data&&e.data.jstree&&e.data.jstree.icon&&(g.icon=e.data.jstree.icon),e&&e.data&&(g.data=e.data,e.data.jstree))for(n in e.data.jstree)e.data.jstree.hasOwnProperty(n)&&(g.state[n]=e.data.jstree[n]);if(e&&"object"==typeof e.state)for(n in e.state)e.state.hasOwnProperty(n)&&(g.state[n]=e.state[n]);if(e&&"object"==typeof e.li_attr)for(n in e.li_attr)e.li_attr.hasOwnProperty(n)&&(g.li_attr[n]=e.li_attr[n]);if(g.li_attr.id&&!g.id&&(g.id=""+g.li_attr.id),g.id||(g.id=s),g.li_attr.id||(g.li_attr.id=g.id),e&&"object"==typeof e.a_attr)for(n in e.a_attr)e.a_attr.hasOwnProperty(n)&&(g.a_attr[n]=e.a_attr[n]);if(e&&e.children&&e.children.length){for(n=0,h=e.children.length;h>n;n++)_=v(e.children[n],g.id,r),u=l[_],g.children.push(_),u.children_d.length&&(g.children_d=g.children_d.concat(u.children_d));g.children_d=g.children_d.concat(g.children)}return e&&e.children&&e.children===!0&&(g.state.loaded=!1,g.children=[],g.children_d=[]),delete e.data,delete e.children,g.original=e,l[g.id]=g,g.state.selected&&a.push(g.id),g.id};if(i.length&&i[0].id!==t&&i[0].parent!==t){for(g=0,f=i.length;f>g;g++)i[g].children||(i[g].children=[]),l[""+i[g].id]=i[g];for(g=0,f=i.length;f>g;g++)l[""+i[g].parent].children.push(""+i[g].id),h.children_d.push(""+i[g].id);for(g=0,f=h.children.length;f>g;g++)u=m(l[h.children[g]],r,h.parents.concat()),n.push(u),l[u].children_d.length&&(n=n.concat(l[u].children_d));for(g=0,f=h.parents.length;f>g;g++)l[h.parents[g]].children_d=l[h.parents[g]].children_d.concat(n);p={cnt:c,mod:l,sel:_,par:r,dpc:n,add:a}}else{for(g=0,f=i.length;f>g;g++)u=v(i[g],r,h.parents.concat()),u&&(s.push(u),n.push(u),l[u].children_d.length&&(n=n.concat(l[u].children_d)));for(h.children=s,h.children_d=n,g=0,f=h.parents.length;f>g;g++)l[h.parents[g]].children_d=l[h.parents[g]].children_d.concat(n);p={cnt:c,mod:l,sel:_,par:r,dpc:n,add:a}}return"undefined"!=typeof window&&window.document!==t?p:(postMessage(p),t)},o=function(t,i){if(this._cnt=t.cnt,this._model.data=t.mod,i){var s,n,a=t.add,d=t.sel,o=this._data.core.selected.slice(),c=this._model.data;if(d.length!==o.length||e.vakata.array_unique(d.concat(o)).length!==d.length){for(s=0,n=d.length;n>s;s++)-1===e.inArray(d[s],a)&&-1===e.inArray(d[s],o)&&(c[d[s]].state.selected=!1);for(s=0,n=o.length;n>s;s++)-1===e.inArray(o[s],d)&&(c[o[s]].state.selected=!0)}}t.add.length&&(this._data.core.selected=this._data.core.selected.concat(t.add)),this.trigger("model",{nodes:t.dpc,parent:t.par}),"#"!==t.par?(this._node_changed(t.par),this.redraw()):this.redraw(!0),t.add.length&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),r.call(this,!0)};if(this.settings.core.worker&&window.Blob&&window.URL&&window.Worker)try{null===this._wrk&&(this._wrk=window.URL.createObjectURL(new window.Blob(["self.onmessage = "+(""+d)],{type:"text/javascript"}))),!this._data.core.working||s?(this._data.core.working=!0,n=new window.Worker(this._wrk),n.onmessage=e.proxy(function(e){o.call(this,e.data,!0);try{n.terminate(),n=null}catch(t){}this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1},this),a.par?n.postMessage(a):this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1):this._data.core.worker_queue.push([t,i,r,!0])}catch(c){o.call(this,d(a),!1),this._data.core.worker_queue.length?this._append_json_data.apply(this,this._data.core.worker_queue.shift()):this._data.core.working=!1}else o.call(this,d(a),!1)},_parse_model_from_html:function(i,r,s){s=s?[].concat(s):[],r&&s.unshift(r);var n,a,d=this._model.data,o={id:!1,text:!1,icon:!0,parent:r,parents:s,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1},c,l,h;for(c in this._model.default_state)this._model.default_state.hasOwnProperty(c)&&(o.state[c]=this._model.default_state[c]);if(l=e.vakata.attributes(i,!0),e.each(l,function(i,r){return r=e.trim(r),r.length?(o.li_attr[i]=r,"id"===i&&(o.id=""+r),t):!0}),l=i.children("a").first(),l.length&&(l=e.vakata.attributes(l,!0),e.each(l,function(t,i){i=e.trim(i),i.length&&(o.a_attr[t]=i)})),l=i.children("a").first().length?i.children("a").first().clone():i.clone(),l.children("ins, i, ul").remove(),l=l.html(),l=e("
").html(l),o.text=this.settings.core.force_text?l.text():l.html(),l=i.data(),o.data=l?e.extend(!0,{},l):null,o.state.opened=i.hasClass("jstree-open"),o.state.selected=i.children("a").hasClass("jstree-clicked"),o.state.disabled=i.children("a").hasClass("jstree-disabled"),o.data&&o.data.jstree)for(c in o.data.jstree)o.data.jstree.hasOwnProperty(c)&&(o.state[c]=o.data.jstree[c]);l=i.children("a").children(".jstree-themeicon"),l.length&&(o.icon=l.hasClass("jstree-themeicon-hidden")?!1:l.attr("rel")),o.state.icon&&(o.icon=o.state.icon),l=i.children("ul").children("li");do h="j"+this._id+"_"+ ++this._cnt;while(d[h]);return o.id=o.li_attr.id?""+o.li_attr.id:h,l.length?(l.each(e.proxy(function(t,i){n=this._parse_model_from_html(e(i),o.id,s),a=this._model.data[n],o.children.push(n),a.children_d.length&&(o.children_d=o.children_d.concat(a.children_d))},this)),o.children_d=o.children_d.concat(o.children)):i.hasClass("jstree-closed")&&(o.state.loaded=!1),o.li_attr["class"]&&(o.li_attr["class"]=o.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")),o.a_attr["class"]&&(o.a_attr["class"]=o.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")),d[o.id]=o,o.state.selected&&this._data.core.selected.push(o.id),o.id},_parse_model_from_flat_json:function(e,i,r){r=r?r.concat():[],i&&r.unshift(i);var s=""+e.id,n=this._model.data,a=this._model.default_state,d,o,c,l,h={id:s,text:e.text||"",icon:e.icon!==t?e.icon:!0,parent:i,parents:r,children:e.children||[],children_d:e.children_d||[],data:e.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(d in a)a.hasOwnProperty(d)&&(h.state[d]=a[d]);if(e&&e.data&&e.data.jstree&&e.data.jstree.icon&&(h.icon=e.data.jstree.icon),e&&e.data&&(h.data=e.data,e.data.jstree))for(d in e.data.jstree)e.data.jstree.hasOwnProperty(d)&&(h.state[d]=e.data.jstree[d]);if(e&&"object"==typeof e.state)for(d in e.state)e.state.hasOwnProperty(d)&&(h.state[d]=e.state[d]);if(e&&"object"==typeof e.li_attr)for(d in e.li_attr)e.li_attr.hasOwnProperty(d)&&(h.li_attr[d]=e.li_attr[d]);if(h.li_attr.id||(h.li_attr.id=s),e&&"object"==typeof e.a_attr)for(d in e.a_attr)e.a_attr.hasOwnProperty(d)&&(h.a_attr[d]=e.a_attr[d]);for(e&&e.children&&e.children===!0&&(h.state.loaded=!1,h.children=[],h.children_d=[]),n[h.id]=h,d=0,o=h.children.length;o>d;d++)c=this._parse_model_from_flat_json(n[h.children[d]],h.id,r),l=n[c],h.children_d.push(c),l.children_d.length&&(h.children_d=h.children_d.concat(l.children_d));return delete e.data,delete e.children,n[h.id].original=e,h.state.selected&&this._data.core.selected.push(h.id),h.id},_parse_model_from_json:function(e,i,r){r=r?r.concat():[],i&&r.unshift(i);var s=!1,n,a,d,o,c=this._model.data,l=this._model.default_state,h;do s="j"+this._id+"_"+ ++this._cnt;while(c[s]);h={id:!1,text:"string"==typeof e?e:"",icon:"object"==typeof e&&e.icon!==t?e.icon:!0,parent:i,parents:r,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(n in l)l.hasOwnProperty(n)&&(h.state[n]=l[n]);if(e&&e.id&&(h.id=""+e.id),e&&e.text&&(h.text=e.text),e&&e.data&&e.data.jstree&&e.data.jstree.icon&&(h.icon=e.data.jstree.icon),e&&e.data&&(h.data=e.data,e.data.jstree))for(n in e.data.jstree)e.data.jstree.hasOwnProperty(n)&&(h.state[n]=e.data.jstree[n]);if(e&&"object"==typeof e.state)for(n in e.state)e.state.hasOwnProperty(n)&&(h.state[n]=e.state[n]);if(e&&"object"==typeof e.li_attr)for(n in e.li_attr)e.li_attr.hasOwnProperty(n)&&(h.li_attr[n]=e.li_attr[n]);if(h.li_attr.id&&!h.id&&(h.id=""+h.li_attr.id),h.id||(h.id=s),h.li_attr.id||(h.li_attr.id=h.id),e&&"object"==typeof e.a_attr)for(n in e.a_attr)e.a_attr.hasOwnProperty(n)&&(h.a_attr[n]=e.a_attr[n]);if(e&&e.children&&e.children.length){for(n=0,a=e.children.length;a>n;n++)d=this._parse_model_from_json(e.children[n],h.id,r),o=c[d],h.children.push(d),o.children_d.length&&(h.children_d=h.children_d.concat(o.children_d));h.children_d=h.children_d.concat(h.children)}return e&&e.children&&e.children===!0&&(h.state.loaded=!1,h.children=[],h.children_d=[]),delete e.data,delete e.children,h.original=e,c[h.id]=h,h.state.selected&&this._data.core.selected.push(h.id),h.id},_redraw:function(){var e=this._model.force_full_redraw?this._model.data["#"].children.concat([]):this._model.changed.concat([]),t=document.createElement("UL"),i,r,s,n=this._data.core.focused;for(r=0,s=e.length;s>r;r++)i=this.redraw_node(e[r],!0,this._model.force_full_redraw),i&&this._model.force_full_redraw&&t.appendChild(i);this._model.force_full_redraw&&(t.className=this.get_container_ul()[0].className,t.setAttribute("role","group"),this.element.empty().append(t)),null!==n&&(i=this.get_node(n,!0),i&&i.length&&i.children(".jstree-anchor")[0]!==document.activeElement?i.children(".jstree-anchor").focus():this._data.core.focused=null),this._model.force_full_redraw=!1,this._model.changed=[],this.trigger("redraw",{nodes:e})},redraw:function(e){e&&(this._model.force_full_redraw=!0),this._redraw()},redraw_node:function(t,i,r,s){var n=this.get_node(t),a=!1,d=!1,o=!1,l=!1,h=!1,_=!1,u="",g=document,f=this._model.data,p=!1,m=!1,v=null;if(!n)return!1;if("#"===n.id)return this.redraw(!0);if(i=i||0===n.children.length,t=document.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(n.id[0])?"\\3"+n.id[0]+" "+n.id.substr(1).replace(e.jstree.idregex,"\\$&"):n.id.replace(e.jstree.idregex,"\\$&"))):document.getElementById(n.id))t=e(t),r||(a=t.parent().parent()[0],a===this.element[0]&&(a=null),d=t.index()),i||!n.children.length||t.children(".jstree-children").length||(i=!0),i||(o=t.children(".jstree-children")[0]),p=t.children(".jstree-anchor")[0]===document.activeElement,t.remove();else if(i=!0,!r){if(a="#"!==n.parent?e("#"+n.parent.replace(e.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===a||a&&f[n.parent].state.opened))return!1;d=e.inArray(n.id,null===a?f["#"].children:f[n.parent].children)}t=c.cloneNode(!0),u="jstree-node ";for(l in n.li_attr)if(n.li_attr.hasOwnProperty(l)){if("id"===l)continue;"class"!==l?t.setAttribute(l,n.li_attr[l]):u+=n.li_attr[l]}n.a_attr.id||(n.a_attr.id=n.id+"_anchor"),t.setAttribute("aria-selected",!!n.state.selected),t.setAttribute("aria-level",n.parents.length),t.setAttribute("aria-labelledby",n.a_attr.id),n.state.disabled&&t.setAttribute("aria-disabled",!0),n.state.loaded&&!n.children.length?u+=" jstree-leaf":(u+=n.state.opened&&n.state.loaded?" jstree-open":" jstree-closed",t.setAttribute("aria-expanded",n.state.opened&&n.state.loaded)),null!==n.parent&&f[n.parent].children[f[n.parent].children.length-1]===n.id&&(u+=" jstree-last"),t.id=n.id,t.className=u,u=(n.state.selected?" jstree-clicked":"")+(n.state.disabled?" jstree-disabled":"");for(h in n.a_attr)if(n.a_attr.hasOwnProperty(h)){if("href"===h&&"#"===n.a_attr[h])continue;"class"!==h?t.childNodes[1].setAttribute(h,n.a_attr[h]):u+=" "+n.a_attr[h]}if(u.length&&(t.childNodes[1].className="jstree-anchor "+u),(n.icon&&n.icon!==!0||n.icon===!1)&&(n.icon===!1?t.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===n.icon.indexOf("/")&&-1===n.icon.indexOf(".")?t.childNodes[1].childNodes[0].className+=" "+n.icon+" jstree-themeicon-custom":(t.childNodes[1].childNodes[0].style.backgroundImage="url("+n.icon+")",t.childNodes[1].childNodes[0].style.backgroundPosition="center center",t.childNodes[1].childNodes[0].style.backgroundSize="auto",t.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),this.settings.core.force_text?t.childNodes[1].appendChild(g.createTextNode(n.text)):t.childNodes[1].innerHTML+=n.text,i&&n.children.length&&(n.state.opened||s)&&n.state.loaded){for(_=g.createElement("UL"),_.setAttribute("role","group"),_.className="jstree-children",l=0,h=n.children.length;h>l;l++)_.appendChild(this.redraw_node(n.children[l],i,!0));t.appendChild(_)
+}if(o&&t.appendChild(o),!r){for(a||(a=this.element[0]),l=0,h=a.childNodes.length;h>l;l++)if(a.childNodes[l]&&a.childNodes[l].className&&-1!==a.childNodes[l].className.indexOf("jstree-children")){v=a.childNodes[l];break}v||(v=g.createElement("UL"),v.setAttribute("role","group"),v.className="jstree-children",a.appendChild(v)),a=v,a.childNodes.length>d?a.insertBefore(t,a.childNodes[d]):a.appendChild(t),p&&t.childNodes[1].focus()}return n.state.opened&&!n.state.loaded&&(n.state.opened=!1,setTimeout(e.proxy(function(){this.open_node(n.id,!1,0)},this),0)),t},open_node:function(i,r,s){var n,a,d,o;if(e.isArray(i)){for(i=i.slice(),n=0,a=i.length;a>n;n++)this.open_node(i[n],r,s);return!0}if(i=this.get_node(i),!i||"#"===i.id)return!1;if(s=s===t?this.settings.core.animation:s,!this.is_closed(i))return r&&r.call(this,i,!1),!1;if(this.is_loaded(i))d=this.get_node(i,!0),o=this,d.length&&(i.children.length&&!this._firstChild(d.children(".jstree-children")[0])&&(this.redraw_node(i,!0,!1,!0),d=this.get_node(i,!0)),s?(this.trigger("before_open",{node:i}),d.children(".jstree-children").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded",!0).children(".jstree-children").stop(!0,!0).slideDown(s,function(){this.style.display="",o.trigger("after_open",{node:i})})):(this.trigger("before_open",{node:i}),d[0].className=d[0].className.replace("jstree-closed","jstree-open"),d[0].setAttribute("aria-expanded",!0))),i.state.opened=!0,r&&r.call(this,i,!0),d.length||this.trigger("before_open",{node:i}),this.trigger("open_node",{node:i}),s&&d.length||this.trigger("after_open",{node:i});else{if(this.is_loading(i))return setTimeout(e.proxy(function(){this.open_node(i,r,s)},this),500);this.load_node(i,function(e,t){return t?this.open_node(e,r,s):r?r.call(this,e,!1):!1})}},_open_to:function(t){if(t=this.get_node(t),!t||"#"===t.id)return!1;var i,r,s=t.parents;for(i=0,r=s.length;r>i;i+=1)"#"!==i&&this.open_node(s[i],!1,0);return e("#"+t.id.replace(e.jstree.idregex,"\\$&"),this.element)},close_node:function(i,r){var s,n,a,d;if(e.isArray(i)){for(i=i.slice(),s=0,n=i.length;n>s;s++)this.close_node(i[s],r);return!0}return i=this.get_node(i),i&&"#"!==i.id?this.is_closed(i)?!1:(r=r===t?this.settings.core.animation:r,a=this,d=this.get_node(i,!0),d.length&&(r?d.children(".jstree-children").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded",!1).children(".jstree-children").stop(!0,!0).slideUp(r,function(){this.style.display="",d.children(".jstree-children").remove(),a.trigger("after_close",{node:i})}):(d[0].className=d[0].className.replace("jstree-open","jstree-closed"),d.attr("aria-expanded",!1).children(".jstree-children").remove())),i.state.opened=!1,this.trigger("close_node",{node:i}),r&&d.length||this.trigger("after_close",{node:i}),t):!1},toggle_node:function(i){var r,s;if(e.isArray(i)){for(i=i.slice(),r=0,s=i.length;s>r;r++)this.toggle_node(i[r]);return!0}return this.is_closed(i)?this.open_node(i):this.is_open(i)?this.close_node(i):t},open_all:function(e,t,i){if(e||(e="#"),e=this.get_node(e),!e)return!1;var r="#"===e.id?this.get_container_ul():this.get_node(e,!0),s,n,a;if(!r.length){for(s=0,n=e.children_d.length;n>s;s++)this.is_closed(this._model.data[e.children_d[s]])&&(this._model.data[e.children_d[s]].state.opened=!0);return this.trigger("open_all",{node:e})}i=i||r,a=this,r=this.is_closed(e)?r.find(".jstree-closed").addBack():r.find(".jstree-closed"),r.each(function(){a.open_node(this,function(e,r){r&&this.is_parent(e)&&this.open_all(e,t,i)},t||0)}),0===i.find(".jstree-closed").length&&this.trigger("open_all",{node:this.get_node(i)})},close_all:function(t,i){if(t||(t="#"),t=this.get_node(t),!t)return!1;var r="#"===t.id?this.get_container_ul():this.get_node(t,!0),s=this,n,a;if(!r.length){for(n=0,a=t.children_d.length;a>n;n++)this._model.data[t.children_d[n]].state.opened=!1;return this.trigger("close_all",{node:t})}r=this.is_open(t)?r.find(".jstree-open").addBack():r.find(".jstree-open"),e(r.get().reverse()).each(function(){s.close_node(this,i||0)}),this.trigger("close_all",{node:t})},is_disabled:function(e){return e=this.get_node(e),e&&e.state&&e.state.disabled},enable_node:function(i){var r,s;if(e.isArray(i)){for(i=i.slice(),r=0,s=i.length;s>r;r++)this.enable_node(i[r]);return!0}return i=this.get_node(i),i&&"#"!==i.id?(i.state.disabled=!1,this.get_node(i,!0).children(".jstree-anchor").removeClass("jstree-disabled").attr("aria-disabled",!1),this.trigger("enable_node",{node:i}),t):!1},disable_node:function(i){var r,s;if(e.isArray(i)){for(i=i.slice(),r=0,s=i.length;s>r;r++)this.disable_node(i[r]);return!0}return i=this.get_node(i),i&&"#"!==i.id?(i.state.disabled=!0,this.get_node(i,!0).children(".jstree-anchor").addClass("jstree-disabled").attr("aria-disabled",!0),this.trigger("disable_node",{node:i}),t):!1},activate_node:function(e,i){if(this.is_disabled(e))return!1;if(this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==t?this.get_node(this._data.core.last_clicked.id):null,this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected&&(this._data.core.last_clicked=null),!this._data.core.last_clicked&&this._data.core.selected.length&&(this._data.core.last_clicked=this.get_node(this._data.core.selected[this._data.core.selected.length-1])),this.settings.core.multiple&&(i.metaKey||i.ctrlKey||i.shiftKey)&&(!i.shiftKey||this._data.core.last_clicked&&this.get_parent(e)&&this.get_parent(e)===this._data.core.last_clicked.parent))if(i.shiftKey){var r=this.get_node(e).id,s=this._data.core.last_clicked.id,n=this.get_node(this._data.core.last_clicked.parent).children,a=!1,d,o;for(d=0,o=n.length;o>d;d+=1)n[d]===r&&(a=!a),n[d]===s&&(a=!a),a||n[d]===r||n[d]===s?this.select_node(n[d],!0,!1,i):this.deselect_node(n[d],!0,i);this.trigger("changed",{action:"select_node",node:this.get_node(e),selected:this._data.core.selected,event:i})}else this.is_selected(e)?this.deselect_node(e,!1,i):this.select_node(e,!1,!1,i);else!this.settings.core.multiple&&(i.metaKey||i.ctrlKey||i.shiftKey)&&this.is_selected(e)?this.deselect_node(e,!1,i):(this.deselect_all(!0),this.select_node(e,!1,!1,i),this._data.core.last_clicked=this.get_node(e));this.trigger("activate_node",{node:this.get_node(e)})},hover_node:function(e){if(e=this.get_node(e,!0),!e||!e.length||e.children(".jstree-hovered").length)return!1;var t=this.element.find(".jstree-hovered"),i=this.element;t&&t.length&&this.dehover_node(t),e.children(".jstree-anchor").addClass("jstree-hovered"),this.trigger("hover_node",{node:this.get_node(e)}),setTimeout(function(){i.attr("aria-activedescendant",e[0].id)},0)},dehover_node:function(e){return e=this.get_node(e,!0),e&&e.length&&e.children(".jstree-hovered").length?(e.children(".jstree-anchor").removeClass("jstree-hovered"),this.trigger("dehover_node",{node:this.get_node(e)}),t):!1},select_node:function(i,r,s,n){var a,d,o,c;if(e.isArray(i)){for(i=i.slice(),d=0,o=i.length;o>d;d++)this.select_node(i[d],r,s,n);return!0}return i=this.get_node(i),i&&"#"!==i.id?(a=this.get_node(i,!0),i.state.selected||(i.state.selected=!0,this._data.core.selected.push(i.id),s||(a=this._open_to(i)),a&&a.length&&a.attr("aria-selected",!0).children(".jstree-anchor").addClass("jstree-clicked"),this.trigger("select_node",{node:i,selected:this._data.core.selected,event:n}),r||this.trigger("changed",{action:"select_node",node:i,selected:this._data.core.selected,event:n})),t):!1},deselect_node:function(i,r,s){var n,a,d;if(e.isArray(i)){for(i=i.slice(),n=0,a=i.length;a>n;n++)this.deselect_node(i[n],r,s);return!0}return i=this.get_node(i),i&&"#"!==i.id?(d=this.get_node(i,!0),i.state.selected&&(i.state.selected=!1,this._data.core.selected=e.vakata.array_remove_item(this._data.core.selected,i.id),d.length&&d.attr("aria-selected",!1).children(".jstree-anchor").removeClass("jstree-clicked"),this.trigger("deselect_node",{node:i,selected:this._data.core.selected,event:s}),r||this.trigger("changed",{action:"deselect_node",node:i,selected:this._data.core.selected,event:s})),t):!1},select_all:function(e){var t=this._data.core.selected.concat([]),i,r;for(this._data.core.selected=this._model.data["#"].children_d.concat(),i=0,r=this._data.core.selected.length;r>i;i++)this._model.data[this._data.core.selected[i]]&&(this._model.data[this._data.core.selected[i]].state.selected=!0);this.redraw(!0),this.trigger("select_all",{selected:this._data.core.selected}),e||this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:t})},deselect_all:function(e){var t=this._data.core.selected.concat([]),i,r;for(i=0,r=this._data.core.selected.length;r>i;i++)this._model.data[this._data.core.selected[i]]&&(this._model.data[this._data.core.selected[i]].state.selected=!1);this._data.core.selected=[],this.element.find(".jstree-clicked").removeClass("jstree-clicked").parent().attr("aria-selected",!1),this.trigger("deselect_all",{selected:this._data.core.selected,node:t}),e||this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:t})},is_selected:function(e){return e=this.get_node(e),e&&"#"!==e.id?e.state.selected:!1},get_selected:function(t){return t?e.map(this._data.core.selected,e.proxy(function(e){return this.get_node(e)},this)):this._data.core.selected.slice()},get_top_selected:function(t){var i=this.get_selected(!0),r={},s,n,a,d;for(s=0,n=i.length;n>s;s++)r[i[s].id]=i[s];for(s=0,n=i.length;n>s;s++)for(a=0,d=i[s].children_d.length;d>a;a++)r[i[s].children_d[a]]&&delete r[i[s].children_d[a]];i=[];for(s in r)r.hasOwnProperty(s)&&i.push(s);return t?e.map(i,e.proxy(function(e){return this.get_node(e)},this)):i},get_bottom_selected:function(t){var i=this.get_selected(!0),r=[],s,n;for(s=0,n=i.length;n>s;s++)i[s].children.length||r.push(i[s].id);return t?e.map(r,e.proxy(function(e){return this.get_node(e)},this)):r},get_state:function(){var e={core:{open:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},selected:[]}},t;for(t in this._model.data)this._model.data.hasOwnProperty(t)&&"#"!==t&&(this._model.data[t].state.opened&&e.core.open.push(t),this._model.data[t].state.selected&&e.core.selected.push(t));return e},set_state:function(i,r){if(i){if(i.core){var s,n,a,d;if(i.core.open)return e.isArray(i.core.open)?(s=!0,n=!1,a=this,e.each(i.core.open.concat([]),function(t,d){n=a.get_node(d),n&&(a.is_loaded(d)?(a.is_closed(d)&&a.open_node(d,!1,0),i&&i.core&&i.core.open&&e.vakata.array_remove_item(i.core.open,d)):(a.is_loading(d)||a.open_node(d,e.proxy(function(t,s){!s&&i&&i.core&&i.core.open&&e.vakata.array_remove_item(i.core.open,t.id),this.set_state(i,r)},a),0),s=!1))}),s&&(delete i.core.open,this.set_state(i,r)),!1):(delete i.core.open,this.set_state(i,r),!1);if(i.core.scroll)return i.core.scroll&&i.core.scroll.left!==t&&this.element.scrollLeft(i.core.scroll.left),i.core.scroll&&i.core.scroll.top!==t&&this.element.scrollTop(i.core.scroll.top),delete i.core.scroll,this.set_state(i,r),!1;if(i.core.selected)return d=this,this.deselect_all(),e.each(i.core.selected,function(e,t){d.select_node(t)}),delete i.core.selected,this.set_state(i,r),!1;if(e.isEmptyObject(i.core))return delete i.core,this.set_state(i,r),!1}return e.isEmptyObject(i)?(i=null,r&&r.call(this),this.trigger("set_state"),!1):!0}return!1},refresh:function(t,i){this._data.core.state=i===!0?{}:this.get_state(),i&&e.isFunction(i)&&(this._data.core.state=i.call(this,this._data.core.state)),this._cnt=0,this._model.data={"#":{id:"#",parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}}};var r=this.get_container_ul()[0].className;t||(this.element.html("<"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j"+this._id+"_loading'> <"+"a class='jstree-anchor' href='#'> "+this.get_string("Loading ...")+" "),this.element.attr("aria-activedescendant","j"+this._id+"_loading")),this.load_node("#",function(t,i){i&&(this.get_container_ul()[0].className=r,this._firstChild(this.get_container_ul()[0])&&this.element.attr("aria-activedescendant",this._firstChild(this.get_container_ul()[0]).id),this.set_state(e.extend(!0,{},this._data.core.state),function(){this.trigger("refresh")})),this._data.core.state=null})},refresh_node:function(t){if(t=this.get_node(t),!t||"#"===t.id)return!1;var i=[],r=[],s=this._data.core.selected.concat([]);r.push(t.id),t.state.opened===!0&&i.push(t.id),this.get_node(t,!0).find(".jstree-open").each(function(){i.push(this.id)}),this._load_nodes(r,e.proxy(function(e){this.open_node(i,!1,0),this.select_node(this._data.core.selected),this.trigger("refresh_node",{node:t,nodes:e})},this))},set_id:function(t,i){if(t=this.get_node(t),!t||"#"===t.id)return!1;var r,s,n=this._model.data;for(i=""+i,n[t.parent].children[e.inArray(t.id,n[t.parent].children)]=i,r=0,s=t.parents.length;s>r;r++)n[t.parents[r]].children_d[e.inArray(t.id,n[t.parents[r]].children_d)]=i;for(r=0,s=t.children.length;s>r;r++)n[t.children[r]].parent=i;for(r=0,s=t.children_d.length;s>r;r++)n[t.children_d[r]].parents[e.inArray(t.id,n[t.children_d[r]].parents)]=i;return r=e.inArray(t.id,this._data.core.selected),-1!==r&&(this._data.core.selected[r]=i),r=this.get_node(t.id,!0),r&&r.attr("id",i),delete n[t.id],t.id=i,n[i]=t,!0},get_text:function(e){return e=this.get_node(e),e&&"#"!==e.id?e.text:!1},set_text:function(t,i){var r,s;if(e.isArray(t)){for(t=t.slice(),r=0,s=t.length;s>r;r++)this.set_text(t[r],i);return!0}return t=this.get_node(t),t&&"#"!==t.id?(t.text=i,this.get_node(t,!0).length&&this.redraw_node(t.id),this.trigger("set_text",{obj:t,text:i}),!0):!1},get_json:function(t,i,r){if(t=this.get_node(t||"#"),!t)return!1;i&&i.flat&&!r&&(r=[]);var s={id:t.id,text:t.text,icon:this.get_icon(t),li_attr:e.extend(!0,{},t.li_attr),a_attr:e.extend(!0,{},t.a_attr),state:{},data:i&&i.no_data?!1:e.extend(!0,{},t.data)},n,a;if(i&&i.flat?s.parent=t.parent:s.children=[],!i||!i.no_state)for(n in t.state)t.state.hasOwnProperty(n)&&(s.state[n]=t.state[n]);if(i&&i.no_id&&(delete s.id,s.li_attr&&s.li_attr.id&&delete s.li_attr.id,s.a_attr&&s.a_attr.id&&delete s.a_attr.id),i&&i.flat&&"#"!==t.id&&r.push(s),!i||!i.no_children)for(n=0,a=t.children.length;a>n;n++)i&&i.flat?this.get_json(t.children[n],i,r):s.children.push(this.get_json(t.children[n],i));return i&&i.flat?r:"#"===t.id?s.children:s},create_node:function(i,r,s,n,a){if(null===i&&(i="#"),i=this.get_node(i),!i)return!1;if(s=s===t?"last":s,!(""+s).match(/^(before|after)$/)&&!a&&!this.is_loaded(i))return this.load_node(i,function(){this.create_node(i,r,s,n,!0)});r||(r={text:this.get_string("New node")}),r.text===t&&(r.text=this.get_string("New node"));var d,o,c,l;switch("#"===i.id&&("before"===s&&(s="first"),"after"===s&&(s="last")),s){case"before":d=this.get_node(i.parent),s=e.inArray(i.id,d.children),i=d;break;case"after":d=this.get_node(i.parent),s=e.inArray(i.id,d.children)+1,i=d;break;case"inside":case"first":s=0;break;case"last":s=i.children.length;break;default:s||(s=0)}if(s>i.children.length&&(s=i.children.length),r.id||(r.id=!0),!this.check("create_node",r,i,s))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(r.id===!0&&delete r.id,r=this._parse_model_from_json(r,i.id,i.parents.concat()),!r)return!1;for(d=this.get_node(r),o=[],o.push(r),o=o.concat(d.children_d),this.trigger("model",{nodes:o,parent:i.id}),i.children_d=i.children_d.concat(o),c=0,l=i.parents.length;l>c;c++)this._model.data[i.parents[c]].children_d=this._model.data[i.parents[c]].children_d.concat(o);for(r=d,d=[],c=0,l=i.children.length;l>c;c++)d[c>=s?c+1:c]=i.children[c];return d[s]=r.id,i.children=d,this.redraw_node(i,!0),n&&n.call(this,this.get_node(r)),this.trigger("create_node",{node:this.get_node(r),parent:i.id,position:s}),r.id},rename_node:function(t,i){var r,s,n;if(e.isArray(t)){for(t=t.slice(),r=0,s=t.length;s>r;r++)this.rename_node(t[r],i);return!0}return t=this.get_node(t),t&&"#"!==t.id?(n=t.text,this.check("rename_node",t,this.get_parent(t),i)?(this.set_text(t,i),this.trigger("rename_node",{node:t,text:i,old:n}),!0):(this.settings.core.error.call(this,this._data.core.last_error),!1)):!1},delete_node:function(t){var i,r,s,n,a,d,o,c,l,h;if(e.isArray(t)){for(t=t.slice(),i=0,r=t.length;r>i;i++)this.delete_node(t[i]);return!0}if(t=this.get_node(t),!t||"#"===t.id)return!1;if(s=this.get_node(t.parent),n=e.inArray(t.id,s.children),h=!1,!this.check("delete_node",t,s,n))return this.settings.core.error.call(this,this._data.core.last_error),!1;for(-1!==n&&(s.children=e.vakata.array_remove(s.children,n)),a=t.children_d.concat([]),a.push(t.id),c=0,l=a.length;l>c;c++){for(d=0,o=t.parents.length;o>d;d++)n=e.inArray(a[c],this._model.data[t.parents[d]].children_d),-1!==n&&(this._model.data[t.parents[d]].children_d=e.vakata.array_remove(this._model.data[t.parents[d]].children_d,n));this._model.data[a[c]].state.selected&&(h=!0,n=e.inArray(a[c],this._data.core.selected),-1!==n&&(this._data.core.selected=e.vakata.array_remove(this._data.core.selected,n)))}for(this.trigger("delete_node",{node:t,parent:s.id}),h&&this.trigger("changed",{action:"delete_node",node:t,selected:this._data.core.selected,parent:s.id}),c=0,l=a.length;l>c;c++)delete this._model.data[a[c]];return this.redraw_node(s,!0),!0},check:function(t,i,r,s,n){i=i&&i.id?i:this.get_node(i),r=r&&r.id?r:this.get_node(r);var a=t.match(/^move_node|copy_node|create_node$/i)?r:i,d=this.settings.core.check_callback;return"move_node"!==t&&"copy_node"!==t||n&&n.is_multi||i.id!==r.id&&e.inArray(i.id,r.children)!==s&&-1===e.inArray(r.id,i.children_d)?(a&&a.data&&(a=a.data),a&&a.functions&&(a.functions[t]===!1||a.functions[t]===!0)?(a.functions[t]===!1&&(this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+t,data:JSON.stringify({chk:t,pos:s,obj:i&&i.id?i.id:!1,par:r&&r.id?r.id:!1})}),a.functions[t]):d===!1||e.isFunction(d)&&d.call(this,t,i,r,s,n)===!1||d&&d[t]===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+t,data:JSON.stringify({chk:t,pos:s,obj:i&&i.id?i.id:!1,par:r&&r.id?r.id:!1})},!1):!0):(this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:t,pos:s,obj:i&&i.id?i.id:!1,par:r&&r.id?r.id:!1})},!1)},last_error:function(){return this._data.core.last_error},move_node:function(i,r,s,n,a,d){var o,c,l,h,_,u,g,f,p,m,v,j,y,k;if(r=this.get_node(r),s=s===t?0:s,!r)return!1;if(!(""+s).match(/^(before|after)$/)&&!a&&!this.is_loaded(r))return this.load_node(r,function(){this.move_node(i,r,s,n,!0)});if(e.isArray(i)){for(i=i.slice(),o=0,c=i.length;c>o;o++)this.move_node(i[o],r,s,n,a,!0)&&(r=i[o],s="after");return this.redraw(),!0}if(i=i&&i.id?i:this.get_node(i),!i||"#"===i.id)return!1;if(l=""+(i.parent||"#"),_=(""+s).match(/^(before|after)$/)&&"#"!==r.id?this.get_node(r.parent):r,u=i.instance?i.instance:this._model.data[i.id]?this:e.jstree.reference(i.id),g=!u||!u._id||this._id!==u._id,h=u&&u._id&&l&&u._model.data[l]&&u._model.data[l].children?e.inArray(i.id,u._model.data[l].children):-1,g)return this.copy_node(i,r,s,n,a)?(u&&u.delete_node(i),!0):!1;switch("#"===r.id&&("before"===s&&(s="first"),"after"===s&&(s="last")),s){case"before":s=e.inArray(r.id,_.children);break;case"after":s=e.inArray(r.id,_.children)+1;break;case"inside":case"first":s=0;break;case"last":s=_.children.length;break;default:s||(s=0)}if(s>_.children.length&&(s=_.children.length),!this.check("move_node",i,_,s,{core:!0,is_multi:u&&u._id&&u._id!==this._id,is_foreign:!u||!u._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(i.parent===_.id){for(f=_.children.concat(),p=e.inArray(i.id,f),-1!==p&&(f=e.vakata.array_remove(f,p),s>p&&s--),p=[],m=0,v=f.length;v>m;m++)p[m>=s?m+1:m]=f[m];p[s]=i.id,_.children=p,this._node_changed(_.id),this.redraw("#"===_.id)}else{for(p=i.children_d.concat(),p.push(i.id),m=0,v=i.parents.length;v>m;m++){for(f=[],k=u._model.data[i.parents[m]].children_d,j=0,y=k.length;y>j;j++)-1===e.inArray(k[j],p)&&f.push(k[j]);u._model.data[i.parents[m]].children_d=f}for(u._model.data[l].children=e.vakata.array_remove_item(u._model.data[l].children,i.id),m=0,v=_.parents.length;v>m;m++)this._model.data[_.parents[m]].children_d=this._model.data[_.parents[m]].children_d.concat(p);for(f=[],m=0,v=_.children.length;v>m;m++)f[m>=s?m+1:m]=_.children[m];for(f[s]=i.id,_.children=f,_.children_d.push(i.id),_.children_d=_.children_d.concat(i.children_d),i.parent=_.id,p=_.parents.concat(),p.unshift(_.id),k=i.parents.length,i.parents=p,p=p.concat(),m=0,v=i.children_d.length;v>m;m++)this._model.data[i.children_d[m]].parents=this._model.data[i.children_d[m]].parents.slice(0,-1*k),Array.prototype.push.apply(this._model.data[i.children_d[m]].parents,p);("#"===l||"#"===_.id)&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||(this._node_changed(l),this._node_changed(_.id)),d||this.redraw()}return n&&n.call(this,i,_,s),this.trigger("move_node",{node:i,parent:_.id,position:s,old_parent:l,old_position:h,is_multi:u&&u._id&&u._id!==this._id,is_foreign:!u||!u._id,old_instance:u,new_instance:this}),!0},copy_node:function(i,r,s,n,a,d){var o,c,l,h,_,u,g,f,p,m,v;if(r=this.get_node(r),s=s===t?0:s,!r)return!1;if(!(""+s).match(/^(before|after)$/)&&!a&&!this.is_loaded(r))return this.load_node(r,function(){this.copy_node(i,r,s,n,!0)});if(e.isArray(i)){for(i=i.slice(),o=0,c=i.length;c>o;o++)h=this.copy_node(i[o],r,s,n,a,!0),h&&(r=h,s="after");return this.redraw(),!0}if(i=i&&i.id?i:this.get_node(i),!i||"#"===i.id)return!1;switch(f=""+(i.parent||"#"),p=(""+s).match(/^(before|after)$/)&&"#"!==r.id?this.get_node(r.parent):r,m=i.instance?i.instance:this._model.data[i.id]?this:e.jstree.reference(i.id),v=!m||!m._id||this._id!==m._id,"#"===r.id&&("before"===s&&(s="first"),"after"===s&&(s="last")),s){case"before":s=e.inArray(r.id,p.children);break;case"after":s=e.inArray(r.id,p.children)+1;break;case"inside":case"first":s=0;break;case"last":s=p.children.length;break;default:s||(s=0)}if(s>p.children.length&&(s=p.children.length),!this.check("copy_node",i,p,s,{core:!0,is_multi:m&&m._id&&m._id!==this._id,is_foreign:!m||!m._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(g=m?m.get_json(i,{no_id:!0,no_data:!0,no_state:!0}):i,!g)return!1;if(g.id===!0&&delete g.id,g=this._parse_model_from_json(g,p.id,p.parents.concat()),!g)return!1;for(h=this.get_node(g),i&&i.state&&i.state.loaded===!1&&(h.state.loaded=!1),l=[],l.push(g),l=l.concat(h.children_d),this.trigger("model",{nodes:l,parent:p.id}),_=0,u=p.parents.length;u>_;_++)this._model.data[p.parents[_]].children_d=this._model.data[p.parents[_]].children_d.concat(l);for(l=[],_=0,u=p.children.length;u>_;_++)l[_>=s?_+1:_]=p.children[_];return l[s]=h.id,p.children=l,p.children_d.push(h.id),p.children_d=p.children_d.concat(h.children_d),"#"===p.id&&(this._model.force_full_redraw=!0),this._model.force_full_redraw||this._node_changed(p.id),d||this.redraw("#"===p.id),n&&n.call(this,h,p,s),this.trigger("copy_node",{node:h,original:i,parent:p.id,position:s,old_parent:f,old_position:m&&m._id&&f&&m._model.data[f]&&m._model.data[f].children?e.inArray(i.id,m._model.data[f].children):-1,is_multi:m&&m._id&&m._id!==this._id,is_foreign:!m||!m._id,old_instance:m,new_instance:this}),h.id},cut:function(i){if(i||(i=this._data.core.selected.concat()),e.isArray(i)||(i=[i]),!i.length)return!1;var a=[],d,o,c;for(o=0,c=i.length;c>o;o++)d=this.get_node(i[o]),d&&d.id&&"#"!==d.id&&a.push(d);return a.length?(r=a,n=this,s="move_node",this.trigger("cut",{node:i}),t):!1},copy:function(i){if(i||(i=this._data.core.selected.concat()),e.isArray(i)||(i=[i]),!i.length)return!1;var a=[],d,o,c;for(o=0,c=i.length;c>o;o++)d=this.get_node(i[o]),d&&d.id&&"#"!==d.id&&a.push(d);return a.length?(r=a,n=this,s="copy_node",this.trigger("copy",{node:i}),t):!1},get_buffer:function(){return{mode:s,node:r,inst:n}},can_paste:function(){return s!==!1&&r!==!1},paste:function(e,i){return e=this.get_node(e),e&&s&&s.match(/^(copy_node|move_node)$/)&&r?(this[s](r,e,i)&&this.trigger("paste",{parent:e.id,node:r,mode:s}),r=!1,s=!1,n=!1,t):!1},clear_buffer:function(){r=!1,s=!1,n=!1,this.trigger("clear_buffer")},edit:function(i,r){if(i=this.get_node(i),!i)return!1;if(this.settings.core.check_callback===!1)return this._data.core.last_error={error:"check",plugin:"core",id:"core_07",reason:"Could not edit node because of check_callback"},this.settings.core.error.call(this,this._data.core.last_error),!1;r="string"==typeof r?r:i.text,this.set_text(i,""),i=this._open_to(i);var s=this._data.core.rtl,n=this.element.width(),a=i.children(".jstree-anchor"),d=e(""),o=r,c=e("
",{css:{position:"absolute",top:"-200px",left:s?"0px":"-1000px",visibility:"hidden"}}).appendTo("body"),l=e(" ",{value:o,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:this._data.core.li_height+"px",lineHeight:this._data.core.li_height+"px",width:"150px"},blur:e.proxy(function(){var t=d.children(".jstree-rename-input"),r=t.val();""===r&&(r=o),c.remove(),d.replaceWith(a),d.remove(),this.set_text(i,o),this.rename_node(i,e("
").text(r)[this.settings.core.force_text?"text":"html"]())===!1&&this.set_text(i,o)},this),keydown:function(e){var t=e.which;27===t&&(this.value=o),(27===t||13===t||37===t||38===t||39===t||40===t||32===t)&&e.stopImmediatePropagation(),(27===t||13===t)&&(e.preventDefault(),this.blur())},click:function(e){e.stopImmediatePropagation()},mousedown:function(e){e.stopImmediatePropagation()},keyup:function(e){l.width(Math.min(c.text("pW"+this.value).width(),n))},keypress:function(e){return 13===e.which?!1:t}}),h={fontFamily:a.css("fontFamily")||"",fontSize:a.css("fontSize")||"",fontWeight:a.css("fontWeight")||"",fontStyle:a.css("fontStyle")||"",fontStretch:a.css("fontStretch")||"",fontVariant:a.css("fontVariant")||"",letterSpacing:a.css("letterSpacing")||"",wordSpacing:a.css("wordSpacing")||""};d.attr("class",a.attr("class")).append(a.contents().clone()).append(l),a.replaceWith(d),c.css(h),l.css(h).width(Math.min(c.text("pW"+l[0].value).width(),n))[0].select()},set_theme:function(t,i){if(!t)return!1;if(i===!0){var r=this.settings.core.themes.dir;r||(r=e.jstree.path+"/themes"),i=r+"/"+t+"/style.css"}i&&-1===e.inArray(i,a)&&(e("head").append(' '),a.push(i)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=t,this.element.addClass("jstree-"+t),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+t+"-responsive"),this.trigger("set_theme",{theme:t})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(e){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=e,e&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},set_icon:function(t,i){var r,s,n,a;if(e.isArray(t)){for(t=t.slice(),r=0,s=t.length;s>r;r++)this.set_icon(t[r],i);return!0}return t=this.get_node(t),t&&"#"!==t.id?(a=t.icon,t.icon=i,n=this.get_node(t,!0).children(".jstree-anchor").children(".jstree-themeicon"),i===!1?this.hide_icon(t):i===!0?(n.removeClass("jstree-themeicon-custom "+a).css("background","").removeAttr("rel"),a===!1&&this.show_icon(t)):-1===i.indexOf("/")&&-1===i.indexOf(".")?(n.removeClass(a).css("background",""),n.addClass(i+" jstree-themeicon-custom").attr("rel",i),a===!1&&this.show_icon(t)):(n.removeClass(a).css("background",""),n.addClass("jstree-themeicon-custom").css("background","url('"+i+"') center center no-repeat").attr("rel",i),a===!1&&this.show_icon(t)),!0):!1},get_icon:function(e){return e=this.get_node(e),e&&"#"!==e.id?e.icon:!1},hide_icon:function(t){var i,r;if(e.isArray(t)){for(t=t.slice(),i=0,r=t.length;r>i;i++)this.hide_icon(t[i]);return!0}return t=this.get_node(t),t&&"#"!==t?(t.icon=!1,this.get_node(t,!0).children(".jstree-anchor").children(".jstree-themeicon").addClass("jstree-themeicon-hidden"),!0):!1},show_icon:function(t){var i,r,s;if(e.isArray(t)){for(t=t.slice(),i=0,r=t.length;r>i;i++)this.show_icon(t[i]);return!0}return t=this.get_node(t),t&&"#"!==t?(s=this.get_node(t,!0),t.icon=s.length?s.children(".jstree-anchor").children(".jstree-themeicon").attr("rel"):!0,t.icon||(t.icon=!0),s.children(".jstree-anchor").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden"),!0):!1}},e.vakata={},e.vakata.attributes=function(t,i){t=e(t)[0];var r=i?{}:[];return t&&t.attributes&&e.each(t.attributes,function(t,s){-1===e.inArray(s.name.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])&&null!==s.value&&""!==e.trim(s.value)&&(i?r[s.name]=s.value:r.push(s.name))}),r},e.vakata.array_unique=function(e){var t=[],i,r,s;for(i=0,s=e.length;s>i;i++){for(r=0;i>=r;r++)if(e[i]===e[r])break;r===i&&t.push(e[i])}return t},e.vakata.array_remove=function(e,t,i){var r=e.slice((i||t)+1||e.length);return e.length=0>t?e.length+t:t,e.push.apply(e,r),e},e.vakata.array_remove_item=function(t,i){var r=e.inArray(i,t);return-1!==r?e.vakata.array_remove(t,r):t};var _=document.createElement("I");_.className="jstree-icon jstree-checkbox",_.setAttribute("role","presentation"),e.jstree.defaults.checkbox={visible:!0,three_state:!0,whole_node:!0,keep_selected_style:!0,cascade:"",tie_selection:!0},e.jstree.plugins.checkbox=function(i,r){this.bind=function(){r.bind.call(this),this._data.checkbox.uto=!1,this._data.checkbox.selected=[],this.settings.checkbox.three_state&&(this.settings.checkbox.cascade="up+down+undetermined"),this.element.on("init.jstree",e.proxy(function(){this._data.checkbox.visible=this.settings.checkbox.visible,this.settings.checkbox.keep_selected_style||this.element.addClass("jstree-checkbox-no-clicked"),this.settings.checkbox.tie_selection&&this.element.addClass("jstree-checkbox-selection")},this)).on("loading.jstree",e.proxy(function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()},this)),-1!==this.settings.checkbox.cascade.indexOf("undetermined")&&this.element.on("changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree",e.proxy(function(){this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(e.proxy(this._undetermined,this),50)},this)),this.settings.checkbox.tie_selection||this.element.on("model.jstree",e.proxy(function(e,t){var i=this._model.data,r=i[t.parent],s=t.nodes,n,a;for(n=0,a=s.length;a>n;n++)i[s[n]].state.checked=i[s[n]].original&&i[s[n]].original.state&&i[s[n]].original.state.checked,i[s[n]].state.checked&&this._data.checkbox.selected.push(s[n])},this)),(-1!==this.settings.checkbox.cascade.indexOf("up")||-1!==this.settings.checkbox.cascade.indexOf("down"))&&this.element.on("model.jstree",e.proxy(function(t,i){var r=this._model.data,s=r[i.parent],n=i.nodes,a=[],d,o,c,l,h,_,u=this.settings.checkbox.cascade,g=this.settings.checkbox.tie_selection;
+if(-1!==u.indexOf("down"))if(s.state[g?"selected":"checked"]){for(o=0,c=n.length;c>o;o++)r[n[o]].state[g?"selected":"checked"]=!0;this._data[g?"core":"checkbox"].selected=this._data[g?"core":"checkbox"].selected.concat(n)}else for(o=0,c=n.length;c>o;o++)if(r[n[o]].state[g?"selected":"checked"]){for(l=0,h=r[n[o]].children_d.length;h>l;l++)r[r[n[o]].children_d[l]].state[g?"selected":"checked"]=!0;this._data[g?"core":"checkbox"].selected=this._data[g?"core":"checkbox"].selected.concat(r[n[o]].children_d)}if(-1!==u.indexOf("up")){for(o=0,c=s.children_d.length;c>o;o++)r[s.children_d[o]].children.length||a.push(r[s.children_d[o]].parent);for(a=e.vakata.array_unique(a),l=0,h=a.length;h>l;l++){s=r[a[l]];while(s&&"#"!==s.id){for(d=0,o=0,c=s.children.length;c>o;o++)d+=r[s.children[o]].state[g?"selected":"checked"];if(d!==c)break;s.state[g?"selected":"checked"]=!0,this._data[g?"core":"checkbox"].selected.push(s.id),_=this.get_node(s,!0),_&&_.length&&_.attr("aria-selected",!0).children(".jstree-anchor").addClass(g?"jstree-clicked":"jstree-checked"),s=this.get_node(s.parent)}}}this._data[g?"core":"checkbox"].selected=e.vakata.array_unique(this._data[g?"core":"checkbox"].selected)},this)).on(this.settings.checkbox.tie_selection?"select_node.jstree":"check_node.jstree",e.proxy(function(t,i){var r=i.node,s=this._model.data,n=this.get_node(r.parent),a=this.get_node(r,!0),d,o,c,l,h=this.settings.checkbox.cascade,_=this.settings.checkbox.tie_selection;if(-1!==h.indexOf("down"))for(this._data[_?"core":"checkbox"].selected=e.vakata.array_unique(this._data[_?"core":"checkbox"].selected.concat(r.children_d)),d=0,o=r.children_d.length;o>d;d++)l=s[r.children_d[d]],l.state[_?"selected":"checked"]=!0,l&&l.original&&l.original.state&&l.original.state.undetermined&&(l.original.state.undetermined=!1);if(-1!==h.indexOf("up"))while(n&&"#"!==n.id){for(c=0,d=0,o=n.children.length;o>d;d++)c+=s[n.children[d]].state[_?"selected":"checked"];if(c!==o)break;n.state[_?"selected":"checked"]=!0,this._data[_?"core":"checkbox"].selected.push(n.id),l=this.get_node(n,!0),l&&l.length&&l.attr("aria-selected",!0).children(".jstree-anchor").addClass(_?"jstree-clicked":"jstree-checked"),n=this.get_node(n.parent)}-1!==h.indexOf("down")&&a.length&&a.find(".jstree-anchor").addClass(_?"jstree-clicked":"jstree-checked").parent().attr("aria-selected",!0)},this)).on(this.settings.checkbox.tie_selection?"deselect_all.jstree":"uncheck_all.jstree",e.proxy(function(e,t){var i=this.get_node("#"),r=this._model.data,s,n,a;for(s=0,n=i.children_d.length;n>s;s++)a=r[i.children_d[s]],a&&a.original&&a.original.state&&a.original.state.undetermined&&(a.original.state.undetermined=!1)},this)).on(this.settings.checkbox.tie_selection?"deselect_node.jstree":"uncheck_node.jstree",e.proxy(function(t,i){var r=i.node,s=this.get_node(r,!0),n,a,d,o=this.settings.checkbox.cascade,c=this.settings.checkbox.tie_selection;if(r&&r.original&&r.original.state&&r.original.state.undetermined&&(r.original.state.undetermined=!1),-1!==o.indexOf("down"))for(n=0,a=r.children_d.length;a>n;n++)d=this._model.data[r.children_d[n]],d.state[c?"selected":"checked"]=!1,d&&d.original&&d.original.state&&d.original.state.undetermined&&(d.original.state.undetermined=!1);if(-1!==o.indexOf("up"))for(n=0,a=r.parents.length;a>n;n++)d=this._model.data[r.parents[n]],d.state[c?"selected":"checked"]=!1,d&&d.original&&d.original.state&&d.original.state.undetermined&&(d.original.state.undetermined=!1),d=this.get_node(r.parents[n],!0),d&&d.length&&d.attr("aria-selected",!1).children(".jstree-anchor").removeClass(c?"jstree-clicked":"jstree-checked");for(d=[],n=0,a=this._data[c?"core":"checkbox"].selected.length;a>n;n++)-1!==o.indexOf("down")&&-1!==e.inArray(this._data[c?"core":"checkbox"].selected[n],r.children_d)||-1!==o.indexOf("up")&&-1!==e.inArray(this._data[c?"core":"checkbox"].selected[n],r.parents)||d.push(this._data[c?"core":"checkbox"].selected[n]);this._data[c?"core":"checkbox"].selected=e.vakata.array_unique(d),-1!==o.indexOf("down")&&s.length&&s.find(".jstree-anchor").removeClass(c?"jstree-clicked":"jstree-checked").parent().attr("aria-selected",!1)},this)),-1!==this.settings.checkbox.cascade.indexOf("up")&&this.element.on("delete_node.jstree",e.proxy(function(e,t){var i=this.get_node(t.parent),r=this._model.data,s,n,a,d,o=this.settings.checkbox.tie_selection;while(i&&"#"!==i.id){for(a=0,s=0,n=i.children.length;n>s;s++)a+=r[i.children[s]].state[o?"selected":"checked"];if(a!==n)break;i.state[o?"selected":"checked"]=!0,this._data[o?"core":"checkbox"].selected.push(i.id),d=this.get_node(i,!0),d&&d.length&&d.attr("aria-selected",!0).children(".jstree-anchor").addClass(o?"jstree-clicked":"jstree-checked"),i=this.get_node(i.parent)}},this)).on("move_node.jstree",e.proxy(function(t,i){var r=i.is_multi,s=i.old_parent,n=this.get_node(i.parent),a=this._model.data,d,o,c,l,h,_=this.settings.checkbox.tie_selection;if(!r){d=this.get_node(s);while(d&&"#"!==d.id){for(o=0,c=0,l=d.children.length;l>c;c++)o+=a[d.children[c]].state[_?"selected":"checked"];if(o!==l)break;d.state[_?"selected":"checked"]=!0,this._data[_?"core":"checkbox"].selected.push(d.id),h=this.get_node(d,!0),h&&h.length&&h.attr("aria-selected",!0).children(".jstree-anchor").addClass(_?"jstree-clicked":"jstree-checked"),d=this.get_node(d.parent)}}d=n;while(d&&"#"!==d.id){for(o=0,c=0,l=d.children.length;l>c;c++)o+=a[d.children[c]].state[_?"selected":"checked"];if(o===l)d.state[_?"selected":"checked"]||(d.state[_?"selected":"checked"]=!0,this._data[_?"core":"checkbox"].selected.push(d.id),h=this.get_node(d,!0),h&&h.length&&h.attr("aria-selected",!0).children(".jstree-anchor").addClass(_?"jstree-clicked":"jstree-checked"));else{if(!d.state[_?"selected":"checked"])break;d.state[_?"selected":"checked"]=!1,this._data[_?"core":"checkbox"].selected=e.vakata.array_remove_item(this._data[_?"core":"checkbox"].selected,d.id),h=this.get_node(d,!0),h&&h.length&&h.attr("aria-selected",!1).children(".jstree-anchor").removeClass(_?"jstree-clicked":"jstree-checked")}d=this.get_node(d.parent)}},this))},this._undetermined=function(){var t,i,r=this._model.data,s=this.settings.checkbox.tie_selection,n=this._data[s?"core":"checkbox"].selected,a=[],d=this;for(t=0,i=n.length;i>t;t++)r[n[t]]&&r[n[t]].parents&&(a=a.concat(r[n[t]].parents));for(this.element.find(".jstree-closed").not(":has(.jstree-children)").each(function(){var e=d.get_node(this),s;if(e.state.loaded)for(t=0,i=e.children_d.length;i>t;t++)s=r[e.children_d[t]],!s.state.loaded&&s.original&&s.original.state&&s.original.state.undetermined&&s.original.state.undetermined===!0&&(a.push(s.id),a=a.concat(s.parents));else e.original&&e.original.state&&e.original.state.undetermined&&e.original.state.undetermined===!0&&(a.push(e.id),a=a.concat(e.parents))}),a=e.vakata.array_unique(a),a=e.vakata.array_remove_item(a,"#"),this.element.find(".jstree-undetermined").removeClass("jstree-undetermined"),t=0,i=a.length;i>t;t++)r[a[t]].state[s?"selected":"checked"]||(n=this.get_node(a[t],!0),n&&n.length&&n.children(".jstree-anchor").children(".jstree-checkbox").addClass("jstree-undetermined"))},this.redraw_node=function(t,i,s,n){if(t=r.redraw_node.apply(this,arguments)){var a,d,o=null;for(a=0,d=t.childNodes.length;d>a;a++)if(t.childNodes[a]&&t.childNodes[a].className&&-1!==t.childNodes[a].className.indexOf("jstree-anchor")){o=t.childNodes[a];break}o&&(!this.settings.checkbox.tie_selection&&this._model.data[t.id].state.checked&&(o.className+=" jstree-checked"),o.insertBefore(_.cloneNode(!1),o.childNodes[0]))}return s||-1===this.settings.checkbox.cascade.indexOf("undetermined")||(this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(e.proxy(this._undetermined,this),50)),t},this.show_checkboxes=function(){this._data.core.themes.checkboxes=!0,this.get_container_ul().removeClass("jstree-no-checkboxes")},this.hide_checkboxes=function(){this._data.core.themes.checkboxes=!1,this.get_container_ul().addClass("jstree-no-checkboxes")},this.toggle_checkboxes=function(){this._data.core.themes.checkboxes?this.hide_checkboxes():this.show_checkboxes()},this.is_undetermined=function(t){t=this.get_node(t);var i=this.settings.checkbox.cascade,r,s,n=this.settings.checkbox.tie_selection,a=this._data[n?"core":"checkbox"].selected,d=this._model.data;if(!t||t.state[n?"selected":"checked"]===!0||-1===i.indexOf("undetermined")||-1===i.indexOf("down")&&-1===i.indexOf("up"))return!1;if(!t.state.loaded&&t.original.state.undetermined===!0)return!0;for(r=0,s=t.children_d.length;s>r;r++)if(-1!==e.inArray(t.children_d[r],a)||!d[t.children_d[r]].state.loaded&&d[t.children_d[r]].original.state.undetermined)return!0;return!1},this.activate_node=function(i,s){return this.settings.checkbox.tie_selection&&(this.settings.checkbox.whole_node||e(s.target).hasClass("jstree-checkbox"))&&(s.ctrlKey=!0),this.settings.checkbox.tie_selection||!this.settings.checkbox.whole_node&&!e(s.target).hasClass("jstree-checkbox")?r.activate_node.call(this,i,s):(this.is_checked(i)?this.uncheck_node(i,s):this.check_node(i,s),this.trigger("activate_node",{node:this.get_node(i)}),t)},this.check_node=function(i,r){if(this.settings.checkbox.tie_selection)return this.select_node(i,!1,!0,r);var s,n,a,d;if(e.isArray(i)){for(i=i.slice(),n=0,a=i.length;a>n;n++)this.check_node(i[n],r);return!0}return i=this.get_node(i),i&&"#"!==i.id?(s=this.get_node(i,!0),i.state.checked||(i.state.checked=!0,this._data.checkbox.selected.push(i.id),s&&s.length&&s.children(".jstree-anchor").addClass("jstree-checked"),this.trigger("check_node",{node:i,selected:this._data.checkbox.selected,event:r})),t):!1},this.uncheck_node=function(i,r){if(this.settings.checkbox.tie_selection)return this.deselect_node(i,!1,r);var s,n,a;if(e.isArray(i)){for(i=i.slice(),s=0,n=i.length;n>s;s++)this.uncheck_node(i[s],r);return!0}return i=this.get_node(i),i&&"#"!==i.id?(a=this.get_node(i,!0),i.state.checked&&(i.state.checked=!1,this._data.checkbox.selected=e.vakata.array_remove_item(this._data.checkbox.selected,i.id),a.length&&a.children(".jstree-anchor").removeClass("jstree-checked"),this.trigger("uncheck_node",{node:i,selected:this._data.checkbox.selected,event:r})),t):!1},this.check_all=function(){if(this.settings.checkbox.tie_selection)return this.select_all();var e=this._data.checkbox.selected.concat([]),t,i;for(this._data.checkbox.selected=this._model.data["#"].children_d.concat(),t=0,i=this._data.checkbox.selected.length;i>t;t++)this._model.data[this._data.checkbox.selected[t]]&&(this._model.data[this._data.checkbox.selected[t]].state.checked=!0);this.redraw(!0),this.trigger("check_all",{selected:this._data.checkbox.selected})},this.uncheck_all=function(){if(this.settings.checkbox.tie_selection)return this.deselect_all();var e=this._data.checkbox.selected.concat([]),t,i;for(t=0,i=this._data.checkbox.selected.length;i>t;t++)this._model.data[this._data.checkbox.selected[t]]&&(this._model.data[this._data.checkbox.selected[t]].state.checked=!1);this._data.checkbox.selected=[],this.element.find(".jstree-checked").removeClass("jstree-checked"),this.trigger("uncheck_all",{selected:this._data.checkbox.selected,node:e})},this.is_checked=function(e){return this.settings.checkbox.tie_selection?this.is_selected(e):(e=this.get_node(e),e&&"#"!==e.id?e.state.checked:!1)},this.get_checked=function(t){return this.settings.checkbox.tie_selection?this.get_selected(t):t?e.map(this._data.checkbox.selected,e.proxy(function(e){return this.get_node(e)},this)):this._data.checkbox.selected},this.get_top_checked=function(t){if(this.settings.checkbox.tie_selection)return this.get_top_selected(t);var i=this.get_checked(!0),r={},s,n,a,d;for(s=0,n=i.length;n>s;s++)r[i[s].id]=i[s];for(s=0,n=i.length;n>s;s++)for(a=0,d=i[s].children_d.length;d>a;a++)r[i[s].children_d[a]]&&delete r[i[s].children_d[a]];i=[];for(s in r)r.hasOwnProperty(s)&&i.push(s);return t?e.map(i,e.proxy(function(e){return this.get_node(e)},this)):i},this.get_bottom_checked=function(t){if(this.settings.checkbox.tie_selection)return this.get_bottom_selected(t);var i=this.get_checked(!0),r=[],s,n;for(s=0,n=i.length;n>s;s++)i[s].children.length||r.push(i[s].id);return t?e.map(r,e.proxy(function(e){return this.get_node(e)},this)):r}},e.jstree.defaults.contextmenu={select_node:!0,show_at_node:!0,items:function(t,i){return{create:{separator_before:!1,separator_after:!0,_disabled:!1,label:"Create",action:function(t){var i=e.jstree.reference(t.reference),r=i.get_node(t.reference);i.create_node(r,{},"last",function(e){setTimeout(function(){i.edit(e)},0)})}},rename:{separator_before:!1,separator_after:!1,_disabled:!1,label:"Rename",action:function(t){var i=e.jstree.reference(t.reference),r=i.get_node(t.reference);i.edit(r)}},remove:{separator_before:!1,icon:!1,separator_after:!1,_disabled:!1,label:"Delete",action:function(t){var i=e.jstree.reference(t.reference),r=i.get_node(t.reference);i.is_selected(r)?i.delete_node(i.get_selected()):i.delete_node(r)}},ccp:{separator_before:!0,icon:!1,separator_after:!1,label:"Edit",action:!1,submenu:{cut:{separator_before:!1,separator_after:!1,label:"Cut",action:function(t){var i=e.jstree.reference(t.reference),r=i.get_node(t.reference);i.is_selected(r)?i.cut(i.get_selected()):i.cut(r)}},copy:{separator_before:!1,icon:!1,separator_after:!1,label:"Copy",action:function(t){var i=e.jstree.reference(t.reference),r=i.get_node(t.reference);i.is_selected(r)?i.copy(i.get_selected()):i.copy(r)}},paste:{separator_before:!1,icon:!1,_disabled:function(t){return!e.jstree.reference(t.reference).can_paste()},separator_after:!1,label:"Paste",action:function(t){var i=e.jstree.reference(t.reference),r=i.get_node(t.reference);i.paste(r)}}}}}}},e.jstree.plugins.contextmenu=function(i,r){this.bind=function(){r.bind.call(this);var t=0;this.element.on("contextmenu.jstree",".jstree-anchor",e.proxy(function(e){e.preventDefault(),t=e.ctrlKey?e.timeStamp:0,this.is_loading(e.currentTarget)||this.show_contextmenu(e.currentTarget,e.pageX,e.pageY,e)},this)).on("click.jstree",".jstree-anchor",e.proxy(function(i){this._data.contextmenu.visible&&(!t||i.timeStamp-t>250)&&e.vakata.context.hide()},this)),e(document).on("context_hide.vakata.jstree",e.proxy(function(){this._data.contextmenu.visible=!1},this))},this.teardown=function(){this._data.contextmenu.visible&&e.vakata.context.hide(),r.teardown.call(this)},this.show_contextmenu=function(i,r,s,n){if(i=this.get_node(i),!i||"#"===i.id)return!1;var a=this.settings.contextmenu,d=this.get_node(i,!0),o=d.children(".jstree-anchor"),c=!1,l=!1;(a.show_at_node||r===t||s===t)&&(c=o.offset(),r=c.left,s=c.top+this._data.core.li_height),this.settings.contextmenu.select_node&&!this.is_selected(i)&&this.activate_node(i,n),l=a.items,e.isFunction(l)&&(l=l.call(this,i,e.proxy(function(e){this._show_contextmenu(i,r,s,e)},this))),e.isPlainObject(l)&&this._show_contextmenu(i,r,s,l)},this._show_contextmenu=function(t,i,r,s){var n=this.get_node(t,!0),a=n.children(".jstree-anchor");e(document).one("context_show.vakata.jstree",e.proxy(function(t,i){var r="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";e(i.element).addClass(r)},this)),this._data.contextmenu.visible=!0,e.vakata.context.show(a,{x:i,y:r},s),this.trigger("show_contextmenu",{node:t,x:i,y:r})}},function(e){var i=!1,r={element:!1,reference:!1,position_x:0,position_y:0,items:[],html:"",is_visible:!1};e.vakata.context={settings:{hide_onmouseleave:0,icons:!0},_trigger:function(t){e(document).triggerHandler("context_"+t+".vakata",{reference:r.reference,element:r.element,position:{x:r.position_x,y:r.position_y}})},_execute:function(t){return t=r.items[t],t&&(!t._disabled||e.isFunction(t._disabled)&&!t._disabled({item:t,reference:r.reference,element:r.element}))&&t.action?t.action.call(null,{item:t,reference:r.reference,element:r.element,position:{x:r.position_x,y:r.position_y}}):!1},_parse:function(i,s){if(!i)return!1;s||(r.html="",r.items=[]);var n="",a=!1,d;return s&&(n+=""),e.each(i,function(i,s){return s?(r.items.push(s),!a&&s.separator_before&&(n+=" <"+"/a><"+"/li>"),a=!1,n+="",s.separator_after&&(n+=" <"+"/a><"+"/li>",a=!0),t):!0}),n=n.replace(/<\/li\>$/,""),s&&(n+=" "),s||(r.html=n,e.vakata.context._trigger("parse")),n.length>10?n:!1},_show_submenu:function(t){if(t=e(t),t.length&&t.children("ul").length){var r=t.children("ul"),s=t.offset().left+t.outerWidth(),n=t.offset().top,a=r.width(),d=r.height(),o=e(window).width()+e(window).scrollLeft(),c=e(window).height()+e(window).scrollTop();i?t[0>s-(a+10+t.outerWidth())?"addClass":"removeClass"]("vakata-context-left"):t[s+a+10>o?"addClass":"removeClass"]("vakata-context-right"),n+d+10>c&&r.css("bottom","-1px"),r.show()}},show:function(t,s,n){var a,d,o,c,l,h,_,u,g=!0;switch(r.element&&r.element.length&&r.element.width(""),g){case!s&&!t:return!1;case!!s&&!!t:r.reference=t,r.position_x=s.x,r.position_y=s.y;break;case!s&&!!t:r.reference=t,a=t.offset(),r.position_x=a.left+t.outerHeight(),r.position_y=a.top;break;case!!s&&!t:r.position_x=s.x,r.position_y=s.y}t&&!n&&e(t).data("vakata_contextmenu")&&(n=e(t).data("vakata_contextmenu")),e.vakata.context._parse(n)&&r.element.html(r.html),r.items.length&&(r.element.appendTo("body"),d=r.element,o=r.position_x,c=r.position_y,l=d.width(),h=d.height(),_=e(window).width()+e(window).scrollLeft(),u=e(window).height()+e(window).scrollTop(),i&&(o-=d.outerWidth(),e(window).scrollLeft()+20>o&&(o=e(window).scrollLeft()+20)),o+l+20>_&&(o=_-(l+20)),c+h+20>u&&(c=u-(h+20)),r.element.css({left:o,top:c}).show().find("a").first().focus().parent().addClass("vakata-context-hover"),r.is_visible=!0,e.vakata.context._trigger("show"))},hide:function(){r.is_visible&&(r.element.hide().find("ul").hide().end().find(":focus").blur().end().detach(),r.is_visible=!1,e.vakata.context._trigger("hide"))}},e(function(){i="rtl"===e("body").css("direction");var t=!1;r.element=e(""),r.element.on("mouseenter","li",function(i){i.stopImmediatePropagation(),e.contains(this,i.relatedTarget)||(t&&clearTimeout(t),r.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(),e(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover"),e.vakata.context._show_submenu(this))}).on("mouseleave","li",function(t){e.contains(this,t.relatedTarget)||e(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(i){e(this).find(".vakata-context-hover").removeClass("vakata-context-hover"),e.vakata.context.settings.hide_onmouseleave&&(t=setTimeout(function(t){return function(){e.vakata.context.hide()}}(this),e.vakata.context.settings.hide_onmouseleave))}).on("click","a",function(t){t.preventDefault(),e(this).blur().parent().hasClass("vakata-context-disabled")||e.vakata.context._execute(e(this).attr("rel"))===!1||e.vakata.context.hide()}).on("keydown","a",function(t){var i=null;switch(t.which){case 13:case 32:t.type="mouseup",t.preventDefault(),e(t.currentTarget).trigger(t);break;case 37:r.is_visible&&(r.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children("a").focus(),t.stopImmediatePropagation(),t.preventDefault());break;case 38:r.is_visible&&(i=r.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(),i.length||(i=r.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),i.addClass("vakata-context-hover").children("a").focus(),t.stopImmediatePropagation(),t.preventDefault());break;case 39:r.is_visible&&(r.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").focus(),t.stopImmediatePropagation(),t.preventDefault());break;case 40:r.is_visible&&(i=r.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),i.length||(i=r.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),i.addClass("vakata-context-hover").children("a").focus(),t.stopImmediatePropagation(),t.preventDefault());break;case 27:e.vakata.context.hide(),t.preventDefault();break;default:}}).on("keydown",function(e){e.preventDefault();var t=r.element.find(".vakata-contextmenu-shortcut-"+e.which).parent();t.parent().not(".vakata-context-disabled")&&t.click()}),e(document).on("mousedown.vakata.jstree",function(t){r.is_visible&&!e.contains(r.element[0],t.target)&&e.vakata.context.hide()}).on("context_show.vakata.jstree",function(e,t){r.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),i&&r.element.addClass("vakata-context-rtl").css("direction","rtl"),r.element.find("ul").hide().end()})})}(e),e.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1,inside_pos:0},e.jstree.plugins.dnd=function(i,r){this.bind=function(){r.bind.call(this),this.element.on("mousedown.jstree touchstart.jstree",".jstree-anchor",e.proxy(function(i){var r=this.get_node(i.target),s=this.is_selected(r)?this.get_selected().length:1;return r&&r.id&&"#"!==r.id&&(1===i.which||"touchstart"===i.type)&&(this.settings.dnd.is_draggable===!0||e.isFunction(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,s>1?this.get_selected(!0):[r]))?(this.element.trigger("mousedown.jstree"),e.vakata.dnd.start(i,{jstree:!0,origin:this,obj:this.get_node(r,!0),nodes:s>1?this.get_selected():[r.id]},' '+(s>1?s+" "+this.get_string("nodes"):this.get_text(i.currentTarget,!0))+'+
')):t},this))}},e(function(){var i=!1,r=!1,s=!1,n=e('
').hide();e(document).on("dnd_start.vakata.jstree",function(e,t){i=!1,t&&t.data&&t.data.jstree&&n.appendTo("body")}).on("dnd_move.vakata.jstree",function(a,d){if(s&&clearTimeout(s),d&&d.data&&d.data.jstree&&(!d.event.target.id||"jstree-marker"!==d.event.target.id)){var o=e.jstree.reference(d.event.target),c=!1,l=!1,h=!1,_,u,g,f,p,m,v,j,y,k,x,b,w,C;if(o&&o._data&&o._data.dnd)if(n.attr("class","jstree-"+o.get_theme()+(o.settings.core.themes.responsive?" jstree-dnd-responsive":"")),d.helper.children().attr("class","jstree-"+o.get_theme()+" jstree-"+o.get_theme()+"-"+o.get_theme_variant()+" "+(o.settings.core.themes.responsive?" jstree-dnd-responsive":"")).find(".jstree-copy").first()[d.data.origin&&(d.data.origin.settings.dnd.always_copy||d.data.origin.settings.dnd.copy&&(d.event.metaKey||d.event.ctrlKey))?"show":"hide"](),d.event.target!==o.element[0]&&d.event.target!==o.get_container_ul()[0]||0!==o.get_container_ul().children().length){if(c=e(d.event.target).closest(".jstree-anchor"),c&&c.length&&c.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")&&(l=c.offset(),h=d.event.pageY-l.top,g=c.height(),m=g/3>h?["b","i","a"]:h>g-g/3?["a","i","b"]:h>g/2?["i","a","b"]:["i","b","a"],e.each(m,function(a,h){switch(h){case"b":_=l.left-6,u=l.top,f=o.get_parent(c),p=c.parent().index();break;case"i":w=o.settings.dnd.inside_pos,C=o.get_node(c.parent()),_=l.left-2,u=l.top+g/2+1,f=C.id,p="first"===w?0:"last"===w?C.children.length:Math.min(w,C.children.length);break;case"a":_=l.left-6,u=l.top+g,f=o.get_parent(c),p=c.parent().index()+1}for(v=!0,j=0,y=d.data.nodes.length;y>j;j++)if(k=d.data.origin&&(d.data.origin.settings.dnd.always_copy||d.data.origin.settings.dnd.copy&&(d.event.metaKey||d.event.ctrlKey))?"copy_node":"move_node",x=p,"move_node"===k&&"a"===h&&d.data.origin&&d.data.origin===o&&f===o.get_parent(d.data.nodes[j])&&(b=o.get_node(f),x>e.inArray(d.data.nodes[j],b.children)&&(x-=1)),v=v&&(o&&o.settings&&o.settings.dnd&&o.settings.dnd.check_while_dragging===!1||o.check(k,d.data.origin&&d.data.origin!==o?d.data.origin.get_node(d.data.nodes[j]):d.data.nodes[j],f,x,{dnd:!0,ref:o.get_node(c.parent()),pos:h,is_multi:d.data.origin&&d.data.origin!==o,is_foreign:!d.data.origin})),!v){o&&o.last_error&&(r=o.last_error());break}return"i"===h&&c.parent().is(".jstree-closed")&&o.settings.dnd.open_timeout&&(s=setTimeout(function(e,t){return function(){e.open_node(t)}}(o,c),o.settings.dnd.open_timeout)),v?(i={ins:o,par:f,pos:"i"!==h||"last"!==w||0!==p||o.is_loaded(C)?p:"last"},n.css({left:_+"px",top:u+"px"}).show(),d.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),r={},m=!0,!1):t}),m===!0))return}else{for(v=!0,j=0,y=d.data.nodes.length;y>j;j++)if(v=v&&o.check(d.data.origin&&(d.data.origin.settings.dnd.always_copy||d.data.origin.settings.dnd.copy&&(d.event.metaKey||d.event.ctrlKey))?"copy_node":"move_node",d.data.origin&&d.data.origin!==o?d.data.origin.get_node(d.data.nodes[j]):d.data.nodes[j],"#","last",{dnd:!0,ref:o.get_node("#"),pos:"i",is_multi:d.data.origin&&d.data.origin!==o,is_foreign:!d.data.origin}),!v)break;if(v)return i={ins:o,par:"#",pos:"last"},n.hide(),d.helper.find(".jstree-icon").first().removeClass("jstree-er").addClass("jstree-ok"),t}i=!1,d.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er"),n.hide()}}).on("dnd_scroll.vakata.jstree",function(e,t){t&&t.data&&t.data.jstree&&(n.hide(),i=!1,t.helper.find(".jstree-icon").first().removeClass("jstree-ok").addClass("jstree-er"))}).on("dnd_stop.vakata.jstree",function(t,a){if(s&&clearTimeout(s),a&&a.data&&a.data.jstree){n.hide().detach();var d,o,c=[];if(i){for(d=0,o=a.data.nodes.length;o>d;d++)c[d]=a.data.origin?a.data.origin.get_node(a.data.nodes[d]):a.data.nodes[d],a.data.origin&&(c[d].instance=a.data.origin);for(i.ins[a.data.origin&&(a.data.origin.settings.dnd.always_copy||a.data.origin.settings.dnd.copy&&(a.event.metaKey||a.event.ctrlKey))?"copy_node":"move_node"](c,i.par,i.pos),d=0,o=c.length;o>d;d++)c[d].instance&&(c[d].instance=null)}else d=e(a.event.target).closest(".jstree"),d.length&&r&&r.error&&"check"===r.error&&(d=d.jstree(!0),d&&d.settings.core.error.call(this,r))}}).on("keyup.jstree keydown.jstree",function(t,i){i=e.vakata.dnd._get(),i&&i.data&&i.data.jstree&&i.helper.find(".jstree-copy").first()[i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(t.metaKey||t.ctrlKey))?"show":"hide"]()})}),function(e){var i={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1};e.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5,threshold_touch:50},_trigger:function(t,i){var r=e.vakata.dnd._get();r.event=i,e(document).triggerHandler("dnd_"+t+".vakata",r)},_get:function(){return{data:i.data,element:i.element,helper:i.helper}},_clean:function(){i.helper&&i.helper.remove(),i.scroll_i&&(clearInterval(i.scroll_i),i.scroll_i=!1),i={element:!1,target:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1,is_touch:!1},e(document).off("mousemove.vakata.jstree touchmove.vakata.jstree",e.vakata.dnd.drag),e(document).off("mouseup.vakata.jstree touchend.vakata.jstree",e.vakata.dnd.stop)},_scroll:function(t){if(!i.scroll_e||!i.scroll_l&&!i.scroll_t)return i.scroll_i&&(clearInterval(i.scroll_i),i.scroll_i=!1),!1;if(!i.scroll_i)return i.scroll_i=setInterval(e.vakata.dnd._scroll,100),!1;if(t===!0)return!1;var r=i.scroll_e.scrollTop(),s=i.scroll_e.scrollLeft();i.scroll_e.scrollTop(r+i.scroll_t*e.vakata.dnd.settings.scroll_speed),i.scroll_e.scrollLeft(s+i.scroll_l*e.vakata.dnd.settings.scroll_speed),(r!==i.scroll_e.scrollTop()||s!==i.scroll_e.scrollLeft())&&e.vakata.dnd._trigger("scroll",i.scroll_e)},start:function(t,r,s){"touchstart"===t.type&&t.originalEvent&&t.originalEvent.changedTouches&&t.originalEvent.changedTouches[0]&&(t.pageX=t.originalEvent.changedTouches[0].pageX,t.pageY=t.originalEvent.changedTouches[0].pageY,t.target=document.elementFromPoint(t.originalEvent.changedTouches[0].pageX-window.pageXOffset,t.originalEvent.changedTouches[0].pageY-window.pageYOffset)),i.is_drag&&e.vakata.dnd.stop({});try{t.currentTarget.unselectable="on",t.currentTarget.onselectstart=function(){return!1},t.currentTarget.style&&(t.currentTarget.style.MozUserSelect="none")}catch(n){}return i.init_x=t.pageX,i.init_y=t.pageY,i.data=r,i.is_down=!0,i.element=t.currentTarget,i.target=t.target,i.is_touch="touchstart"===t.type,s!==!1&&(i.helper=e("
").html(s).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})),e(document).on("mousemove.vakata.jstree touchmove.vakata.jstree",e.vakata.dnd.drag),e(document).on("mouseup.vakata.jstree touchend.vakata.jstree",e.vakata.dnd.stop),!1},drag:function(r){if("touchmove"===r.type&&r.originalEvent&&r.originalEvent.changedTouches&&r.originalEvent.changedTouches[0]&&(r.pageX=r.originalEvent.changedTouches[0].pageX,r.pageY=r.originalEvent.changedTouches[0].pageY,r.target=document.elementFromPoint(r.originalEvent.changedTouches[0].pageX-window.pageXOffset,r.originalEvent.changedTouches[0].pageY-window.pageYOffset)),i.is_down){if(!i.is_drag){if(!(Math.abs(r.pageX-i.init_x)>(i.is_touch?e.vakata.dnd.settings.threshold_touch:e.vakata.dnd.settings.threshold)||Math.abs(r.pageY-i.init_y)>(i.is_touch?e.vakata.dnd.settings.threshold_touch:e.vakata.dnd.settings.threshold)))return;i.helper&&(i.helper.appendTo("body"),i.helper_w=i.helper.outerWidth()),i.is_drag=!0,e.vakata.dnd._trigger("start",r)}var s=!1,n=!1,a=!1,d=!1,o=!1,c=!1,l=!1,h=!1,_=!1,u=!1;return i.scroll_t=0,i.scroll_l=0,i.scroll_e=!1,e(e(r.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return/^auto|scroll$/.test(e(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var s=e(this),n=s.offset();return this.scrollHeight>this.offsetHeight&&(n.top+s.height()-r.pageYthis.offsetWidth&&(n.left+s.width()-r.pageXd&&r.pageY-ld&&d-(r.pageY-l)c&&r.pageX-hc&&c-(r.pageX-h)a&&(_=a-50),o&&u+i.helper_w>o&&(u=o-(i.helper_w+2)),i.helper.css({left:u+"px",top:_+"px"})),e.vakata.dnd._trigger("move",r),!1
+}},stop:function(t){if("touchend"===t.type&&t.originalEvent&&t.originalEvent.changedTouches&&t.originalEvent.changedTouches[0]&&(t.pageX=t.originalEvent.changedTouches[0].pageX,t.pageY=t.originalEvent.changedTouches[0].pageY,t.target=document.elementFromPoint(t.originalEvent.changedTouches[0].pageX-window.pageXOffset,t.originalEvent.changedTouches[0].pageY-window.pageYOffset)),i.is_drag)e.vakata.dnd._trigger("stop",t);else if("touchend"===t.type&&t.target===i.target){var r=setTimeout(function(){e(t.target).click()},100);e(t.target).one("click",function(){r&&clearTimeout(r)})}return e.vakata.dnd._clean(),!1}}}(e),e.jstree.defaults.search={ajax:!1,fuzzy:!1,case_sensitive:!1,show_only_matches:!1,close_opened_onclear:!0,search_leaves_only:!1,search_callback:!1},e.jstree.plugins.search=function(i,r){this.bind=function(){r.bind.call(this),this._data.search.str="",this._data.search.dom=e(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=!1,this.element.on("before_open.jstree",e.proxy(function(t,i){var r,s,n,a=this._data.search.res,d=[],o=e();if(a&&a.length&&(this._data.search.dom=e(this.element[0].querySelectorAll("#"+e.map(a,function(t){return-1!=="0123456789".indexOf(t[0])?"\\3"+t[0]+" "+t.substr(1).replace(e.jstree.idregex,"\\$&"):t.replace(e.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.dom.children(".jstree-anchor").addClass("jstree-search"),this._data.search.som&&this._data.search.res.length)){for(r=0,s=a.length;s>r;r++)d=d.concat(this.get_node(a[r]).parents);d=e.vakata.array_remove_item(e.vakata.array_unique(d),"#"),o=d.length?e(this.element[0].querySelectorAll("#"+e.map(d,function(t){return-1!=="0123456789".indexOf(t[0])?"\\3"+t[0]+" "+t.substr(1).replace(e.jstree.idregex,"\\$&"):t.replace(e.jstree.idregex,"\\$&")}).join(", #"))):e(),this.element.find(".jstree-node").hide().filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last"),o=o.add(this._data.search.dom),o.parentsUntil(".jstree").addBack().show().filter(".jstree-children").each(function(){e(this).children(".jstree-node:visible").eq(-1).addClass("jstree-last")})}},this)).on("search.jstree",e.proxy(function(t,i){this._data.search.som&&i.nodes.length&&(this.element.find(".jstree-node").hide().filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last"),i.nodes.parentsUntil(".jstree").addBack().show().filter(".jstree-children").each(function(){e(this).children(".jstree-node:visible").eq(-1).addClass("jstree-last")}))},this)).on("clear_search.jstree",e.proxy(function(e,t){this._data.search.som&&t.nodes.length&&this.element.find(".jstree-node").css("display","").filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last")},this))},this.search=function(i,r,s){if(i===!1||""===e.trim(""+i))return this.clear_search();i=""+i;var n=this.settings.search,a=n.ajax?n.ajax:!1,d=null,o=[],c=[],l,h;return this._data.search.res.length&&this.clear_search(),s===t&&(s=n.show_only_matches),r||a===!1?(this._data.search.str=i,this._data.search.dom=e(),this._data.search.res=[],this._data.search.opn=[],this._data.search.som=s,d=new e.vakata.search(i,!0,{caseSensitive:n.case_sensitive,fuzzy:n.fuzzy}),e.each(this._model.data,function(e,t){t.text&&(n.search_callback&&n.search_callback.call(this,i,t)||!n.search_callback&&d.search(t.text).isMatch)&&(!n.search_leaves_only||t.state.loaded&&0===t.children.length)&&(o.push(e),c=c.concat(t.parents))}),o.length&&(c=e.vakata.array_unique(c),this._search_open(c),this._data.search.dom=e(this.element[0].querySelectorAll("#"+e.map(o,function(t){return-1!=="0123456789".indexOf(t[0])?"\\3"+t[0]+" "+t.substr(1).replace(e.jstree.idregex,"\\$&"):t.replace(e.jstree.idregex,"\\$&")}).join(", #"))),this._data.search.res=o,this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")),this.trigger("search",{nodes:this._data.search.dom,str:i,res:this._data.search.res,show_only_matches:s}),t):e.isFunction(a)?a.call(this,i,e.proxy(function(t){t&&t.d&&(t=t.d),this._load_nodes(e.isArray(t)?e.vakata.array_unique(t):[],function(){this.search(i,!0,s)},!0)},this)):(a=e.extend({},a),a.data||(a.data={}),a.data.str=i,e.ajax(a).fail(e.proxy(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(a)},this.settings.core.error.call(this,this._data.core.last_error)},this)).done(e.proxy(function(t){t&&t.d&&(t=t.d),this._load_nodes(e.isArray(t)?e.vakata.array_unique(t):[],function(){this.search(i,!0,s)},!0)},this)))},this.clear_search=function(){this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search"),this.settings.search.close_opened_onclear&&this.close_node(this._data.search.opn,0),this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res}),this._data.search.str="",this._data.search.res=[],this._data.search.opn=[],this._data.search.dom=e()},this._search_open=function(t){var i=this;e.each(t.concat([]),function(r,s){if("#"===s)return!0;try{s=e("#"+s.replace(e.jstree.idregex,"\\$&"),i.element)}catch(n){}s&&s.length&&i.is_closed(s)&&(i._data.search.opn.push(s[0].id),i.open_node(s,function(){i._search_open(t)},0))})}},function(e){e.vakata.search=function(e,t,i){i=i||{},i.fuzzy!==!1&&(i.fuzzy=!0),e=i.caseSensitive?e:e.toLowerCase();var r=i.location||0,s=i.distance||100,n=i.threshold||.6,a=e.length,d,o,c,l;return a>32&&(i.fuzzy=!1),i.fuzzy&&(d=1<i;i++)t[e.charAt(i)]=0;for(i=0;a>i;i++)t[e.charAt(i)]|=1<s;s++){g=0,f=p;while(f>g)_>=c(s,r+f)?g=f:p=f,f=Math.floor((p-g)/2+g);for(p=f,v=Math.max(1,r-f+1),j=Math.min(r+f,h)+a,y=Array(j+2),y[j+1]=(1<=v;l--)if(k=o[t.charAt(l-1)],y[l]=0===s?(1|y[l+1]<<1)&k:(1|y[l+1]<<1)&k|(1|(m[l+1]|m[l])<<1)|m[l+1],y[l]&d&&(x=c(s,l-1),_>=x)){if(_=x,u=l-1,b.push(u),!(u>r))break;v=Math.max(1,2*r-u)}if(c(s+1,r)>_)break;m=y}return{isMatch:u>=0,score:x}},t===!0?{search:l}:l(t)}}(e),e.jstree.defaults.sort=function(e,t){return this.get_text(e)>this.get_text(t)?1:-1},e.jstree.plugins.sort=function(t,i){this.bind=function(){i.bind.call(this),this.element.on("model.jstree",e.proxy(function(e,t){this.sort(t.parent,!0)},this)).on("rename_node.jstree create_node.jstree",e.proxy(function(e,t){this.sort(t.parent||t.node.parent,!1),this.redraw_node(t.parent||t.node.parent,!0)},this)).on("move_node.jstree copy_node.jstree",e.proxy(function(e,t){this.sort(t.parent,!1),this.redraw_node(t.parent,!0)},this))},this.sort=function(t,i){var r,s;if(t=this.get_node(t),t&&t.children&&t.children.length&&(t.children.sort(e.proxy(this.settings.sort,this)),i))for(r=0,s=t.children_d.length;s>r;r++)this.sort(t.children_d[r],!1)}};var u=!1;e.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree",ttl:!1,filter:!1},e.jstree.plugins.state=function(t,i){this.bind=function(){i.bind.call(this);var t=e.proxy(function(){this.element.on(this.settings.state.events,e.proxy(function(){u&&clearTimeout(u),u=setTimeout(e.proxy(function(){this.save_state()},this),100)},this))},this);this.element.on("ready.jstree",e.proxy(function(e,i){this.element.one("restore_state.jstree",t),this.restore_state()||t()},this))},this.save_state=function(){var t={state:this.get_state(),ttl:this.settings.state.ttl,sec:+new Date};e.vakata.storage.set(this.settings.state.key,JSON.stringify(t))},this.restore_state=function(){var t=e.vakata.storage.get(this.settings.state.key);if(t)try{t=JSON.parse(t)}catch(i){return!1}return t&&t.ttl&&t.sec&&+new Date-t.sec>t.ttl?!1:(t&&t.state&&(t=t.state),t&&e.isFunction(this.settings.state.filter)&&(t=this.settings.state.filter.call(this,t)),t?(this.element.one("set_state.jstree",function(i,r){r.instance.trigger("restore_state",{state:e.extend(!0,{},t)})}),this.set_state(t),!0):!1)},this.clear_state=function(){return e.vakata.storage.del(this.settings.state.key)}},function(e,t){e.vakata.storage={set:function(e,t){return window.localStorage.setItem(e,t)},get:function(e){return window.localStorage.getItem(e)},del:function(e){return window.localStorage.removeItem(e)}}}(e),e.jstree.defaults.types={"#":{},"default":{}},e.jstree.plugins.types=function(i,r){this.init=function(e,i){var s,n;if(i&&i.types&&i.types["default"])for(s in i.types)if("default"!==s&&"#"!==s&&i.types.hasOwnProperty(s))for(n in i.types["default"])i.types["default"].hasOwnProperty(n)&&i.types[s][n]===t&&(i.types[s][n]=i.types["default"][n]);r.init.call(this,e,i),this._model.data["#"].type="#"},this.refresh=function(e,t){r.refresh.call(this,e,t),this._model.data["#"].type="#"},this.bind=function(){this.element.on("model.jstree",e.proxy(function(e,i){var r=this._model.data,s=i.nodes,n=this.settings.types,a,d,o="default";for(a=0,d=s.length;d>a;a++)o="default",r[s[a]].original&&r[s[a]].original.type&&n[r[s[a]].original.type]&&(o=r[s[a]].original.type),r[s[a]].data&&r[s[a]].data.jstree&&r[s[a]].data.jstree.type&&n[r[s[a]].data.jstree.type]&&(o=r[s[a]].data.jstree.type),r[s[a]].type=o,r[s[a]].icon===!0&&n[o].icon!==t&&(r[s[a]].icon=n[o].icon);r["#"].type="#"},this)),r.bind.call(this)},this.get_json=function(t,i,s){var n,a,d=this._model.data,o=i?e.extend(!0,{},i,{no_id:!1}):{},c=r.get_json.call(this,t,o,s);if(c===!1)return!1;if(e.isArray(c))for(n=0,a=c.length;a>n;n++)c[n].type=c[n].id&&d[c[n].id]&&d[c[n].id].type?d[c[n].id].type:"default",i&&i.no_id&&(delete c[n].id,c[n].li_attr&&c[n].li_attr.id&&delete c[n].li_attr.id,c[n].a_attr&&c[n].a_attr.id&&delete c[n].a_attr.id);else c.type=c.id&&d[c.id]&&d[c.id].type?d[c.id].type:"default",i&&i.no_id&&(c=this._delete_ids(c));return c},this._delete_ids=function(t){if(e.isArray(t)){for(var i=0,r=t.length;r>i;i++)t[i]=this._delete_ids(t[i]);return t}return delete t.id,t.li_attr&&t.li_attr.id&&delete t.li_attr.id,t.a_attr&&t.a_attr.id&&delete t.a_attr.id,t.children&&e.isArray(t.children)&&(t.children=this._delete_ids(t.children)),t},this.check=function(i,s,n,a,d){if(r.check.call(this,i,s,n,a,d)===!1)return!1;s=s&&s.id?s:this.get_node(s),n=n&&n.id?n:this.get_node(n);var o=s&&s.id?e.jstree.reference(s.id):null,c,l,h,_;switch(o=o&&o._model&&o._model.data?o._model.data:null,i){case"create_node":case"move_node":case"copy_node":if("move_node"!==i||-1===e.inArray(s.id,n.children)){if(c=this.get_rules(n),c.max_children!==t&&-1!==c.max_children&&c.max_children===n.children.length)return this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+i,data:JSON.stringify({chk:i,pos:a,obj:s&&s.id?s.id:!1,par:n&&n.id?n.id:!1})},!1;if(c.valid_children!==t&&-1!==c.valid_children&&-1===e.inArray(s.type||"default",c.valid_children))return this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+i,data:JSON.stringify({chk:i,pos:a,obj:s&&s.id?s.id:!1,par:n&&n.id?n.id:!1})},!1;if(o&&s.children_d&&s.parents){for(l=0,h=0,_=s.children_d.length;_>h;h++)l=Math.max(l,o[s.children_d[h]].parents.length);l=l-s.parents.length+1}(0>=l||l===t)&&(l=1);do{if(c.max_depth!==t&&-1!==c.max_depth&&l>c.max_depth)return this._data.core.last_error={error:"check",plugin:"types",id:"types_03",reason:"max_depth prevents function: "+i,data:JSON.stringify({chk:i,pos:a,obj:s&&s.id?s.id:!1,par:n&&n.id?n.id:!1})},!1;n=this.get_node(n.parent),c=this.get_rules(n),l++}while(n)}}return!0},this.get_rules=function(e){if(e=this.get_node(e),!e)return!1;var i=this.get_type(e,!0);return i.max_depth===t&&(i.max_depth=-1),i.max_children===t&&(i.max_children=-1),i.valid_children===t&&(i.valid_children=-1),i},this.get_type=function(t,i){return t=this.get_node(t),t?i?e.extend({type:t.type},this.settings.types[t.type]):t.type:!1},this.set_type=function(i,r){var s,n,a,d,o;if(e.isArray(i)){for(i=i.slice(),n=0,a=i.length;a>n;n++)this.set_type(i[n],r);return!0}return s=this.settings.types,i=this.get_node(i),s[r]&&i?(d=i.type,o=this.get_icon(i),i.type=r,(o===!0||s[d]&&s[d].icon!==t&&o===s[d].icon)&&this.set_icon(i,s[r].icon!==t?s[r].icon:!0),!0):!1}},e.jstree.defaults.unique={case_sensitive:!1,duplicate:function(e,t){return e+" ("+t+")"}},e.jstree.plugins.unique=function(i,r){this.check=function(t,i,s,n,a){if(r.check.call(this,t,i,s,n,a)===!1)return!1;if(i=i&&i.id?i:this.get_node(i),s=s&&s.id?s:this.get_node(s),!s||!s.children)return!0;var d="rename_node"===t?n:i.text,o=[],c=this.settings.unique.case_sensitive,l=this._model.data,h,_;for(h=0,_=s.children.length;_>h;h++)o.push(c?l[s.children[h]].text:l[s.children[h]].text.toLowerCase());switch(c||(d=d.toLowerCase()),t){case"delete_node":return!0;case"rename_node":return h=-1===e.inArray(d,o)||i.text&&i.text[c?"toString":"toLowerCase"]()===d,h||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+d+" already exists. Preventing: "+t,data:JSON.stringify({chk:t,pos:n,obj:i&&i.id?i.id:!1,par:s&&s.id?s.id:!1})}),h;case"create_node":return h=-1===e.inArray(d,o),h||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_04",reason:"Child with name "+d+" already exists. Preventing: "+t,data:JSON.stringify({chk:t,pos:n,obj:i&&i.id?i.id:!1,par:s&&s.id?s.id:!1})}),h;case"copy_node":return h=-1===e.inArray(d,o),h||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_02",reason:"Child with name "+d+" already exists. Preventing: "+t,data:JSON.stringify({chk:t,pos:n,obj:i&&i.id?i.id:!1,par:s&&s.id?s.id:!1})}),h;case"move_node":return h=i.parent===s.id||-1===e.inArray(d,o),h||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_03",reason:"Child with name "+d+" already exists. Preventing: "+t,data:JSON.stringify({chk:t,pos:n,obj:i&&i.id?i.id:!1,par:s&&s.id?s.id:!1})}),h}return!0},this.create_node=function(i,s,n,a,d){if(!s||s.text===t){if(null===i&&(i="#"),i=this.get_node(i),!i)return r.create_node.call(this,i,s,n,a,d);if(n=n===t?"last":n,!(""+n).match(/^(before|after)$/)&&!d&&!this.is_loaded(i))return r.create_node.call(this,i,s,n,a,d);s||(s={});var o,c,l,h,_,u=this._model.data,g=this.settings.unique.case_sensitive,f=this.settings.unique.duplicate;for(c=o=this.get_string("New node"),l=[],h=0,_=i.children.length;_>h;h++)l.push(g?u[i.children[h]].text:u[i.children[h]].text.toLowerCase());h=1;while(-1!==e.inArray(g?c:c.toLowerCase(),l))c=""+f.call(this,o,++h);s.text=c}return r.create_node.call(this,i,s,n,a,d)}};var g=document.createElement("DIV");g.setAttribute("unselectable","on"),g.setAttribute("role","presentation"),g.className="jstree-wholerow",g.innerHTML=" ",e.jstree.plugins.wholerow=function(t,i){this.bind=function(){i.bind.call(this),this.element.on("ready.jstree set_state.jstree",e.proxy(function(){this.hide_dots()},this)).on("init.jstree loading.jstree ready.jstree",e.proxy(function(){this.get_container_ul().addClass("jstree-wholerow-ul")},this)).on("deselect_all.jstree",e.proxy(function(e,t){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")},this)).on("changed.jstree",e.proxy(function(e,t){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var i=!1,r,s;for(r=0,s=t.selected.length;s>r;r++)i=this.get_node(t.selected[r],!0),i&&i.length&&i.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("open_node.jstree",e.proxy(function(e,t){this.get_node(t.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("hover_node.jstree dehover_node.jstree",e.proxy(function(e,t){"hover_node"===e.type&&this.is_disabled(t.node)||this.get_node(t.node,!0).children(".jstree-wholerow")["hover_node"===e.type?"addClass":"removeClass"]("jstree-wholerow-hovered")},this)).on("contextmenu.jstree",".jstree-wholerow",e.proxy(function(t){t.preventDefault();var i=e.Event("contextmenu",{metaKey:t.metaKey,ctrlKey:t.ctrlKey,altKey:t.altKey,shiftKey:t.shiftKey,pageX:t.pageX,pageY:t.pageY});e(t.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(i)},this)).on("click.jstree",".jstree-wholerow",function(t){t.stopImmediatePropagation();var i=e.Event("click",{metaKey:t.metaKey,ctrlKey:t.ctrlKey,altKey:t.altKey,shiftKey:t.shiftKey});e(t.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(i).focus()}).on("click.jstree",".jstree-leaf > .jstree-ocl",e.proxy(function(t){t.stopImmediatePropagation();var i=e.Event("click",{metaKey:t.metaKey,ctrlKey:t.ctrlKey,altKey:t.altKey,shiftKey:t.shiftKey});e(t.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(i).focus()},this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",e.proxy(function(e){return e.stopImmediatePropagation(),this.is_disabled(e.currentTarget)||this.hover_node(e.currentTarget),!1},this)).on("mouseleave.jstree",".jstree-node",e.proxy(function(e){this.dehover_node(e.currentTarget)},this))},this.teardown=function(){this.settings.wholerow&&this.element.find(".jstree-wholerow").remove(),i.teardown.call(this)},this.redraw_node=function(t,r,s,n){if(t=i.redraw_node.apply(this,arguments)){var a=g.cloneNode(!0);-1!==e.inArray(t.id,this._data.core.selected)&&(a.className+=" jstree-wholerow-clicked"),this._data.core.focused&&this._data.core.focused===t.id&&(a.className+=" jstree-wholerow-hovered"),t.insertBefore(a,t.childNodes[0])}return t}},function(e){if(document.registerElement&&Object&&Object.create){var t=Object.create(HTMLElement.prototype);t.createdCallback=function(){var t={core:{},plugins:[]},i;for(i in e.jstree.plugins)e.jstree.plugins.hasOwnProperty(i)&&this.attributes[i]&&(t.plugins.push(i),this.getAttribute(i)&&JSON.parse(this.getAttribute(i))&&(t[i]=JSON.parse(this.getAttribute(i))));for(i in e.jstree.defaults.core)e.jstree.defaults.core.hasOwnProperty(i)&&this.attributes[i]&&(t.core[i]=JSON.parse(this.getAttribute(i))||this.getAttribute(i));jQuery(this).jstree(t)};try{document.registerElement("vakata-jstree",{prototype:t})}catch(i){}}}(jQuery)}});
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/32px.png b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/32px.png
new file mode 100644
index 000000000..d6fd72114
Binary files /dev/null and b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/32px.png differ
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/40px.png b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/40px.png
new file mode 100644
index 000000000..4fc88e41e
Binary files /dev/null and b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/40px.png differ
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/style.css b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/style.css
new file mode 100644
index 000000000..61b1417b5
--- /dev/null
+++ b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/style.css
@@ -0,0 +1,1094 @@
+/* jsTree default dark theme */
+.jstree-node,
+.jstree-children,
+.jstree-container-ul {
+ display: block;
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ list-style-image: none;
+}
+.jstree-node {
+ white-space: nowrap;
+}
+.jstree-anchor {
+ display: inline-block;
+ color: black;
+ white-space: nowrap;
+ padding: 0 4px 0 1px;
+ margin: 0;
+ vertical-align: top;
+}
+.jstree-anchor:focus {
+ outline: 0;
+}
+.jstree-anchor,
+.jstree-anchor:link,
+.jstree-anchor:visited,
+.jstree-anchor:hover,
+.jstree-anchor:active {
+ text-decoration: none;
+ color: inherit;
+}
+.jstree-icon {
+ display: inline-block;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ vertical-align: top;
+ text-align: center;
+}
+.jstree-icon:empty {
+ display: inline-block;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ vertical-align: top;
+ text-align: center;
+}
+.jstree-ocl {
+ cursor: pointer;
+}
+.jstree-leaf > .jstree-ocl {
+ cursor: default;
+}
+.jstree .jstree-open > .jstree-children {
+ display: block;
+}
+.jstree .jstree-closed > .jstree-children,
+.jstree .jstree-leaf > .jstree-children {
+ display: none;
+}
+.jstree-anchor > .jstree-themeicon {
+ margin-right: 2px;
+}
+.jstree-no-icons .jstree-themeicon,
+.jstree-anchor > .jstree-themeicon-hidden {
+ display: none;
+}
+.jstree-rtl .jstree-anchor {
+ padding: 0 1px 0 4px;
+}
+.jstree-rtl .jstree-anchor > .jstree-themeicon {
+ margin-left: 2px;
+ margin-right: 0;
+}
+.jstree-rtl .jstree-node {
+ margin-left: 0;
+}
+.jstree-rtl .jstree-container-ul > .jstree-node {
+ margin-right: 0;
+}
+.jstree-wholerow-ul {
+ position: relative;
+ display: inline-block;
+ min-width: 100%;
+}
+.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
+ cursor: pointer;
+}
+.jstree-wholerow-ul .jstree-anchor,
+.jstree-wholerow-ul .jstree-icon {
+ position: relative;
+}
+.jstree-wholerow-ul .jstree-wholerow {
+ width: 100%;
+ cursor: pointer;
+ position: absolute;
+ left: 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.vakata-context {
+ display: none;
+}
+.vakata-context,
+.vakata-context ul {
+ margin: 0;
+ padding: 2px;
+ position: absolute;
+ background: #f5f5f5;
+ border: 1px solid #979797;
+ -moz-box-shadow: 5px 5px 4px -4px #666666;
+ -webkit-box-shadow: 2px 2px 2px #999999;
+ box-shadow: 2px 2px 2px #999999;
+}
+.vakata-context ul {
+ list-style: none;
+ left: 100%;
+ margin-top: -2.7em;
+ margin-left: -4px;
+}
+.vakata-context .vakata-context-right ul {
+ left: auto;
+ right: 100%;
+ margin-left: auto;
+ margin-right: -4px;
+}
+.vakata-context li {
+ list-style: none;
+ display: inline;
+}
+.vakata-context li > a {
+ display: block;
+ padding: 0 2em 0 2em;
+ text-decoration: none;
+ width: auto;
+ color: black;
+ white-space: nowrap;
+ line-height: 2.4em;
+ -moz-text-shadow: 1px 1px 0 white;
+ -webkit-text-shadow: 1px 1px 0 white;
+ text-shadow: 1px 1px 0 white;
+ -moz-border-radius: 1px;
+ -webkit-border-radius: 1px;
+ border-radius: 1px;
+}
+.vakata-context li > a:hover {
+ position: relative;
+ background-color: #e8eff7;
+ -moz-box-shadow: 0 0 2px #0a6aa1;
+ -webkit-box-shadow: 0 0 2px #0a6aa1;
+ box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context li > a.vakata-context-parent {
+ background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
+ background-position: right center;
+ background-repeat: no-repeat;
+}
+.vakata-context li > a:focus {
+ outline: 0;
+}
+.vakata-context .vakata-context-hover > a {
+ position: relative;
+ background-color: #e8eff7;
+ -moz-box-shadow: 0 0 2px #0a6aa1;
+ -webkit-box-shadow: 0 0 2px #0a6aa1;
+ box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context .vakata-context-separator > a,
+.vakata-context .vakata-context-separator > a:hover {
+ background: white;
+ border: 0;
+ border-top: 1px solid #e2e3e3;
+ height: 1px;
+ min-height: 1px;
+ max-height: 1px;
+ padding: 0;
+ margin: 0 0 0 2.4em;
+ border-left: 1px solid #e0e0e0;
+ -moz-text-shadow: 0 0 0 transparent;
+ -webkit-text-shadow: 0 0 0 transparent;
+ text-shadow: 0 0 0 transparent;
+ -moz-box-shadow: 0 0 0 transparent;
+ -webkit-box-shadow: 0 0 0 transparent;
+ box-shadow: 0 0 0 transparent;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ border-radius: 0;
+}
+.vakata-context .vakata-contextmenu-disabled a,
+.vakata-context .vakata-contextmenu-disabled a:hover {
+ color: silver;
+ background-color: transparent;
+ border: 0;
+ box-shadow: 0 0 0;
+}
+.vakata-context li > a > i {
+ text-decoration: none;
+ display: inline-block;
+ width: 2.4em;
+ height: 2.4em;
+ background: transparent;
+ margin: 0 0 0 -2em;
+ vertical-align: top;
+ text-align: center;
+ line-height: 2.4em;
+}
+.vakata-context li > a > i:empty {
+ width: 2.4em;
+ line-height: 2.4em;
+}
+.vakata-context li > a .vakata-contextmenu-sep {
+ display: inline-block;
+ width: 1px;
+ height: 2.4em;
+ background: white;
+ margin: 0 0.5em 0 0;
+ border-left: 1px solid #e2e3e3;
+}
+.vakata-context .vakata-contextmenu-shortcut {
+ font-size: 0.8em;
+ color: silver;
+ opacity: 0.5;
+ display: none;
+}
+.vakata-context-rtl ul {
+ left: auto;
+ right: 100%;
+ margin-left: auto;
+ margin-right: -4px;
+}
+.vakata-context-rtl li > a.vakata-context-parent {
+ background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
+ background-position: left center;
+ background-repeat: no-repeat;
+}
+.vakata-context-rtl .vakata-context-separator > a {
+ margin: 0 2.4em 0 0;
+ border-left: 0;
+ border-right: 1px solid #e2e3e3;
+}
+.vakata-context-rtl .vakata-context-left ul {
+ right: auto;
+ left: 100%;
+ margin-left: -4px;
+ margin-right: auto;
+}
+.vakata-context-rtl li > a > i {
+ margin: 0 -2em 0 0;
+}
+.vakata-context-rtl li > a .vakata-contextmenu-sep {
+ margin: 0 0 0 0.5em;
+ border-left-color: white;
+ background: #e2e3e3;
+}
+#jstree-marker {
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: -5px 0 0 0;
+ padding: 0;
+ border-right: 0;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-left: 5px solid;
+ width: 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+}
+#jstree-dnd {
+ line-height: 16px;
+ margin: 0;
+ padding: 4px;
+}
+#jstree-dnd .jstree-icon,
+#jstree-dnd .jstree-copy {
+ display: inline-block;
+ text-decoration: none;
+ margin: 0 2px 0 0;
+ padding: 0;
+ width: 16px;
+ height: 16px;
+}
+#jstree-dnd .jstree-ok {
+ background: green;
+}
+#jstree-dnd .jstree-er {
+ background: red;
+}
+#jstree-dnd .jstree-copy {
+ margin: 0 2px 0 2px;
+}
+.jstree-default-dark .jstree-node,
+.jstree-default-dark .jstree-icon {
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+.jstree-default-dark .jstree-anchor,
+.jstree-default-dark .jstree-wholerow {
+ transition: background-color 0.15s, box-shadow 0.15s;
+}
+.jstree-default-dark .jstree-hovered {
+ background: #555555;
+ border-radius: 2px;
+ box-shadow: inset 0 0 1px #555555;
+}
+.jstree-default-dark .jstree-clicked {
+ background: #5fa2db;
+ border-radius: 2px;
+ box-shadow: inset 0 0 1px #666666;
+}
+.jstree-default-dark .jstree-no-icons .jstree-anchor > .jstree-themeicon {
+ display: none;
+}
+.jstree-default-dark .jstree-disabled {
+ background: transparent;
+ color: #666666;
+}
+.jstree-default-dark .jstree-disabled.jstree-hovered {
+ background: transparent;
+ box-shadow: none;
+}
+.jstree-default-dark .jstree-disabled.jstree-clicked {
+ background: #333333;
+}
+.jstree-default-dark .jstree-disabled > .jstree-icon {
+ opacity: 0.8;
+ filter: url("data:image/svg+xml;utf8, #jstree-grayscale");
+ /* Firefox 10+ */
+ filter: gray;
+ /* IE6-9 */
+ -webkit-filter: grayscale(100%);
+ /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default-dark .jstree-search {
+ font-style: italic;
+ color: #ffffff;
+ font-weight: bold;
+}
+.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox {
+ display: none !important;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked {
+ background: transparent;
+ box-shadow: none;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
+ background: #555555;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
+ background: transparent;
+}
+.jstree-default-dark.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
+ background: #555555;
+}
+.jstree-default-dark > .jstree-striped {
+ background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
+}
+.jstree-default-dark > .jstree-wholerow-ul .jstree-hovered,
+.jstree-default-dark > .jstree-wholerow-ul .jstree-clicked {
+ background: transparent;
+ box-shadow: none;
+ border-radius: 0;
+}
+.jstree-default-dark .jstree-wholerow {
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.jstree-default-dark .jstree-wholerow-hovered {
+ background: #555555;
+}
+.jstree-default-dark .jstree-wholerow-clicked {
+ background: #5fa2db;
+ background: -moz-linear-gradient(top, #5fa2db 0%, #5fa2db 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5fa2db), color-stop(100%, #5fa2db));
+ background: -webkit-linear-gradient(top, #5fa2db 0%, #5fa2db 100%);
+ background: -o-linear-gradient(top, #5fa2db 0%, #5fa2db 100%);
+ background: -ms-linear-gradient(top, #5fa2db 0%, #5fa2db 100%);
+ background: linear-gradient(to bottom, #5fa2db 0%, #5fa2db 100%);
+ /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );*/
+}
+.jstree-default-dark .jstree-node {
+ min-height: 24px;
+ line-height: 24px;
+ margin-left: 24px;
+ min-width: 24px;
+}
+.jstree-default-dark .jstree-anchor {
+ line-height: 24px;
+ height: 24px;
+}
+.jstree-default-dark .jstree-icon {
+ width: 24px;
+ height: 24px;
+ line-height: 24px;
+}
+.jstree-default-dark .jstree-icon:empty {
+ width: 24px;
+ height: 24px;
+ line-height: 24px;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+ margin-right: 24px;
+}
+.jstree-default-dark .jstree-wholerow {
+ height: 24px;
+}
+.jstree-default-dark .jstree-node,
+.jstree-default-dark .jstree-icon {
+ background-image: url("32px.png");
+}
+.jstree-default-dark .jstree-node {
+ background-position: -292px -4px;
+ background-repeat: repeat-y;
+}
+.jstree-default-dark .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark .jstree-open > .jstree-ocl {
+ background-position: -132px -4px;
+}
+.jstree-default-dark .jstree-closed > .jstree-ocl {
+ background-position: -100px -4px;
+}
+.jstree-default-dark .jstree-leaf > .jstree-ocl {
+ background-position: -68px -4px;
+}
+.jstree-default-dark .jstree-themeicon {
+ background-position: -260px -4px;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-node,
+.jstree-default-dark > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -36px -4px;
+}
+.jstree-default-dark > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: -4px -4px;
+}
+.jstree-default-dark .jstree-disabled {
+ background: transparent;
+}
+.jstree-default-dark .jstree-disabled.jstree-hovered {
+ background: transparent;
+}
+.jstree-default-dark .jstree-disabled.jstree-clicked {
+ background: #efefef;
+}
+.jstree-default-dark .jstree-checkbox {
+ background-position: -164px -4px;
+}
+.jstree-default-dark .jstree-checkbox:hover {
+ background-position: -164px -36px;
+}
+.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark .jstree-checked > .jstree-checkbox {
+ background-position: -228px -4px;
+}
+.jstree-default-dark.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark .jstree-checked > .jstree-checkbox:hover {
+ background-position: -228px -36px;
+}
+.jstree-default-dark .jstree-anchor > .jstree-undetermined {
+ background-position: -196px -4px;
+}
+.jstree-default-dark .jstree-anchor > .jstree-undetermined:hover {
+ background-position: -196px -36px;
+}
+.jstree-default-dark > .jstree-striped {
+ background-size: auto 48px;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+ background-position: 100% 1px;
+ background-repeat: repeat-y;
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark.jstree-rtl .jstree-open > .jstree-ocl {
+ background-position: -132px -36px;
+}
+.jstree-default-dark.jstree-rtl .jstree-closed > .jstree-ocl {
+ background-position: -100px -36px;
+}
+.jstree-default-dark.jstree-rtl .jstree-leaf > .jstree-ocl {
+ background-position: -68px -36px;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -36px -36px;
+}
+.jstree-default-dark.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: -4px -36px;
+}
+.jstree-default-dark .jstree-themeicon-custom {
+ background-color: transparent;
+ background-image: none;
+ background-position: 0 0;
+}
+.jstree-default-dark > .jstree-container-ul .jstree-loading > .jstree-ocl {
+ background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark .jstree-file {
+ background: url("32px.png") -100px -68px no-repeat;
+}
+.jstree-default-dark .jstree-folder {
+ background: url("32px.png") -260px -4px no-repeat;
+}
+.jstree-default-dark > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark {
+ line-height: 24px;
+ padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark .jstree-ok,
+#jstree-dnd.jstree-default-dark .jstree-er {
+ background-image: url("32px.png");
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark i {
+ background: transparent;
+ width: 24px;
+ height: 24px;
+ line-height: 24px;
+}
+#jstree-dnd.jstree-default-dark .jstree-ok {
+ background-position: -4px -68px;
+}
+#jstree-dnd.jstree-default-dark .jstree-er {
+ background-position: -36px -68px;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark-small .jstree-node {
+ min-height: 18px;
+ line-height: 18px;
+ margin-left: 18px;
+ min-width: 18px;
+}
+.jstree-default-dark-small .jstree-anchor {
+ line-height: 18px;
+ height: 18px;
+}
+.jstree-default-dark-small .jstree-icon {
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
+}
+.jstree-default-dark-small .jstree-icon:empty {
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+ margin-right: 18px;
+}
+.jstree-default-dark-small .jstree-wholerow {
+ height: 18px;
+}
+.jstree-default-dark-small .jstree-node,
+.jstree-default-dark-small .jstree-icon {
+ background-image: url("32px.png");
+}
+.jstree-default-dark-small .jstree-node {
+ background-position: -295px -7px;
+ background-repeat: repeat-y;
+}
+.jstree-default-dark-small .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark-small .jstree-open > .jstree-ocl {
+ background-position: -135px -7px;
+}
+.jstree-default-dark-small .jstree-closed > .jstree-ocl {
+ background-position: -103px -7px;
+}
+.jstree-default-dark-small .jstree-leaf > .jstree-ocl {
+ background-position: -71px -7px;
+}
+.jstree-default-dark-small .jstree-themeicon {
+ background-position: -263px -7px;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-node,
+.jstree-default-dark-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -39px -7px;
+}
+.jstree-default-dark-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: -7px -7px;
+}
+.jstree-default-dark-small .jstree-disabled {
+ background: transparent;
+}
+.jstree-default-dark-small .jstree-disabled.jstree-hovered {
+ background: transparent;
+}
+.jstree-default-dark-small .jstree-disabled.jstree-clicked {
+ background: #efefef;
+}
+.jstree-default-dark-small .jstree-checkbox {
+ background-position: -167px -7px;
+}
+.jstree-default-dark-small .jstree-checkbox:hover {
+ background-position: -167px -39px;
+}
+.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark-small .jstree-checked > .jstree-checkbox {
+ background-position: -231px -7px;
+}
+.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark-small .jstree-checked > .jstree-checkbox:hover {
+ background-position: -231px -39px;
+}
+.jstree-default-dark-small .jstree-anchor > .jstree-undetermined {
+ background-position: -199px -7px;
+}
+.jstree-default-dark-small .jstree-anchor > .jstree-undetermined:hover {
+ background-position: -199px -39px;
+}
+.jstree-default-dark-small > .jstree-striped {
+ background-size: auto 36px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+ background-position: 100% 1px;
+ background-repeat: repeat-y;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-open > .jstree-ocl {
+ background-position: -135px -39px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-closed > .jstree-ocl {
+ background-position: -103px -39px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-leaf > .jstree-ocl {
+ background-position: -71px -39px;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -39px -39px;
+}
+.jstree-default-dark-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: -7px -39px;
+}
+.jstree-default-dark-small .jstree-themeicon-custom {
+ background-color: transparent;
+ background-image: none;
+ background-position: 0 0;
+}
+.jstree-default-dark-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
+ background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark-small .jstree-file {
+ background: url("32px.png") -103px -71px no-repeat;
+}
+.jstree-default-dark-small .jstree-folder {
+ background: url("32px.png") -263px -7px no-repeat;
+}
+.jstree-default-dark-small > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark-small {
+ line-height: 18px;
+ padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-ok,
+#jstree-dnd.jstree-default-dark-small .jstree-er {
+ background-image: url("32px.png");
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark-small i {
+ background: transparent;
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-ok {
+ background-position: -7px -71px;
+}
+#jstree-dnd.jstree-default-dark-small .jstree-er {
+ background-position: -39px -71px;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark-large .jstree-node {
+ min-height: 32px;
+ line-height: 32px;
+ margin-left: 32px;
+ min-width: 32px;
+}
+.jstree-default-dark-large .jstree-anchor {
+ line-height: 32px;
+ height: 32px;
+}
+.jstree-default-dark-large .jstree-icon {
+ width: 32px;
+ height: 32px;
+ line-height: 32px;
+}
+.jstree-default-dark-large .jstree-icon:empty {
+ width: 32px;
+ height: 32px;
+ line-height: 32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+ margin-right: 32px;
+}
+.jstree-default-dark-large .jstree-wholerow {
+ height: 32px;
+}
+.jstree-default-dark-large .jstree-node,
+.jstree-default-dark-large .jstree-icon {
+ background-image: url("32px.png");
+}
+.jstree-default-dark-large .jstree-node {
+ background-position: -288px 0px;
+ background-repeat: repeat-y;
+}
+.jstree-default-dark-large .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark-large .jstree-open > .jstree-ocl {
+ background-position: -128px 0px;
+}
+.jstree-default-dark-large .jstree-closed > .jstree-ocl {
+ background-position: -96px 0px;
+}
+.jstree-default-dark-large .jstree-leaf > .jstree-ocl {
+ background-position: -64px 0px;
+}
+.jstree-default-dark-large .jstree-themeicon {
+ background-position: -256px 0px;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-node,
+.jstree-default-dark-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -32px 0px;
+}
+.jstree-default-dark-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: 0px 0px;
+}
+.jstree-default-dark-large .jstree-disabled {
+ background: transparent;
+}
+.jstree-default-dark-large .jstree-disabled.jstree-hovered {
+ background: transparent;
+}
+.jstree-default-dark-large .jstree-disabled.jstree-clicked {
+ background: #efefef;
+}
+.jstree-default-dark-large .jstree-checkbox {
+ background-position: -160px 0px;
+}
+.jstree-default-dark-large .jstree-checkbox:hover {
+ background-position: -160px -32px;
+}
+.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-dark-large .jstree-checked > .jstree-checkbox {
+ background-position: -224px 0px;
+}
+.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-dark-large .jstree-checked > .jstree-checkbox:hover {
+ background-position: -224px -32px;
+}
+.jstree-default-dark-large .jstree-anchor > .jstree-undetermined {
+ background-position: -192px 0px;
+}
+.jstree-default-dark-large .jstree-anchor > .jstree-undetermined:hover {
+ background-position: -192px -32px;
+}
+.jstree-default-dark-large > .jstree-striped {
+ background-size: auto 64px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+ background-position: 100% 1px;
+ background-repeat: repeat-y;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-open > .jstree-ocl {
+ background-position: -128px -32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-closed > .jstree-ocl {
+ background-position: -96px -32px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-leaf > .jstree-ocl {
+ background-position: -64px -32px;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -32px -32px;
+}
+.jstree-default-dark-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: 0px -32px;
+}
+.jstree-default-dark-large .jstree-themeicon-custom {
+ background-color: transparent;
+ background-image: none;
+ background-position: 0 0;
+}
+.jstree-default-dark-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
+ background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-dark-large .jstree-file {
+ background: url("32px.png") -96px -64px no-repeat;
+}
+.jstree-default-dark-large .jstree-folder {
+ background: url("32px.png") -256px 0px no-repeat;
+}
+.jstree-default-dark-large > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ margin-right: 0;
+}
+#jstree-dnd.jstree-default-dark-large {
+ line-height: 32px;
+ padding: 0 4px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-ok,
+#jstree-dnd.jstree-default-dark-large .jstree-er {
+ background-image: url("32px.png");
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+#jstree-dnd.jstree-default-dark-large i {
+ background: transparent;
+ width: 32px;
+ height: 32px;
+ line-height: 32px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-ok {
+ background-position: 0px -64px;
+}
+#jstree-dnd.jstree-default-dark-large .jstree-er {
+ background-position: -32px -64px;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+ background: transparent;
+}
+@media (max-width: 768px) {
+ #jstree-dnd.jstree-dnd-responsive {
+ line-height: 40px;
+ font-weight: bold;
+ font-size: 1.1em;
+ text-shadow: 1px 1px white;
+ }
+ #jstree-dnd.jstree-dnd-responsive > i {
+ background: transparent;
+ width: 40px;
+ height: 40px;
+ }
+ #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
+ background-image: url("40px.png");
+ background-position: 0 -200px;
+ background-size: 120px 240px;
+ }
+ #jstree-dnd.jstree-dnd-responsive > .jstree-er {
+ background-image: url("40px.png");
+ background-position: -40px -200px;
+ background-size: 120px 240px;
+ }
+ #jstree-marker.jstree-dnd-responsive {
+ border-left-width: 10px;
+ border-top-width: 10px;
+ border-bottom-width: 10px;
+ margin-top: -10px;
+ }
+}
+@media (max-width: 768px) {
+ .jstree-default-dark-responsive {
+ /*
+ .jstree-open > .jstree-ocl,
+ .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
+ */
+ }
+ .jstree-default-dark-responsive .jstree-icon {
+ background-image: url("40px.png");
+ }
+ .jstree-default-dark-responsive .jstree-node,
+ .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
+ background: transparent;
+ }
+ .jstree-default-dark-responsive .jstree-node {
+ min-height: 40px;
+ line-height: 40px;
+ margin-left: 40px;
+ min-width: 40px;
+ white-space: nowrap;
+ }
+ .jstree-default-dark-responsive .jstree-anchor {
+ line-height: 40px;
+ height: 40px;
+ }
+ .jstree-default-dark-responsive .jstree-icon,
+ .jstree-default-dark-responsive .jstree-icon:empty {
+ width: 40px;
+ height: 40px;
+ line-height: 40px;
+ }
+ .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ }
+ .jstree-default-dark-responsive.jstree-rtl .jstree-node {
+ margin-left: 0;
+ margin-right: 40px;
+ }
+ .jstree-default-dark-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
+ margin-right: 0;
+ }
+ .jstree-default-dark-responsive .jstree-ocl,
+ .jstree-default-dark-responsive .jstree-themeicon,
+ .jstree-default-dark-responsive .jstree-checkbox {
+ background-size: 120px 240px;
+ }
+ .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
+ background: transparent;
+ }
+ .jstree-default-dark-responsive .jstree-open > .jstree-ocl {
+ background-position: 0 0px !important;
+ }
+ .jstree-default-dark-responsive .jstree-closed > .jstree-ocl {
+ background-position: 0 -40px !important;
+ }
+ .jstree-default-dark-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
+ background-position: -40px 0px !important;
+ }
+ .jstree-default-dark-responsive .jstree-themeicon {
+ background-position: -40px -40px;
+ }
+ .jstree-default-dark-responsive .jstree-checkbox,
+ .jstree-default-dark-responsive .jstree-checkbox:hover {
+ background-position: -40px -80px;
+ }
+ .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+ .jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+ .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox,
+ .jstree-default-dark-responsive .jstree-checked > .jstree-checkbox:hover {
+ background-position: 0 -80px;
+ }
+ .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined,
+ .jstree-default-dark-responsive .jstree-anchor > .jstree-undetermined:hover {
+ background-position: 0 -120px;
+ }
+ .jstree-default-dark-responsive .jstree-anchor {
+ font-weight: bold;
+ font-size: 1.1em;
+ text-shadow: 1px 1px white;
+ }
+ .jstree-default-dark-responsive > .jstree-striped {
+ background: transparent;
+ }
+ .jstree-default-dark-responsive .jstree-wholerow {
+ border-top: 1px solid #666666;
+ border-bottom: 1px solid #000000;
+ background: #333333;
+ height: 40px;
+ }
+ .jstree-default-dark-responsive .jstree-wholerow-hovered {
+ background: #555555;
+ }
+ .jstree-default-dark-responsive .jstree-wholerow-clicked {
+ background: #5fa2db;
+ }
+ .jstree-default-dark-responsive .jstree-children .jstree-last > .jstree-wholerow {
+ box-shadow: inset 0 -6px 3px -5px #111111;
+ }
+ .jstree-default-dark-responsive .jstree-children .jstree-open > .jstree-wholerow {
+ box-shadow: inset 0 6px 3px -5px #111111;
+ border-top: 0;
+ }
+ .jstree-default-dark-responsive .jstree-children .jstree-open + .jstree-open {
+ box-shadow: none;
+ }
+ .jstree-default-dark-responsive .jstree-node,
+ .jstree-default-dark-responsive .jstree-icon,
+ .jstree-default-dark-responsive .jstree-node > .jstree-ocl,
+ .jstree-default-dark-responsive .jstree-themeicon,
+ .jstree-default-dark-responsive .jstree-checkbox {
+ background-image: url("40px.png");
+ background-size: 120px 240px;
+ }
+ .jstree-default-dark-responsive .jstree-node {
+ background-position: -80px 0;
+ background-repeat: repeat-y;
+ }
+ .jstree-default-dark-responsive .jstree-last {
+ background: transparent;
+ }
+ .jstree-default-dark-responsive .jstree-leaf > .jstree-ocl {
+ background-position: -40px -120px;
+ }
+ .jstree-default-dark-responsive .jstree-last > .jstree-ocl {
+ background-position: -40px -160px;
+ }
+ .jstree-default-dark-responsive .jstree-themeicon-custom {
+ background-color: transparent;
+ background-image: none;
+ background-position: 0 0;
+ }
+ .jstree-default-dark-responsive .jstree-file {
+ background: url("40px.png") 0 -160px no-repeat;
+ background-size: 120px 240px;
+ }
+ .jstree-default-dark-responsive .jstree-folder {
+ background: url("40px.png") -40px -40px no-repeat;
+ background-size: 120px 240px;
+ }
+ .jstree-default-dark-responsive > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ margin-right: 0;
+ }
+}
+.jstree-default-dark {
+ background: #333;
+}
+.jstree-default-dark .jstree-anchor {
+ color: #999;
+ text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.5);
+}
+.jstree-default-dark .jstree-clicked,
+.jstree-default-dark .jstree-checked {
+ color: white;
+}
+.jstree-default-dark .jstree-hovered {
+ color: white;
+}
+#jstree-marker.jstree-default-dark {
+ border-left-color: #999;
+ background: transparent;
+}
+.jstree-default-dark .jstree-anchor > .jstree-icon {
+ opacity: 0.75;
+}
+.jstree-default-dark .jstree-clicked > .jstree-icon,
+.jstree-default-dark .jstree-hovered > .jstree-icon,
+.jstree-default-dark .jstree-checked > .jstree-icon {
+ opacity: 1;
+}
+.jstree-default-dark.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark-small.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-small.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-dark-large.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-dark-large.jstree-rtl .jstree-last {
+ background: transparent;
+}
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/style.min.css b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/style.min.css
new file mode 100644
index 000000000..6403484cf
--- /dev/null
+++ b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/style.min.css
@@ -0,0 +1 @@
+.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;-moz-box-shadow:5px 5px 4px -4px #666;-webkit-box-shadow:2px 2px 2px #999;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none;display:inline}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;-moz-text-shadow:1px 1px 0 #fff;-webkit-text-shadow:1px 1px 0 #fff;text-shadow:1px 1px 0 #fff;-moz-border-radius:1px;-webkit-border-radius:1px;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;-moz-box-shadow:0 0 2px #0a6aa1;-webkit-box-shadow:0 0 2px #0a6aa1;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;-moz-box-shadow:0 0 2px #0a6aa1;-webkit-box-shadow:0 0 2px #0a6aa1;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;-moz-text-shadow:0 0 0 transparent;-webkit-text-shadow:0 0 0 transparent;text-shadow:0 0 0 transparent;-moz-box-shadow:0 0 0 transparent;-webkit-box-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default-dark .jstree-anchor,.jstree-default-dark .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default-dark .jstree-hovered{background:#555;border-radius:2px;box-shadow:inset 0 0 1px #555}.jstree-default-dark .jstree-clicked{background:#5fa2db;border-radius:2px;box-shadow:inset 0 0 1px #666}.jstree-default-dark .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default-dark .jstree-disabled{background:0 0;color:#666}.jstree-default-dark .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#333}.jstree-default-dark .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8, #jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark .jstree-search{font-style:italic;color:#fff;font-weight:700}.jstree-default-dark .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default-dark.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#555}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default-dark.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#555}.jstree-default-dark>.jstree-striped{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default-dark>.jstree-wholerow-ul .jstree-hovered,.jstree-default-dark>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default-dark .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default-dark .jstree-wholerow-hovered{background:#555}.jstree-default-dark .jstree-wholerow-clicked{background:#5fa2db;background:-moz-linear-gradient(top,#5fa2db 0,#5fa2db 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#5fa2db),color-stop(100%,#5fa2db));background:-webkit-linear-gradient(top,#5fa2db 0,#5fa2db 100%);background:-o-linear-gradient(top,#5fa2db 0,#5fa2db 100%);background:-ms-linear-gradient(top,#5fa2db 0,#5fa2db 100%);background:linear-gradient(to bottom,#5fa2db 0,#5fa2db 100%)}.jstree-default-dark .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default-dark .jstree-anchor{line-height:24px;height:24px}.jstree-default-dark .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default-dark .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default-dark.jstree-rtl .jstree-node{margin-right:24px}.jstree-default-dark .jstree-wholerow{height:24px}.jstree-default-dark .jstree-node,.jstree-default-dark .jstree-icon{background-image:url(32px.png)}.jstree-default-dark .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default-dark .jstree-last{background:0 0}.jstree-default-dark .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default-dark .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default-dark .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default-dark .jstree-themeicon{background-position:-260px -4px}.jstree-default-dark>.jstree-no-dots .jstree-node,.jstree-default-dark>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default-dark>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default-dark .jstree-disabled{background:0 0}.jstree-default-dark .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark .jstree-checkbox{background-position:-164px -4px}.jstree-default-dark .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default-dark.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default-dark .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default-dark .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default-dark>.jstree-striped{background-size:auto 48px}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default-dark.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default-dark.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default-dark.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default-dark .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default-dark .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default-dark>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default-dark .jstree-ok,#jstree-dnd.jstree-default-dark .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default-dark .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default-dark .jstree-er{background-position:-36px -68px}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-dark-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-dark-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-dark-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-dark-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-dark-small .jstree-wholerow{height:18px}.jstree-default-dark-small .jstree-node,.jstree-default-dark-small .jstree-icon{background-image:url(32px.png)}.jstree-default-dark-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-dark-small .jstree-last{background:0 0}.jstree-default-dark-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-dark-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-dark-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-dark-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-node,.jstree-default-dark-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-dark-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-dark-small .jstree-disabled{background:0 0}.jstree-default-dark-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-dark-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-dark-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-dark-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-dark-small>.jstree-striped{background-size:auto 36px}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-dark-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-dark-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-dark-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-dark-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-dark-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-dark-small .jstree-ok,#jstree-dnd.jstree-default-dark-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-dark-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-dark-small .jstree-er{background-position:-39px -71px}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-dark-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-dark-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-dark-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-dark-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-dark-large .jstree-wholerow{height:32px}.jstree-default-dark-large .jstree-node,.jstree-default-dark-large .jstree-icon{background-image:url(32px.png)}.jstree-default-dark-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-dark-large .jstree-last{background:0 0}.jstree-default-dark-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-dark-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-dark-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-dark-large .jstree-themeicon{background-position:-256px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-node,.jstree-default-dark-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-dark-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-dark-large .jstree-disabled{background:0 0}.jstree-default-dark-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-dark-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-dark-large .jstree-checkbox{background-position:-160px 0}.jstree-default-dark-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-dark-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-dark-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-dark-large>.jstree-striped{background-size:auto 64px}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-dark-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-dark-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-dark-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-dark-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-dark-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-dark-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-dark-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-dark-large .jstree-ok,#jstree-dnd.jstree-default-dark-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-dark-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-dark-large .jstree-er{background-position:-32px -64px}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-dark-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-dark-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-dark-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px}.jstree-default-dark-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-dark-responsive .jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-dark-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-dark-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-dark-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-dark-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-dark-responsive .jstree-checkbox,.jstree-default-dark-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-dark-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox,.jstree-default-dark-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-dark-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-dark-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-dark-responsive>.jstree-striped{background:0 0}.jstree-default-dark-responsive .jstree-wholerow{border-top:1px solid #666;border-bottom:1px solid #000;background:#333;height:40px}.jstree-default-dark-responsive .jstree-wholerow-hovered{background:#555}.jstree-default-dark-responsive .jstree-wholerow-clicked{background:#5fa2db}.jstree-default-dark-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #111}.jstree-default-dark-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #111;border-top:0}.jstree-default-dark-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-dark-responsive .jstree-node,.jstree-default-dark-responsive .jstree-icon,.jstree-default-dark-responsive .jstree-node>.jstree-ocl,.jstree-default-dark-responsive .jstree-themeicon,.jstree-default-dark-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-dark-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-dark-responsive .jstree-last{background:0 0}.jstree-default-dark-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-dark-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-dark-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-dark-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}.jstree-default-dark{background:#333}.jstree-default-dark .jstree-anchor{color:#999;text-shadow:1px 1px 0 rgba(0,0,0,.5)}.jstree-default-dark .jstree-clicked,.jstree-default-dark .jstree-checked{color:#fff}.jstree-default-dark .jstree-hovered{color:#fff}#jstree-marker.jstree-default-dark{border-left-color:#999;background:0 0}.jstree-default-dark .jstree-anchor>.jstree-icon{opacity:.75}.jstree-default-dark .jstree-clicked>.jstree-icon,.jstree-default-dark .jstree-hovered>.jstree-icon,.jstree-default-dark .jstree-checked>.jstree-icon{opacity:1}.jstree-default-dark.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default-dark.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-dark-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-dark-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAACZmZl+9SADAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-dark-large.jstree-rtl .jstree-last{background:0 0}
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/throbber.gif b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/throbber.gif
new file mode 100644
index 000000000..cd75035ce
Binary files /dev/null and b/dashboard-ui/thirdparty/jstree3.0.8/themes/default-dark/throbber.gif differ
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default/32px.png b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/32px.png
new file mode 100644
index 000000000..153271524
Binary files /dev/null and b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/32px.png differ
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default/40px.png b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/40px.png
new file mode 100644
index 000000000..1959347ae
Binary files /dev/null and b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/40px.png differ
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default/style.css b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/style.css
new file mode 100644
index 000000000..bf6417709
--- /dev/null
+++ b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/style.css
@@ -0,0 +1,1050 @@
+/* jsTree default theme */
+.jstree-node,
+.jstree-children,
+.jstree-container-ul {
+ display: block;
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ list-style-image: none;
+}
+.jstree-node {
+ white-space: nowrap;
+}
+.jstree-anchor {
+ display: inline-block;
+ color: black;
+ white-space: nowrap;
+ padding: 0 4px 0 1px;
+ margin: 0;
+ vertical-align: top;
+}
+.jstree-anchor:focus {
+ outline: 0;
+}
+.jstree-anchor,
+.jstree-anchor:link,
+.jstree-anchor:visited,
+.jstree-anchor:hover,
+.jstree-anchor:active {
+ text-decoration: none;
+ color: inherit;
+}
+.jstree-icon {
+ display: inline-block;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ vertical-align: top;
+ text-align: center;
+}
+.jstree-icon:empty {
+ display: inline-block;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ vertical-align: top;
+ text-align: center;
+}
+.jstree-ocl {
+ cursor: pointer;
+}
+.jstree-leaf > .jstree-ocl {
+ cursor: default;
+}
+.jstree .jstree-open > .jstree-children {
+ display: block;
+}
+.jstree .jstree-closed > .jstree-children,
+.jstree .jstree-leaf > .jstree-children {
+ display: none;
+}
+.jstree-anchor > .jstree-themeicon {
+ margin-right: 2px;
+}
+.jstree-no-icons .jstree-themeicon,
+.jstree-anchor > .jstree-themeicon-hidden {
+ display: none;
+}
+.jstree-rtl .jstree-anchor {
+ padding: 0 1px 0 4px;
+}
+.jstree-rtl .jstree-anchor > .jstree-themeicon {
+ margin-left: 2px;
+ margin-right: 0;
+}
+.jstree-rtl .jstree-node {
+ margin-left: 0;
+}
+.jstree-rtl .jstree-container-ul > .jstree-node {
+ margin-right: 0;
+}
+.jstree-wholerow-ul {
+ position: relative;
+ display: inline-block;
+ min-width: 100%;
+}
+.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
+ cursor: pointer;
+}
+.jstree-wholerow-ul .jstree-anchor,
+.jstree-wholerow-ul .jstree-icon {
+ position: relative;
+}
+.jstree-wholerow-ul .jstree-wholerow {
+ width: 100%;
+ cursor: pointer;
+ position: absolute;
+ left: 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.vakata-context {
+ display: none;
+}
+.vakata-context,
+.vakata-context ul {
+ margin: 0;
+ padding: 2px;
+ position: absolute;
+ background: #f5f5f5;
+ border: 1px solid #979797;
+ -moz-box-shadow: 5px 5px 4px -4px #666666;
+ -webkit-box-shadow: 2px 2px 2px #999999;
+ box-shadow: 2px 2px 2px #999999;
+}
+.vakata-context ul {
+ list-style: none;
+ left: 100%;
+ margin-top: -2.7em;
+ margin-left: -4px;
+}
+.vakata-context .vakata-context-right ul {
+ left: auto;
+ right: 100%;
+ margin-left: auto;
+ margin-right: -4px;
+}
+.vakata-context li {
+ list-style: none;
+ display: inline;
+}
+.vakata-context li > a {
+ display: block;
+ padding: 0 2em 0 2em;
+ text-decoration: none;
+ width: auto;
+ color: black;
+ white-space: nowrap;
+ line-height: 2.4em;
+ -moz-text-shadow: 1px 1px 0 white;
+ -webkit-text-shadow: 1px 1px 0 white;
+ text-shadow: 1px 1px 0 white;
+ -moz-border-radius: 1px;
+ -webkit-border-radius: 1px;
+ border-radius: 1px;
+}
+.vakata-context li > a:hover {
+ position: relative;
+ background-color: #e8eff7;
+ -moz-box-shadow: 0 0 2px #0a6aa1;
+ -webkit-box-shadow: 0 0 2px #0a6aa1;
+ box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context li > a.vakata-context-parent {
+ background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
+ background-position: right center;
+ background-repeat: no-repeat;
+}
+.vakata-context li > a:focus {
+ outline: 0;
+}
+.vakata-context .vakata-context-hover > a {
+ position: relative;
+ background-color: #e8eff7;
+ -moz-box-shadow: 0 0 2px #0a6aa1;
+ -webkit-box-shadow: 0 0 2px #0a6aa1;
+ box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context .vakata-context-separator > a,
+.vakata-context .vakata-context-separator > a:hover {
+ background: white;
+ border: 0;
+ border-top: 1px solid #e2e3e3;
+ height: 1px;
+ min-height: 1px;
+ max-height: 1px;
+ padding: 0;
+ margin: 0 0 0 2.4em;
+ border-left: 1px solid #e0e0e0;
+ -moz-text-shadow: 0 0 0 transparent;
+ -webkit-text-shadow: 0 0 0 transparent;
+ text-shadow: 0 0 0 transparent;
+ -moz-box-shadow: 0 0 0 transparent;
+ -webkit-box-shadow: 0 0 0 transparent;
+ box-shadow: 0 0 0 transparent;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ border-radius: 0;
+}
+.vakata-context .vakata-contextmenu-disabled a,
+.vakata-context .vakata-contextmenu-disabled a:hover {
+ color: silver;
+ background-color: transparent;
+ border: 0;
+ box-shadow: 0 0 0;
+}
+.vakata-context li > a > i {
+ text-decoration: none;
+ display: inline-block;
+ width: 2.4em;
+ height: 2.4em;
+ background: transparent;
+ margin: 0 0 0 -2em;
+ vertical-align: top;
+ text-align: center;
+ line-height: 2.4em;
+}
+.vakata-context li > a > i:empty {
+ width: 2.4em;
+ line-height: 2.4em;
+}
+.vakata-context li > a .vakata-contextmenu-sep {
+ display: inline-block;
+ width: 1px;
+ height: 2.4em;
+ background: white;
+ margin: 0 0.5em 0 0;
+ border-left: 1px solid #e2e3e3;
+}
+.vakata-context .vakata-contextmenu-shortcut {
+ font-size: 0.8em;
+ color: silver;
+ opacity: 0.5;
+ display: none;
+}
+.vakata-context-rtl ul {
+ left: auto;
+ right: 100%;
+ margin-left: auto;
+ margin-right: -4px;
+}
+.vakata-context-rtl li > a.vakata-context-parent {
+ background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
+ background-position: left center;
+ background-repeat: no-repeat;
+}
+.vakata-context-rtl .vakata-context-separator > a {
+ margin: 0 2.4em 0 0;
+ border-left: 0;
+ border-right: 1px solid #e2e3e3;
+}
+.vakata-context-rtl .vakata-context-left ul {
+ right: auto;
+ left: 100%;
+ margin-left: -4px;
+ margin-right: auto;
+}
+.vakata-context-rtl li > a > i {
+ margin: 0 -2em 0 0;
+}
+.vakata-context-rtl li > a .vakata-contextmenu-sep {
+ margin: 0 0 0 0.5em;
+ border-left-color: white;
+ background: #e2e3e3;
+}
+#jstree-marker {
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: -5px 0 0 0;
+ padding: 0;
+ border-right: 0;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-left: 5px solid;
+ width: 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+}
+#jstree-dnd {
+ line-height: 16px;
+ margin: 0;
+ padding: 4px;
+}
+#jstree-dnd .jstree-icon,
+#jstree-dnd .jstree-copy {
+ display: inline-block;
+ text-decoration: none;
+ margin: 0 2px 0 0;
+ padding: 0;
+ width: 16px;
+ height: 16px;
+}
+#jstree-dnd .jstree-ok {
+ background: green;
+}
+#jstree-dnd .jstree-er {
+ background: red;
+}
+#jstree-dnd .jstree-copy {
+ margin: 0 2px 0 2px;
+}
+.jstree-default .jstree-node,
+.jstree-default .jstree-icon {
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+.jstree-default .jstree-anchor,
+.jstree-default .jstree-wholerow {
+ transition: background-color 0.15s, box-shadow 0.15s;
+}
+.jstree-default .jstree-hovered {
+ background: #e7f4f9;
+ border-radius: 2px;
+ box-shadow: inset 0 0 1px #cccccc;
+}
+.jstree-default .jstree-clicked {
+ background: #beebff;
+ border-radius: 2px;
+ box-shadow: inset 0 0 1px #999999;
+}
+.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon {
+ display: none;
+}
+.jstree-default .jstree-disabled {
+ background: transparent;
+ color: #666666;
+}
+.jstree-default .jstree-disabled.jstree-hovered {
+ background: transparent;
+ box-shadow: none;
+}
+.jstree-default .jstree-disabled.jstree-clicked {
+ background: #efefef;
+}
+.jstree-default .jstree-disabled > .jstree-icon {
+ opacity: 0.8;
+ filter: url("data:image/svg+xml;utf8, #jstree-grayscale");
+ /* Firefox 10+ */
+ filter: gray;
+ /* IE6-9 */
+ -webkit-filter: grayscale(100%);
+ /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default .jstree-search {
+ font-style: italic;
+ color: #8b0000;
+ font-weight: bold;
+}
+.jstree-default .jstree-no-checkboxes .jstree-checkbox {
+ display: none !important;
+}
+.jstree-default.jstree-checkbox-no-clicked .jstree-clicked {
+ background: transparent;
+ box-shadow: none;
+}
+.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
+ background: #e7f4f9;
+}
+.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
+ background: transparent;
+}
+.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
+ background: #e7f4f9;
+}
+.jstree-default > .jstree-striped {
+ background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
+}
+.jstree-default > .jstree-wholerow-ul .jstree-hovered,
+.jstree-default > .jstree-wholerow-ul .jstree-clicked {
+ background: transparent;
+ box-shadow: none;
+ border-radius: 0;
+}
+.jstree-default .jstree-wholerow {
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.jstree-default .jstree-wholerow-hovered {
+ background: #e7f4f9;
+}
+.jstree-default .jstree-wholerow-clicked {
+ background: #beebff;
+ background: -moz-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #beebff), color-stop(100%, #a8e4ff));
+ background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+ background: -o-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+ background: -ms-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+ background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%);
+ /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );*/
+}
+.jstree-default .jstree-node {
+ min-height: 24px;
+ line-height: 24px;
+ margin-left: 24px;
+ min-width: 24px;
+}
+.jstree-default .jstree-anchor {
+ line-height: 24px;
+ height: 24px;
+}
+.jstree-default .jstree-icon {
+ width: 24px;
+ height: 24px;
+ line-height: 24px;
+}
+.jstree-default .jstree-icon:empty {
+ width: 24px;
+ height: 24px;
+ line-height: 24px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+ margin-right: 24px;
+}
+.jstree-default .jstree-wholerow {
+ height: 24px;
+}
+.jstree-default .jstree-node,
+.jstree-default .jstree-icon {
+ background-image: url("32px.png");
+}
+.jstree-default .jstree-node {
+ background-position: -292px -4px;
+ background-repeat: repeat-y;
+}
+.jstree-default .jstree-last {
+ background: transparent;
+}
+.jstree-default .jstree-open > .jstree-ocl {
+ background-position: -132px -4px;
+}
+.jstree-default .jstree-closed > .jstree-ocl {
+ background-position: -100px -4px;
+}
+.jstree-default .jstree-leaf > .jstree-ocl {
+ background-position: -68px -4px;
+}
+.jstree-default .jstree-themeicon {
+ background-position: -260px -4px;
+}
+.jstree-default > .jstree-no-dots .jstree-node,
+.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -36px -4px;
+}
+.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: -4px -4px;
+}
+.jstree-default .jstree-disabled {
+ background: transparent;
+}
+.jstree-default .jstree-disabled.jstree-hovered {
+ background: transparent;
+}
+.jstree-default .jstree-disabled.jstree-clicked {
+ background: #efefef;
+}
+.jstree-default .jstree-checkbox {
+ background-position: -164px -4px;
+}
+.jstree-default .jstree-checkbox:hover {
+ background-position: -164px -36px;
+}
+.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default .jstree-checked > .jstree-checkbox {
+ background-position: -228px -4px;
+}
+.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default .jstree-checked > .jstree-checkbox:hover {
+ background-position: -228px -36px;
+}
+.jstree-default .jstree-anchor > .jstree-undetermined {
+ background-position: -196px -4px;
+}
+.jstree-default .jstree-anchor > .jstree-undetermined:hover {
+ background-position: -196px -36px;
+}
+.jstree-default > .jstree-striped {
+ background-size: auto 48px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+ background-position: 100% 1px;
+ background-repeat: repeat-y;
+}
+.jstree-default.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default.jstree-rtl .jstree-open > .jstree-ocl {
+ background-position: -132px -36px;
+}
+.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl {
+ background-position: -100px -36px;
+}
+.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl {
+ background-position: -68px -36px;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -36px -36px;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: -4px -36px;
+}
+.jstree-default .jstree-themeicon-custom {
+ background-color: transparent;
+ background-image: none;
+ background-position: 0 0;
+}
+.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {
+ background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default .jstree-file {
+ background: url("32px.png") -100px -68px no-repeat;
+}
+.jstree-default .jstree-folder {
+ background: url("32px.png") -260px -4px no-repeat;
+}
+.jstree-default > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ margin-right: 0;
+}
+#jstree-dnd.jstree-default {
+ line-height: 24px;
+ padding: 0 4px;
+}
+#jstree-dnd.jstree-default .jstree-ok,
+#jstree-dnd.jstree-default .jstree-er {
+ background-image: url("32px.png");
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+#jstree-dnd.jstree-default i {
+ background: transparent;
+ width: 24px;
+ height: 24px;
+ line-height: 24px;
+}
+#jstree-dnd.jstree-default .jstree-ok {
+ background-position: -4px -68px;
+}
+#jstree-dnd.jstree-default .jstree-er {
+ background-position: -36px -68px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-small .jstree-node {
+ min-height: 18px;
+ line-height: 18px;
+ margin-left: 18px;
+ min-width: 18px;
+}
+.jstree-default-small .jstree-anchor {
+ line-height: 18px;
+ height: 18px;
+}
+.jstree-default-small .jstree-icon {
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
+}
+.jstree-default-small .jstree-icon:empty {
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+ margin-right: 18px;
+}
+.jstree-default-small .jstree-wholerow {
+ height: 18px;
+}
+.jstree-default-small .jstree-node,
+.jstree-default-small .jstree-icon {
+ background-image: url("32px.png");
+}
+.jstree-default-small .jstree-node {
+ background-position: -295px -7px;
+ background-repeat: repeat-y;
+}
+.jstree-default-small .jstree-last {
+ background: transparent;
+}
+.jstree-default-small .jstree-open > .jstree-ocl {
+ background-position: -135px -7px;
+}
+.jstree-default-small .jstree-closed > .jstree-ocl {
+ background-position: -103px -7px;
+}
+.jstree-default-small .jstree-leaf > .jstree-ocl {
+ background-position: -71px -7px;
+}
+.jstree-default-small .jstree-themeicon {
+ background-position: -263px -7px;
+}
+.jstree-default-small > .jstree-no-dots .jstree-node,
+.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -39px -7px;
+}
+.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: -7px -7px;
+}
+.jstree-default-small .jstree-disabled {
+ background: transparent;
+}
+.jstree-default-small .jstree-disabled.jstree-hovered {
+ background: transparent;
+}
+.jstree-default-small .jstree-disabled.jstree-clicked {
+ background: #efefef;
+}
+.jstree-default-small .jstree-checkbox {
+ background-position: -167px -7px;
+}
+.jstree-default-small .jstree-checkbox:hover {
+ background-position: -167px -39px;
+}
+.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-small .jstree-checked > .jstree-checkbox {
+ background-position: -231px -7px;
+}
+.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-small .jstree-checked > .jstree-checkbox:hover {
+ background-position: -231px -39px;
+}
+.jstree-default-small .jstree-anchor > .jstree-undetermined {
+ background-position: -199px -7px;
+}
+.jstree-default-small .jstree-anchor > .jstree-undetermined:hover {
+ background-position: -199px -39px;
+}
+.jstree-default-small > .jstree-striped {
+ background-size: auto 36px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+ background-position: 100% 1px;
+ background-repeat: repeat-y;
+}
+.jstree-default-small.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl {
+ background-position: -135px -39px;
+}
+.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl {
+ background-position: -103px -39px;
+}
+.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl {
+ background-position: -71px -39px;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -39px -39px;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: -7px -39px;
+}
+.jstree-default-small .jstree-themeicon-custom {
+ background-color: transparent;
+ background-image: none;
+ background-position: 0 0;
+}
+.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
+ background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-small .jstree-file {
+ background: url("32px.png") -103px -71px no-repeat;
+}
+.jstree-default-small .jstree-folder {
+ background: url("32px.png") -263px -7px no-repeat;
+}
+.jstree-default-small > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ margin-right: 0;
+}
+#jstree-dnd.jstree-default-small {
+ line-height: 18px;
+ padding: 0 4px;
+}
+#jstree-dnd.jstree-default-small .jstree-ok,
+#jstree-dnd.jstree-default-small .jstree-er {
+ background-image: url("32px.png");
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+#jstree-dnd.jstree-default-small i {
+ background: transparent;
+ width: 18px;
+ height: 18px;
+ line-height: 18px;
+}
+#jstree-dnd.jstree-default-small .jstree-ok {
+ background-position: -7px -71px;
+}
+#jstree-dnd.jstree-default-small .jstree-er {
+ background-position: -39px -71px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-small.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-large .jstree-node {
+ min-height: 32px;
+ line-height: 32px;
+ margin-left: 32px;
+ min-width: 32px;
+}
+.jstree-default-large .jstree-anchor {
+ line-height: 32px;
+ height: 32px;
+}
+.jstree-default-large .jstree-icon {
+ width: 32px;
+ height: 32px;
+ line-height: 32px;
+}
+.jstree-default-large .jstree-icon:empty {
+ width: 32px;
+ height: 32px;
+ line-height: 32px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+ margin-right: 32px;
+}
+.jstree-default-large .jstree-wholerow {
+ height: 32px;
+}
+.jstree-default-large .jstree-node,
+.jstree-default-large .jstree-icon {
+ background-image: url("32px.png");
+}
+.jstree-default-large .jstree-node {
+ background-position: -288px 0px;
+ background-repeat: repeat-y;
+}
+.jstree-default-large .jstree-last {
+ background: transparent;
+}
+.jstree-default-large .jstree-open > .jstree-ocl {
+ background-position: -128px 0px;
+}
+.jstree-default-large .jstree-closed > .jstree-ocl {
+ background-position: -96px 0px;
+}
+.jstree-default-large .jstree-leaf > .jstree-ocl {
+ background-position: -64px 0px;
+}
+.jstree-default-large .jstree-themeicon {
+ background-position: -256px 0px;
+}
+.jstree-default-large > .jstree-no-dots .jstree-node,
+.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -32px 0px;
+}
+.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: 0px 0px;
+}
+.jstree-default-large .jstree-disabled {
+ background: transparent;
+}
+.jstree-default-large .jstree-disabled.jstree-hovered {
+ background: transparent;
+}
+.jstree-default-large .jstree-disabled.jstree-clicked {
+ background: #efefef;
+}
+.jstree-default-large .jstree-checkbox {
+ background-position: -160px 0px;
+}
+.jstree-default-large .jstree-checkbox:hover {
+ background-position: -160px -32px;
+}
+.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+.jstree-default-large .jstree-checked > .jstree-checkbox {
+ background-position: -224px 0px;
+}
+.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+.jstree-default-large .jstree-checked > .jstree-checkbox:hover {
+ background-position: -224px -32px;
+}
+.jstree-default-large .jstree-anchor > .jstree-undetermined {
+ background-position: -192px 0px;
+}
+.jstree-default-large .jstree-anchor > .jstree-undetermined:hover {
+ background-position: -192px -32px;
+}
+.jstree-default-large > .jstree-striped {
+ background-size: auto 64px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+ background-position: 100% 1px;
+ background-repeat: repeat-y;
+}
+.jstree-default-large.jstree-rtl .jstree-last {
+ background: transparent;
+}
+.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl {
+ background-position: -128px -32px;
+}
+.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl {
+ background-position: -96px -32px;
+}
+.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl {
+ background-position: -64px -32px;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+ background: transparent;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+ background-position: -32px -32px;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+ background-position: 0px -32px;
+}
+.jstree-default-large .jstree-themeicon-custom {
+ background-color: transparent;
+ background-image: none;
+ background-position: 0 0;
+}
+.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
+ background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-large .jstree-file {
+ background: url("32px.png") -96px -64px no-repeat;
+}
+.jstree-default-large .jstree-folder {
+ background: url("32px.png") -256px 0px no-repeat;
+}
+.jstree-default-large > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ margin-right: 0;
+}
+#jstree-dnd.jstree-default-large {
+ line-height: 32px;
+ padding: 0 4px;
+}
+#jstree-dnd.jstree-default-large .jstree-ok,
+#jstree-dnd.jstree-default-large .jstree-er {
+ background-image: url("32px.png");
+ background-repeat: no-repeat;
+ background-color: transparent;
+}
+#jstree-dnd.jstree-default-large i {
+ background: transparent;
+ width: 32px;
+ height: 32px;
+ line-height: 32px;
+}
+#jstree-dnd.jstree-default-large .jstree-ok {
+ background-position: 0px -64px;
+}
+#jstree-dnd.jstree-default-large .jstree-er {
+ background-position: -32px -64px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-large.jstree-rtl .jstree-last {
+ background: transparent;
+}
+@media (max-width: 768px) {
+ #jstree-dnd.jstree-dnd-responsive {
+ line-height: 40px;
+ font-weight: bold;
+ font-size: 1.1em;
+ text-shadow: 1px 1px white;
+ }
+ #jstree-dnd.jstree-dnd-responsive > i {
+ background: transparent;
+ width: 40px;
+ height: 40px;
+ }
+ #jstree-dnd.jstree-dnd-responsive > .jstree-ok {
+ background-image: url("40px.png");
+ background-position: 0 -200px;
+ background-size: 120px 240px;
+ }
+ #jstree-dnd.jstree-dnd-responsive > .jstree-er {
+ background-image: url("40px.png");
+ background-position: -40px -200px;
+ background-size: 120px 240px;
+ }
+ #jstree-marker.jstree-dnd-responsive {
+ border-left-width: 10px;
+ border-top-width: 10px;
+ border-bottom-width: 10px;
+ margin-top: -10px;
+ }
+}
+@media (max-width: 768px) {
+ .jstree-default-responsive {
+ /*
+ .jstree-open > .jstree-ocl,
+ .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
+ */
+ }
+ .jstree-default-responsive .jstree-icon {
+ background-image: url("40px.png");
+ }
+ .jstree-default-responsive .jstree-node,
+ .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+ background: transparent;
+ }
+ .jstree-default-responsive .jstree-node {
+ min-height: 40px;
+ line-height: 40px;
+ margin-left: 40px;
+ min-width: 40px;
+ white-space: nowrap;
+ }
+ .jstree-default-responsive .jstree-anchor {
+ line-height: 40px;
+ height: 40px;
+ }
+ .jstree-default-responsive .jstree-icon,
+ .jstree-default-responsive .jstree-icon:empty {
+ width: 40px;
+ height: 40px;
+ line-height: 40px;
+ }
+ .jstree-default-responsive > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ }
+ .jstree-default-responsive.jstree-rtl .jstree-node {
+ margin-left: 0;
+ margin-right: 40px;
+ }
+ .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
+ margin-right: 0;
+ }
+ .jstree-default-responsive .jstree-ocl,
+ .jstree-default-responsive .jstree-themeicon,
+ .jstree-default-responsive .jstree-checkbox {
+ background-size: 120px 240px;
+ }
+ .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+ background: transparent;
+ }
+ .jstree-default-responsive .jstree-open > .jstree-ocl {
+ background-position: 0 0px !important;
+ }
+ .jstree-default-responsive .jstree-closed > .jstree-ocl {
+ background-position: 0 -40px !important;
+ }
+ .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
+ background-position: -40px 0px !important;
+ }
+ .jstree-default-responsive .jstree-themeicon {
+ background-position: -40px -40px;
+ }
+ .jstree-default-responsive .jstree-checkbox,
+ .jstree-default-responsive .jstree-checkbox:hover {
+ background-position: -40px -80px;
+ }
+ .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,
+ .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,
+ .jstree-default-responsive .jstree-checked > .jstree-checkbox,
+ .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover {
+ background-position: 0 -80px;
+ }
+ .jstree-default-responsive .jstree-anchor > .jstree-undetermined,
+ .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover {
+ background-position: 0 -120px;
+ }
+ .jstree-default-responsive .jstree-anchor {
+ font-weight: bold;
+ font-size: 1.1em;
+ text-shadow: 1px 1px white;
+ }
+ .jstree-default-responsive > .jstree-striped {
+ background: transparent;
+ }
+ .jstree-default-responsive .jstree-wholerow {
+ border-top: 1px solid rgba(255, 255, 255, 0.7);
+ border-bottom: 1px solid rgba(64, 64, 64, 0.2);
+ background: #ebebeb;
+ height: 40px;
+ }
+ .jstree-default-responsive .jstree-wholerow-hovered {
+ background: #e7f4f9;
+ }
+ .jstree-default-responsive .jstree-wholerow-clicked {
+ background: #beebff;
+ }
+ .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {
+ box-shadow: inset 0 -6px 3px -5px #666666;
+ }
+ .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {
+ box-shadow: inset 0 6px 3px -5px #666666;
+ border-top: 0;
+ }
+ .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {
+ box-shadow: none;
+ }
+ .jstree-default-responsive .jstree-node,
+ .jstree-default-responsive .jstree-icon,
+ .jstree-default-responsive .jstree-node > .jstree-ocl,
+ .jstree-default-responsive .jstree-themeicon,
+ .jstree-default-responsive .jstree-checkbox {
+ background-image: url("40px.png");
+ background-size: 120px 240px;
+ }
+ .jstree-default-responsive .jstree-node {
+ background-position: -80px 0;
+ background-repeat: repeat-y;
+ }
+ .jstree-default-responsive .jstree-last {
+ background: transparent;
+ }
+ .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+ background-position: -40px -120px;
+ }
+ .jstree-default-responsive .jstree-last > .jstree-ocl {
+ background-position: -40px -160px;
+ }
+ .jstree-default-responsive .jstree-themeicon-custom {
+ background-color: transparent;
+ background-image: none;
+ background-position: 0 0;
+ }
+ .jstree-default-responsive .jstree-file {
+ background: url("40px.png") 0 -160px no-repeat;
+ background-size: 120px 240px;
+ }
+ .jstree-default-responsive .jstree-folder {
+ background: url("40px.png") -40px -40px no-repeat;
+ background-size: 120px 240px;
+ }
+ .jstree-default-responsive > .jstree-container-ul > .jstree-node {
+ margin-left: 0;
+ margin-right: 0;
+ }
+}
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default/style.min.css b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/style.min.css
new file mode 100644
index 000000000..4440528ec
--- /dev/null
+++ b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/style.min.css
@@ -0,0 +1 @@
+.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;-moz-box-shadow:5px 5px 4px -4px #666;-webkit-box-shadow:2px 2px 2px #999;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none;display:inline}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;-moz-text-shadow:1px 1px 0 #fff;-webkit-text-shadow:1px 1px 0 #fff;text-shadow:1px 1px 0 #fff;-moz-border-radius:1px;-webkit-border-radius:1px;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;-moz-box-shadow:0 0 2px #0a6aa1;-webkit-box-shadow:0 0 2px #0a6aa1;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;-moz-box-shadow:0 0 2px #0a6aa1;-webkit-box-shadow:0 0 2px #0a6aa1;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;-moz-text-shadow:0 0 0 transparent;-webkit-text-shadow:0 0 0 transparent;text-shadow:0 0 0 transparent;-moz-box-shadow:0 0 0 transparent;-webkit-box-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:0 0;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8, #jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:700}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-moz-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#beebff),color-stop(100%,#a8e4ff));background:-webkit-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:-o-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:-ms-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:linear-gradient(to bottom,#beebff 0,#a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url(32px.png)}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:0 0}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:0 0}.jstree-default .jstree-disabled.jstree-hovered{background:0 0}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url(32px.png)}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:0 0}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:0 0}.jstree-default-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url(32px.png)}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:0 0}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:0 0}.jstree-default-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-responsive>.jstree-striped{background:0 0}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,.7);border-bottom:1px solid rgba(64,64,64,.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:0 0}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}}
\ No newline at end of file
diff --git a/dashboard-ui/thirdparty/jstree3.0.8/themes/default/throbber.gif b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/throbber.gif
new file mode 100644
index 000000000..1b5b2fde4
Binary files /dev/null and b/dashboard-ui/thirdparty/jstree3.0.8/themes/default/throbber.gif differ