2018-10-23 01:05:09 +03:00
! function ( factory ) {
"use strict" ;
"function" == typeof define && define . amd ? define ( [ "jquery" ] , factory ) : factory ( "object" == typeof exports ? require ( "jquery" ) : jQuery )
} ( function ( $ , undefined ) {
"use strict" ;
if ( ! $ . jstree ) {
var _temp1 , _temp2 , instance _counter = 0 ,
ccp _node = ! 1 ,
ccp _mode = ! 1 ,
ccp _inst = ! 1 ,
themes _loaded = [ ] ,
src = $ ( "script:last" ) . attr ( "src" ) ,
document = window . document ,
_node = document . createElement ( "LI" ) ;
_node . setAttribute ( "role" , "treeitem" ) , _temp1 = document . createElement ( "I" ) , _temp1 . className = "jstree-icon jstree-ocl" , _temp1 . setAttribute ( "role" , "presentation" ) , _node . appendChild ( _temp1 ) , _temp1 = document . createElement ( "A" ) , _temp1 . className = "jstree-anchor" , _temp1 . setAttribute ( "href" , "#" ) , _temp1 . setAttribute ( "tabindex" , "-1" ) , _temp2 = document . createElement ( "I" ) , _temp2 . className = "jstree-icon jstree-themeicon" , _temp2 . setAttribute ( "role" , "presentation" ) , _temp1 . appendChild ( _temp2 ) , _node . appendChild ( _temp1 ) , _temp1 = _temp2 = null , $ . jstree = {
version : "3.1.1" ,
defaults : {
plugins : [ ]
} ,
plugins : { } ,
path : src && - 1 !== src . indexOf ( "/" ) ? src . replace ( /\/[^\/]+$/ , "" ) : "" ,
idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g
} , $ . jstree . create = function ( el , options ) {
var tmp = new $ . jstree . core ( ++ instance _counter ) ,
opt = options ;
return options = $ . extend ( ! 0 , { } , $ . jstree . defaults , options ) , opt && opt . plugins && ( options . plugins = opt . plugins ) , $ . each ( options . plugins , function ( i , k ) {
"core" !== i && ( tmp = tmp . plugin ( k , options [ k ] ) )
} ) , $ ( el ) . data ( "jstree" , tmp ) , tmp . init ( el , options ) , tmp
} , $ . jstree . destroy = function ( ) {
$ ( ".jstree:jstree" ) . jstree ( "destroy" ) , $ ( document ) . off ( ".jstree" )
} , $ . jstree . core = function ( id ) {
this . _id = id , 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
}
}
} , $ . jstree . reference = function ( needle ) {
var tmp = null ,
obj = null ;
if ( ! needle || ! needle . id || needle . tagName && needle . nodeType || ( needle = needle . id ) , ! obj || ! obj . length ) try {
obj = $ ( needle )
} catch ( ignore ) { }
if ( ! obj || ! obj . length ) try {
obj = $ ( "#" + needle . replace ( $ . jstree . idregex , "\\$&" ) )
} catch ( ignore ) { }
return obj && obj . length && ( obj = obj . closest ( ".jstree" ) ) . length && ( obj = obj . data ( "jstree" ) ) ? tmp = obj : $ ( ".jstree" ) . each ( function ( ) {
var inst = $ ( this ) . data ( "jstree" ) ;
if ( inst && inst . _model . data [ needle ] ) return tmp = inst , ! 1
} ) , tmp
} , $ . fn . jstree = function ( arg ) {
var is _method = "string" == typeof arg ,
args = Array . prototype . slice . call ( arguments , 1 ) ,
result = null ;
return ! ( ! 0 === arg && ! this . length ) && ( this . each ( function ( ) {
var instance = $ . jstree . reference ( this ) ,
method = is _method && instance ? instance [ arg ] : null ;
if ( result = is _method && method ? method . apply ( instance , args ) : null , instance || is _method || arg !== undefined && ! $ . isPlainObject ( arg ) || $ . jstree . create ( this , arg ) , ( instance && ! is _method || ! 0 === arg ) && ( result = instance || ! 1 ) , null !== result && result !== undefined ) return ! 1
} ) , null !== result && result !== undefined ? result : this )
} , $ . expr [ ":" ] . jstree = $ . expr . createPseudo ( function ( search ) {
return function ( a ) {
return $ ( a ) . hasClass ( "jstree" ) && $ ( a ) . data ( "jstree" ) !== undefined
}
} ) , $ . jstree . defaults . core = {
data : ! 1 ,
strings : ! 1 ,
check _callback : ! 1 ,
error : $ . 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 ,
dblclick _toggle : ! 0
} , $ . jstree . core . prototype = {
plugin : function ( deco , opts ) {
var Child = $ . jstree . plugins [ deco ] ;
return Child ? ( this . _data [ deco ] = { } , Child . prototype = this , new Child ( opts , this ) ) : this
} ,
init : function ( el , options ) {
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 = $ ( el ) . addClass ( "jstree jstree-" + this . _id ) , this . settings = options , 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 ( "<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'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this . get _string ( "Loading ..." ) + "</a></li></ul>" ) , 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 ( keep _html ) {
if ( this . _wrk ) try {
window . URL . revokeObjectURL ( this . _wrk ) , this . _wrk = null
} catch ( ignore ) { }
keep _html || this . element . empty ( ) , 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 word = "" ,
tout = null ,
was _click = 0 ;
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 ( "mousedown.jstree" , $ . proxy ( function ( e ) {
e . target === this . element [ 0 ] && ( e . preventDefault ( ) , was _click = + new Date )
} , this ) ) . on ( "mousedown.jstree" , ".jstree-ocl" , function ( e ) {
e . preventDefault ( )
} ) . on ( "click.jstree" , ".jstree-ocl" , $ . proxy ( function ( e ) {
this . toggle _node ( e . target )
} , this ) ) . on ( "dblclick.jstree" , ".jstree-anchor" , $ . proxy ( function ( e ) {
this . settings . core . dblclick _toggle && this . toggle _node ( e . target )
} , this ) ) . on ( "click.jstree" , ".jstree-anchor" , $ . proxy ( function ( e ) {
e . preventDefault ( ) , e . currentTarget !== document . activeElement && $ ( e . currentTarget ) . focus ( ) , this . activate _node ( e . currentTarget , e )
} , this ) ) . on ( "keydown.jstree" , ".jstree-anchor" , $ . proxy ( function ( e ) {
if ( "INPUT" === e . target . tagName ) return ! 0 ;
if ( 32 !== e . which && 13 !== e . which && ( e . shiftKey || e . ctrlKey || e . altKey || e . metaKey ) ) return ! 0 ;
var o = null ;
switch ( this . _data . core . rtl && ( 37 === e . which ? e . which = 39 : 39 === e . which && ( e . which = 37 ) ) , e . which ) {
case 32 :
e . ctrlKey && ( e . type = "click" , $ ( e . currentTarget ) . trigger ( e ) ) ;
break ;
case 13 :
e . type = "click" , $ ( e . currentTarget ) . trigger ( e ) ;
break ;
case 37 :
e . preventDefault ( ) , this . is _open ( e . currentTarget ) ? this . close _node ( e . currentTarget ) : ( o = this . get _parent ( e . currentTarget ) ) && "#" !== o . id && this . get _node ( o , ! 0 ) . children ( ".jstree-anchor" ) . focus ( ) ;
break ;
case 38 :
e . preventDefault ( ) , o = this . get _prev _dom ( e . currentTarget ) , o && o . length && o . children ( ".jstree-anchor" ) . focus ( ) ;
break ;
case 39 :
e . preventDefault ( ) , this . is _closed ( e . currentTarget ) ? this . open _node ( e . currentTarget , function ( o ) {
this . get _node ( o , ! 0 ) . children ( ".jstree-anchor" ) . focus ( )
} ) : this . is _open ( e . currentTarget ) && ( o = this . get _node ( e . currentTarget , ! 0 ) . children ( ".jstree-children" ) [ 0 ] ) && $ ( this . _firstChild ( o ) ) . children ( ".jstree-anchor" ) . focus ( ) ;
break ;
case 40 :
e . preventDefault ( ) , o = this . get _next _dom ( e . currentTarget ) , o && o . length && o . children ( ".jstree-anchor" ) . focus ( ) ;
break ;
case 106 :
this . open _all ( ) ;
break ;
case 36 :
e . preventDefault ( ) , o = this . _firstChild ( this . get _container _ul ( ) [ 0 ] ) , o && $ ( o ) . children ( ".jstree-anchor" ) . filter ( ":visible" ) . focus ( ) ;
break ;
case 35 :
e . preventDefault ( ) , this . element . find ( ".jstree-anchor" ) . filter ( ":visible" ) . last ( ) . focus ( )
}
} , this ) ) . on ( "load_node.jstree" , $ . proxy ( function ( e , data ) {
data . status && ( "#" !== data . 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 || setTimeout ( $ . proxy ( function ( ) {
if ( this . element && ! 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 i , j , tmp = [ ] ;
for ( i = 0 , j = this . _data . core . selected . length ; i < j ; i ++ ) tmp = tmp . concat ( this . _model . data [ this . _data . core . selected [ i ] ] . parents ) ;
for ( tmp = $ . vakata . array _unique ( tmp ) , i = 0 , j = tmp . length ; i < j ; i ++ ) this . open _node ( tmp [ i ] , ! 1 , 0 )
}
this . trigger ( "changed" , {
action : "ready" ,
selected : this . _data . core . selected
} )
}
this . trigger ( "ready" )
}
} , this ) , 0 ) )
} , this ) ) . on ( "keypress.jstree" , $ . proxy ( function ( e ) {
if ( "INPUT" === e . target . tagName ) return ! 0 ;
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 = ! 1 ;
if ( word += chr , word . length > 1 ) {
if ( col . slice ( ind ) . each ( $ . proxy ( function ( i , v ) {
if ( 0 === $ ( v ) . text ( ) . toLowerCase ( ) . indexOf ( word ) ) return $ ( v ) . focus ( ) , end = ! 0 , ! 1
} , this ) ) , end ) return ;
if ( col . slice ( 0 , ind ) . each ( $ . proxy ( function ( i , v ) {
if ( 0 === $ ( v ) . text ( ) . toLowerCase ( ) . indexOf ( word ) ) return $ ( v ) . focus ( ) , end = ! 0 , ! 1
} , this ) ) , end ) return
}
if ( new RegExp ( "^" + chr + "+$" ) . test ( word ) ) {
if ( col . slice ( ind + 1 ) . each ( $ . proxy ( function ( i , v ) {
if ( $ ( v ) . text ( ) . toLowerCase ( ) . charAt ( 0 ) === chr ) return $ ( v ) . focus ( ) , end = ! 0 , ! 1
} , this ) ) , end ) return ;
if ( col . slice ( 0 , ind + 1 ) . each ( $ . proxy ( function ( i , v ) {
if ( $ ( v ) . text ( ) . toLowerCase ( ) . charAt ( 0 ) === chr ) return $ ( v ) . focus ( ) , end = ! 0 , ! 1
} , this ) ) , end ) return
}
} , this ) ) . 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 . element . attr ( "tabindex" , "0" )
} , this ) ) . on ( "focus.jstree" , ".jstree-anchor" , $ . proxy ( function ( e ) {
var tmp = this . get _node ( e . currentTarget ) ;
tmp && tmp . id && ( this . _data . core . focused = tmp . id ) , this . element . find ( ".jstree-hovered" ) . not ( e . currentTarget ) . mouseleave ( ) , $ ( e . currentTarget ) . mouseenter ( ) , this . element . attr ( "tabindex" , "-1" )
} , this ) ) . on ( "focus.jstree" , $ . proxy ( function ( ) {
if ( + new Date - was _click > 500 && ! this . _data . core . focused ) {
was _click = 0 ;
var act = this . get _node ( this . element . attr ( "aria-activedescendant" ) , ! 0 ) ;
act && act . 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 ) )
} ,
unbind : function ( ) {
this . element . off ( ".jstree" ) , $ ( document ) . off ( ".jstree-" + this . _id )
} ,
trigger : function ( ev , data ) {
data || ( data = { } ) , data . instance = this , this . element . triggerHandler ( ev . replace ( ".jstree" , "" ) + ".jstree" , data )
} ,
get _container : function ( ) {
return this . element
} ,
get _container _ul : function ( ) {
return this . element . children ( ".jstree-children" ) . first ( )
} ,
get _string : function ( key ) {
var a = this . settings . core . strings ;
return $ . isFunction ( a ) ? a . call ( this , key ) : a && a [ key ] ? a [ key ] : key
} ,
_firstChild : function ( dom ) {
for ( dom = dom ? dom . firstChild : null ; null !== dom && 1 !== dom . nodeType ; ) dom = dom . nextSibling ;
return dom
} ,
_nextSibling : function ( dom ) {
for ( dom = dom ? dom . nextSibling : null ; null !== dom && 1 !== dom . nodeType ; ) dom = dom . nextSibling ;
return dom
} ,
_previousSibling : function ( dom ) {
for ( dom = dom ? dom . previousSibling : null ; null !== dom && 1 !== dom . nodeType ; ) dom = dom . previousSibling ;
return dom
} ,
get _node : function ( obj , as _dom ) {
obj && obj . id && ( obj = obj . id ) ;
var dom ;
try {
if ( this . _model . data [ obj ] ) obj = this . _model . data [ obj ] ;
else if ( "string" == typeof obj && this . _model . data [ obj . replace ( /^#/ , "" ) ] ) obj = this . _model . data [ obj . replace ( /^#/ , "" ) ] ;
else if ( "string" == typeof obj && ( 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" ) ) return ! 1 ;
obj = this . _model . data [ "#" ]
}
return as _dom && ( obj = "#" === obj . id ? this . element : $ ( "#" + obj . id . replace ( $ . jstree . idregex , "\\$&" ) , this . element ) ) , obj
} catch ( ex ) {
return ! 1
}
} ,
get _path : function ( obj , glue , ids ) {
if ( ! ( obj = obj . parents ? obj : this . get _node ( obj ) ) || "#" === obj . id || ! obj . parents ) return ! 1 ;
var i , j , p = [ ] ;
for ( p . push ( ids ? obj . id : obj . text ) , i = 0 , j = obj . parents . length ; i < j ; i ++ ) p . push ( ids ? obj . parents [ i ] : this . get _text ( obj . parents [ i ] ) ) ;
return p = p . reverse ( ) . slice ( 1 ) , glue ? p . join ( glue ) : p
} ,
get _next _dom : function ( obj , strict ) {
var tmp ;
if ( obj = this . get _node ( obj , ! 0 ) , obj [ 0 ] === this . element [ 0 ] ) {
for ( tmp = this . _firstChild ( this . get _container _ul ( ) [ 0 ] ) ; tmp && 0 === tmp . offsetHeight ; ) tmp = this . _nextSibling ( tmp ) ;
return ! ! tmp && $ ( tmp )
}
if ( ! obj || ! obj . length ) return ! 1 ;
if ( strict ) {
tmp = obj [ 0 ] ;
do {
tmp = this . _nextSibling ( tmp )
} while ( tmp && 0 === tmp . offsetHeight ) ;
return ! ! tmp && $ ( tmp )
}
if ( obj . hasClass ( "jstree-open" ) ) {
for ( tmp = this . _firstChild ( obj . children ( ".jstree-children" ) [ 0 ] ) ; tmp && 0 === tmp . offsetHeight ; ) tmp = this . _nextSibling ( tmp ) ;
if ( null !== tmp ) return $ ( tmp )
}
tmp = obj [ 0 ] ;
do {
tmp = this . _nextSibling ( tmp )
} while ( tmp && 0 === tmp . offsetHeight ) ;
return null !== tmp ? $ ( tmp ) : obj . parentsUntil ( ".jstree" , ".jstree-node" ) . nextAll ( ".jstree-node:visible" ) . first ( )
} ,
get _prev _dom : function ( obj , strict ) {
var tmp ;
if ( obj = this . get _node ( obj , ! 0 ) , obj [ 0 ] === this . element [ 0 ] ) {
for ( tmp = this . get _container _ul ( ) [ 0 ] . lastChild ; tmp && 0 === tmp . offsetHeight ; ) tmp = this . _previousSibling ( tmp ) ;
return ! ! tmp && $ ( tmp )
}
if ( ! obj || ! obj . length ) return ! 1 ;
if ( strict ) {
tmp = obj [ 0 ] ;
do {
tmp = this . _previousSibling ( tmp )
} while ( tmp && 0 === tmp . offsetHeight ) ;
return ! ! tmp && $ ( tmp )
}
tmp = obj [ 0 ] ;
do {
tmp = this . _previousSibling ( tmp )
} while ( tmp && 0 === tmp . offsetHeight ) ;
if ( null !== tmp ) {
for ( obj = $ ( tmp ) ; obj . hasClass ( "jstree-open" ) ; ) obj = obj . children ( ".jstree-children" ) . first ( ) . children ( ".jstree-node:visible:last" ) ;
return obj
}
return ! ( ! ( tmp = obj [ 0 ] . parentNode . parentNode ) || ! tmp . className || - 1 === tmp . className . indexOf ( "jstree-node" ) ) && $ ( tmp )
} ,
get _parent : function ( obj ) {
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && obj . parent
} ,
get _children _dom : function ( obj ) {
return obj = this . get _node ( obj , ! 0 ) , obj [ 0 ] === this . element [ 0 ] ? this . get _container _ul ( ) . children ( ".jstree-node" ) : ! ( ! obj || ! obj . length ) && obj . children ( ".jstree-children" ) . children ( ".jstree-node" )
} ,
is _parent : function ( obj ) {
return ( obj = this . get _node ( obj ) ) && ( ! 1 === obj . state . loaded || obj . children . length > 0 )
} ,
is _loaded : function ( obj ) {
return ( obj = this . get _node ( obj ) ) && obj . state . loaded
} ,
is _loading : function ( obj ) {
return ( obj = this . get _node ( obj ) ) && obj . state && obj . state . loading
} ,
is _open : function ( obj ) {
return ( obj = this . get _node ( obj ) ) && obj . state . opened
} ,
is _closed : function ( obj ) {
return ( obj = this . get _node ( obj ) ) && this . is _parent ( obj ) && ! obj . state . opened
} ,
is _leaf : function ( obj ) {
return ! this . is _parent ( obj )
} ,
load _node : function ( obj , callback ) {
var k , l , i , j , c ;
if ( $ . isArray ( obj ) ) return this . _load _nodes ( obj . slice ( ) , callback ) , ! 0 ;
if ( ! ( obj = this . get _node ( obj ) ) ) return callback && callback . call ( this , obj , ! 1 ) , ! 1 ;
if ( obj . state . loaded ) {
for ( obj . state . loaded = ! 1 , 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 ] ) ;
this . _model . data [ obj . children _d [ k ] ] . state . selected && ( c = ! 0 , 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 = [ ] , c && this . trigger ( "changed" , {
action : "load_node" ,
node : obj ,
selected : this . _data . core . selected
} )
}
return obj . state . failed = ! 1 , obj . state . loading = ! 0 , this . get _node ( obj , ! 0 ) . addClass ( "jstree-loading" ) . attr ( "aria-busy" , ! 0 ) , this . _load _node ( obj , $ . proxy ( function ( status ) {
obj = this . _model . data [ obj . id ] , obj . state . loading = ! 1 , obj . state . loaded = status , obj . state . failed = ! obj . state . loaded ;
var dom = this . get _node ( obj , ! 0 ) ;
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" , ! 1 ) , this . trigger ( "load_node" , {
node : obj ,
status : status
} ) , callback && callback . call ( this , obj , status )
} , this ) ) , ! 0
} ,
_load _nodes : function ( nodes , callback , is _callback ) {
var i , j , r = ! 0 ,
c = function ( ) {
this . _load _nodes ( nodes , callback , ! 0 )
} ,
m = this . _model . data ,
tmp = [ ] ;
for ( i = 0 , j = nodes . length ; i < j ; i ++ ) ! m [ nodes [ i ] ] || ( m [ nodes [ i ] ] . state . loaded || m [ nodes [ i ] ] . state . failed ) && is _callback || ( this . is _loading ( nodes [ i ] ) || this . load _node ( nodes [ i ] , c ) , r = ! 1 ) ;
if ( r ) {
for ( i = 0 , j = nodes . length ; i < j ; i ++ ) m [ nodes [ i ] ] && m [ nodes [ i ] ] . state . loaded && tmp . push ( nodes [ i ] ) ;
callback && ! callback . done && ( callback . call ( this , tmp ) , callback . done = ! 0 )
}
} ,
load _all : function ( obj , callback ) {
if ( obj || ( obj = "#" ) , ! ( obj = this . get _node ( obj ) ) ) return ! 1 ;
var i , j , to _load = [ ] ,
m = this . _model . data ,
c = m [ obj . id ] . children _d ;
for ( obj . state && ! obj . state . loaded && to _load . push ( obj . id ) , i = 0 , j = c . length ; i < j ; i ++ ) m [ c [ i ] ] && m [ c [ i ] ] . state && ! m [ c [ i ] ] . state . loaded && to _load . push ( c [ i ] ) ;
to _load . length ? this . _load _nodes ( to _load , function ( ) {
this . load _all ( obj , callback )
} ) : ( callback && callback . call ( this , obj ) , this . trigger ( "load_all" , {
node : obj
} ) )
} ,
_load _node : function ( obj , callback ) {
var t , s = this . settings . core . data ;
return s ? $ . isFunction ( s ) ? s . call ( this , obj , $ . proxy ( function ( d ) {
! 1 === d && callback . call ( this , ! 1 ) , this [ "string" == typeof d ? "_append_html_data" : "_append_json_data" ] ( obj , "string" == typeof d ? $ ( $ . parseHTML ( d ) ) . filter ( function ( ) {
return 3 !== this . nodeType
} ) : d , function ( status ) {
callback . call ( this , status )
} )
} , this ) ) : "object" == typeof s ? s . url ? ( s = $ . extend ( ! 0 , { } , s ) , $ . isFunction ( s . url ) && ( s . url = s . url . call ( this , obj ) ) , $ . isFunction ( s . data ) && ( s . data = s . data . call ( this , obj ) ) , $ . ajax ( s ) . done ( $ . proxy ( function ( d , t , x ) {
var type = x . getResponseHeader ( "Content-Type" ) ;
return type && - 1 !== type . indexOf ( "json" ) || "object" == typeof d ? this . _append _json _data ( obj , d , function ( status ) {
callback . call ( this , status )
} ) : type && - 1 !== type . indexOf ( "html" ) || "string" == typeof d ? this . _append _html _data ( obj , $ ( $ . parseHTML ( d ) ) . filter ( function ( ) {
return 3 !== this . nodeType
} ) , function ( status ) {
callback . call ( this , status )
} ) : ( 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 ) , callback . call ( this , ! 1 ) )
} , this ) ) . fail ( $ . proxy ( function ( f ) {
callback . call ( this , ! 1 ) , 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 , "#" === obj . id ? this . _append _json _data ( obj , t , function ( status ) {
callback . call ( this , status )
} ) : ( 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 ) , callback . call ( this , ! 1 ) ) ) : "string" == typeof s ? "#" === obj . id ? this . _append _html _data ( obj , $ ( $ . parseHTML ( s ) ) . filter ( function ( ) {
return 3 !== this . nodeType
} ) , function ( status ) {
callback . call ( this , status )
} ) : ( 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 ) , callback . call ( this , ! 1 ) ) : callback . call ( this , ! 1 ) : "#" === obj . id ? this . _append _html _data ( obj , this . _data . core . original _container _html . clone ( ! 0 ) , function ( status ) {
callback . call ( this , status )
} ) : callback . call ( this , ! 1 )
} ,
_node _changed : function ( obj ) {
( obj = this . get _node ( obj ) ) && this . _model . changed . push ( obj . id )
} ,
_append _html _data : function ( dom , data , cb ) {
dom = this . get _node ( dom ) , dom . children = [ ] , dom . children _d = [ ] ;
var tmp , i , j , 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 ;
for ( dat . each ( $ . proxy ( function ( i , v ) {
( tmp = this . _parse _model _from _html ( $ ( v ) , par , p . parents . concat ( ) ) ) && ( chd . push ( tmp ) , dpc . push ( tmp ) , m [ tmp ] . children _d . length && ( dpc = dpc . concat ( m [ tmp ] . children _d ) ) )
} , this ) ) , p . children = chd , p . children _d = dpc , i = 0 , j = p . parents . length ; i < j ; i ++ ) m [ p . parents [ i ] ] . children _d = m [ p . parents [ i ] ] . children _d . concat ( dpc ) ;
this . trigger ( "model" , {
nodes : dpc ,
parent : par
} ) , "#" !== par ? ( this . _node _changed ( par ) , this . redraw ( ) ) : ( this . get _container _ul ( ) . children ( ".jstree-initial-node" ) . remove ( ) , this . redraw ( ! 0 ) ) , this . _data . core . selected . length !== s && this . trigger ( "changed" , {
action : "model" ,
selected : this . _data . core . selected
} ) , cb . call ( this , ! 0 )
} ,
_append _json _data : function ( dom , data , cb , force _processing ) {
if ( null !== this . element ) {
dom = this . get _node ( dom ) , dom . children = [ ] , dom . children _d = [ ] , data . d && "string" == typeof ( data = data . d ) && ( data = JSON . parse ( data ) ) , $ . 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 ) {
data . data && ( data = data . data ) ;
var tmp , i , j , rslt , 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 ,
parse _flat = function ( d , p , ps ) {
ps = ps ? ps . concat ( ) : [ ] , p && ps . unshift ( p ) ;
var i , j , c , e , tid = d . id . toString ( ) ,
tmp = {
id : tid ,
text : d . text || "" ,
icon : d . icon === undefined || d . icon ,
parent : p ,
parents : ps ,
children : d . children || [ ] ,
children _d : d . children _d || [ ] ,
data : d . data ,
state : { } ,
li _attr : {
id : ! 1
} ,
a _attr : {
href : "#"
} ,
original : ! 1
} ;
for ( i in df ) 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 ) , tmp . icon !== undefined && null !== tmp . icon && "" !== tmp . icon || ( tmp . icon = ! 0 ) , d && d . data && ( tmp . data = d . data , d . data . jstree ) )
for ( i in d . data . jstree ) d . data . jstree . hasOwnProperty ( i ) && ( tmp . state [ i ] = d . data . jstree [ i ] ) ;
if ( d && "object" == typeof d . state )
for ( i in d . state ) d . state . hasOwnProperty ( i ) && ( tmp . state [ i ] = d . state [ i ] ) ;
if ( d && "object" == typeof d . li _attr )
for ( i in d . li _attr ) d . li _attr . hasOwnProperty ( i ) && ( tmp . li _attr [ i ] = d . li _attr [ i ] ) ;
if ( tmp . li _attr . id || ( tmp . li _attr . id = tid ) , d && "object" == typeof d . a _attr )
for ( i in d . a _attr ) d . a _attr . hasOwnProperty ( i ) && ( tmp . a _attr [ i ] = d . a _attr [ i ] ) ;
for ( d && d . children && ! 0 === d . children && ( tmp . state . loaded = ! 1 , tmp . children = [ ] , tmp . children _d = [ ] ) , m [ tmp . id ] = tmp , 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 ) , e . children _d . length && ( tmp . children _d = tmp . children _d . concat ( e . children _d ) ) ;
return delete d . data , delete d . children , m [ tmp . id ] . original = d , tmp . state . selected && add . push ( tmp . id ) , tmp . id
} ,
parse _nest = function ( d , p , ps ) {
ps = ps ? ps . concat ( ) : [ ] , p && ps . unshift ( p ) ;
var i , j , c , e , tmp , tid = ! 1 ;
do {
tid = "j" + t _id + "_" + ++ t _cnt
} while ( m [ tid ] ) ;
tmp = {
id : ! 1 ,
text : "string" == typeof d ? d : "" ,
icon : "object" != typeof d || d . icon === undefined || d . icon ,
parent : p ,
parents : ps ,
children : [ ] ,
children _d : [ ] ,
data : null ,
state : { } ,
li _attr : {
id : ! 1
} ,
a _attr : {
href : "#"
} ,
original : ! 1
} ;
for ( i in df ) df . hasOwnProperty ( i ) && ( tmp . state [ i ] = df [ i ] ) ;
if ( d && d . id && ( tmp . id = d . id . toString ( ) ) , d && d . text && ( tmp . text = d . text ) , d && d . data && d . data . jstree && d . data . jstree . icon && ( tmp . icon = d . data . jstree . icon ) , tmp . icon !== undefined && null !== tmp . icon && "" !== tmp . icon || ( tmp . icon = ! 0 ) , d && d . data && ( tmp . data = d . data , d . data . jstree ) )
for ( i in d . data . jstree ) d . data . jstree . hasOwnProperty ( i ) && ( tmp . state [ i ] = d . data . jstree [ i ] ) ;
if ( d && "object" == typeof d . state )
for ( i in d . state ) d . state . hasOwnProperty ( i ) && ( tmp . state [ i ] = d . state [ i ] ) ;
if ( d && "object" == typeof d . li _attr )
for ( i in d . li _attr ) 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 ( ) ) , tmp . id || ( tmp . id = tid ) , tmp . li _attr . id || ( tmp . li _attr . id = tmp . id ) , d && "object" == typeof d . a _attr )
for ( i in d . a _attr ) 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 ) , e . children _d . length && ( tmp . children _d = tmp . children _d . concat ( e . children _d ) ) ;
tmp . children _d = tmp . children _d . concat ( tmp . children )
}
return d && d . children && ! 0 === d . children && ( tmp . state . loaded = ! 1 , tmp . children = [ ] , tmp . children _d = [ ] ) , delete d . data , delete d . children , tmp . original = d , m [ tmp . id ] = tmp , tmp . state . selected && add . push ( tmp . id ) , tmp . id
} ;
if ( dat . length && dat [ 0 ] . id !== undefined && dat [ 0 ] . parent !== undefined ) {
for ( i = 0 , j = dat . length ; i < j ; i ++ ) dat [ i ] . children || ( dat [ i ] . children = [ ] ) , m [ dat [ i ] . id . toString ( ) ] = dat [ i ] ;
for ( i = 0 , j = dat . length ; i < j ; i ++ ) m [ dat [ i ] . parent . toString ( ) ] . children . push ( dat [ i ] . id . toString ( ) ) , p . children _d . push ( dat [ i ] . id . toString ( ) ) ;
for ( i = 0 , j = p . children . length ; i < j ; i ++ ) tmp = parse _flat ( m [ p . children [ i ] ] , par , p . parents . concat ( ) ) , dpc . push ( tmp ) , 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 ) ;
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 ( ) ) ) && ( chd . push ( tmp ) , dpc . push ( tmp ) , m [ tmp ] . children _d . length && ( dpc = dpc . concat ( m [ tmp ] . children _d ) ) ) ;
for ( p . children = chd , p . children _d = dpc , 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 ( "undefined" != typeof window && void 0 !== window . document ) return rslt ;
postMessage ( rslt )
} ,
rslt = function ( rslt , worker ) {
if ( null !== this . element ) {
if ( this . _cnt = rslt . cnt , this . _model . data = rslt . mod , worker ) {
var i , j , a = rslt . add ,
r = rslt . sel ,
s = this . _data . core . selected . slice ( ) ,
m = this . _model . data ;
if ( r . length !== s . length || $ . vakata . array _unique ( r . concat ( s ) ) . length !== r . length ) {
for ( i = 0 , j = r . length ; i < j ; i ++ ) - 1 === $ . inArray ( r [ i ] , a ) && - 1 === $ . inArray ( r [ i ] , s ) && ( m [ r [ i ] ] . state . selected = ! 1 ) ;
for ( i = 0 , j = s . length ; i < j ; i ++ ) - 1 === $ . inArray ( s [ i ] , r ) && ( m [ s [ i ] ] . state . selected = ! 0 )
}
}
rslt . add . length && ( this . _data . core . selected = this . _data . core . selected . concat ( rslt . add ) ) , this . trigger ( "model" , {
nodes : rslt . dpc ,
parent : rslt . par
} ) , "#" !== rslt . par ? ( this . _node _changed ( rslt . par ) , this . redraw ( ) ) : this . redraw ( ! 0 ) , rslt . add . length && this . trigger ( "changed" , {
action : "model" ,
selected : this . _data . core . selected
} ) , cb . 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 = " + func . toString ( ) ] , {
type : "text/javascript"
} ) ) ) , ! this . _data . core . working || force _processing ? ( this . _data . core . working = ! 0 , w = new window . Worker ( this . _wrk ) , w . onmessage = $ . proxy ( function ( e ) {
rslt . call ( this , e . data , ! 0 ) ;
try {
w . terminate ( ) , w = null
} catch ( ignore ) { }
this . _data . core . worker _queue . length ? this . _append _json _data . apply ( this , this . _data . core . worker _queue . shift ( ) ) : this . _data . core . working = ! 1
} , this ) , args . par ? w . postMessage ( args ) : 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 ( [ dom , data , cb , ! 0 ] )
} catch ( e ) {
rslt . call ( this , func ( args ) , ! 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 rslt . call ( this , func ( args ) , ! 1 )
}
} ,
_parse _model _from _html : function ( d , p , ps ) {
ps = ps ? [ ] . concat ( ps ) : [ ] , p && ps . unshift ( p ) ;
var c , e , i , tmp , tid , m = this . _model . data ,
data = {
id : ! 1 ,
text : ! 1 ,
icon : ! 0 ,
parent : p ,
parents : ps ,
children : [ ] ,
children _d : [ ] ,
data : null ,
state : { } ,
li _attr : {
id : ! 1
} ,
a _attr : {
href : "#"
} ,
original : ! 1
} ;
for ( i in this . _model . default _state ) this . _model . default _state . hasOwnProperty ( i ) && ( data . state [ i ] = this . _model . default _state [ i ] ) ;
if ( tmp = $ . vakata . attributes ( d , ! 0 ) , $ . each ( tmp , function ( i , v ) {
if ( v = $ . trim ( v ) , ! v . length ) return ! 0 ;
data . li _attr [ i ] = v , "id" === i && ( data . id = v . toString ( ) )
} ) , tmp = d . children ( "a" ) . first ( ) , tmp . length && ( tmp = $ . vakata . attributes ( tmp , ! 0 ) , $ . each ( tmp , function ( i , v ) {
v = $ . trim ( v ) , 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 = $ ( "<div />" ) . html ( tmp ) , data . text = this . settings . core . force _text ? tmp . text ( ) : tmp . html ( ) , tmp = d . data ( ) , data . data = tmp ? $ . extend ( ! 0 , { } , 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" ) , data . data && data . data . jstree )
for ( i in data . data . jstree ) data . data . jstree . hasOwnProperty ( i ) && ( data . state [ i ] = data . data . jstree [ i ] ) ;
tmp = d . children ( "a" ) . children ( ".jstree-themeicon" ) , tmp . length && ( data . icon = ! tmp . hasClass ( "jstree-themeicon-hidden" ) && tmp . attr ( "rel" ) ) , data . state . icon !== undefined && ( data . icon = data . state . icon ) , data . icon !== undefined && null !== data . icon && "" !== data . icon || ( data . icon = ! 0 ) , tmp = d . children ( "ul" ) . children ( "li" ) ;
do {
tid = "j" + this . _id + "_" + ++ this . _cnt
} while ( m [ tid ] ) ;
return data . id = data . li _attr . id ? data . li _attr . id . toString ( ) : tid , 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 ) , e . children _d . length && ( data . children _d = data . children _d . concat ( e . children _d ) )
} , this ) ) , data . children _d = data . children _d . concat ( data . children ) ) : d . hasClass ( "jstree-closed" ) && ( data . state . loaded = ! 1 ) , data . li _attr . class && ( data . li _attr . class = data . li _attr . class . replace ( "jstree-closed" , "" ) . replace ( "jstree-open" , "" ) ) , data . a _attr . class && ( data . a _attr . class = data . a _attr . class . replace ( "jstree-clicked" , "" ) . replace ( "jstree-disabled" , "" ) ) , m [ data . id ] = data , data . state . selected && this . _data . core . selected . push ( data . id ) , data . id
} ,
_parse _model _from _flat _json : function ( d , p , ps ) {
ps = ps ? ps . concat ( ) : [ ] , p && ps . unshift ( p ) ;
var i , j , c , e , tid = d . id . toString ( ) ,
m = this . _model . data ,
df = this . _model . default _state ,
tmp = {
id : tid ,
text : d . text || "" ,
icon : d . icon === undefined || d . icon ,
parent : p ,
parents : ps ,
children : d . children || [ ] ,
children _d : d . children _d || [ ] ,
data : d . data ,
state : { } ,
li _attr : {
id : ! 1
} ,
a _attr : {
href : "#"
} ,
original : ! 1
} ;
for ( i in df ) 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 ) , tmp . icon !== undefined && null !== tmp . icon && "" !== tmp . icon || ( tmp . icon = ! 0 ) , d && d . data && ( tmp . data = d . data , d . data . jstree ) )
for ( i in d . data . jstree ) d . data . jstree . hasOwnProperty ( i ) && ( tmp . state [ i ] = d . data . jstree [ i ] ) ;
if ( d && "object" == typeof d . state )
for ( i in d . state ) d . state . hasOwnProperty ( i ) && ( tmp . state [ i ] = d . state [ i ] ) ;
if ( d && "object" == typeof d . li _attr )
for ( i in d . li _attr ) d . li _attr . hasOwnProperty ( i ) && ( tmp . li _attr [ i ] = d . li _attr [ i ] ) ;
if ( tmp . li _attr . id || ( tmp . li _attr . id = tid ) , d && "object" == typeof d . a _attr )
for ( i in d . a _attr ) d . a _attr . hasOwnProperty ( i ) && ( tmp . a _attr [ i ] = d . a _attr [ i ] ) ;
for ( d && d . children && ! 0 === d . children && ( tmp . state . loaded = ! 1 , tmp . children = [ ] , tmp . children _d = [ ] ) , m [ tmp . id ] = tmp , 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 ) , e . children _d . length && ( tmp . children _d = tmp . children _d . concat ( e . children _d ) ) ;
return delete d . data , delete d . children , m [ tmp . id ] . original = d , tmp . state . selected && this . _data . core . selected . push ( tmp . id ) , tmp . id
} ,
_parse _model _from _json : function ( d , p , ps ) {
ps = ps ? ps . concat ( ) : [ ] , p && ps . unshift ( p ) ;
var i , j , c , e , tmp , tid = ! 1 ,
m = this . _model . data ,
df = this . _model . default _state ;
do {
tid = "j" + this . _id + "_" + ++ this . _cnt
} while ( m [ tid ] ) ;
tmp = {
id : ! 1 ,
text : "string" == typeof d ? d : "" ,
icon : "object" != typeof d || d . icon === undefined || d . icon ,
parent : p ,
parents : ps ,
children : [ ] ,
children _d : [ ] ,
data : null ,
state : { } ,
li _attr : {
id : ! 1
} ,
a _attr : {
href : "#"
} ,
original : ! 1
} ;
for ( i in df ) df . hasOwnProperty ( i ) && ( tmp . state [ i ] = df [ i ] ) ;
if ( d && d . id && ( tmp . id = d . id . toString ( ) ) , d && d . text && ( tmp . text = d . text ) , d && d . data && d . data . jstree && d . data . jstree . icon && ( tmp . icon = d . data . jstree . icon ) , tmp . icon !== undefined && null !== tmp . icon && "" !== tmp . icon || ( tmp . icon = ! 0 ) , d && d . data && ( tmp . data = d . data , d . data . jstree ) )
for ( i in d . data . jstree ) d . data . jstree . hasOwnProperty ( i ) && ( tmp . state [ i ] = d . data . jstree [ i ] ) ;
if ( d && "object" == typeof d . state )
for ( i in d . state ) d . state . hasOwnProperty ( i ) && ( tmp . state [ i ] = d . state [ i ] ) ;
if ( d && "object" == typeof d . li _attr )
for ( i in d . li _attr ) 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 ( ) ) , tmp . id || ( tmp . id = tid ) , tmp . li _attr . id || ( tmp . li _attr . id = tmp . id ) ,
d && "object" == typeof d . a _attr )
for ( i in d . a _attr ) 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 ) , e . children _d . length && ( tmp . children _d = tmp . children _d . concat ( e . children _d ) ) ;
tmp . children _d = tmp . children _d . concat ( tmp . children )
}
return d && d . children && ! 0 === d . children && ( tmp . state . loaded = ! 1 , tmp . children = [ ] , tmp . children _d = [ ] ) , delete d . data , delete d . children , tmp . original = d , m [ tmp . id ] = tmp , tmp . state . selected && this . _data . core . selected . push ( tmp . id ) , tmp . id
} ,
_redraw : function ( ) {
var tmp , i , j , nodes = this . _model . force _full _redraw ? this . _model . data [ "#" ] . children . concat ( [ ] ) : this . _model . changed . concat ( [ ] ) ,
f = document . createElement ( "UL" ) ,
fe = this . _data . core . focused ;
for ( i = 0 , j = nodes . length ; i < j ; i ++ ) ( tmp = this . redraw _node ( nodes [ i ] , ! 0 , this . _model . force _full _redraw ) ) && this . _model . force _full _redraw && f . appendChild ( tmp ) ;
this . _model . force _full _redraw && ( f . className = this . get _container _ul ( ) [ 0 ] . className , f . setAttribute ( "role" , "group" ) , this . element . empty ( ) . append ( f ) ) , null !== fe && ( tmp = this . get _node ( fe , ! 0 ) , tmp && tmp . length && tmp . children ( ".jstree-anchor" ) [ 0 ] !== document . activeElement ? tmp . children ( ".jstree-anchor" ) . focus ( ) : this . _data . core . focused = null ) , this . _model . force _full _redraw = ! 1 , this . _model . changed = [ ] , this . trigger ( "redraw" , {
nodes : nodes
} )
} ,
redraw : function ( full ) {
full && ( this . _model . force _full _redraw = ! 0 ) , this . _redraw ( )
} ,
draw _children : function ( node ) {
var obj = this . get _node ( node ) ,
i = ! 1 ,
j = ! 1 ,
k = ! 1 ,
d = document ;
if ( ! obj ) return ! 1 ;
if ( "#" === obj . id ) return this . redraw ( ! 0 ) ;
if ( ! ( node = this . get _node ( node , ! 0 ) ) || ! node . length ) return ! 1 ;
if ( node . children ( ".jstree-children" ) . remove ( ) , node = node [ 0 ] , obj . children . length && obj . state . loaded ) {
for ( k = d . createElement ( "UL" ) , k . setAttribute ( "role" , "group" ) , k . className = "jstree-children" , i = 0 , j = obj . children . length ; i < j ; i ++ ) k . appendChild ( this . redraw _node ( obj . children [ i ] , ! 0 , ! 0 ) ) ;
node . appendChild ( k )
}
} ,
redraw _node : function ( node , deep , is _callback , force _render ) {
var obj = this . get _node ( node ) ,
par = ! 1 ,
ind = ! 1 ,
old = ! 1 ,
i = ! 1 ,
j = ! 1 ,
k = ! 1 ,
c = "" ,
d = document ,
m = this . _model . data ,
f = ! 1 ,
tmp = null ,
t = 0 ,
l = 0 ;
if ( ! obj ) return ! 1 ;
if ( "#" === obj . id ) return this . redraw ( ! 0 ) ;
if ( deep = deep || 0 === obj . children . length , node = document . querySelector ? this . element [ 0 ] . querySelector ( "#" + ( - 1 !== "0123456789" . indexOf ( obj . id [ 0 ] ) ? "\\3" + obj . id [ 0 ] + " " + obj . id . substr ( 1 ) . replace ( $ . jstree . idregex , "\\$&" ) : obj . id . replace ( $ . jstree . idregex , "\\$&" ) ) ) : document . getElementById ( obj . id ) ) node = $ ( node ) , is _callback || ( par = node . parent ( ) . parent ( ) [ 0 ] , par === this . element [ 0 ] && ( par = null ) , ind = node . index ( ) ) , deep || ! obj . children . length || node . children ( ".jstree-children" ) . length || ( deep = ! 0 ) , deep || ( old = node . children ( ".jstree-children" ) [ 0 ] ) , f = node . children ( ".jstree-anchor" ) [ 0 ] === document . activeElement , node . remove ( ) ;
else if ( deep = ! 0 , ! is _callback ) {
if ( ! ( null === ( par = "#" !== obj . parent ? $ ( "#" + obj . parent . replace ( $ . jstree . idregex , "\\$&" ) , this . element ) [ 0 ] : null ) || par && m [ obj . parent ] . state . opened ) ) return ! 1 ;
ind = $ . inArray ( obj . id , null === par ? m [ "#" ] . children : m [ obj . parent ] . children )
}
node = _node . cloneNode ( ! 0 ) , c = "jstree-node " ;
for ( i in obj . li _attr )
if ( obj . li _attr . hasOwnProperty ( i ) ) {
if ( "id" === i ) continue ;
"class" !== i ? node . setAttribute ( i , obj . li _attr [ i ] ) : c += obj . li _attr [ i ]
} 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 ) , obj . state . disabled && node . setAttribute ( "aria-disabled" , ! 0 ) , obj . state . loaded && ! obj . children . length ? c += " jstree-leaf" : ( c += obj . state . opened && obj . state . loaded ? " jstree-open" : " jstree-closed" , node . setAttribute ( "aria-expanded" , obj . state . opened && obj . state . loaded ) ) , null !== obj . parent && 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 ( "href" === j && "#" === obj . a _attr [ j ] ) continue ;
"class" !== j ? node . childNodes [ 1 ] . setAttribute ( j , obj . a _attr [ j ] ) : c += " " + obj . a _attr [ j ]
} if ( c . length && ( node . childNodes [ 1 ] . className = "jstree-anchor " + c ) , ( obj . icon && ! 0 !== obj . icon || ! 1 === obj . icon ) && ( ! 1 === obj . icon ? node . childNodes [ 1 ] . childNodes [ 0 ] . className += " jstree-themeicon-hidden" : - 1 === obj . icon . indexOf ( "/" ) && - 1 === obj . icon . indexOf ( "." ) ? node . childNodes [ 1 ] . childNodes [ 0 ] . className += " " + obj . icon + " jstree-themeicon-custom" : ( 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" ) ) , this . settings . core . force _text ? node . childNodes [ 1 ] . appendChild ( d . createTextNode ( obj . text ) ) : node . childNodes [ 1 ] . innerHTML += obj . text , deep && obj . children . length && ( obj . state . opened || force _render ) && obj . state . loaded ) {
for ( k = d . createElement ( "UL" ) , k . setAttribute ( "role" , "group" ) , k . className = "jstree-children" , i = 0 , j = obj . children . length ; i < j ; i ++ ) k . appendChild ( this . redraw _node ( obj . children [ i ] , deep , ! 0 ) ) ;
node . appendChild ( k )
}
if ( old && node . appendChild ( old ) , ! is _callback ) {
for ( par || ( par = this . element [ 0 ] ) , i = 0 , j = par . childNodes . length ; i < j ; i ++ )
if ( par . childNodes [ i ] && par . childNodes [ i ] . className && - 1 !== par . childNodes [ i ] . className . indexOf ( "jstree-children" ) ) {
tmp = par . childNodes [ i ] ;
break
} tmp || ( tmp = d . createElement ( "UL" ) , tmp . setAttribute ( "role" , "group" ) , tmp . className = "jstree-children" , par . appendChild ( tmp ) ) , par = tmp , ind < par . childNodes . length ? par . insertBefore ( node , par . childNodes [ ind ] ) : par . appendChild ( node ) , f && ( t = this . element [ 0 ] . scrollTop , l = this . element [ 0 ] . scrollLeft , node . childNodes [ 1 ] . focus ( ) , this . element [ 0 ] . scrollTop = t , this . element [ 0 ] . scrollLeft = l )
}
return obj . state . opened && ! obj . state . loaded && ( obj . state . opened = ! 1 , setTimeout ( $ . proxy ( function ( ) {
this . open _node ( obj . id , ! 1 , 0 )
} , this ) , 0 ) ) , node
} ,
open _node : function ( obj , callback , animation ) {
var t1 , t2 , d , t ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . open _node ( obj [ t1 ] , callback , animation ) ;
return ! 0
}
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
if ( animation = animation === undefined ? this . settings . core . animation : animation , ! this . is _closed ( obj ) ) return callback && callback . call ( this , obj , ! 1 ) , ! 1 ;
if ( this . is _loaded ( obj ) ) d = this . get _node ( obj , ! 0 ) , t = this , d . length && ( animation && d . children ( ".jstree-children" ) . length , obj . children . length && ! this . _firstChild ( d . children ( ".jstree-children" ) [ 0 ] ) && this . draw _children ( obj ) , animation ? ( this . trigger ( "before_open" , {
node : obj
} ) , d . children ( ".jstree-children" ) . css ( "display" , "none" ) . end ( ) . removeClass ( "jstree-closed" ) . addClass ( "jstree-open" ) . attr ( "aria-expanded" , ! 0 ) . children ( ".jstree-children" ) . show ( ) , t . trigger ( "after_open" , {
node : obj
} ) ) : ( this . trigger ( "before_open" , {
node : obj
} ) , d [ 0 ] . className = d [ 0 ] . className . replace ( "jstree-closed" , "jstree-open" ) , d [ 0 ] . setAttribute ( "aria-expanded" , ! 0 ) ) ) , obj . state . opened = ! 0 , callback && callback . call ( this , obj , ! 0 ) , d . length || this . trigger ( "before_open" , {
node : obj
} ) , this . trigger ( "open_node" , {
node : obj
} ) , animation && d . length || this . trigger ( "after_open" , {
node : obj
} ) ;
else {
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 , ! 1 )
} )
}
} ,
_open _to : function ( obj ) {
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
var i , j , p = obj . parents ;
for ( i = 0 , j = p . length ; i < j ; i += 1 ) "#" !== i && this . open _node ( p [ i ] , ! 1 , 0 ) ;
return $ ( "#" + obj . id . replace ( $ . jstree . idregex , "\\$&" ) , this . element )
} ,
close _node : function ( obj , animation ) {
var t1 , t2 , t , d ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . close _node ( obj [ t1 ] , animation ) ;
return ! 0
}
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && ( ! this . is _closed ( obj ) && ( animation = animation === undefined ? this . settings . core . animation : animation , t = this , d = this . get _node ( obj , ! 0 ) , d . length && ( animation ? ( d . children ( ".jstree-children" ) . attr ( "style" , "display:block !important" ) . end ( ) . removeClass ( "jstree-open" ) . addClass ( "jstree-closed" ) . attr ( "aria-expanded" , ! 1 ) . children ( ".jstree-children" ) . hide ( ) , d . children ( ".jstree-children" ) . remove ( ) , t . trigger ( "after_close" , {
node : obj
} ) ) : ( d [ 0 ] . className = d [ 0 ] . className . replace ( "jstree-open" , "jstree-closed" ) , d . attr ( "aria-expanded" , ! 1 ) . children ( ".jstree-children" ) . remove ( ) ) ) , obj . state . opened = ! 1 , this . trigger ( "close_node" , {
node : obj
} ) , void ( animation && d . length || this . trigger ( "after_close" , {
node : obj
} ) ) ) )
} ,
toggle _node : function ( obj ) {
var t1 , t2 ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . toggle _node ( obj [ t1 ] ) ;
return ! 0
}
return this . is _closed ( obj ) ? this . open _node ( obj ) : this . is _open ( obj ) ? this . close _node ( obj ) : void 0
} ,
open _all : function ( obj , animation , original _obj ) {
if ( obj || ( obj = "#" ) , ! ( obj = this . get _node ( obj ) ) ) return ! 1 ;
var i , j , _this , dom = "#" === obj . id ? this . get _container _ul ( ) : this . get _node ( obj , ! 0 ) ;
if ( ! dom . length ) {
for ( i = 0 , j = obj . children _d . length ; i < j ; i ++ ) this . is _closed ( this . _model . data [ obj . children _d [ i ] ] ) && ( this . _model . data [ obj . children _d [ i ] ] . state . opened = ! 0 ) ;
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 ) {
status && this . is _parent ( node ) && this . open _all ( node , animation , original _obj )
} , animation || 0 )
} ) , 0 === original _obj . find ( ".jstree-closed" ) . length && this . trigger ( "open_all" , {
node : this . get _node ( original _obj )
} )
} ,
close _all : function ( obj , animation ) {
if ( obj || ( obj = "#" ) , ! ( obj = this . get _node ( obj ) ) ) return ! 1 ;
var i , j , dom = "#" === obj . id ? this . get _container _ul ( ) : this . get _node ( obj , ! 0 ) ,
_this = this ;
if ( ! dom . length ) {
for ( i = 0 , j = obj . children _d . length ; i < j ; i ++ ) this . _model . data [ obj . children _d [ i ] ] . state . opened = ! 1 ;
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 )
} ) , this . trigger ( "close_all" , {
node : obj
} )
} ,
is _disabled : function ( obj ) {
return ( obj = this . get _node ( obj ) ) && obj . state && obj . state . disabled
} ,
enable _node : function ( obj ) {
var t1 , t2 ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . enable _node ( obj [ t1 ] ) ;
return ! 0
}
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
obj . state . disabled = ! 1 , this . get _node ( obj , ! 0 ) . children ( ".jstree-anchor" ) . removeClass ( "jstree-disabled" ) . attr ( "aria-disabled" , ! 1 ) , this . trigger ( "enable_node" , {
node : obj
} )
} ,
disable _node : function ( obj ) {
var t1 , t2 ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . disable _node ( obj [ t1 ] ) ;
return ! 0
}
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
obj . state . disabled = ! 0 , this . get _node ( obj , ! 0 ) . children ( ".jstree-anchor" ) . addClass ( "jstree-disabled" ) . attr ( "aria-disabled" , ! 0 ) , this . trigger ( "disable_node" , {
node : obj
} )
} ,
activate _node : function ( obj , e ) {
if ( this . is _disabled ( obj ) ) return ! 1 ;
if ( 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 , 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 && ( 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 ( e . shiftKey ) {
var i , j , 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 = ! 1 ;
for ( i = 0 , j = p . length ; i < j ; i += 1 ) p [ i ] === o && ( c = ! c ) , p [ i ] === l && ( c = ! c ) , this . is _disabled ( p [ i ] ) || ! c && p [ i ] !== o && p [ i ] !== l ? this . deselect _node ( p [ i ] , ! 0 , e ) : this . select _node ( p [ i ] , ! 0 , ! 1 , e ) ;
this . trigger ( "changed" , {
action : "select_node" ,
node : this . get _node ( obj ) ,
selected : this . _data . core . selected ,
event : e
} )
} else this . is _selected ( obj ) ? this . deselect _node ( obj , ! 1 , e ) : this . select _node ( obj , ! 1 , ! 1 , e ) ;
else ! this . settings . core . multiple && ( e . metaKey || e . ctrlKey || e . shiftKey ) && this . is _selected ( obj ) ? this . deselect _node ( obj , ! 1 , e ) : ( this . deselect _all ( ! 0 ) , this . select _node ( obj , ! 1 , ! 1 , e ) , this . _data . core . last _clicked = this . get _node ( obj ) ) ;
this . trigger ( "activate_node" , {
node : this . get _node ( obj )
} )
} ,
hover _node : function ( obj ) {
if ( ! ( obj = this . get _node ( obj , ! 0 ) ) || ! obj . length || obj . children ( ".jstree-hovered" ) . length ) return ! 1 ;
var o = this . element . find ( ".jstree-hovered" ) ,
t = this . element ;
o && o . length && this . dehover _node ( o ) , obj . children ( ".jstree-anchor" ) . addClass ( "jstree-hovered" ) , this . trigger ( "hover_node" , {
node : this . get _node ( obj )
} ) , setTimeout ( function ( ) {
t . attr ( "aria-activedescendant" , obj [ 0 ] . id )
} , 0 )
} ,
dehover _node : function ( obj ) {
if ( ! ( obj = this . get _node ( obj , ! 0 ) ) || ! obj . length || ! obj . children ( ".jstree-hovered" ) . length ) return ! 1 ;
obj . children ( ".jstree-anchor" ) . removeClass ( "jstree-hovered" ) , this . trigger ( "dehover_node" , {
node : this . get _node ( obj )
} )
} ,
select _node : function ( obj , supress _event , prevent _open , e ) {
var dom , t1 , t2 ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . select _node ( obj [ t1 ] , supress _event , prevent _open , e ) ;
return ! 0
}
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
dom = this . get _node ( obj , ! 0 ) , obj . state . selected || ( obj . state . selected = ! 0 , this . _data . core . selected . push ( obj . id ) , prevent _open || ( dom = this . _open _to ( obj ) ) , dom && dom . length && dom . attr ( "aria-selected" , ! 0 ) . children ( ".jstree-anchor" ) . addClass ( "jstree-clicked" ) , this . trigger ( "select_node" , {
node : obj ,
selected : this . _data . core . selected ,
event : e
} ) , supress _event || this . trigger ( "changed" , {
action : "select_node" ,
node : obj ,
selected : this . _data . core . selected ,
event : e
} ) )
} ,
deselect _node : function ( obj , supress _event , e ) {
var t1 , t2 , dom ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . deselect _node ( obj [ t1 ] , supress _event , e ) ;
return ! 0
}
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
dom = this . get _node ( obj , ! 0 ) , obj . state . selected && ( obj . state . selected = ! 1 , this . _data . core . selected = $ . vakata . array _remove _item ( this . _data . core . selected , obj . id ) , dom . length && dom . attr ( "aria-selected" , ! 1 ) . children ( ".jstree-anchor" ) . removeClass ( "jstree-clicked" ) , this . trigger ( "deselect_node" , {
node : obj ,
selected : this . _data . core . selected ,
event : e
} ) , supress _event || this . trigger ( "changed" , {
action : "deselect_node" ,
node : obj ,
selected : this . _data . core . selected ,
event : e
} ) )
} ,
select _all : function ( supress _event ) {
var i , j , tmp = this . _data . core . selected . concat ( [ ] ) ;
for ( this . _data . core . selected = this . _model . data [ "#" ] . children _d . concat ( ) , i = 0 , j = this . _data . core . selected . length ; i < j ; 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
} ) , supress _event || this . trigger ( "changed" , {
action : "select_all" ,
selected : this . _data . core . selected ,
old _selection : tmp
} )
} ,
deselect _all : function ( supress _event ) {
var i , j , tmp = this . _data . core . selected . concat ( [ ] ) ;
for ( i = 0 , j = this . _data . core . selected . length ; i < j ; 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 : tmp
} ) , supress _event || this . trigger ( "changed" , {
action : "deselect_all" ,
selected : this . _data . core . selected ,
old _selection : tmp
} )
} ,
is _selected : function ( obj ) {
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && obj . state . selected
} ,
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 _top _selected : function ( full ) {
var i , j , k , l , tmp = this . get _selected ( ! 0 ) ,
obj = { } ;
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 ++ ) obj [ tmp [ i ] . children _d [ k ] ] && delete obj [ tmp [ i ] . children _d [ k ] ] ;
tmp = [ ] ;
for ( i in obj ) obj . hasOwnProperty ( i ) && tmp . push ( i ) ;
return full ? $ . map ( tmp , $ . proxy ( function ( i ) {
return this . get _node ( i )
} , this ) ) : tmp
} ,
get _bottom _selected : function ( full ) {
var i , j , tmp = this . get _selected ( ! 0 ) ,
obj = [ ] ;
for ( i = 0 , j = tmp . length ; i < j ; i ++ ) tmp [ i ] . children . length || obj . push ( tmp [ i ] . id ) ;
return full ? $ . map ( obj , $ . proxy ( function ( i ) {
return this . get _node ( i )
} , this ) ) : obj
} ,
get _state : function ( ) {
var i , state = {
core : {
open : [ ] ,
scroll : {
left : this . element . scrollLeft ( ) ,
top : this . element . scrollTop ( )
} ,
selected : [ ]
}
} ;
for ( i in this . _model . data ) this . _model . data . hasOwnProperty ( i ) && "#" !== i && ( this . _model . data [ i ] . state . opened && state . core . open . push ( i ) , this . _model . data [ i ] . state . selected && state . core . selected . push ( i ) ) ;
return state
} ,
set _state : function ( state , callback ) {
if ( state ) {
if ( state . core ) {
var _this , i ;
if ( state . core . open ) return $ . isArray ( state . core . open ) && state . core . open . length ? this . _load _nodes ( state . core . open , function ( nodes ) {
this . open _node ( nodes , ! 1 , 0 ) , delete state . core . open , this . set _state ( state , callback )
} , ! 0 ) : ( delete state . core . open , this . set _state ( state , callback ) ) , ! 1 ;
if ( state . core . scroll ) return state . core . scroll && state . core . scroll . left !== undefined && this . element . scrollLeft ( state . core . scroll . left ) , state . core . scroll && state . core . scroll . top !== undefined && this . element . scrollTop ( state . core . scroll . top ) , delete state . core . scroll , this . set _state ( state , callback ) , ! 1 ;
if ( state . core . selected ) return _this = this , this . deselect _all ( ) , $ . each ( state . core . selected , function ( i , v ) {
_this . select _node ( v , ! 1 , ! 0 )
} ) , delete state . core . selected , this . set _state ( state , callback ) , ! 1 ;
for ( i in state ) state . hasOwnProperty ( i ) && "core" !== i && - 1 === $ . inArray ( i , this . settings . plugins ) && delete state [ i ] ;
if ( $ . isEmptyObject ( state . core ) ) return delete state . core , this . set _state ( state , callback ) , ! 1
}
return ! $ . isEmptyObject ( state ) || ( state = null , callback && callback . call ( this ) , this . trigger ( "set_state" ) , ! 1 )
}
return ! 1
} ,
refresh : function ( skip _loading , forget _state ) {
this . _data . core . state = ! 0 === forget _state ? { } : this . get _state ( ) , 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 : ! 1
}
}
} ;
var c = this . get _container _ul ( ) [ 0 ] . className ;
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'><i class='jstree-icon jstree-ocl'></i><a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this . get _string ( "Loading ..." ) + "</a></li></ul>" ) , this . element . attr ( "aria-activedescendant" , "j" + this . _id + "_loading" ) ) , this . load _node ( "#" , function ( o , s ) {
s && ( this . get _container _ul ( ) [ 0 ] . className = c , this . _firstChild ( this . get _container _ul ( ) [ 0 ] ) && this . element . attr ( "aria-activedescendant" , this . _firstChild ( this . get _container _ul ( ) [ 0 ] ) . id ) , this . set _state ( $ . extend ( ! 0 , { } , this . _data . core . state ) , function ( ) {
this . trigger ( "refresh" )
} ) ) , this . _data . core . state = null
} )
} ,
refresh _node : function ( obj ) {
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
var opened = [ ] ,
to _load = [ ] ;
this . _data . core . selected . concat ( [ ] ) ;
to _load . push ( obj . id ) , ! 0 === obj . state . opened && opened . push ( obj . id ) , this . get _node ( obj , ! 0 ) . find ( ".jstree-open" ) . each ( function ( ) {
opened . push ( this . id )
} ) , this . _load _nodes ( to _load , $ . proxy ( function ( nodes ) {
this . open _node ( opened , ! 1 , 0 ) , this . select _node ( this . _data . core . selected ) , this . trigger ( "refresh_node" , {
node : obj ,
nodes : nodes
} )
} , this ) )
} ,
set _id : function ( obj , id ) {
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
var i , j , m = this . _model . data ;
for ( id = id . toString ( ) , m [ obj . parent ] . children [ $ . inArray ( obj . id , m [ obj . parent ] . children ) ] = id , 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 ;
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 ;
return i = $ . inArray ( obj . id , this . _data . core . selected ) , - 1 !== i && ( this . _data . core . selected [ i ] = id ) , i = this . get _node ( obj . id , ! 0 ) , i && ( i . attr ( "id" , id ) . children ( ".jstree-anchor" ) . attr ( "id" , id + "_anchor" ) . end ( ) . attr ( "aria-labelledby" , id + "_anchor" ) , this . element . attr ( "aria-activedescendant" ) === obj . id && this . element . attr ( "aria-activedescendant" , id ) ) , delete m [ obj . id ] , obj . id = id , obj . li _attr . id = id , m [ id ] = obj , ! 0
} ,
get _text : function ( obj ) {
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && obj . text
} ,
set _text : function ( obj , val ) {
var t1 , t2 ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . set _text ( obj [ t1 ] , val ) ;
return ! 0
}
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && ( obj . text = val , this . get _node ( obj , ! 0 ) . length && this . redraw _node ( obj . id ) , this . trigger ( "set_text" , {
obj : obj ,
text : val
} ) , ! 0 )
} ,
get _json : function ( obj , options , flat ) {
if ( ! ( obj = this . get _node ( obj || "#" ) ) ) return ! 1 ;
options && options . flat && ! flat && ( flat = [ ] ) ;
var i , j , tmp = {
id : obj . id ,
text : obj . text ,
icon : this . get _icon ( obj ) ,
li _attr : $ . extend ( ! 0 , { } , obj . li _attr ) ,
a _attr : $ . extend ( ! 0 , { } , obj . a _attr ) ,
state : { } ,
data : ( ! options || ! options . no _data ) && $ . extend ( ! 0 , { } , obj . data )
} ;
if ( options && options . flat ? tmp . parent = obj . parent : tmp . children = [ ] , ! options || ! options . no _state )
for ( i in obj . state ) obj . state . hasOwnProperty ( i ) && ( tmp . state [ i ] = obj . state [ i ] ) ;
if ( options && options . no _id && ( delete tmp . id , tmp . li _attr && tmp . li _attr . id && delete tmp . li _attr . id , tmp . a _attr && tmp . a _attr . id && delete tmp . a _attr . id ) , options && options . flat && "#" !== obj . id && flat . push ( tmp ) , ! options || ! options . no _children )
for ( i = 0 , j = obj . children . length ; i < j ; i ++ ) options && options . flat ? this . get _json ( obj . children [ i ] , options , flat ) : tmp . children . push ( this . get _json ( obj . children [ i ] , options ) ) ;
return options && options . flat ? flat : "#" === obj . id ? tmp . children : tmp
} ,
create _node : function ( par , node , pos , callback , is _loaded ) {
if ( null === par && ( par = "#" ) , ! ( par = this . get _node ( par ) ) ) return ! 1 ;
if ( pos = pos === undefined ? "last" : pos , ! pos . toString ( ) . match ( /^(before|after)$/ ) && ! is _loaded && ! this . is _loaded ( par ) ) return this . load _node ( par , function ( ) {
this . create _node ( par , node , pos , callback , ! 0 )
} ) ;
node || ( node = {
text : this . get _string ( "New node" )
} ) , "string" == typeof node && ( node = {
text : node
} ) , node . text === undefined && ( node . text = this . get _string ( "New node" ) ) ;
var tmp , dpc , i , j ;
switch ( "#" === par . id && ( "before" === pos && ( pos = "first" ) , "after" === pos && ( pos = "last" ) ) , 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 :
pos || ( pos = 0 )
}
if ( pos > par . children . length && ( pos = par . children . length ) , node . id || ( node . id = ! 0 ) , ! this . check ( "create_node" , node , par , pos ) ) return this . settings . core . error . call ( this , this . _data . core . last _error ) , ! 1 ;
if ( ! 0 === node . id && delete node . id , ! ( node = this . _parse _model _from _json ( node , par . id , par . parents . concat ( ) ) ) ) return ! 1 ;
for ( 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 ) , 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 ) ;
for ( node = tmp , tmp = [ ] , i = 0 , j = par . children . length ; i < j ; i ++ ) tmp [ i >= pos ? i + 1 : i ] = par . children [ i ] ;
return tmp [ pos ] = node . id , par . children = tmp , this . redraw _node ( par , ! 0 ) , callback && callback . call ( this , this . get _node ( node ) ) , this . trigger ( "create_node" , {
node : this . get _node ( node ) ,
parent : par . id ,
position : pos
} ) , node . id
} ,
rename _node : function ( obj , val ) {
var t1 , t2 , old ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . rename _node ( obj [ t1 ] , val ) ;
return ! 0
}
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && ( old = obj . text , this . check ( "rename_node" , obj , this . get _parent ( obj ) , val ) ? ( this . set _text ( obj , val ) , this . trigger ( "rename_node" , {
node : obj ,
text : val ,
old : old
} ) , ! 0 ) : ( this . settings . core . error . call ( this , this . _data . core . last _error ) , ! 1 ) )
} ,
delete _node : function ( obj ) {
var t1 , t2 , par , pos , tmp , i , j , k , l , c ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . delete _node ( obj [ t1 ] ) ;
return ! 0
}
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
if ( par = this . get _node ( obj . parent ) , pos = $ . inArray ( obj . id , par . children ) , c = ! 1 , ! this . check ( "delete_node" , obj , par , pos ) ) return this . settings . core . error . call ( this , this . _data . core . last _error ) , ! 1 ;
for ( - 1 !== pos && ( par . children = $ . vakata . array _remove ( par . children , pos ) ) , tmp = obj . children _d . concat ( [ ] ) , tmp . push ( obj . id ) , k = 0 , l = tmp . length ; k < l ; k ++ ) {
for ( i = 0 , j = obj . parents . length ; i < j ; i ++ ) - 1 !== ( pos = $ . inArray ( tmp [ k ] , this . _model . data [ obj . parents [ i ] ] . children _d ) ) && ( this . _model . data [ obj . parents [ i ] ] . children _d = $ . vakata . array _remove ( this . _model . data [ obj . parents [ i ] ] . children _d , pos ) ) ;
this . _model . data [ tmp [ k ] ] . state . selected && ( c = ! 0 , - 1 !== ( pos = $ . inArray ( tmp [ k ] , this . _data . core . selected ) ) && ( this . _data . core . selected = $ . vakata . array _remove ( this . _data . core . selected , pos ) ) )
}
for ( this . trigger ( "delete_node" , {
node : obj ,
parent : par . id
} ) , c && this . trigger ( "changed" , {
action : "delete_node" ,
node : obj ,
selected : this . _data . core . selected ,
parent : par . id
} ) , k = 0 , l = tmp . length ; k < l ; k ++ ) delete this . _model . data [ tmp [ k ] ] ;
return this . redraw _node ( par , ! 0 ) , ! 0
} ,
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 ;
return "move_node" !== chk && "copy_node" !== chk || more && more . is _multi || obj . id !== par . id && $ . inArray ( obj . id , par . children ) !== pos && - 1 === $ . inArray ( par . id , obj . children _d ) ? ( tmp && tmp . data && ( tmp = tmp . data ) , tmp && tmp . functions && ( ! 1 === tmp . functions [ chk ] || ! 0 === tmp . functions [ chk ] ) ? ( ! 1 === tmp . functions [ chk ] && ( 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} ) , tmp . functions [ chk ] ) : ! ( ! 1 === chc || $ . isFunction ( chc ) && ! 1 === chc . call ( this , chk , obj , par , pos , more ) || chc && ! 1 === chc [ chk ] ) || ( 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} , ! 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} , ! 1 )
} ,
last _error : function ( ) {
return this . _data . core . last _error
} ,
move _node : function ( obj , par , pos , callback , is _loaded , skip _redraw , origin ) {
var t1 , t2 , old _par , old _pos , new _par , old _ins , is _multi , dpc , tmp , i , j , k , l , p ;
if ( par = this . get _node ( par ) , pos = pos === undefined ? 0 : pos , ! par ) return ! 1 ;
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 , ! 0 , ! 1 , origin )
} ) ;
if ( $ . isArray ( obj ) ) {
if ( 1 !== obj . length ) {
for ( t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) ( tmp = this . move _node ( obj [ t1 ] , par , pos , callback , is _loaded , ! 1 , origin ) ) && ( par = tmp , pos = "after" ) ;
return this . redraw ( ) , ! 0
}
obj = obj [ 0 ]
}
if ( ! ( obj = obj && obj . id ? obj : this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
if ( old _par = ( obj . parent || "#" ) . toString ( ) , new _par = pos . toString ( ) . match ( /^(before|after)$/ ) && "#" !== par . id ? this . get _node ( par . parent ) : par , old _ins = origin || ( 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 , old _ins && old _ins . _id && ( obj = old _ins . _model . data [ obj . id ] ) , is _multi ) return ! ! ( tmp = this . copy _node ( obj , par , pos , callback , is _loaded , ! 1 , origin ) ) && ( old _ins && old _ins . delete _node ( obj ) , tmp ) ;
switch ( "#" === par . id && ( "before" === pos && ( pos = "first" ) , "after" === pos && ( pos = "last" ) ) , 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 :
pos || ( pos = 0 )
}
if ( pos > new _par . children . length && ( pos = new _par . children . length ) , ! this . check ( "move_node" , obj , new _par , pos , {
core : ! 0 ,
origin : origin ,
is _multi : old _ins && old _ins . _id && old _ins . _id !== this . _id ,
is _foreign : ! old _ins || ! old _ins . _id
} ) ) return this . settings . core . error . call ( this , this . _data . core . last _error ) , ! 1 ;
if ( obj . parent === new _par . id ) {
for ( dpc = new _par . children . concat ( ) , tmp = $ . inArray ( obj . id , dpc ) , - 1 !== tmp && ( dpc = $ . vakata . array _remove ( dpc , tmp ) , pos > tmp && pos -- ) , tmp = [ ] , 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 {
for ( tmp = obj . children _d . concat ( ) , tmp . push ( obj . id ) , i = 0 , j = obj . parents . length ; i < j ; i ++ ) {
for ( dpc = [ ] , p = old _ins . _model . data [ obj . parents [ i ] ] . children _d , k = 0 , l = p . length ; k < l ; k ++ ) - 1 === $ . inArray ( p [ k ] , tmp ) && dpc . push ( p [ k ] ) ;
old _ins . _model . data [ obj . parents [ i ] ] . children _d = dpc
}
for ( old _ins . _model . data [ old _par ] . children = $ . vakata . array _remove _item ( old _ins . _model . data [ old _par ] . children , obj . id ) , 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 ) ;
for ( dpc = [ ] , i = 0 , j = new _par . children . length ; i < j ; i ++ ) dpc [ i >= pos ? i + 1 : i ] = new _par . children [ i ] ;
for ( 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 ) , obj . parent = new _par . id , tmp = new _par . parents . concat ( ) , tmp . unshift ( new _par . id ) , p = obj . parents . length , obj . parents = tmp , tmp = tmp . concat ( ) , 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 , - 1 * p ) , Array . prototype . push . apply ( this . _model . data [ obj . children _d [ i ] ] . parents , tmp ) ;
"#" !== old _par && "#" !== new _par . id || ( this . _model . force _full _redraw = ! 0 ) , this . _model . force _full _redraw || ( this . _node _changed ( old _par ) , this . _node _changed ( new _par . id ) ) , skip _redraw || this . redraw ( )
}
return callback && callback . call ( this , obj , new _par , pos ) , 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
} ) , obj . id
} ,
copy _node : function ( obj , par , pos , callback , is _loaded , skip _redraw , origin ) {
var t1 , t2 , dpc , tmp , i , j , node , old _par , new _par , old _ins ;
if ( par = this . get _node ( par ) , pos = pos === undefined ? 0 : pos , ! par ) return ! 1 ;
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 , ! 0 , ! 1 , origin )
} ) ;
if ( $ . isArray ( obj ) ) {
if ( 1 !== obj . length ) {
for ( t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) ( tmp = this . copy _node ( obj [ t1 ] , par , pos , callback , is _loaded , ! 0 , origin ) ) && ( par = tmp , pos = "after" ) ;
return this . redraw ( ) , ! 0
}
obj = obj [ 0 ]
}
if ( ! ( obj = obj && obj . id ? obj : this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
switch ( old _par = ( obj . parent || "#" ) . toString ( ) , new _par = pos . toString ( ) . match ( /^(before|after)$/ ) && "#" !== par . id ? this . get _node ( par . parent ) : par , old _ins = origin || ( this . _model . data [ obj . id ] ? this : $ . jstree . reference ( obj . id ) ) , ! old _ins || ! old _ins . _id || this . _id !== old _ins . _id , old _ins && old _ins . _id && ( obj = old _ins . _model . data [ obj . id ] ) , "#" === par . id && ( "before" === pos && ( pos = "first" ) , "after" === pos && ( pos = "last" ) ) , 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 :
pos || ( pos = 0 )
}
if ( pos > new _par . children . length && ( pos = new _par . children . length ) , ! this . check ( "copy_node" , obj , new _par , pos , {
core : ! 0 ,
origin : origin ,
is _multi : old _ins && old _ins . _id && old _ins . _id !== this . _id ,
is _foreign : ! old _ins || ! old _ins . _id
} ) ) return this . settings . core . error . call ( this , this . _data . core . last _error ) , ! 1 ;
if ( ! ( node = old _ins ? old _ins . get _json ( obj , {
no _id : ! 0 ,
no _data : ! 0 ,
no _state : ! 0
} ) : obj ) ) return ! 1 ;
if ( ! 0 === node . id && delete node . id , ! ( node = this . _parse _model _from _json ( node , new _par . id , new _par . parents . concat ( ) ) ) ) return ! 1 ;
for ( tmp = this . get _node ( node ) , obj && obj . state && ! 1 === obj . state . loaded && ( tmp . state . loaded = ! 1 ) , dpc = [ ] , dpc . push ( node ) , dpc = dpc . concat ( tmp . children _d ) , this . trigger ( "model" , {
nodes : dpc ,
parent : new _par . id
} ) , 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 ) ;
for ( dpc = [ ] , i = 0 ,
j = new _par . children . length ; i < j ; i ++ ) dpc [ i >= pos ? i + 1 : i ] = new _par . children [ i ] ;
return 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 ) , "#" === new _par . id && ( this . _model . force _full _redraw = ! 0 ) , this . _model . force _full _redraw || this . _node _changed ( new _par . id ) , skip _redraw || this . redraw ( "#" === new _par . id ) , callback && callback . call ( this , tmp , new _par , pos ) , 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
} ) , tmp . id
} ,
cut : function ( obj ) {
if ( obj || ( obj = this . _data . core . selected . concat ( ) ) , $ . isArray ( obj ) || ( obj = [ obj ] ) , ! obj . length ) return ! 1 ;
var o , t1 , t2 , tmp = [ ] ;
for ( t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) ( o = this . get _node ( obj [ t1 ] ) ) && o . id && "#" !== o . id && tmp . push ( o ) ;
if ( ! tmp . length ) return ! 1 ;
ccp _node = tmp , ccp _inst = this , ccp _mode = "move_node" , this . trigger ( "cut" , {
node : obj
} )
} ,
copy : function ( obj ) {
if ( obj || ( obj = this . _data . core . selected . concat ( ) ) , $ . isArray ( obj ) || ( obj = [ obj ] ) , ! obj . length ) return ! 1 ;
var o , t1 , t2 , tmp = [ ] ;
for ( t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) ( o = this . get _node ( obj [ t1 ] ) ) && o . id && "#" !== o . id && tmp . push ( o ) ;
if ( ! tmp . length ) return ! 1 ;
ccp _node = tmp , ccp _inst = this , ccp _mode = "copy_node" , this . trigger ( "copy" , {
node : obj
} )
} ,
get _buffer : function ( ) {
return {
mode : ccp _mode ,
node : ccp _node ,
inst : ccp _inst
}
} ,
can _paste : function ( ) {
return ! 1 !== ccp _mode && ! 1 !== ccp _node
} ,
paste : function ( obj , pos ) {
if ( ! ( ( obj = this . get _node ( obj ) ) && ccp _mode && ccp _mode . match ( /^(copy_node|move_node)$/ ) && ccp _node ) ) return ! 1 ;
this [ ccp _mode ] ( ccp _node , obj , pos , ! 1 , ! 1 , ! 1 , ccp _inst ) && this . trigger ( "paste" , {
parent : obj . id ,
node : ccp _node ,
mode : ccp _mode
} ) , ccp _node = ! 1 , ccp _mode = ! 1 , ccp _inst = ! 1
} ,
clear _buffer : function ( ) {
ccp _node = ! 1 , ccp _mode = ! 1 , ccp _inst = ! 1 , this . trigger ( "clear_buffer" )
} ,
edit : function ( obj , default _text , callback ) {
var rtl , w , a , s , t , h1 , h2 , fn , tmp ;
return ! ! ( obj = this . get _node ( obj ) ) && ( ! 1 === this . settings . core . check _callback ? ( 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 ) : ( tmp = obj , default _text = "string" == typeof default _text ? default _text : obj . text , this . set _text ( obj , "" ) , obj = this . _open _to ( obj ) , tmp . text = default _text , rtl = this . _data . core . rtl , w = this . element . width ( ) , a = obj . children ( ".jstree-anchor" ) , s = $ ( "<span>" ) , 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" ,
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 : $ . proxy ( function ( ) {
var nv , i = s . children ( ".jstree-rename-input" ) ,
v = i . val ( ) ,
f = this . settings . core . force _text ;
"" === v && ( v = t ) , h1 . remove ( ) , s . replaceWith ( a ) , s . remove ( ) , t = f ? t : $ ( "<div></div>" ) . append ( $ . parseHTML ( t ) ) . html ( ) , this . set _text ( obj , t ) , nv = ! ! this . rename _node ( obj , f ? $ ( "<div></div>" ) . text ( v ) . text ( ) : $ ( "<div></div>" ) . append ( $ . parseHTML ( v ) ) . html ( ) ) , nv || this . set _text ( obj , t ) , callback && callback . call ( this , tmp , nv )
} , this ) ,
keydown : function ( event ) {
var key = event . which ;
27 === key && ( this . value = t ) , 27 !== key && 13 !== key && 37 !== key && 38 !== key && 39 !== key && 40 !== key && 32 !== key || event . stopImmediatePropagation ( ) , 27 !== key && 13 !== key || ( 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 ( 13 === event . which ) return ! 1
}
} ) , 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 ) , void h2 . css ( fn ) . width ( Math . min ( h1 . text ( "pW" + h2 [ 0 ] . value ) . width ( ) , w ) ) [ 0 ] . select ( ) ) )
} ,
set _theme : function ( theme _name , theme _url ) {
if ( ! theme _name ) return ! 1 ;
if ( ! 0 === theme _url ) {
var dir = this . settings . core . themes . dir ;
dir || ( dir = $ . jstree . path + "/themes" ) , theme _url = dir + "/" + theme _name + "/style.css"
}
theme _url && - 1 === $ . inArray ( theme _url , themes _loaded ) && ( $ ( "head" ) . append ( '<link rel="stylesheet" href="' + theme _url + '" type="text/css" />' ) , themes _loaded . push ( theme _url ) ) , 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" ) , this . trigger ( "set_theme" , {
theme : theme _name
} )
} ,
get _theme : function ( ) {
return this . _data . core . themes . name
} ,
set _theme _variant : function ( variant _name ) {
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 , variant _name && 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 ( obj , icon ) {
var t1 , t2 , dom , old ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . set _icon ( obj [ t1 ] , icon ) ;
return ! 0
}
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && ( old = obj . icon , obj . icon = ! 0 === icon || null === icon || icon === undefined || "" === icon || icon , dom = this . get _node ( obj , ! 0 ) . children ( ".jstree-anchor" ) . children ( ".jstree-themeicon" ) , ! 1 === icon ? this . hide _icon ( obj ) : ! 0 === icon || null === icon || icon === undefined || "" === icon ? ( dom . removeClass ( "jstree-themeicon-custom " + old ) . css ( "background" , "" ) . removeAttr ( "rel" ) , ! 1 === old && this . show _icon ( obj ) ) : - 1 === icon . indexOf ( "/" ) && - 1 === icon . indexOf ( "." ) ? ( dom . removeClass ( old ) . css ( "background" , "" ) , dom . addClass ( icon + " jstree-themeicon-custom" ) . attr ( "rel" , icon ) , ! 1 === old && this . show _icon ( obj ) ) : ( dom . removeClass ( old ) . css ( "background" , "" ) , dom . addClass ( "jstree-themeicon-custom" ) . css ( "background" , "url('" + icon + "') center center no-repeat" ) . attr ( "rel" , icon ) , ! 1 === old && this . show _icon ( obj ) ) , ! 0 )
} ,
get _icon : function ( obj ) {
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && obj . icon
} ,
hide _icon : function ( obj ) {
var t1 , t2 ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . hide _icon ( obj [ t1 ] ) ;
return ! 0
}
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj ) && ( obj . icon = ! 1 , this . get _node ( obj , ! 0 ) . children ( ".jstree-anchor" ) . children ( ".jstree-themeicon" ) . addClass ( "jstree-themeicon-hidden" ) , ! 0 )
} ,
show _icon : function ( obj ) {
var t1 , t2 , dom ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . show _icon ( obj [ t1 ] ) ;
return ! 0
}
return ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj ) && ( dom = this . get _node ( obj , ! 0 ) , obj . icon = ! dom . length || dom . children ( ".jstree-anchor" ) . children ( ".jstree-themeicon" ) . attr ( "rel" ) , obj . icon || ( obj . icon = ! 0 ) , dom . children ( ".jstree-anchor" ) . children ( ".jstree-themeicon" ) . removeClass ( "jstree-themeicon-hidden" ) , ! 0 )
}
} , $ . vakata = { } , $ . vakata . attributes = function ( node , with _values ) {
node = $ ( node ) [ 0 ] ;
var attr = with _values ? { } : [ ] ;
return node && node . attributes && $ . each ( node . attributes , function ( i , v ) {
- 1 === $ . inArray ( v . name . toLowerCase ( ) , [ "style" , "contenteditable" , "hasfocus" , "tabindex" ] ) && null !== v . value && "" !== $ . trim ( v . value ) && ( with _values ? attr [ v . name ] = v . value : attr . push ( v . name ) )
} ) , attr
} , $ . vakata . array _unique = function ( array ) {
var i , l , a = [ ] ,
o = { } ;
for ( i = 0 , l = array . length ; i < l ; i ++ ) o [ array [ i ] ] === undefined && ( a . push ( array [ i ] ) , o [ array [ i ] ] = ! 0 ) ;
return a
} , $ . vakata . array _remove = function ( array , from , to ) {
var rest = array . slice ( ( to || from ) + 1 || array . length ) ;
return array . length = from < 0 ? array . length + from : from , array . push . apply ( array , rest ) , array
} , $ . vakata . array _remove _item = function ( array , item ) {
var tmp = $ . inArray ( item , array ) ;
return - 1 !== tmp ? $ . vakata . array _remove ( array , tmp ) : array
} ;
var _i = document . createElement ( "I" ) ;
_i . className = "jstree-icon jstree-checkbox" , _i . setAttribute ( "role" , "presentation" ) , $ . jstree . defaults . checkbox = {
visible : ! 0 ,
three _state : ! 0 ,
whole _node : ! 0 ,
keep _selected _style : ! 0 ,
cascade : "" ,
tie _selection : ! 0
} , $ . jstree . plugins . checkbox = function ( options , parent ) {
this . bind = function ( ) {
parent . 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" , $ . 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" , $ . 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" , $ . proxy ( function ( ) {
this . _data . checkbox . uto && clearTimeout ( this . _data . checkbox . uto ) , this . _data . checkbox . uto = setTimeout ( $ . proxy ( this . _undetermined , this ) , 50 )
} , this ) ) , this . settings . checkbox . tie _selection || this . element . on ( "model.jstree" , $ . proxy ( function ( e , data ) {
var i , j , m = this . _model . data ,
dpc = ( m [ data . parent ] , data . nodes ) ;
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 , m [ dpc [ i ] ] . state . checked && this . _data . checkbox . selected . push ( dpc [ i ] )
} , this ) ) , - 1 === this . settings . checkbox . cascade . indexOf ( "up" ) && - 1 === this . settings . checkbox . cascade . indexOf ( "down" ) || this . element . on ( "model.jstree" , $ . proxy ( function ( e , data ) {
var c , i , j , k , l , tmp , m = this . _model . data ,
p = m [ data . parent ] ,
dpc = data . nodes ,
chd = [ ] ,
s = this . settings . checkbox . cascade ,
t = this . settings . checkbox . tie _selection ;
if ( - 1 !== s . indexOf ( "down" ) )
if ( p . state [ t ? "selected" : "checked" ] ) {
for ( i = 0 , j = dpc . length ; i < j ; i ++ ) m [ dpc [ i ] ] . state [ t ? "selected" : "checked" ] = ! 0 ;
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" ] = ! 0 ;
this . _data [ t ? "core" : "checkbox" ] . selected = this . _data [ t ? "core" : "checkbox" ] . selected . concat ( m [ dpc [ i ] ] . children _d )
} if ( - 1 !== s . indexOf ( "up" ) ) {
for ( i = 0 , j = p . children _d . length ; i < j ; i ++ ) m [ p . children _d [ i ] ] . children . length || chd . push ( m [ p . children _d [ i ] ] . parent ) ;
for ( chd = $ . vakata . array _unique ( chd ) , k = 0 , l = chd . length ; k < l ; k ++ )
for ( p = m [ chd [ k ] ] ; p && "#" !== p . id ; ) {
for ( c = 0 , i = 0 , j = p . children . length ; i < j ; i ++ ) c += m [ p . children [ i ] ] . state [ t ? "selected" : "checked" ] ;
if ( c !== j ) break ;
p . state [ t ? "selected" : "checked" ] = ! 0 , this . _data [ t ? "core" : "checkbox" ] . selected . push ( p . id ) , ( tmp = this . get _node ( p , ! 0 ) ) && tmp . length && tmp . attr ( "aria-selected" , ! 0 ) . children ( ".jstree-anchor" ) . addClass ( t ? "jstree-clicked" : "jstree-checked" ) , 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 i , j , c , tmp , obj = data . node ,
m = this . _model . data ,
par = this . get _node ( obj . parent ) ,
dom = this . get _node ( obj , ! 0 ) ,
s = this . settings . checkbox . cascade ,
t = this . settings . checkbox . tie _selection ;
if ( - 1 !== s . indexOf ( "down" ) )
for ( this . _data [ t ? "core" : "checkbox" ] . selected = $ . vakata . array _unique ( this . _data [ t ? "core" : "checkbox" ] . selected . concat ( obj . children _d ) ) , i = 0 , j = obj . children _d . length ; i < j ; i ++ ) tmp = m [ obj . children _d [ i ] ] , tmp . state [ t ? "selected" : "checked" ] = ! 0 , tmp && tmp . original && tmp . original . state && tmp . original . state . undetermined && ( tmp . original . state . undetermined = ! 1 ) ;
if ( - 1 !== s . indexOf ( "up" ) )
for ( ; par && "#" !== par . id ; ) {
for ( c = 0 , i = 0 , j = par . children . length ; i < j ; i ++ ) c += m [ par . children [ i ] ] . state [ t ? "selected" : "checked" ] ;
if ( c !== j ) break ;
par . state [ t ? "selected" : "checked" ] = ! 0 , this . _data [ t ? "core" : "checkbox" ] . selected . push ( par . id ) , ( tmp = this . get _node ( par , ! 0 ) ) && tmp . length && tmp . attr ( "aria-selected" , ! 0 ) . children ( ".jstree-anchor" ) . addClass ( t ? "jstree-clicked" : "jstree-checked" ) , par = this . get _node ( par . parent )
} - 1 !== s . indexOf ( "down" ) && dom . length && dom . find ( ".jstree-anchor" ) . addClass ( t ? "jstree-clicked" : "jstree-checked" ) . parent ( ) . attr ( "aria-selected" , ! 0 )
} , this ) ) . on ( this . settings . checkbox . tie _selection ? "deselect_all.jstree" : "uncheck_all.jstree" , $ . proxy ( function ( e , data ) {
var i , j , tmp , obj = this . get _node ( "#" ) ,
m = this . _model . data ;
for ( i = 0 , j = obj . children _d . length ; i < j ; i ++ ) ( tmp = m [ obj . children _d [ i ] ] ) && tmp . original && tmp . original . state && tmp . original . state . undetermined && ( tmp . original . state . undetermined = ! 1 )
} , this ) ) . on ( this . settings . checkbox . tie _selection ? "deselect_node.jstree" : "uncheck_node.jstree" , $ . proxy ( function ( e , data ) {
var i , j , tmp , obj = data . node ,
dom = this . get _node ( obj , ! 0 ) ,
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 = ! 1 ) , - 1 !== s . indexOf ( "down" ) )
for ( i = 0 , j = obj . children _d . length ; i < j ; i ++ ) tmp = this . _model . data [ obj . children _d [ i ] ] , tmp . state [ t ? "selected" : "checked" ] = ! 1 , tmp && tmp . original && tmp . original . state && tmp . original . state . undetermined && ( tmp . original . state . undetermined = ! 1 ) ;
if ( - 1 !== s . indexOf ( "up" ) )
for ( i = 0 , j = obj . parents . length ; i < j ; i ++ ) tmp = this . _model . data [ obj . parents [ i ] ] , tmp . state [ t ? "selected" : "checked" ] = ! 1 , tmp && tmp . original && tmp . original . state && tmp . original . state . undetermined && ( tmp . original . state . undetermined = ! 1 ) , ( tmp = this . get _node ( obj . parents [ i ] , ! 0 ) ) && tmp . length && tmp . attr ( "aria-selected" , ! 1 ) . children ( ".jstree-anchor" ) . removeClass ( t ? "jstree-clicked" : "jstree-checked" ) ;
for ( tmp = [ ] , i = 0 , j = this . _data [ t ? "core" : "checkbox" ] . selected . length ; i < j ; i ++ ) - 1 !== 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 ) || tmp . push ( this . _data [ t ? "core" : "checkbox" ] . selected [ i ] ) ;
this . _data [ t ? "core" : "checkbox" ] . selected = $ . vakata . array _unique ( tmp ) , - 1 !== s . indexOf ( "down" ) && dom . length && dom . find ( ".jstree-anchor" ) . removeClass ( t ? "jstree-clicked" : "jstree-checked" ) . parent ( ) . attr ( "aria-selected" , ! 1 )
} , this ) ) , - 1 !== this . settings . checkbox . cascade . indexOf ( "up" ) && this . element . on ( "delete_node.jstree" , $ . proxy ( function ( e , data ) {
for ( var i , j , c , tmp , p = this . get _node ( data . parent ) , m = this . _model . data , t = this . settings . checkbox . tie _selection ; p && "#" !== p . id ; ) {
for ( c = 0 , i = 0 , j = p . children . length ; i < j ; i ++ ) c += m [ p . children [ i ] ] . state [ t ? "selected" : "checked" ] ;
if ( c !== j ) break ;
p . state [ t ? "selected" : "checked" ] = ! 0 , this . _data [ t ? "core" : "checkbox" ] . selected . push ( p . id ) , ( tmp = this . get _node ( p , ! 0 ) ) && tmp . length && tmp . attr ( "aria-selected" , ! 0 ) . children ( ".jstree-anchor" ) . addClass ( t ? "jstree-clicked" : "jstree-checked" ) , p = this . get _node ( p . parent )
}
} , this ) ) . on ( "move_node.jstree" , $ . proxy ( function ( e , data ) {
var p , c , i , j , tmp , is _multi = data . is _multi ,
old _par = data . old _parent ,
new _par = this . get _node ( data . parent ) ,
m = this . _model . data ,
t = this . settings . checkbox . tie _selection ;
if ( ! is _multi )
for ( p = this . get _node ( old _par ) ; p && "#" !== p . id ; ) {
for ( c = 0 , i = 0 , j = p . children . length ; i < j ; i ++ ) c += m [ p . children [ i ] ] . state [ t ? "selected" : "checked" ] ;
if ( c !== j ) break ;
p . state [ t ? "selected" : "checked" ] = ! 0 , this . _data [ t ? "core" : "checkbox" ] . selected . push ( p . id ) , ( tmp = this . get _node ( p , ! 0 ) ) && tmp . length && tmp . attr ( "aria-selected" , ! 0 ) . children ( ".jstree-anchor" ) . addClass ( t ? "jstree-clicked" : "jstree-checked" ) , p = this . get _node ( p . parent )
}
for ( p = new _par ; p && "#" !== p . id ; ) {
for ( c = 0 , 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" ] || ( p . state [ t ? "selected" : "checked" ] = ! 0 , this . _data [ t ? "core" : "checkbox" ] . selected . push ( p . id ) , ( tmp = this . get _node ( p , ! 0 ) ) && tmp . length && tmp . attr ( "aria-selected" , ! 0 ) . children ( ".jstree-anchor" ) . addClass ( t ? "jstree-clicked" : "jstree-checked" ) ) ;
else {
if ( ! p . state [ t ? "selected" : "checked" ] ) break ;
p . state [ t ? "selected" : "checked" ] = ! 1 , this . _data [ t ? "core" : "checkbox" ] . selected = $ . vakata . array _remove _item ( this . _data [ t ? "core" : "checkbox" ] . selected , p . id ) , ( tmp = this . get _node ( p , ! 0 ) ) && tmp . length && tmp . attr ( "aria-selected" , ! 1 ) . children ( ".jstree-anchor" ) . removeClass ( t ? "jstree-clicked" : "jstree-checked" )
}
p = this . get _node ( p . parent )
}
} , this ) )
} , this . _undetermined = function ( ) {
if ( null !== this . element ) {
var i , j , k , l , o = { } ,
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 )
for ( k = 0 , l = m [ s [ i ] ] . parents . length ; k < l ; k ++ ) o [ m [ s [ i ] ] . parents [ k ] ] === undefined && "#" !== m [ s [ i ] ] . parents [ k ] && ( o [ m [ s [ i ] ] . parents [ k ] ] = ! 0 , p . push ( m [ s [ i ] ] . parents [ k ] ) ) ;
for ( this . element . find ( ".jstree-closed" ) . not ( ":has(.jstree-children)" ) . each ( function ( ) {
var tmp2 , tmp = tt . get _node ( this ) ;
if ( tmp . state . loaded ) {
for ( i = 0 , j = tmp . children _d . length ; i < j ; i ++ )
if ( tmp2 = m [ tmp . children _d [ i ] ] , ! tmp2 . state . loaded && tmp2 . original && tmp2 . original . state && tmp2 . original . state . undetermined && ! 0 === tmp2 . original . state . undetermined )
for ( o [ tmp2 . id ] === undefined && "#" !== tmp2 . id && ( o [ tmp2 . id ] = ! 0 , p . push ( tmp2 . id ) ) , k = 0 , l = tmp2 . parents . length ; k < l ; k ++ ) o [ tmp2 . parents [ k ] ] === undefined && "#" !== tmp2 . parents [ k ] && ( o [ tmp2 . parents [ k ] ] = ! 0 , p . push ( tmp2 . parents [ k ] ) )
} else if ( tmp . original && tmp . original . state && tmp . original . state . undetermined && ! 0 === tmp . original . state . undetermined )
for ( o [ tmp . id ] === undefined && "#" !== tmp . id && ( o [ tmp . id ] = ! 0 , p . push ( tmp . id ) ) , k = 0 , l = tmp . parents . length ; k < l ; k ++ ) o [ tmp . parents [ k ] ] === undefined && "#" !== tmp . parents [ k ] && ( o [ tmp . parents [ k ] ] = ! 0 , p . push ( tmp . parents [ k ] ) )
} ) , this . element . find ( ".jstree-undetermined" ) . removeClass ( "jstree-undetermined" ) , i = 0 , j = p . length ; i < j ; i ++ ) m [ p [ i ] ] . state [ t ? "selected" : "checked" ] || ( s = this . get _node ( p [ i ] , ! 0 ) ) && s . length && s . children ( ".jstree-anchor" ) . children ( ".jstree-checkbox" ) . addClass ( "jstree-undetermined" )
}
} , this . redraw _node = function ( obj , deep , is _callback , force _render ) {
if ( obj = parent . redraw _node . apply ( this , arguments ) ) {
var i , j , tmp = null ;
for ( i = 0 , j = obj . childNodes . length ; i < j ; i ++ )
if ( obj . childNodes [ i ] && obj . childNodes [ i ] . className && - 1 !== obj . childNodes [ i ] . className . indexOf ( "jstree-anchor" ) ) {
tmp = obj . childNodes [ i ] ;
break
} tmp && ( ! this . settings . checkbox . tie _selection && this . _model . data [ obj . id ] . state . checked && ( tmp . className += " jstree-checked" ) , tmp . insertBefore ( _i . cloneNode ( ! 1 ) , tmp . childNodes [ 0 ] ) )
}
return is _callback || - 1 === this . settings . checkbox . cascade . indexOf ( "undetermined" ) || ( this . _data . checkbox . uto && clearTimeout ( this . _data . checkbox . uto ) , this . _data . checkbox . uto = setTimeout ( $ . proxy ( this . _undetermined , this ) , 50 ) ) , obj
} , 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 ( obj ) {
obj = this . get _node ( obj ) ;
var i , j , s = this . settings . checkbox . cascade ,
t = this . settings . checkbox . tie _selection ,
d = this . _data [ t ? "core" : "checkbox" ] . selected ,
m = this . _model . data ;
if ( ! obj || ! 0 === obj . state [ t ? "selected" : "checked" ] || - 1 === s . indexOf ( "undetermined" ) || - 1 === s . indexOf ( "down" ) && - 1 === s . indexOf ( "up" ) ) return ! 1 ;
if ( ! obj . state . loaded && ! 0 === obj . original . state . undetermined ) return ! 0 ;
for ( i = 0 , j = obj . children _d . length ; i < j ; i ++ )
if ( - 1 !== $ . inArray ( obj . children _d [ i ] , d ) || ! m [ obj . children _d [ i ] ] . state . loaded && m [ obj . children _d [ i ] ] . original . state . undetermined ) return ! 0 ;
return ! 1
} , this . activate _node = function ( obj , e ) {
return this . settings . checkbox . tie _selection && ( this . settings . checkbox . whole _node || $ ( e . target ) . hasClass ( "jstree-checkbox" ) ) && ( e . ctrlKey = ! 0 ) , this . settings . checkbox . tie _selection || ! this . settings . checkbox . whole _node && ! $ ( e . target ) . hasClass ( "jstree-checkbox" ) ? parent . activate _node . call ( this , obj , e ) : ! this . is _disabled ( obj ) && ( this . is _checked ( obj ) ? this . uncheck _node ( obj , e ) : this . check _node ( obj , e ) , void this . trigger ( "activate_node" , {
node : this . get _node ( obj )
} ) )
} , this . check _node = function ( obj , e ) {
if ( this . settings . checkbox . tie _selection ) return this . select _node ( obj , ! 1 , ! 0 , e ) ;
var dom , t1 , t2 ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . check _node ( obj [ t1 ] , e ) ;
return ! 0
}
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
dom = this . get _node ( obj , ! 0 ) , obj . state . checked || ( obj . state . checked = ! 0 , this . _data . checkbox . selected . push ( obj . id ) , dom && dom . length && dom . children ( ".jstree-anchor" ) . addClass ( "jstree-checked" ) , this . trigger ( "check_node" , {
node : obj ,
selected : this . _data . checkbox . selected ,
event : e
} ) )
} , this . uncheck _node = function ( obj , e ) {
if ( this . settings . checkbox . tie _selection ) return this . deselect _node ( obj , ! 1 , e ) ;
var t1 , t2 , dom ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . uncheck _node ( obj [ t1 ] , e ) ;
return ! 0
}
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
dom = this . get _node ( obj , ! 0 ) , obj . state . checked && ( obj . state . checked = ! 1 , this . _data . checkbox . selected = $ . vakata . array _remove _item ( this . _data . checkbox . selected , obj . id ) , dom . length && dom . children ( ".jstree-anchor" ) . removeClass ( "jstree-checked" ) , this . trigger ( "uncheck_node" , {
node : obj ,
selected : this . _data . checkbox . selected ,
event : e
} ) )
} , this . check _all = function ( ) {
if ( this . settings . checkbox . tie _selection ) return this . select _all ( ) ;
var i , j ;
this . _data . checkbox . selected . concat ( [ ] ) ;
for ( this . _data . checkbox . selected = this . _model . data [ "#" ] . children _d . concat ( ) , i = 0 , j = this . _data . checkbox . selected . length ; i < j ; i ++ ) this . _model . data [ this . _data . checkbox . selected [ i ] ] && ( this . _model . data [ this . _data . checkbox . selected [ i ] ] . 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 i , j , tmp = this . _data . checkbox . selected . concat ( [ ] ) ;
for ( i = 0 , j = this . _data . checkbox . selected . length ; i < j ; i ++ ) this . _model . data [ this . _data . checkbox . selected [ i ] ] && ( this . _model . data [ this . _data . checkbox . selected [ i ] ] . 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 : tmp
} )
} , this . is _checked = function ( obj ) {
return this . settings . checkbox . tie _selection ? this . is _selected ( obj ) : ! ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) && obj . state . checked
} , this . get _checked = function ( full ) {
return this . settings . checkbox . tie _selection ? this . get _selected ( full ) : full ? $ . map ( this . _data . checkbox . selected , $ . proxy ( function ( i ) {
return this . get _node ( i )
} , this ) ) : this . _data . checkbox . selected
} , this . get _top _checked = function ( full ) {
if ( this . settings . checkbox . tie _selection ) return this . get _top _selected ( full ) ;
var i , j , k , l , tmp = this . get _checked ( ! 0 ) ,
obj = { } ;
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 ++ ) obj [ tmp [ i ] . children _d [ k ] ] && delete obj [ tmp [ i ] . children _d [ k ] ] ;
tmp = [ ] ;
for ( i in obj ) obj . hasOwnProperty ( i ) && tmp . push ( i ) ;
return full ? $ . map ( tmp , $ . proxy ( function ( i ) {
return this . get _node ( i )
} , this ) ) : tmp
} , this . get _bottom _checked = function ( full ) {
if ( this . settings . checkbox . tie _selection ) return this . get _bottom _selected ( full ) ;
var i , j , tmp = this . get _checked ( ! 0 ) ,
obj = [ ] ;
for ( i = 0 , j = tmp . length ; i < j ; i ++ ) tmp [ i ] . children . length || obj . push ( tmp [ i ] . id ) ;
return full ? $ . map ( obj , $ . proxy ( function ( i ) {
return this . get _node ( i )
} , this ) ) : obj
} , this . load _node = function ( obj , callback ) {
var k , l , tmp ;
if ( ! $ . isArray ( obj ) && ! this . settings . checkbox . tie _selection && ( tmp = this . get _node ( obj ) ) && tmp . state . loaded )
for ( k = 0 , l = tmp . children _d . length ; k < l ; k ++ ) this . _model . data [ tmp . children _d [ k ] ] . state . checked && ( ! 0 , this . _data . checkbox . selected = $ . vakata . array _remove _item ( this . _data . checkbox . selected , tmp . children _d [ k ] ) ) ;
return parent . load _node . apply ( this , arguments )
} , this . get _state = function ( ) {
var state = parent . get _state . apply ( this , arguments ) ;
return this . settings . checkbox . tie _selection ? state : ( state . checkbox = this . _data . checkbox . selected . slice ( ) , state )
} , this . set _state = function ( state , callback ) {
var res = parent . set _state . apply ( this , arguments ) ;
if ( res && state . checkbox ) {
if ( ! this . settings . checkbox . tie _selection ) {
this . uncheck _all ( ) ;
var _this = this ;
$ . each ( state . checkbox , function ( i , v ) {
_this . check _node ( v )
} )
}
return delete state . checkbox , this . set _state ( state , callback ) , ! 1
}
return res
}
} , $ . jstree . defaults . contextmenu = {
select _node : ! 0 ,
show _at _node : ! 0 ,
items : function ( o , cb ) {
return {
create : {
separator _before : ! 1 ,
separator _after : ! 0 ,
_disabled : ! 1 ,
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 : ! 1 ,
separator _after : ! 1 ,
_disabled : ! 1 ,
label : "Rename" ,
action : function ( data ) {
var inst = $ . jstree . reference ( data . reference ) ,
obj = inst . get _node ( data . reference ) ;
inst . edit ( obj )
}
} ,
remove : {
separator _before : ! 1 ,
icon : ! 1 ,
separator _after : ! 1 ,
_disabled : ! 1 ,
label : "Delete" ,
action : function ( data ) {
var inst = $ . jstree . reference ( data . reference ) ,
obj = inst . get _node ( data . reference ) ;
inst . is _selected ( obj ) ? inst . delete _node ( inst . get _selected ( ) ) : inst . delete _node ( obj )
}
} ,
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 ( data ) {
var inst = $ . jstree . reference ( data . reference ) ,
obj = inst . get _node ( data . reference ) ;
inst . is _selected ( obj ) ? inst . cut ( inst . get _top _selected ( ) ) : inst . cut ( obj )
}
} ,
copy : {
separator _before : ! 1 ,
icon : ! 1 ,
separator _after : ! 1 ,
label : "Copy" ,
action : function ( data ) {
var inst = $ . jstree . reference ( data . reference ) ,
obj = inst . get _node ( data . reference ) ;
inst . is _selected ( obj ) ? inst . copy ( inst . get _top _selected ( ) ) : inst . copy ( obj )
}
} ,
paste : {
separator _before : ! 1 ,
icon : ! 1 ,
_disabled : function ( data ) {
return ! $ . jstree . reference ( data . reference ) . can _paste ( )
} ,
separator _after : ! 1 ,
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 ex , ey , last _ts = 0 ,
cto = null ;
this . element . on ( "contextmenu.jstree" , ".jstree-anchor" , $ . proxy ( function ( e , data ) {
e . preventDefault ( ) , last _ts = e . ctrlKey ? + new Date : 0 , ( data || cto ) && ( last _ts = + new Date + 1e4 ) , cto && clearTimeout ( cto ) , this . is _loading ( e . currentTarget ) || this . show _contextmenu ( e . currentTarget , e . pageX , e . pageY , e )
} , this ) ) . on ( "click.jstree" , ".jstree-anchor" , $ . proxy ( function ( e ) {
this . _data . contextmenu . visible && ( ! last _ts || + new Date - last _ts > 250 ) && $ . vakata . context . hide ( ) , last _ts = 0
} , this ) ) . on ( "touchstart.jstree" , ".jstree-anchor" , function ( e ) {
e . originalEvent && e . originalEvent . changedTouches && e . originalEvent . changedTouches [ 0 ] && ( ex = e . pageX , ey = e . pageY , cto = setTimeout ( function ( ) {
$ ( e . currentTarget ) . trigger ( "contextmenu" , ! 0 )
} , 750 ) )
} ) . on ( "touchmove.vakata.jstree" , function ( e ) {
cto && e . originalEvent && e . originalEvent . changedTouches && e . originalEvent . changedTouches [ 0 ] && ( Math . abs ( ex - e . pageX ) > 50 || Math . abs ( ey - e . pageY ) > 50 ) && clearTimeout ( cto )
} ) . on ( "touchend.vakata.jstree" , function ( e ) {
cto && clearTimeout ( cto )
} ) , $ ( document ) . on ( "context_hide.vakata.jstree" , $ . proxy ( function ( ) {
this . _data . contextmenu . visible = ! 1
} , this ) )
} , this . teardown = function ( ) {
this . _data . contextmenu . visible && $ . vakata . context . hide ( ) , parent . teardown . call ( this )
} , this . show _contextmenu = function ( obj , x , y , e ) {
if ( ! ( obj = this . get _node ( obj ) ) || "#" === obj . id ) return ! 1 ;
var s = this . settings . contextmenu ,
d = this . get _node ( obj , ! 0 ) ,
a = d . children ( ".jstree-anchor" ) ,
o = ! 1 ,
i = ! 1 ;
( s . show _at _node || x === undefined || y === undefined ) && ( o = a . offset ( ) , x = o . left , y = o . top + this . _data . core . li _height ) , this . settings . contextmenu . select _node && ! this . is _selected ( obj ) && this . activate _node ( obj , e ) , i = s . items , $ . isFunction ( i ) && ( i = i . call ( this , obj , $ . proxy ( function ( i ) {
this . _show _contextmenu ( obj , x , y , i )
} , this ) ) ) , $ . isPlainObject ( i ) && this . _show _contextmenu ( obj , x , y , i )
} , this . _show _contextmenu = function ( obj , x , y , i ) {
var d = this . get _node ( obj , ! 0 ) ,
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 = ! 0 , $ . vakata . context . show ( a , {
x : x ,
y : y
} , i ) , this . trigger ( "show_contextmenu" , {
node : obj ,
x : x ,
y : y
} )
}
} ,
function ( $ ) {
var right _to _left = ! 1 ,
vakata _context = {
element : ! 1 ,
reference : ! 1 ,
position _x : 0 ,
position _y : 0 ,
items : [ ] ,
html : "" ,
is _visible : ! 1
} ;
$ . vakata . context = {
settings : {
hide _onmouseleave : 0 ,
icons : ! 0
} ,
_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 ) {
return ! ( ! ( i = vakata _context . items [ 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
}
} )
} ,
_parse : function ( o , is _callback ) {
if ( ! o ) return ! 1 ;
is _callback || ( vakata _context . html = "" , vakata _context . items = [ ] ) ;
var tmp , str = "" ,
sep = ! 1 ;
return is _callback && ( str += "<ul>" ) , $ . each ( o , function ( i , val ) {
if ( ! val ) return ! 0 ;
vakata _context . items . push ( val ) , ! sep && val . separator _before && ( str += "<li class='vakata-context-separator'><a href='#' " + ( $ . vakata . context . settings . icons ? "" : 'style="margin-left:0px;"' ) + "> </a></li>" ) , sep = ! 1 , str += "<li class='" + ( val . _class || "" ) + ( ! 0 === val . _disabled || $ . 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 ) + "'>" , $ . vakata . context . settings . icons && ( str += "<i " , val . icon && ( - 1 !== val . icon . indexOf ( "/" ) || - 1 !== val . icon . indexOf ( "." ) ? str += " style='background:url(\"" + val . icon + "\") center center no-repeat' " : 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 ? ' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-' + val . shortcut + '">' + ( val . shortcut _label || "" ) + "</span>" : "" ) + "</a>" , val . submenu && ( tmp = $ . vakata . context . _parse ( val . submenu , ! 0 ) ) && ( str += tmp ) , str += "</li>" , val . separator _after && ( str += "<li class='vakata-context-separator'><a href='#' " + ( $ . vakata . context . settings . icons ? "" : 'style="margin-left:0px;"' ) + "> </a></li>" , sep = ! 0 )
} ) , str = str . replace ( /<li class\='vakata-context-separator'\><\/li\>$/ , "" ) , is _callback && ( str += "</ul>" ) , is _callback || ( vakata _context . html = str , $ . vakata . context . _trigger ( "parse" ) ) , str . length > 10 && str
} ,
_show _submenu : function ( o ) {
if ( o = $ ( o ) , o . length && o . children ( "ul" ) . length ) {
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 ( ) ;
right _to _left ? o [ x - ( w + 10 + o . outerWidth ( ) ) < 0 ? "addClass" : "removeClass" ] ( "vakata-context-left" ) : o [ x + w + 10 > dw ? "addClass" : "removeClass" ] ( "vakata-context-right" ) , y + h + 10 > dh && e . css ( "bottom" , "-1px" ) ,
e . show ( )
}
} ,
show : function ( reference , position , data ) {
var o , e , x , y , w , h , dw , dh ;
switch ( vakata _context . element && vakata _context . element . length && vakata _context . element . width ( "" ) , ! 0 ) {
case ! position && ! reference :
return ! 1 ;
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
}
reference && ! data && $ ( reference ) . data ( "vakata_contextmenu" ) && ( data = $ ( reference ) . data ( "vakata_contextmenu" ) ) , $ . vakata . context . _parse ( data ) && vakata _context . element . html ( vakata _context . html ) , 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 ( ) , right _to _left && ( x -= e . outerWidth ( ) - $ ( reference ) . outerWidth ( ) ) < $ ( window ) . scrollLeft ( ) + 20 && ( x = $ ( window ) . scrollLeft ( ) + 20 ) , x + w + 20 > dw && ( x = dw - ( w + 20 ) ) , 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 = ! 0 , $ . vakata . context . _trigger ( "show" ) )
} ,
hide : function ( ) {
vakata _context . is _visible && ( vakata _context . element . hide ( ) . find ( "ul" ) . hide ( ) . end ( ) . find ( ":focus" ) . blur ( ) . end ( ) . detach ( ) , vakata _context . is _visible = ! 1 , $ . vakata . context . _trigger ( "hide" ) )
}
} , $ ( function ( ) {
right _to _left = "rtl" === $ ( "body" ) . css ( "direction" ) ;
var to = ! 1 ;
vakata _context . element = $ ( "<ul class='vakata-context'></ul>" ) , vakata _context . element . on ( "mouseenter" , "li" , function ( e ) {
e . stopImmediatePropagation ( ) , $ . contains ( this , e . relatedTarget ) || ( 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 ) {
$ . contains ( this , e . relatedTarget ) || $ ( this ) . find ( ".vakata-context-hover" ) . addBack ( ) . removeClass ( "vakata-context-hover" )
} ) . on ( "mouseleave" , function ( e ) {
$ ( this ) . find ( ".vakata-context-hover" ) . removeClass ( "vakata-context-hover" ) , $ . vakata . context . settings . hide _onmouseleave && ( to = setTimeout ( function ( t ) {
return function ( ) {
$ . vakata . context . hide ( )
}
} ( ) , $ . vakata . context . settings . hide _onmouseleave ) )
} ) . on ( "click" , "a" , function ( e ) {
e . preventDefault ( ) , $ ( this ) . blur ( ) . parent ( ) . hasClass ( "vakata-context-disabled" ) || ! 1 === $ . vakata . context . _execute ( $ ( this ) . attr ( "rel" ) ) || $ . 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 :
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 :
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 ( ) , 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 :
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 :
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 ( ) , 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 ( )
}
} ) . on ( "keydown" , function ( e ) {
e . preventDefault ( ) ;
var a = vakata _context . element . find ( ".vakata-contextmenu-shortcut-" + e . which ) . parent ( ) ;
a . parent ( ) . not ( ".vakata-context-disabled" ) && a . click ( )
} ) , $ ( document ) . on ( "mousedown.vakata.jstree" , function ( e ) {
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" ) , right _to _left && vakata _context . element . addClass ( "vakata-context-rtl" ) . css ( "direction" , "rtl" ) , vakata _context . element . find ( "ul" ) . hide ( ) . end ( )
} )
} )
} ( $ ) , $ . jstree . defaults . dnd = {
copy : ! 0 ,
open _timeout : 500 ,
is _draggable : ! 0 ,
check _while _dragging : ! 0 ,
always _copy : ! 1 ,
inside _pos : 0 ,
drag _selection : ! 0 ,
touch : ! 0 ,
large _drop _target : ! 1 ,
large _drag _target : ! 1
} , $ . jstree . plugins . dnd = function ( options , parent ) {
this . bind = function ( ) {
parent . bind . call ( this ) , this . element . on ( "mousedown.jstree touchstart.jstree" , this . settings . dnd . large _drag _target ? ".jstree-node" : ".jstree-anchor" , $ . proxy ( function ( e ) {
if ( this . settings . dnd . large _drag _target && $ ( e . target ) . closest ( ".jstree-node" ) [ 0 ] !== e . currentTarget ) return ! 0 ;
if ( "touchstart" === e . type && ( ! this . settings . dnd . touch || "selected" === this . settings . dnd . touch && ! $ ( e . currentTarget ) . closest ( ".jstree-node" ) . children ( ".jstree-anchor" ) . hasClass ( "jstree-clicked" ) ) ) return ! 0 ;
var obj = this . get _node ( e . target ) ,
mlt = this . is _selected ( obj ) && this . settings . dnd . drag _selection ? this . get _top _selected ( ) . length : 1 ,
txt = mlt > 1 ? mlt + " " + this . get _string ( "nodes" ) : this . get _text ( e . currentTarget ) ;
return this . settings . core . force _text && ( txt = $ . vakata . html . escape ( txt ) ) , obj && obj . id && "#" !== obj . id && ( 1 === e . which || "touchstart" === e . type ) && ( ! 0 === this . settings . dnd . is _draggable || $ . isFunction ( this . settings . dnd . is _draggable ) && this . settings . dnd . is _draggable . call ( this , mlt > 1 ? this . get _top _selected ( ! 0 ) : [ obj ] ) ) ? ( this . element . trigger ( "mousedown.jstree" ) , $ . vakata . dnd . start ( e , {
jstree : ! 0 ,
origin : this ,
obj : this . get _node ( obj , ! 0 ) ,
nodes : mlt > 1 ? this . get _top _selected ( ) : [ obj . id ]
} , '<div id="jstree-dnd" class="jstree-' + this . get _theme ( ) + " jstree-" + this . get _theme ( ) + "-" + this . get _theme _variant ( ) + " " + ( this . settings . core . themes . responsive ? " jstree-dnd-responsive" : "" ) + '"><i class="jstree-icon jstree-er"></i>' + txt + '<ins class="jstree-copy" style="display:none;">+</ins></div>' ) ) : void 0
} , this ) )
}
} , $ ( function ( ) {
var lastmv = ! 1 ,
laster = ! 1 ,
opento = ! 1 ,
marker = $ ( '<div id="jstree-marker"> </div>' ) . hide ( ) ;
$ ( document ) . on ( "dnd_start.vakata.jstree" , function ( e , data ) {
lastmv = ! 1 , data && data . data && data . data . jstree && marker . appendTo ( "body" )
} ) . on ( "dnd_move.vakata.jstree" , function ( e , data ) {
if ( opento && clearTimeout ( opento ) , data && data . data && data . data . jstree && ( ! data . event . target . id || "jstree-marker" !== data . event . target . id ) ) {
var l , t , h , p , i , o , ok , t1 , t2 , op , ps , pr , ip , tm , ins = $ . jstree . reference ( data . event . target ) ,
ref = ! 1 ,
off = ! 1 ,
rel = ! 1 ;
if ( ins && ins . _data && ins . _data . dnd )
if ( 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" ] ( ) , data . event . target !== ins . element [ 0 ] && data . event . target !== ins . get _container _ul ( ) [ 0 ] || 0 !== ins . get _container _ul ( ) . children ( ) . length ) {
if ( ( ref = ins . settings . dnd . large _drop _target ? $ ( data . event . target ) . closest ( ".jstree-node" ) . children ( ".jstree-anchor" ) : $ ( data . event . target ) . closest ( ".jstree-anchor" ) ) && ref . length && ref . parent ( ) . is ( ".jstree-closed, .jstree-open, .jstree-leaf" ) && ( off = ref . offset ( ) , rel = data . event . pageY - off . top , h = ref . outerHeight ( ) , o = rel < h / 3 ? [ "b" , "i" , "a" ] : rel > h - h / 3 ? [ "a" , "i" , "b" ] : 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 = "first" === ip ? 0 : "last" === ip ? 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
}
for ( ok = ! 0 , t1 = 0 , t2 = data . data . nodes . length ; t1 < t2 ; t1 ++ )
if ( 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 , "move_node" === op && "a" === v && data . data . origin && data . data . origin === ins && p === ins . get _parent ( data . data . nodes [ t1 ] ) && ( pr = ins . get _node ( p ) , ps > $ . inArray ( data . data . nodes [ t1 ] , pr . children ) && ( ps -= 1 ) ) , ! ( ok = ok && ( ins && ins . settings && ins . settings . dnd && ! 1 === ins . settings . dnd . check _while _dragging || 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 : ! 0 ,
ref : ins . get _node ( ref . parent ( ) ) ,
pos : v ,
origin : data . data . origin ,
is _multi : data . data . origin && data . data . origin !== ins ,
is _foreign : ! data . data . origin
} ) ) ) ) {
ins && ins . last _error && ( laster = ins . last _error ( ) ) ;
break
} if ( "i" === v && 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 ) ) , ok ) return lastmv = {
ins : ins ,
par : p ,
pos : "i" !== v || "last" !== ip || 0 !== i || ins . is _loaded ( tm ) ? i : "last"
} , marker . css ( {
left : l + "px" ,
top : t + "px"
} ) . show ( ) , data . helper . find ( ".jstree-icon" ) . first ( ) . removeClass ( "jstree-er" ) . addClass ( "jstree-ok" ) , laster = { } , o = ! 0 , ! 1
} ) , ! 0 === o ) ) return
} else {
for ( ok = ! 0 , t1 = 0 , t2 = data . data . nodes . length ; t1 < t2 && ( 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 : ! 0 ,
ref : ins . get _node ( "#" ) ,
pos : "i" ,
origin : data . data . origin ,
is _multi : data . data . origin && data . data . origin !== ins ,
is _foreign : ! data . data . origin
} ) ) ; t1 ++ ) ;
if ( ok ) return lastmv = {
ins : ins ,
par : "#" ,
pos : "last"
} , marker . hide ( ) , void data . helper . find ( ".jstree-icon" ) . first ( ) . removeClass ( "jstree-er" ) . addClass ( "jstree-ok" )
} lastmv = ! 1 , data . helper . find ( ".jstree-icon" ) . removeClass ( "jstree-ok" ) . addClass ( "jstree-er" ) , marker . hide ( )
}
} ) . on ( "dnd_scroll.vakata.jstree" , function ( e , data ) {
data && data . data && data . data . jstree && ( marker . hide ( ) , lastmv = ! 1 , data . helper . find ( ".jstree-icon" ) . first ( ) . removeClass ( "jstree-ok" ) . addClass ( "jstree-er" ) )
} ) . on ( "dnd_stop.vakata.jstree" , function ( e , data ) {
if ( opento && clearTimeout ( opento ) , data && data . data && data . data . jstree ) {
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 ] ;
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 , ! 1 , ! 1 , ! 1 , data . data . origin )
} else i = $ ( data . event . target ) . closest ( ".jstree" ) , i . length && laster && laster . error && "check" === laster . error && ( i = i . jstree ( ! 0 ) ) && i . settings . core . error . call ( this , laster )
}
} ) . on ( "keyup.jstree keydown.jstree" , function ( e , data ) {
( data = $ . vakata . dnd . _get ( ) ) && 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" ] ( )
} )
} ) ,
function ( $ ) {
$ . vakata . html = {
div : $ ( "<div />" ) ,
escape : function ( str ) {
return $ . vakata . html . div . text ( str ) . html ( )
} ,
strip : function ( str ) {
return $ . vakata . html . div . empty ( ) . append ( $ . parseHTML ( str ) ) . text ( )
}
} ;
var vakata _dnd = {
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
} ;
$ . 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 ( ) {
vakata _dnd . helper && vakata _dnd . helper . remove ( ) , vakata _dnd . scroll _i && ( clearInterval ( vakata _dnd . scroll _i ) , vakata _dnd . scroll _i = ! 1 ) , vakata _dnd = {
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
} , $ ( 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 ) return vakata _dnd . scroll _i && ( clearInterval ( vakata _dnd . scroll _i ) , vakata _dnd . scroll _i = ! 1 ) , ! 1 ;
if ( ! vakata _dnd . scroll _i ) return vakata _dnd . scroll _i = setInterval ( $ . vakata . dnd . _scroll , 100 ) , ! 1 ;
if ( ! 0 === init _only ) return ! 1 ;
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 ) , i === vakata _dnd . scroll _e . scrollTop ( ) && j === vakata _dnd . scroll _e . scrollLeft ( ) || $ . vakata . dnd . _trigger ( "scroll" , vakata _dnd . scroll _e )
} ,
start : function ( e , data , html ) {
"touchstart" === e . type && 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 ) ) , vakata _dnd . is _drag && $ . vakata . dnd . stop ( { } ) ;
try {
e . currentTarget . unselectable = "on" , e . currentTarget . onselectstart = function ( ) {
return ! 1
} , e . currentTarget . style && ( e . currentTarget . style . MozUserSelect = "none" )
} catch ( ignore ) { }
return vakata _dnd . init _x = e . pageX , vakata _dnd . init _y = e . pageY , vakata _dnd . data = data , vakata _dnd . is _down = ! 0 , vakata _dnd . element = e . currentTarget , vakata _dnd . target = e . target , vakata _dnd . is _touch = "touchstart" === e . type , ! 1 !== html && ( vakata _dnd . helper = $ ( "<div id='vakata-dnd'></div>" ) . 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 ) , ! 1
} ,
drag : function ( e ) {
if ( "touchmove" === e . type && 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 ) ) , vakata _dnd . is _down ) {
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 ) ) ) return ;
vakata _dnd . helper && ( vakata _dnd . helper . appendTo ( "body" ) , vakata _dnd . helper _w = vakata _dnd . helper . outerWidth ( ) ) , vakata _dnd . is _drag = ! 0 , $ . vakata . dnd . _trigger ( "start" , e )
}
var d = ! 1 ,
w = ! 1 ,
dh = ! 1 ,
wh = ! 1 ,
dw = ! 1 ,
ww = ! 1 ,
dt = ! 1 ,
dl = ! 1 ,
ht = ! 1 ,
hl = ! 1 ;
return vakata _dnd . scroll _t = 0 , vakata _dnd . scroll _l = 0 , vakata _dnd . scroll _e = ! 1 , $ ( $ ( 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 && ( o . top + t . height ( ) - e . pageY < $ . vakata . dnd . settings . scroll _proximity && ( vakata _dnd . scroll _t = 1 ) , e . pageY - o . top < $ . vakata . dnd . settings . scroll _proximity && ( vakata _dnd . scroll _t = - 1 ) ) , this . scrollWidth > this . offsetWidth && ( o . left + t . width ( ) - e . pageX < $ . vakata . dnd . settings . scroll _proximity && ( vakata _dnd . scroll _l = 1 ) , e . pageX - o . left < $ . vakata . dnd . settings . scroll _proximity && ( vakata _dnd . scroll _l = - 1 ) ) , vakata _dnd . scroll _t || vakata _dnd . scroll _l ) return vakata _dnd . scroll _e = $ ( this ) , ! 1
} ) , 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 ( ) , dh > wh && e . pageY - dt < $ . vakata . dnd . settings . scroll _proximity && ( vakata _dnd . scroll _t = - 1 ) , dh > wh && wh - ( e . pageY - dt ) < $ . vakata . dnd . settings . scroll _proximity && ( vakata _dnd . scroll _t = 1 ) , dw > ww && e . pageX - dl < $ . vakata . dnd . settings . scroll _proximity && ( vakata _dnd . scroll _l = - 1 ) , dw > ww && ww - ( e . pageX - dl ) < $ . vakata . dnd . settings . scroll _proximity && ( vakata _dnd . scroll _l = 1 ) , ( vakata _dnd . scroll _t || vakata _dnd . scroll _l ) && ( vakata _dnd . scroll _e = d ) ) , vakata _dnd . scroll _e && $ . vakata . dnd . _scroll ( ! 0 ) , vakata _dnd . helper && ( ht = parseInt ( e . pageY + $ . vakata . dnd . settings . helper _top , 10 ) , hl = parseInt ( e . pageX + $ . vakata . dnd . settings . helper _left , 10 ) , dh && ht + 25 > dh && ( ht = dh - 50 ) , dw && hl + vakata _dnd . helper _w > dw && ( hl = dw - ( vakata _dnd . helper _w + 2 ) ) , vakata _dnd . helper . css ( {
left : hl + "px" ,
top : ht + "px"
} ) ) , $ . vakata . dnd . _trigger ( "move" , e ) , ! 1
}
} ,
stop : function ( e ) {
if ( "touchend" === e . type && 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 ) ) , vakata _dnd . is _drag ) $ . vakata . dnd . _trigger ( "stop" , e ) ;
else if ( "touchend" === e . type && e . target === vakata _dnd . target ) {
var to = setTimeout ( function ( ) {
$ ( e . target ) . click ( )
} , 100 ) ;
$ ( e . target ) . one ( "click" , function ( ) {
to && clearTimeout ( to )
} )
}
return $ . vakata . dnd . _clean ( ) , ! 1
}
}
} ( $ ) , $ . jstree . defaults . massload = null , $ . jstree . plugins . massload = function ( options , parent ) {
this . init = function ( el , options ) {
parent . init . call ( this , el , options ) , this . _data . massload = { }
} , this . _load _nodes = function ( nodes , callback , is _callback ) {
var s = this . settings . massload ;
return is _callback && ! $ . isEmptyObject ( this . _data . massload ) ? parent . _load _nodes . call ( this , nodes , callback , is _callback ) : $ . isFunction ( s ) ? s . call ( this , nodes , $ . proxy ( function ( data ) {
if ( data )
for ( var i in data ) data . hasOwnProperty ( i ) && ( this . _data . massload [ i ] = data [ i ] ) ;
parent . _load _nodes . call ( this , nodes , callback , is _callback )
} , this ) ) : "object" == typeof s && s && s . url ? ( s = $ . extend ( ! 0 , { } , s ) , $ . isFunction ( s . url ) && ( s . url = s . url . call ( this , nodes ) ) , $ . isFunction ( s . data ) && ( s . data = s . data . call ( this , nodes ) ) , $ . ajax ( s ) . done ( $ . proxy ( function ( data , t , x ) {
if ( data )
for ( var i in data ) data . hasOwnProperty ( i ) && ( this . _data . massload [ i ] = data [ i ] ) ;
parent . _load _nodes . call ( this , nodes , callback , is _callback )
} , this ) ) . fail ( $ . proxy ( function ( f ) {
parent . _load _nodes . call ( this , nodes , callback , is _callback )
} , this ) ) ) : parent . _load _nodes . call ( this , nodes , callback , is _callback )
} , this . _load _node = function ( obj , callback ) {
var d = this . _data . massload [ obj . id ] ;
return d ? this [ "string" == typeof d ? "_append_html_data" : "_append_json_data" ] ( obj , "string" == typeof d ? $ ( $ . parseHTML ( d ) ) . filter ( function ( ) {
return 3 !== this . nodeType
} ) : d , function ( status ) {
callback . call ( this , status ) , delete this . _data . massload [ obj . id ]
} ) : parent . _load _node . call ( this , obj , callback )
}
} , $ . jstree . defaults . search = {
ajax : ! 1 ,
fuzzy : ! 1 ,
case _sensitive : ! 1 ,
show _only _matches : ! 1 ,
show _only _matches _children : ! 1 ,
close _opened _onclear : ! 0 ,
search _leaves _only : ! 1 ,
search _callback : ! 1
} , $ . 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 = ! 1 , this . _data . search . smc = ! 1 , this . element . on ( "before_open.jstree" , $ . proxy ( function ( e , data ) {
var i , j , r = this . _data . search . res ,
s = [ ] ,
o = $ ( ) ;
if ( r && r . length && ( this . _data . search . dom = $ ( this . element [ 0 ] . querySelectorAll ( "#" + $ . map ( r , function ( v ) {
return - 1 !== "0123456789" . indexOf ( v [ 0 ] ) ? "\\3" + v [ 0 ] + " " + v . substr ( 1 ) . replace ( $ . jstree . idregex , "\\$&" ) : v . replace ( $ . jstree . idregex , "\\$&" )
} ) . join ( ", #" ) ) ) , this . _data . search . dom . children ( ".jstree-anchor" ) . addClass ( "jstree-search" ) , 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 - 1 !== "0123456789" . indexOf ( v [ 0 ] ) ? "\\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 ) , this . _data . search . smc && this . _data . search . dom . children ( ".jstree-children" ) . find ( ".jstree-node" ) . show ( ) , 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 ) {
this . _data . search . som && data . nodes . length && ( this . element . find ( ".jstree-node" ) . hide ( ) . filter ( ".jstree-last" ) . filter ( function ( ) {
return this . nextSibling
} ) . removeClass ( "jstree-last" ) , this . _data . search . smc && data . nodes . children ( ".jstree-children" ) . find ( ".jstree-node" ) . show ( ) , 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 ) {
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 ) )
} , this . search = function ( str , skip _async , show _only _matches , inside , append , show _only _matches _children ) {
if ( ! 1 === str || "" === $ . trim ( str . toString ( ) ) ) return this . clear _search ( ) ;
inside = this . get _node ( inside ) , inside = inside && inside . id ? inside . id : null , str = str . toString ( ) ;
var s = this . settings . search ,
a = ! ! s . ajax && s . ajax ,
m = this . _model . data ,
f = null ,
r = [ ] ,
p = [ ] ;
if ( this . _data . search . res . length && ! append && this . clear _search ( ) , show _only _matches === undefined && ( show _only _matches = s . show _only _matches ) , show _only _matches _children === undefined && ( show _only _matches _children = s . show _only _matches _children ) , ! skip _async && ! 1 !== a ) return $ . isFunction ( a ) ? a . call ( this , str , $ . proxy ( function ( d ) {
d && d . d && ( d = d . d ) , this . _load _nodes ( $ . isArray ( d ) ? $ . vakata . array _unique ( d ) : [ ] , function ( ) {
this . search ( str , ! 0 , show _only _matches , inside , append )
} , ! 0 )
} , this ) , inside ) : ( a = $ . extend ( { } , a ) , a . data || ( a . data = { } ) , a . data . str = str , inside && ( a . data . inside = inside ) , $ . 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 ) {
d && d . d && ( d = d . d ) , this . _load _nodes ( $ . isArray ( d ) ? $ . vakata . array _unique ( d ) : [ ] , function ( ) {
this . search ( str , ! 0 , show _only _matches , inside , append )
} , ! 0 )
} , this ) ) ) ;
append || ( this . _data . search . str = str , this . _data . search . dom = $ ( ) , this . _data . search . res = [ ] , this . _data . search . opn = [ ] , this . _data . search . som = show _only _matches , this . _data . search . smc = show _only _matches _children ) , f = new $ . vakata . search ( str , ! 0 , {
caseSensitive : s . case _sensitive ,
fuzzy : s . fuzzy
} ) , $ . each ( m [ inside || "#" ] . children _d , function ( ii , i ) {
var v = m [ i ] ;
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 && 0 === v . children . length ) && ( r . push ( i ) , p = p . concat ( v . parents ) )
} ) , r . length && ( p = $ . vakata . array _unique ( p ) , this . _search _open ( p ) , append ? ( this . _data . search . dom = this . _data . search . dom . add ( $ ( this . element [ 0 ] . querySelectorAll ( "#" + $ . map ( r , function ( v ) {
return - 1 !== "0123456789" . indexOf ( v [ 0 ] ) ? "\\3" + v [ 0 ] + " " + v . substr ( 1 ) . replace ( $ . jstree . idregex , "\\$&" ) : v . replace ( $ . jstree . idregex , "\\$&" )
} ) . join ( ", #" ) ) ) ) , this . _data . search . res = $ . vakata . array _unique ( this . _data . search . res . concat ( r ) ) ) : ( this . _data . search . dom = $ ( this . element [ 0 ] . querySelectorAll ( "#" + $ . map ( r , function ( v ) {
return - 1 !== "0123456789" . indexOf ( v [ 0 ] ) ? "\\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" ) ) , this . trigger ( "search" , {
nodes : this . _data . search . dom ,
str : str ,
res : this . _data . search . res ,
show _only _matches : show _only _matches
} )
} , 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 = $ ( )
} , this . _search _open = function ( d ) {
var t = this ;
$ . each ( d . concat ( [ ] ) , function ( i , v ) {
if ( "#" === v ) return ! 0 ;
try {
v = $ ( "#" + v . replace ( $ . jstree . idregex , "\\$&" ) , t . element )
} catch ( ignore ) { }
v && v . length && t . is _closed ( v ) && ( t . _data . search . opn . push ( v [ 0 ] . id ) , t . open _node ( v , function ( ) {
t . _search _open ( d )
} , 0 ) )
} )
}
} ,
function ( $ ) {
$ . vakata . search = function ( pattern , txt , options ) {
options = options || { } , options = $ . extend ( { } , $ . vakata . search . defaults , options ) , ! 1 !== options . fuzzy && ( options . fuzzy = ! 0 ) , pattern = options . caseSensitive ? pattern : pattern . toLowerCase ( ) ;
var matchmask , pattern _alphabet , match _bitapScore , search , MATCH _LOCATION = options . location ,
MATCH _DISTANCE = options . distance ,
MATCH _THRESHOLD = options . threshold ,
patternLen = pattern . length ;
return patternLen > 32 && ( options . fuzzy = ! 1 ) , 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 ) ;
return MATCH _DISTANCE ? accuracy + proximity / MATCH _DISTANCE : proximity ? 1 : accuracy
} ) , search = function ( text ) {
if ( text = options . caseSensitive ? text : text . toLowerCase ( ) , pattern === text || - 1 !== text . indexOf ( pattern ) ) return {
isMatch : ! 0 ,
score : 0
} ;
if ( ! options . fuzzy ) return {
isMatch : ! 1 ,
score : 1
} ;
var i , j , binMin , binMid , lastRd , start , finish , rd , charMatch , textLen = text . length ,
scoreThreshold = MATCH _THRESHOLD ,
bestLoc = text . indexOf ( pattern , MATCH _LOCATION ) ,
binMax = patternLen + textLen ,
score = 1 ,
locations = [ ] ;
for ( - 1 !== bestLoc && ( scoreThreshold = Math . min ( match _bitapScore ( 0 , bestLoc ) , scoreThreshold ) , - 1 !== ( bestLoc = text . lastIndexOf ( pattern , MATCH _LOCATION + patternLen ) ) && ( scoreThreshold = Math . min ( match _bitapScore ( 0 , bestLoc ) , scoreThreshold ) ) ) , bestLoc = - 1 , i = 0 ; i < patternLen ; i ++ ) {
for ( binMin = 0 , binMid = binMax ; binMin < binMid ; ) match _bitapScore ( i , MATCH _LOCATION + binMid ) <= scoreThreshold ? binMin = binMid : binMax = binMid , binMid = Math . floor ( ( binMax - binMin ) / 2 + binMin ) ;
for ( 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 , j = finish ; j >= start ; j -- )
if ( charMatch = pattern _alphabet [ text . charAt ( j - 1 ) ] , rd [ j ] = 0 === i ? ( rd [ j + 1 ] << 1 | 1 ) & charMatch : ( rd [ j + 1 ] << 1 | 1 ) & charMatch | ( lastRd [ j + 1 ] | lastRd [ j ] ) << 1 | 1 | lastRd [ j + 1 ] , rd [ j ] & matchmask && ( score = match _bitapScore ( i , j - 1 ) ) <= scoreThreshold ) {
if ( scoreThreshold = score , bestLoc = j - 1 , locations . push ( bestLoc ) , ! ( bestLoc > MATCH _LOCATION ) ) break ;
start = Math . max ( 1 , 2 * MATCH _LOCATION - bestLoc )
} if ( match _bitapScore ( i + 1 , MATCH _LOCATION ) > scoreThreshold ) break ;
lastRd = rd
}
return {
isMatch : bestLoc >= 0 ,
score : score
}
} , ! 0 === txt ? {
search : search
} : search ( txt )
} , $ . vakata . search . defaults = {
location : 0 ,
distance : 100 ,
threshold : . 6 ,
fuzzy : ! 1 ,
caseSensitive : ! 1
}
} ( $ ) , $ . jstree . defaults . sort = function ( a , 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 , ! 0 )
} , this ) ) . on ( "rename_node.jstree create_node.jstree" , $ . proxy ( function ( e , data ) {
this . sort ( data . parent || data . node . parent , ! 1 ) , this . redraw _node ( data . parent || data . node . parent , ! 0 )
} , this ) ) . on ( "move_node.jstree copy_node.jstree" , $ . proxy ( function ( e , data ) {
this . sort ( data . parent , ! 1 ) , this . redraw _node ( data . parent , ! 0 )
} , this ) )
} , this . sort = function ( obj , deep ) {
var i , j ;
if ( ( obj = this . get _node ( obj ) ) && obj . children && obj . children . length && ( obj . children . sort ( $ . proxy ( this . settings . sort , this ) ) , deep ) )
for ( i = 0 , j = obj . children _d . length ; i < j ; i ++ ) this . sort ( obj . children _d [ i ] , ! 1 )
}
} ;
var to = ! 1 ;
$ . jstree . defaults . state = {
key : "jstree" ,
events : "changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree" ,
ttl : ! 1 ,
filter : ! 1
} , $ . 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 ( ) {
to && clearTimeout ( to ) , to = setTimeout ( $ . proxy ( function ( ) {
this . save _state ( )
} , this ) , 100 )
} , this ) ) , this . trigger ( "state_ready" )
} , this ) ;
this . element . on ( "ready.jstree" , $ . proxy ( function ( e , data ) {
this . element . one ( "restore_state.jstree" , bind ) , this . restore _state ( ) || bind ( )
} , this ) )
} , 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 ) )
} , this . restore _state = function ( ) {
var k = $ . vakata . storage . get ( this . settings . state . key ) ;
if ( k ) try {
k = JSON . parse ( k )
} catch ( ex ) {
return ! 1
}
return ! ( k && k . ttl && k . sec && + new Date - k . sec > k . ttl ) && ( k && k . state && ( k = k . state ) , k && $ . isFunction ( this . settings . state . filter ) && ( k = this . settings . state . filter . call ( this , k ) ) , ! ! k && ( this . element . one ( "set_state.jstree" , function ( e , data ) {
data . instance . trigger ( "restore_state" , {
state : $ . extend ( ! 0 , { } , k )
} )
} ) , this . set _state ( k ) , ! 0 ) )
} , this . clear _state = function ( ) {
return $ . vakata . storage . del ( this . settings . state . key )
}
} ,
function ( $ , undefined ) {
$ . vakata . storage = {
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 )
}
}
} ( $ ) , $ . 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 ( "default" !== i && "#" !== i && options . types . hasOwnProperty ( i ) )
for ( j in options . types . default ) 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 i , j , m = this . _model . data ,
dpc = data . nodes ,
t = this . settings . types ,
c = "default" ;
for ( i = 0 , j = dpc . length ; i < j ; i ++ ) c = "default" , m [ dpc [ i ] ] . original && m [ dpc [ i ] ] . original . type && t [ m [ dpc [ i ] ] . original . type ] && ( c = m [ dpc [ i ] ] . original . type ) , 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 , ! 0 === m [ dpc [ i ] ] . icon && 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 ( ! 0 , { } , options , {
no _id : ! 1
} ) : { } ,
tmp = parent . get _json . call ( this , obj , opt , flat ) ;
if ( ! 1 === tmp ) return ! 1 ;
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" , options && options . no _id && ( delete tmp [ i ] . id , tmp [ i ] . li _attr && tmp [ i ] . li _attr . id && delete tmp [ i ] . li _attr . id ,
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" , 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
}
return delete tmp . id , tmp . li _attr && tmp . li _attr . id && delete tmp . li _attr . id , tmp . a _attr && tmp . a _attr . id && delete tmp . a _attr . id , tmp . children && $ . isArray ( tmp . children ) && ( tmp . children = this . _delete _ids ( tmp . children ) ) , tmp
} , this . check = function ( chk , obj , par , pos , more ) {
if ( ! 1 === parent . check . call ( this , chk , obj , par , pos , more ) ) return ! 1 ;
obj = obj && obj . id ? obj : this . get _node ( obj ) , par = par && par . id ? par : this . get _node ( par ) ;
var tmp , d , i , j , m = obj && obj . id ? more && more . origin ? more . origin : $ . jstree . reference ( obj . id ) : null ;
switch ( m = m && m . _model && m . _model . data ? m . _model . data : null , chk ) {
case "create_node" :
case "move_node" :
case "copy_node" :
if ( "move_node" !== chk || - 1 === $ . inArray ( obj . id , par . children ) ) {
if ( tmp = this . get _rules ( par ) , tmp . max _children !== undefined && - 1 !== tmp . max _children && tmp . max _children === par . children . length ) return 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} , ! 1 ;
if ( tmp . valid _children !== undefined && - 1 !== tmp . valid _children && - 1 === $ . inArray ( obj . type || "default" , tmp . valid _children ) ) return 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} , ! 1 ;
if ( m && obj . children _d && obj . parents ) {
for ( d = 0 , 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
} ( d <= 0 || d === undefined ) && ( d = 1 ) ;
do {
if ( tmp . max _depth !== undefined && - 1 !== tmp . max _depth && tmp . max _depth < d ) return 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} , ! 1 ;
par = this . get _node ( par . parent ) , tmp = this . get _rules ( par ) , d ++
} while ( par )
}
}
return ! 0
} , this . get _rules = function ( obj ) {
if ( ! ( obj = this . get _node ( obj ) ) ) return ! 1 ;
var tmp = this . get _type ( obj , ! 0 ) ;
return tmp . max _depth === undefined && ( tmp . max _depth = - 1 ) , tmp . max _children === undefined && ( tmp . max _children = - 1 ) , tmp . valid _children === undefined && ( tmp . valid _children = - 1 ) , tmp
} , this . get _type = function ( obj , rules ) {
return ! ! ( obj = this . get _node ( obj ) ) && ( rules ? $ . extend ( {
type : obj . type
} , this . settings . types [ obj . type ] ) : obj . type )
} , this . set _type = function ( obj , type ) {
var t , t1 , t2 , old _type , old _icon ;
if ( $ . isArray ( obj ) ) {
for ( obj = obj . slice ( ) , t1 = 0 , t2 = obj . length ; t1 < t2 ; t1 ++ ) this . set _type ( obj [ t1 ] , type ) ;
return ! 0
}
return t = this . settings . types , obj = this . get _node ( obj ) , ! ( ! t [ type ] || ! obj ) && ( old _type = obj . type , old _icon = this . get _icon ( obj ) , obj . type = type , ( ! 0 === old _icon || 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 ) , ! 0 )
}
} , $ . jstree . defaults . unique = {
case _sensitive : ! 1 ,
duplicate : function ( name , counter ) {
return name + " (" + counter + ")"
}
} , $ . jstree . plugins . unique = function ( options , parent ) {
this . check = function ( chk , obj , par , pos , more ) {
if ( ! 1 === parent . check . call ( this , chk , obj , par , pos , more ) ) return ! 1 ;
if ( obj = obj && obj . id ? obj : this . get _node ( obj ) , ! ( par = par && par . id ? par : this . get _node ( par ) ) || ! par . children ) return ! 0 ;
var i , j , n = "rename_node" === chk ? pos : obj . text ,
c = [ ] ,
s = this . settings . unique . case _sensitive ,
m = this . _model . data ;
for ( i = 0 , j = par . children . length ; i < j ; i ++ ) c . push ( s ? m [ par . children [ i ] ] . text : m [ par . children [ i ] ] . text . toLowerCase ( ) ) ;
switch ( s || ( n = n . toLowerCase ( ) ) , chk ) {
case "delete_node" :
return ! 0 ;
case "rename_node" :
return i = - 1 === $ . inArray ( n , c ) || obj . text && obj . text [ s ? "toString" : "toLowerCase" ] ( ) === n , 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} ) , i ;
case "create_node" :
return i = - 1 === $ . inArray ( n , c ) , 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} ) , i ;
case "copy_node" :
return i = - 1 === $ . inArray ( n , c ) , 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} ) , i ;
case "move_node" :
return i = obj . parent === par . id && ( ! more || ! more . is _multi ) || - 1 === $ . inArray ( n , c ) , 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 ,
par : ! ( ! par || ! par . id ) && par . id
} )
} ) , i
}
return ! 0
} , this . create _node = function ( par , node , pos , callback , is _loaded ) {
if ( ! node || node . text === undefined ) {
if ( null === par && ( par = "#" ) , ! ( par = this . get _node ( par ) ) ) return parent . create _node . call ( this , par , node , pos , callback , is _loaded ) ;
if ( pos = pos === undefined ? "last" : pos , ! pos . toString ( ) . match ( /^(before|after)$/ ) && ! is _loaded && ! this . is _loaded ( par ) ) return parent . create _node . call ( this , par , node , pos , callback , is _loaded ) ;
node || ( node = { } ) ;
var tmp , n , dpc , i , j , m = this . _model . data ,
s = this . settings . unique . case _sensitive ,
cb = this . settings . unique . duplicate ;
for ( n = tmp = this . get _string ( "New node" ) , dpc = [ ] , i = 0 , j = par . children . length ; i < j ; i ++ ) dpc . push ( s ? m [ par . children [ i ] ] . text : m [ par . children [ i ] ] . text . toLowerCase ( ) ) ;
for ( i = 1 ; - 1 !== $ . inArray ( s ? n : n . toLowerCase ( ) , dpc ) ; ) n = cb . call ( this , tmp , ++ i ) . toString ( ) ;
node . text = n
}
return parent . create _node . call ( this , par , node , pos , callback , is _loaded )
}
} ;
var div = document . createElement ( "DIV" ) ;
if ( 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 ( ) {
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 i , j , tmp = ! 1 ;
for ( i = 0 , j = data . selected . length ; i < j ; i ++ ) ( tmp = this . get _node ( data . selected [ i ] , ! 0 ) ) && tmp . length && tmp . children ( ".jstree-wholerow" ) . addClass ( "jstree-wholerow-clicked" )
} , this ) ) . on ( "open_node.jstree" , $ . proxy ( function ( e , data ) {
this . get _node ( data . node , ! 0 ) . find ( ".jstree-clicked" ) . parent ( ) . children ( ".jstree-wholerow" ) . addClass ( "jstree-wholerow-clicked" )
} , this ) ) . on ( "hover_node.jstree dehover_node.jstree" , $ . proxy ( function ( e , data ) {
"hover_node" === e . type && this . is _disabled ( data . node ) || this . get _node ( data . node , ! 0 ) . children ( ".jstree-wholerow" ) [ "hover_node" === e . type ? "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 ) {
return e . stopImmediatePropagation ( ) , this . is _disabled ( e . currentTarget ) || this . hover _node ( e . currentTarget ) , ! 1
} , this ) ) . on ( "mouseleave.jstree" , ".jstree-node" , $ . proxy ( function ( e ) {
this . dehover _node ( e . currentTarget )
} , this ) )
} , this . teardown = function ( ) {
this . settings . wholerow && this . element . find ( ".jstree-wholerow" ) . remove ( ) , parent . teardown . call ( this )
} , this . redraw _node = function ( obj , deep , callback , force _render ) {
if ( obj = parent . redraw _node . apply ( this , arguments ) ) {
var tmp = div . cloneNode ( ! 0 ) ; - 1 !== $ . inArray ( obj . id , this . _data . core . selected ) && ( tmp . className += " jstree-wholerow-clicked" ) , this . _data . core . focused && this . _data . core . focused === obj . id && ( tmp . className += " jstree-wholerow-hovered" ) , obj . insertBefore ( tmp , obj . childNodes [ 0 ] )
}
return obj
}
} , document . registerElement && Object && Object . create ) {
var proto = Object . create ( HTMLElement . prototype ) ;
proto . createdCallback = function ( ) {
var i , c = {
core : { } ,
plugins : [ ]
} ;
for ( i in $ . jstree . plugins ) $ . jstree . plugins . hasOwnProperty ( i ) && this . attributes [ i ] && ( c . plugins . push ( i ) , this . getAttribute ( i ) && JSON . parse ( this . getAttribute ( i ) ) && ( c [ i ] = JSON . parse ( this . getAttribute ( i ) ) ) ) ;
for ( i in $ . jstree . defaults . core ) $ . jstree . defaults . core . hasOwnProperty ( i ) && this . attributes [ i ] && ( c . core [ i ] = JSON . parse ( this . getAttribute ( i ) ) || this . getAttribute ( i ) ) ;
$ ( this ) . jstree ( c )
} ;
try {
document . registerElement ( "vakata-jstree" , {
prototype : proto
} )
} catch ( ignore ) { }
}
}
} ) ;