jstree-rails-4 3.2.1 → 3.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +9 -8
- data/LICENSE +1 -2
- data/README.md +2 -3
- data/jstree-rails-4.gemspec +5 -4
- data/lib/jstree-rails-4/version.rb +1 -1
- data/vendor/assets/javascripts/jstree.js +740 -216
- data/vendor/assets/stylesheets/jstree-default-dark.scss +44 -3
- data/vendor/assets/stylesheets/jstree-default.scss +44 -3
- metadata +25 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e38671e9e216082caf625aaf59c40a125492ad2
|
4
|
+
data.tar.gz: 4d33d52ed69182d6b87b42615c5cc8bfdc0eb004
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b6acdb78d4c4b24575a8efbeebdfdffc45f66d6641e83ff0301589e3eb9244dd57b873433a06ff0dcca07a572d3a908b24030ed5239f4c8c7567c9c889d8eb4
|
7
|
+
data.tar.gz: e2544fd84ca1b7831edcd31a956276a2a9cee12bce5386c5df86f5f67c1a22083a70c99f134ded69a9dd069602d22c6161e9776870c97deefda2be2af84635dd
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
jstree-rails-4 (3.
|
4
|
+
jstree-rails-4 (3.3.3)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
@@ -46,9 +46,9 @@ GEM
|
|
46
46
|
erubis (2.7.0)
|
47
47
|
globalid (0.3.6)
|
48
48
|
activesupport (>= 4.1.0)
|
49
|
-
httpclient (2.
|
49
|
+
httpclient (2.8.3)
|
50
50
|
i18n (0.7.0)
|
51
|
-
json (1.8.
|
51
|
+
json (1.8.6)
|
52
52
|
loofah (2.0.2)
|
53
53
|
nokogiri (>= 1.5.9)
|
54
54
|
mail (2.6.3)
|
@@ -101,11 +101,12 @@ PLATFORMS
|
|
101
101
|
ruby
|
102
102
|
|
103
103
|
DEPENDENCIES
|
104
|
-
bundler (~> 1.
|
105
|
-
httpclient (~> 2.
|
104
|
+
bundler (~> 1.14)
|
105
|
+
httpclient (~> 2.8)
|
106
|
+
json (~> 1.8.6)
|
106
107
|
jstree-rails-4!
|
107
|
-
rails (>=
|
108
|
-
thor (~> 0.
|
108
|
+
rails (>= 4.0)
|
109
|
+
thor (~> 0.19)
|
109
110
|
|
110
111
|
BUNDLED WITH
|
111
|
-
1.
|
112
|
+
1.14.0
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2015
|
3
|
+
Copyright (c) 2015 Innokentii Antonov
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
21
|
SOFTWARE.
|
22
|
-
|
data/README.md
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
|
5
5
|
The `jstree-rails-4` gem integrates the `jsTree` jQuery plugin with the Rails asset pipeline.
|
6
6
|
|
7
|
-
GemVersion: 3.
|
7
|
+
GemVersion: 3.3.3
|
8
8
|
|
9
|
-
jsTree Version: 3.
|
9
|
+
jsTree Version: 3.3.3
|
10
10
|
|
11
11
|
## Usage
|
12
12
|
|
@@ -49,4 +49,3 @@ Use command line:
|
|
49
49
|
## License
|
50
50
|
|
51
51
|
jsTree-Rails-4 is released under the [MIT License](http://www.opensource.org/licenses/MIT).
|
52
|
-
|
data/jstree-rails-4.gemspec
CHANGED
@@ -15,8 +15,9 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
|
18
|
-
s.add_development_dependency "
|
19
|
-
s.add_development_dependency "
|
20
|
-
s.add_development_dependency "
|
21
|
-
s.add_development_dependency "
|
18
|
+
s.add_development_dependency "json", "~> 1.8.6"
|
19
|
+
s.add_development_dependency "thor", "~> 0.19"
|
20
|
+
s.add_development_dependency "bundler", "~> 1.14"
|
21
|
+
s.add_development_dependency "rails", ">= 4.0"
|
22
|
+
s.add_development_dependency "httpclient", "~> 2.8"
|
22
23
|
end
|
@@ -13,7 +13,7 @@
|
|
13
13
|
}(function ($, undefined) {
|
14
14
|
"use strict";
|
15
15
|
/*!
|
16
|
-
* jsTree 3.
|
16
|
+
* jsTree 3.3.3
|
17
17
|
* http://jstree.com/
|
18
18
|
*
|
19
19
|
* Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
|
@@ -23,8 +23,9 @@
|
|
23
23
|
*/
|
24
24
|
/*!
|
25
25
|
* if using jslint please allow for the jQuery global and use following options:
|
26
|
-
* jslint: browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true
|
26
|
+
* jslint: loopfunc: true, browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true
|
27
27
|
*/
|
28
|
+
/*jshint -W083 */
|
28
29
|
|
29
30
|
// prevent another load? maybe there is a better way?
|
30
31
|
if($.jstree) {
|
@@ -42,25 +43,7 @@
|
|
42
43
|
ccp_inst = false,
|
43
44
|
themes_loaded = [],
|
44
45
|
src = $('script:last').attr('src'),
|
45
|
-
document = window.document
|
46
|
-
_node = document.createElement('LI'), _temp1, _temp2;
|
47
|
-
|
48
|
-
_node.setAttribute('role', 'treeitem');
|
49
|
-
_temp1 = document.createElement('I');
|
50
|
-
_temp1.className = 'jstree-icon jstree-ocl';
|
51
|
-
_temp1.setAttribute('role', 'presentation');
|
52
|
-
_node.appendChild(_temp1);
|
53
|
-
_temp1 = document.createElement('A');
|
54
|
-
_temp1.className = 'jstree-anchor';
|
55
|
-
_temp1.setAttribute('href','#');
|
56
|
-
_temp1.setAttribute('tabindex','-1');
|
57
|
-
_temp2 = document.createElement('I');
|
58
|
-
_temp2.className = 'jstree-icon jstree-themeicon';
|
59
|
-
_temp2.setAttribute('role', 'presentation');
|
60
|
-
_temp1.appendChild(_temp2);
|
61
|
-
_node.appendChild(_temp1);
|
62
|
-
_temp1 = _temp2 = null;
|
63
|
-
|
46
|
+
document = window.document; // local variable is always faster to access then a global
|
64
47
|
|
65
48
|
/**
|
66
49
|
* holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances.
|
@@ -71,7 +54,7 @@
|
|
71
54
|
* specifies the jstree version in use
|
72
55
|
* @name $.jstree.version
|
73
56
|
*/
|
74
|
-
version : '3.
|
57
|
+
version : '3.3.3',
|
75
58
|
/**
|
76
59
|
* holds all the default options used when creating new instances
|
77
60
|
* @name $.jstree.defaults
|
@@ -92,6 +75,7 @@
|
|
92
75
|
idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%?`]/g,
|
93
76
|
root : '#'
|
94
77
|
};
|
78
|
+
|
95
79
|
/**
|
96
80
|
* creates a jstree instance
|
97
81
|
* @name $.jstree.create(el [, options])
|
@@ -138,7 +122,8 @@
|
|
138
122
|
themes : {
|
139
123
|
name : false,
|
140
124
|
dots : false,
|
141
|
-
icons : false
|
125
|
+
icons : false,
|
126
|
+
ellipsis : false
|
142
127
|
},
|
143
128
|
selected : [],
|
144
129
|
last_error : {},
|
@@ -260,7 +245,7 @@
|
|
260
245
|
* @name $(':jstree')
|
261
246
|
* @return {jQuery}
|
262
247
|
*/
|
263
|
-
$.expr
|
248
|
+
$.expr.pseudos.jstree = $.expr.createPseudo(function(search) {
|
264
249
|
return function(a) {
|
265
250
|
return $(a).hasClass('jstree') &&
|
266
251
|
$(a).data('jstree') !== undefined;
|
@@ -309,7 +294,8 @@
|
|
309
294
|
* 'children' : [ { 'text' : 'Child 1' }, 'Child 2']
|
310
295
|
* }
|
311
296
|
* ]
|
312
|
-
* }
|
297
|
+
* }
|
298
|
+
* });
|
313
299
|
*
|
314
300
|
* // function
|
315
301
|
* $('#tree').jstree({
|
@@ -407,6 +393,11 @@
|
|
407
393
|
* @name $.jstree.defaults.core.themes.icons
|
408
394
|
*/
|
409
395
|
icons : true,
|
396
|
+
/**
|
397
|
+
* a boolean indicating if node ellipsis should be shown - this only works with a fixed with on the container
|
398
|
+
* @name $.jstree.defaults.core.themes.ellipsis
|
399
|
+
*/
|
400
|
+
ellipsis : false,
|
410
401
|
/**
|
411
402
|
* a boolean indicating if the tree background is striped
|
412
403
|
* @name $.jstree.defaults.core.themes.stripes
|
@@ -525,6 +516,7 @@
|
|
525
516
|
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>");
|
526
517
|
this.element.attr('aria-activedescendant','j' + this._id + '_loading');
|
527
518
|
this._data.core.li_height = this.get_container_ul().children("li").first().height() || 24;
|
519
|
+
this._data.core.node = this._create_prototype_node();
|
528
520
|
/**
|
529
521
|
* triggered after the loading text is shown and before loading starts
|
530
522
|
* @event
|
@@ -549,6 +541,29 @@
|
|
549
541
|
if(!keep_html) { this.element.empty(); }
|
550
542
|
this.teardown();
|
551
543
|
},
|
544
|
+
/**
|
545
|
+
* Create prototype node
|
546
|
+
*/
|
547
|
+
_create_prototype_node : function () {
|
548
|
+
var _node = document.createElement('LI'), _temp1, _temp2;
|
549
|
+
_node.setAttribute('role', 'treeitem');
|
550
|
+
_temp1 = document.createElement('I');
|
551
|
+
_temp1.className = 'jstree-icon jstree-ocl';
|
552
|
+
_temp1.setAttribute('role', 'presentation');
|
553
|
+
_node.appendChild(_temp1);
|
554
|
+
_temp1 = document.createElement('A');
|
555
|
+
_temp1.className = 'jstree-anchor';
|
556
|
+
_temp1.setAttribute('href','#');
|
557
|
+
_temp1.setAttribute('tabindex','-1');
|
558
|
+
_temp2 = document.createElement('I');
|
559
|
+
_temp2.className = 'jstree-icon jstree-themeicon';
|
560
|
+
_temp2.setAttribute('role', 'presentation');
|
561
|
+
_temp1.appendChild(_temp2);
|
562
|
+
_node.appendChild(_temp1);
|
563
|
+
_temp1 = _temp2 = null;
|
564
|
+
|
565
|
+
return _node;
|
566
|
+
},
|
552
567
|
/**
|
553
568
|
* part of the destroying of an instance. Used internally.
|
554
569
|
* @private
|
@@ -631,7 +646,7 @@
|
|
631
646
|
e.type = "click";
|
632
647
|
$(e.currentTarget).trigger(e);
|
633
648
|
break;
|
634
|
-
case 37: //
|
649
|
+
case 37: // left
|
635
650
|
e.preventDefault();
|
636
651
|
if(this.is_open(e.currentTarget)) {
|
637
652
|
this.close_node(e.currentTarget);
|
@@ -646,7 +661,7 @@
|
|
646
661
|
o = this.get_prev_dom(e.currentTarget);
|
647
662
|
if(o && o.length) { o.children('.jstree-anchor').focus(); }
|
648
663
|
break;
|
649
|
-
case 39: //
|
664
|
+
case 39: // right
|
650
665
|
e.preventDefault();
|
651
666
|
if(this.is_closed(e.currentTarget)) {
|
652
667
|
this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });
|
@@ -673,6 +688,12 @@
|
|
673
688
|
e.preventDefault();
|
674
689
|
this.element.find('.jstree-anchor').filter(':visible').last().focus();
|
675
690
|
break;
|
691
|
+
case 113: // f2 - safe to include - if check_callback is false it will fail
|
692
|
+
e.preventDefault();
|
693
|
+
this.edit(e.currentTarget);
|
694
|
+
break;
|
695
|
+
default:
|
696
|
+
break;
|
676
697
|
/*!
|
677
698
|
// delete
|
678
699
|
case 46:
|
@@ -683,17 +704,7 @@
|
|
683
704
|
this.delete_node(o);
|
684
705
|
}
|
685
706
|
break;
|
686
|
-
|
687
|
-
case 113:
|
688
|
-
e.preventDefault();
|
689
|
-
o = this.get_node(e.currentTarget);
|
690
|
-
if(o && o.id && o.id !== $.jstree.root) {
|
691
|
-
// this.edit(o);
|
692
|
-
}
|
693
|
-
break;
|
694
|
-
default:
|
695
|
-
// console.log(e.which);
|
696
|
-
break;
|
707
|
+
|
697
708
|
*/
|
698
709
|
}
|
699
710
|
}, this))
|
@@ -803,6 +814,7 @@
|
|
803
814
|
this._data.core.themes.dots = s.dots;
|
804
815
|
this._data.core.themes.stripes = s.stripes;
|
805
816
|
this._data.core.themes.icons = s.icons;
|
817
|
+
this._data.core.themes.ellipsis = s.ellipsis;
|
806
818
|
this.set_theme(s.name || "default", s.url);
|
807
819
|
this.set_theme_variant(s.variant);
|
808
820
|
}, this))
|
@@ -810,6 +822,7 @@
|
|
810
822
|
this[ this._data.core.themes.dots ? "show_dots" : "hide_dots" ]();
|
811
823
|
this[ this._data.core.themes.icons ? "show_icons" : "hide_icons" ]();
|
812
824
|
this[ this._data.core.themes.stripes ? "show_stripes" : "hide_stripes" ]();
|
825
|
+
this[ this._data.core.themes.ellipsis ? "show_ellipsis" : "hide_ellipsis" ]();
|
813
826
|
}, this))
|
814
827
|
.on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {
|
815
828
|
this._data.core.focused = null;
|
@@ -1191,16 +1204,22 @@
|
|
1191
1204
|
// if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again?
|
1192
1205
|
if(obj.state.loaded) {
|
1193
1206
|
obj.state.loaded = false;
|
1207
|
+
for(i = 0, j = obj.parents.length; i < j; i++) {
|
1208
|
+
this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
|
1209
|
+
return $.inArray(v, obj.children_d) === -1;
|
1210
|
+
});
|
1211
|
+
}
|
1194
1212
|
for(k = 0, l = obj.children_d.length; k < l; k++) {
|
1195
|
-
for(i = 0, j = obj.parents.length; i < j; i++) {
|
1196
|
-
this._model.data[obj.parents[i]].children_d = $.vakata.array_remove_item(this._model.data[obj.parents[i]].children_d, obj.children_d[k]);
|
1197
|
-
}
|
1198
1213
|
if(this._model.data[obj.children_d[k]].state.selected) {
|
1199
1214
|
c = true;
|
1200
|
-
this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.children_d[k]);
|
1201
1215
|
}
|
1202
1216
|
delete this._model.data[obj.children_d[k]];
|
1203
1217
|
}
|
1218
|
+
if (c) {
|
1219
|
+
this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
|
1220
|
+
return $.inArray(v, obj.children_d) === -1;
|
1221
|
+
});
|
1222
|
+
}
|
1204
1223
|
obj.children = [];
|
1205
1224
|
obj.children_d = [];
|
1206
1225
|
if(c) {
|
@@ -1222,8 +1241,16 @@
|
|
1222
1241
|
break;
|
1223
1242
|
}
|
1224
1243
|
}
|
1225
|
-
if(obj.state.loaded &&
|
1226
|
-
dom.removeClass('jstree-closed jstree-open
|
1244
|
+
if(obj.state.loaded && dom && dom.length) {
|
1245
|
+
dom.removeClass('jstree-closed jstree-open jstree-leaf');
|
1246
|
+
if (!has_children) {
|
1247
|
+
dom.addClass('jstree-leaf');
|
1248
|
+
}
|
1249
|
+
else {
|
1250
|
+
if (obj.id !== '#') {
|
1251
|
+
dom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed');
|
1252
|
+
}
|
1253
|
+
}
|
1227
1254
|
}
|
1228
1255
|
dom.removeClass("jstree-loading").attr('aria-busy',false);
|
1229
1256
|
/**
|
@@ -1247,12 +1274,12 @@
|
|
1247
1274
|
* @param {array} nodes
|
1248
1275
|
* @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes
|
1249
1276
|
*/
|
1250
|
-
_load_nodes : function (nodes, callback, is_callback) {
|
1277
|
+
_load_nodes : function (nodes, callback, is_callback, force_reload) {
|
1251
1278
|
var r = true,
|
1252
1279
|
c = function () { this._load_nodes(nodes, callback, true); },
|
1253
1280
|
m = this._model.data, i, j, tmp = [];
|
1254
1281
|
for(i = 0, j = nodes.length; i < j; i++) {
|
1255
|
-
if(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || !is_callback)) {
|
1282
|
+
if(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || (!is_callback && force_reload) )) {
|
1256
1283
|
if(!this.is_loading(nodes[i])) {
|
1257
1284
|
this.load_node(nodes[i], c);
|
1258
1285
|
}
|
@@ -1320,6 +1347,9 @@
|
|
1320
1347
|
*/
|
1321
1348
|
_load_node : function (obj, callback) {
|
1322
1349
|
var s = this.settings.core.data, t;
|
1350
|
+
var notTextOrCommentNode = function notTextOrCommentNode () {
|
1351
|
+
return this.nodeType !== 3 && this.nodeType !== 8;
|
1352
|
+
};
|
1323
1353
|
// use original HTML
|
1324
1354
|
if(!s) {
|
1325
1355
|
if(obj.id === $.jstree.root) {
|
@@ -1337,9 +1367,11 @@
|
|
1337
1367
|
if(d === false) {
|
1338
1368
|
callback.call(this, false);
|
1339
1369
|
}
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1370
|
+
else {
|
1371
|
+
this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(notTextOrCommentNode) : d, function (status) {
|
1372
|
+
callback.call(this, status);
|
1373
|
+
});
|
1374
|
+
}
|
1343
1375
|
// return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d));
|
1344
1376
|
}, this));
|
1345
1377
|
}
|
@@ -1360,7 +1392,7 @@
|
|
1360
1392
|
//return callback.call(this, this._append_json_data(obj, d));
|
1361
1393
|
}
|
1362
1394
|
if((type && type.indexOf('html') !== -1) || typeof d === "string") {
|
1363
|
-
return this._append_html_data(obj, $($.parseHTML(d)).filter(
|
1395
|
+
return this._append_html_data(obj, $($.parseHTML(d)).filter(notTextOrCommentNode), function (status) { callback.call(this, status); });
|
1364
1396
|
// return callback.call(this, this._append_html_data(obj, $(d)));
|
1365
1397
|
}
|
1366
1398
|
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 }) };
|
@@ -1388,7 +1420,7 @@
|
|
1388
1420
|
}
|
1389
1421
|
if(typeof s === 'string') {
|
1390
1422
|
if(obj.id === $.jstree.root) {
|
1391
|
-
return this._append_html_data(obj, $($.parseHTML(s)).filter(
|
1423
|
+
return this._append_html_data(obj, $($.parseHTML(s)).filter(notTextOrCommentNode), function (status) {
|
1392
1424
|
callback.call(this, status);
|
1393
1425
|
});
|
1394
1426
|
}
|
@@ -1775,10 +1807,17 @@
|
|
1775
1807
|
rslt = function (rslt, worker) {
|
1776
1808
|
if(this.element === null) { return; }
|
1777
1809
|
this._cnt = rslt.cnt;
|
1810
|
+
var i, m = this._model.data;
|
1811
|
+
for (i in m) {
|
1812
|
+
if (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) {
|
1813
|
+
rslt.mod[i].state.loading = true;
|
1814
|
+
}
|
1815
|
+
}
|
1778
1816
|
this._model.data = rslt.mod; // breaks the reference in load_node - careful
|
1779
1817
|
|
1780
1818
|
if(worker) {
|
1781
|
-
var
|
1819
|
+
var j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice();
|
1820
|
+
m = this._model.data;
|
1782
1821
|
// if selection was changed while calculating in worker
|
1783
1822
|
if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {
|
1784
1823
|
// deselect nodes that are no longer selected
|
@@ -2334,7 +2373,7 @@
|
|
2334
2373
|
//node = d.createElement('LI');
|
2335
2374
|
//node = node[0];
|
2336
2375
|
}
|
2337
|
-
node =
|
2376
|
+
node = this._data.core.node.cloneNode(true);
|
2338
2377
|
// node is DOM, deep is boolean
|
2339
2378
|
|
2340
2379
|
c = 'jstree-node ';
|
@@ -2419,7 +2458,7 @@
|
|
2419
2458
|
node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';
|
2420
2459
|
}
|
2421
2460
|
else {
|
2422
|
-
node.childNodes[1].childNodes[0].style.backgroundImage = 'url('+obj.icon+')';
|
2461
|
+
node.childNodes[1].childNodes[0].style.backgroundImage = 'url("'+obj.icon+'")';
|
2423
2462
|
node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';
|
2424
2463
|
node.childNodes[1].childNodes[0].style.backgroundSize = 'auto';
|
2425
2464
|
node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';
|
@@ -2549,7 +2588,9 @@
|
|
2549
2588
|
.children(".jstree-children").stop(true, true)
|
2550
2589
|
.slideDown(animation, function () {
|
2551
2590
|
this.style.display = "";
|
2552
|
-
t.
|
2591
|
+
if (t.element) {
|
2592
|
+
t.trigger("after_open", { "node" : obj });
|
2593
|
+
}
|
2553
2594
|
});
|
2554
2595
|
}
|
2555
2596
|
}
|
@@ -2630,22 +2671,7 @@
|
|
2630
2671
|
animation = animation === undefined ? this.settings.core.animation : animation;
|
2631
2672
|
t = this;
|
2632
2673
|
d = this.get_node(obj, true);
|
2633
|
-
|
2634
|
-
if(!animation) {
|
2635
|
-
d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
|
2636
|
-
d.attr("aria-expanded", false).children('.jstree-children').remove();
|
2637
|
-
}
|
2638
|
-
else {
|
2639
|
-
d
|
2640
|
-
.children(".jstree-children").attr("style","display:block !important").end()
|
2641
|
-
.removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
|
2642
|
-
.children(".jstree-children").stop(true, true).slideUp(animation, function () {
|
2643
|
-
this.style.display = "";
|
2644
|
-
d.children('.jstree-children').remove();
|
2645
|
-
t.trigger("after_close", { "node" : obj });
|
2646
|
-
});
|
2647
|
-
}
|
2648
|
-
}
|
2674
|
+
|
2649
2675
|
obj.state.opened = false;
|
2650
2676
|
/**
|
2651
2677
|
* triggered when a node is closed (if there is an animation it will not be complete yet)
|
@@ -2654,7 +2680,7 @@
|
|
2654
2680
|
* @param {Object} node the closed node
|
2655
2681
|
*/
|
2656
2682
|
this.trigger('close_node',{ "node" : obj });
|
2657
|
-
if(!
|
2683
|
+
if(!d.length) {
|
2658
2684
|
/**
|
2659
2685
|
* triggered when a node is closed and the animation is complete
|
2660
2686
|
* @event
|
@@ -2663,6 +2689,25 @@
|
|
2663
2689
|
*/
|
2664
2690
|
this.trigger("after_close", { "node" : obj });
|
2665
2691
|
}
|
2692
|
+
else {
|
2693
|
+
if(!animation) {
|
2694
|
+
d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
|
2695
|
+
d.attr("aria-expanded", false).children('.jstree-children').remove();
|
2696
|
+
this.trigger("after_close", { "node" : obj });
|
2697
|
+
}
|
2698
|
+
else {
|
2699
|
+
d
|
2700
|
+
.children(".jstree-children").attr("style","display:block !important").end()
|
2701
|
+
.removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
|
2702
|
+
.children(".jstree-children").stop(true, true).slideUp(animation, function () {
|
2703
|
+
this.style.display = "";
|
2704
|
+
d.children('.jstree-children').remove();
|
2705
|
+
if (t.element) {
|
2706
|
+
t.trigger("after_close", { "node" : obj });
|
2707
|
+
}
|
2708
|
+
});
|
2709
|
+
}
|
2710
|
+
}
|
2666
2711
|
},
|
2667
2712
|
/**
|
2668
2713
|
* toggles a node - closing it if it is open, opening it if it is closed
|
@@ -2822,11 +2867,20 @@
|
|
2822
2867
|
*/
|
2823
2868
|
this.trigger('disable_node', { 'node' : obj });
|
2824
2869
|
},
|
2870
|
+
/**
|
2871
|
+
* determines if a node is hidden
|
2872
|
+
* @name is_hidden(obj)
|
2873
|
+
* @param {mixed} obj the node
|
2874
|
+
*/
|
2875
|
+
is_hidden : function (obj) {
|
2876
|
+
obj = this.get_node(obj);
|
2877
|
+
return obj.state.hidden === true;
|
2878
|
+
},
|
2825
2879
|
/**
|
2826
2880
|
* hides a node - it is still in the structure but will not be visible
|
2827
2881
|
* @name hide_node(obj)
|
2828
2882
|
* @param {mixed} obj the node to hide
|
2829
|
-
* @param {Boolean}
|
2883
|
+
* @param {Boolean} skip_redraw internal parameter controlling if redraw is called
|
2830
2884
|
* @trigger hide_node.jstree
|
2831
2885
|
*/
|
2832
2886
|
hide_node : function (obj, skip_redraw) {
|
@@ -2836,7 +2890,9 @@
|
|
2836
2890
|
for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
|
2837
2891
|
this.hide_node(obj[t1], true);
|
2838
2892
|
}
|
2839
|
-
|
2893
|
+
if (!skip_redraw) {
|
2894
|
+
this.redraw();
|
2895
|
+
}
|
2840
2896
|
return true;
|
2841
2897
|
}
|
2842
2898
|
obj = this.get_node(obj);
|
@@ -2872,7 +2928,9 @@
|
|
2872
2928
|
for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
|
2873
2929
|
this.show_node(obj[t1], true);
|
2874
2930
|
}
|
2875
|
-
|
2931
|
+
if (!skip_redraw) {
|
2932
|
+
this.redraw();
|
2933
|
+
}
|
2876
2934
|
return true;
|
2877
2935
|
}
|
2878
2936
|
obj = this.get_node(obj);
|
@@ -2993,7 +3051,9 @@
|
|
2993
3051
|
c = !c;
|
2994
3052
|
}
|
2995
3053
|
if(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {
|
2996
|
-
this.
|
3054
|
+
if (!this.is_hidden(p[i])) {
|
3055
|
+
this.select_node(p[i], true, false, e);
|
3056
|
+
}
|
2997
3057
|
}
|
2998
3058
|
else {
|
2999
3059
|
this.deselect_node(p[i], true, e);
|
@@ -3338,7 +3398,7 @@
|
|
3338
3398
|
this.open_node(nodes, false, 0);
|
3339
3399
|
delete state.core.open;
|
3340
3400
|
this.set_state(state, callback);
|
3341
|
-
}
|
3401
|
+
});
|
3342
3402
|
}
|
3343
3403
|
return false;
|
3344
3404
|
}
|
@@ -3448,10 +3508,10 @@
|
|
3448
3508
|
var opened = [], to_load = [], s = this._data.core.selected.concat([]);
|
3449
3509
|
to_load.push(obj.id);
|
3450
3510
|
if(obj.state.opened === true) { opened.push(obj.id); }
|
3451
|
-
this.get_node(obj, true).find('.jstree-open').each(function() { opened.push(this.id); });
|
3511
|
+
this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });
|
3452
3512
|
this._load_nodes(to_load, $.proxy(function (nodes) {
|
3453
3513
|
this.open_node(opened, false, 0);
|
3454
|
-
this.select_node(
|
3514
|
+
this.select_node(s);
|
3455
3515
|
/**
|
3456
3516
|
* triggered when a node is refreshed
|
3457
3517
|
* @event
|
@@ -3460,7 +3520,7 @@
|
|
3460
3520
|
* @param {Array} nodes - an array of the IDs of the nodes that were reloaded
|
3461
3521
|
*/
|
3462
3522
|
this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });
|
3463
|
-
}, this));
|
3523
|
+
}, this), false, true);
|
3464
3524
|
},
|
3465
3525
|
/**
|
3466
3526
|
* set (change) the ID of a node
|
@@ -3468,11 +3528,12 @@
|
|
3468
3528
|
* @param {mixed} obj the node
|
3469
3529
|
* @param {String} id the new ID
|
3470
3530
|
* @return {Boolean}
|
3531
|
+
* @trigger set_id.jstree
|
3471
3532
|
*/
|
3472
3533
|
set_id : function (obj, id) {
|
3473
3534
|
obj = this.get_node(obj);
|
3474
3535
|
if(!obj || obj.id === $.jstree.root) { return false; }
|
3475
|
-
var i, j, m = this._model.data;
|
3536
|
+
var i, j, m = this._model.data, old = obj.id;
|
3476
3537
|
id = id.toString();
|
3477
3538
|
// update parents (replace current ID with new one in children and children_d)
|
3478
3539
|
m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;
|
@@ -3491,7 +3552,7 @@
|
|
3491
3552
|
// update model and obj itself (obj.id, this._model.data[KEY])
|
3492
3553
|
i = this.get_node(obj.id, true);
|
3493
3554
|
if(i) {
|
3494
|
-
i.attr('id', id)
|
3555
|
+
i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor');
|
3495
3556
|
if(this.element.attr('aria-activedescendant') === obj.id) {
|
3496
3557
|
this.element.attr('aria-activedescendant', id);
|
3497
3558
|
}
|
@@ -3500,6 +3561,14 @@
|
|
3500
3561
|
obj.id = id;
|
3501
3562
|
obj.li_attr.id = id;
|
3502
3563
|
m[id] = obj;
|
3564
|
+
/**
|
3565
|
+
* triggered when a node id value is changed
|
3566
|
+
* @event
|
3567
|
+
* @name set_id.jstree
|
3568
|
+
* @param {Object} node
|
3569
|
+
* @param {String} old the old id
|
3570
|
+
*/
|
3571
|
+
this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old });
|
3503
3572
|
return true;
|
3504
3573
|
},
|
3505
3574
|
/**
|
@@ -3555,6 +3624,8 @@
|
|
3555
3624
|
* @param {Boolean} options.no_id do not return ID
|
3556
3625
|
* @param {Boolean} options.no_children do not include children
|
3557
3626
|
* @param {Boolean} options.no_data do not include node data
|
3627
|
+
* @param {Boolean} options.no_li_attr do not include LI attributes
|
3628
|
+
* @param {Boolean} options.no_a_attr do not include A attributes
|
3558
3629
|
* @param {Boolean} options.flat return flat JSON instead of nested
|
3559
3630
|
* @return {Object}
|
3560
3631
|
*/
|
@@ -3584,6 +3655,14 @@
|
|
3584
3655
|
tmp.state[i] = obj.state[i];
|
3585
3656
|
}
|
3586
3657
|
}
|
3658
|
+
} else {
|
3659
|
+
delete tmp.state;
|
3660
|
+
}
|
3661
|
+
if(options && options.no_li_attr) {
|
3662
|
+
delete tmp.li_attr;
|
3663
|
+
}
|
3664
|
+
if(options && options.no_a_attr) {
|
3665
|
+
delete tmp.a_attr;
|
3587
3666
|
}
|
3588
3667
|
if(options && options.no_id) {
|
3589
3668
|
delete tmp.id;
|
@@ -3611,7 +3690,7 @@
|
|
3611
3690
|
},
|
3612
3691
|
/**
|
3613
3692
|
* create a new node (do not confuse with load_node)
|
3614
|
-
* @name create_node([
|
3693
|
+
* @name create_node([par, node, pos, callback, is_loaded])
|
3615
3694
|
* @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`)
|
3616
3695
|
* @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name)
|
3617
3696
|
* @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last"
|
@@ -3765,21 +3844,22 @@
|
|
3765
3844
|
}
|
3766
3845
|
tmp = obj.children_d.concat([]);
|
3767
3846
|
tmp.push(obj.id);
|
3847
|
+
for(i = 0, j = obj.parents.length; i < j; i++) {
|
3848
|
+
this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
|
3849
|
+
return $.inArray(v, tmp) === -1;
|
3850
|
+
});
|
3851
|
+
}
|
3768
3852
|
for(k = 0, l = tmp.length; k < l; k++) {
|
3769
|
-
for(i = 0, j = obj.parents.length; i < j; i++) {
|
3770
|
-
pos = $.inArray(tmp[k], this._model.data[obj.parents[i]].children_d);
|
3771
|
-
if(pos !== -1) {
|
3772
|
-
this._model.data[obj.parents[i]].children_d = $.vakata.array_remove(this._model.data[obj.parents[i]].children_d, pos);
|
3773
|
-
}
|
3774
|
-
}
|
3775
3853
|
if(this._model.data[tmp[k]].state.selected) {
|
3776
3854
|
c = true;
|
3777
|
-
|
3778
|
-
if(pos !== -1) {
|
3779
|
-
this._data.core.selected = $.vakata.array_remove(this._data.core.selected, pos);
|
3780
|
-
}
|
3855
|
+
break;
|
3781
3856
|
}
|
3782
3857
|
}
|
3858
|
+
if (c) {
|
3859
|
+
this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
|
3860
|
+
return $.inArray(v, tmp) === -1;
|
3861
|
+
});
|
3862
|
+
}
|
3783
3863
|
/**
|
3784
3864
|
* triggered when a node is deleted
|
3785
3865
|
* @event
|
@@ -3799,7 +3879,9 @@
|
|
3799
3879
|
top = this.element[0].scrollTop;
|
3800
3880
|
lft = this.element[0].scrollLeft;
|
3801
3881
|
if(par.id === $.jstree.root) {
|
3802
|
-
|
3882
|
+
if (this._model.data[$.jstree.root].children[0]) {
|
3883
|
+
this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();
|
3884
|
+
}
|
3803
3885
|
}
|
3804
3886
|
else {
|
3805
3887
|
this.get_node(par, true).children('.jstree-anchor').focus();
|
@@ -3827,7 +3909,7 @@
|
|
3827
3909
|
var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,
|
3828
3910
|
chc = this.settings.core.check_callback;
|
3829
3911
|
if(chk === "move_node" || chk === "copy_node") {
|
3830
|
-
if((!more || !more.is_multi) && (obj.id === par.id || $.inArray(obj.id, par.children) === pos || $.inArray(par.id, obj.children_d) !== -1)) {
|
3912
|
+
if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) {
|
3831
3913
|
this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
|
3832
3914
|
return false;
|
3833
3915
|
}
|
@@ -4342,6 +4424,7 @@
|
|
4342
4424
|
if(callback) {
|
4343
4425
|
callback.call(this, tmp, nv, cancel);
|
4344
4426
|
}
|
4427
|
+
h2 = null;
|
4345
4428
|
}, this),
|
4346
4429
|
"keydown" : function (e) {
|
4347
4430
|
var key = e.which;
|
@@ -4380,6 +4463,11 @@
|
|
4380
4463
|
a.replaceWith(s);
|
4381
4464
|
h1.css(fn);
|
4382
4465
|
h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
|
4466
|
+
$(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {
|
4467
|
+
if (h2 && e.target !== h2) {
|
4468
|
+
$(h2).blur();
|
4469
|
+
}
|
4470
|
+
});
|
4383
4471
|
},
|
4384
4472
|
|
4385
4473
|
|
@@ -4445,12 +4533,30 @@
|
|
4445
4533
|
* shows a striped background on the container (if the theme supports it)
|
4446
4534
|
* @name show_stripes()
|
4447
4535
|
*/
|
4448
|
-
show_stripes : function () {
|
4536
|
+
show_stripes : function () {
|
4537
|
+
this._data.core.themes.stripes = true;
|
4538
|
+
this.get_container_ul().addClass("jstree-striped");
|
4539
|
+
/**
|
4540
|
+
* triggered when stripes are shown
|
4541
|
+
* @event
|
4542
|
+
* @name show_stripes.jstree
|
4543
|
+
*/
|
4544
|
+
this.trigger('show_stripes');
|
4545
|
+
},
|
4449
4546
|
/**
|
4450
4547
|
* hides the striped background on the container
|
4451
4548
|
* @name hide_stripes()
|
4452
4549
|
*/
|
4453
|
-
hide_stripes : function () {
|
4550
|
+
hide_stripes : function () {
|
4551
|
+
this._data.core.themes.stripes = false;
|
4552
|
+
this.get_container_ul().removeClass("jstree-striped");
|
4553
|
+
/**
|
4554
|
+
* triggered when stripes are hidden
|
4555
|
+
* @event
|
4556
|
+
* @name hide_stripes.jstree
|
4557
|
+
*/
|
4558
|
+
this.trigger('hide_stripes');
|
4559
|
+
},
|
4454
4560
|
/**
|
4455
4561
|
* toggles the striped background on the container
|
4456
4562
|
* @name toggle_stripes()
|
@@ -4460,12 +4566,30 @@
|
|
4460
4566
|
* shows the connecting dots (if the theme supports it)
|
4461
4567
|
* @name show_dots()
|
4462
4568
|
*/
|
4463
|
-
show_dots : function () {
|
4569
|
+
show_dots : function () {
|
4570
|
+
this._data.core.themes.dots = true;
|
4571
|
+
this.get_container_ul().removeClass("jstree-no-dots");
|
4572
|
+
/**
|
4573
|
+
* triggered when dots are shown
|
4574
|
+
* @event
|
4575
|
+
* @name show_dots.jstree
|
4576
|
+
*/
|
4577
|
+
this.trigger('show_dots');
|
4578
|
+
},
|
4464
4579
|
/**
|
4465
4580
|
* hides the connecting dots
|
4466
4581
|
* @name hide_dots()
|
4467
4582
|
*/
|
4468
|
-
hide_dots : function () {
|
4583
|
+
hide_dots : function () {
|
4584
|
+
this._data.core.themes.dots = false;
|
4585
|
+
this.get_container_ul().addClass("jstree-no-dots");
|
4586
|
+
/**
|
4587
|
+
* triggered when dots are hidden
|
4588
|
+
* @event
|
4589
|
+
* @name hide_dots.jstree
|
4590
|
+
*/
|
4591
|
+
this.trigger('hide_dots');
|
4592
|
+
},
|
4469
4593
|
/**
|
4470
4594
|
* toggles the connecting dots
|
4471
4595
|
* @name toggle_dots()
|
@@ -4475,17 +4599,68 @@
|
|
4475
4599
|
* show the node icons
|
4476
4600
|
* @name show_icons()
|
4477
4601
|
*/
|
4478
|
-
show_icons : function () {
|
4602
|
+
show_icons : function () {
|
4603
|
+
this._data.core.themes.icons = true;
|
4604
|
+
this.get_container_ul().removeClass("jstree-no-icons");
|
4605
|
+
/**
|
4606
|
+
* triggered when icons are shown
|
4607
|
+
* @event
|
4608
|
+
* @name show_icons.jstree
|
4609
|
+
*/
|
4610
|
+
this.trigger('show_icons');
|
4611
|
+
},
|
4479
4612
|
/**
|
4480
4613
|
* hide the node icons
|
4481
4614
|
* @name hide_icons()
|
4482
4615
|
*/
|
4483
|
-
hide_icons : function () {
|
4616
|
+
hide_icons : function () {
|
4617
|
+
this._data.core.themes.icons = false;
|
4618
|
+
this.get_container_ul().addClass("jstree-no-icons");
|
4619
|
+
/**
|
4620
|
+
* triggered when icons are hidden
|
4621
|
+
* @event
|
4622
|
+
* @name hide_icons.jstree
|
4623
|
+
*/
|
4624
|
+
this.trigger('hide_icons');
|
4625
|
+
},
|
4484
4626
|
/**
|
4485
4627
|
* toggle the node icons
|
4486
4628
|
* @name toggle_icons()
|
4487
4629
|
*/
|
4488
4630
|
toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },
|
4631
|
+
/**
|
4632
|
+
* show the node ellipsis
|
4633
|
+
* @name show_icons()
|
4634
|
+
*/
|
4635
|
+
show_ellipsis : function () {
|
4636
|
+
this._data.core.themes.ellipsis = true;
|
4637
|
+
this.get_container_ul().addClass("jstree-ellipsis");
|
4638
|
+
/**
|
4639
|
+
* triggered when ellisis is shown
|
4640
|
+
* @event
|
4641
|
+
* @name show_ellipsis.jstree
|
4642
|
+
*/
|
4643
|
+
this.trigger('show_ellipsis');
|
4644
|
+
},
|
4645
|
+
/**
|
4646
|
+
* hide the node ellipsis
|
4647
|
+
* @name hide_ellipsis()
|
4648
|
+
*/
|
4649
|
+
hide_ellipsis : function () {
|
4650
|
+
this._data.core.themes.ellipsis = false;
|
4651
|
+
this.get_container_ul().removeClass("jstree-ellipsis");
|
4652
|
+
/**
|
4653
|
+
* triggered when ellisis is hidden
|
4654
|
+
* @event
|
4655
|
+
* @name hide_ellipsis.jstree
|
4656
|
+
*/
|
4657
|
+
this.trigger('hide_ellipsis');
|
4658
|
+
},
|
4659
|
+
/**
|
4660
|
+
* toggle the node ellipsis
|
4661
|
+
* @name toggle_icons()
|
4662
|
+
*/
|
4663
|
+
toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } },
|
4489
4664
|
/**
|
4490
4665
|
* set the node icon for a node
|
4491
4666
|
* @name set_icon(obj, icon)
|
@@ -4607,17 +4782,31 @@
|
|
4607
4782
|
return a;
|
4608
4783
|
};
|
4609
4784
|
// remove item from array
|
4610
|
-
$.vakata.array_remove = function(array, from
|
4611
|
-
|
4612
|
-
array.length = from < 0 ? array.length + from : from;
|
4613
|
-
array.push.apply(array, rest);
|
4785
|
+
$.vakata.array_remove = function(array, from) {
|
4786
|
+
array.splice(from, 1);
|
4614
4787
|
return array;
|
4788
|
+
//var rest = array.slice((to || from) + 1 || array.length);
|
4789
|
+
//array.length = from < 0 ? array.length + from : from;
|
4790
|
+
//array.push.apply(array, rest);
|
4791
|
+
//return array;
|
4615
4792
|
};
|
4616
4793
|
// remove item from array
|
4617
4794
|
$.vakata.array_remove_item = function(array, item) {
|
4618
4795
|
var tmp = $.inArray(item, array);
|
4619
4796
|
return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;
|
4620
4797
|
};
|
4798
|
+
$.vakata.array_filter = function(c,a,b,d,e) {
|
4799
|
+
if (c.filter) {
|
4800
|
+
return c.filter(a, b);
|
4801
|
+
}
|
4802
|
+
d=[];
|
4803
|
+
for (e in c) {
|
4804
|
+
if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {
|
4805
|
+
d.push(c[e]);
|
4806
|
+
}
|
4807
|
+
}
|
4808
|
+
return d;
|
4809
|
+
};
|
4621
4810
|
|
4622
4811
|
|
4623
4812
|
/**
|
@@ -4839,12 +5028,17 @@
|
|
4839
5028
|
m = this._model.data,
|
4840
5029
|
par = this.get_node(obj.parent),
|
4841
5030
|
dom = this.get_node(obj, true),
|
4842
|
-
i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection
|
5031
|
+
i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
|
5032
|
+
sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected;
|
4843
5033
|
|
5034
|
+
for (i = 0, j = cur.length; i < j; i++) {
|
5035
|
+
sel[cur[i]] = true;
|
5036
|
+
}
|
4844
5037
|
// apply down
|
4845
5038
|
if(s.indexOf('down') !== -1) {
|
4846
|
-
this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));
|
5039
|
+
//this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));
|
4847
5040
|
for(i = 0, j = obj.children_d.length; i < j; i++) {
|
5041
|
+
sel[obj.children_d[i]] = true;
|
4848
5042
|
tmp = m[obj.children_d[i]];
|
4849
5043
|
tmp.state[ t ? 'selected' : 'checked' ] = true;
|
4850
5044
|
if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
|
@@ -4862,7 +5056,8 @@
|
|
4862
5056
|
}
|
4863
5057
|
if(c === j) {
|
4864
5058
|
par.state[ t ? 'selected' : 'checked' ] = true;
|
4865
|
-
|
5059
|
+
sel[par.id] = true;
|
5060
|
+
//this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);
|
4866
5061
|
tmp = this.get_node(par, true);
|
4867
5062
|
if(tmp && tmp.length) {
|
4868
5063
|
tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
|
@@ -4875,6 +5070,14 @@
|
|
4875
5070
|
}
|
4876
5071
|
}
|
4877
5072
|
|
5073
|
+
cur = [];
|
5074
|
+
for (i in sel) {
|
5075
|
+
if (sel.hasOwnProperty(i)) {
|
5076
|
+
cur.push(i);
|
5077
|
+
}
|
5078
|
+
}
|
5079
|
+
this._data[ t ? 'core' : 'checkbox' ].selected = cur;
|
5080
|
+
|
4878
5081
|
// apply down (process .children separately?)
|
4879
5082
|
if(s.indexOf('down') !== -1 && dom.length) {
|
4880
5083
|
dom.find('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', true);
|
@@ -4894,7 +5097,8 @@
|
|
4894
5097
|
.on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {
|
4895
5098
|
var obj = data.node,
|
4896
5099
|
dom = this.get_node(obj, true),
|
4897
|
-
i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection
|
5100
|
+
i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
|
5101
|
+
cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {};
|
4898
5102
|
if(obj && obj.original && obj.original.state && obj.original.state.undetermined) {
|
4899
5103
|
obj.original.state.undetermined = false;
|
4900
5104
|
}
|
@@ -4924,18 +5128,24 @@
|
|
4924
5128
|
}
|
4925
5129
|
}
|
4926
5130
|
}
|
4927
|
-
|
4928
|
-
for(i = 0, j =
|
5131
|
+
sel = {};
|
5132
|
+
for(i = 0, j = cur.length; i < j; i++) {
|
4929
5133
|
// apply down + apply up
|
4930
5134
|
if(
|
4931
|
-
(s.indexOf('down') === -1 || $.inArray(
|
4932
|
-
(s.indexOf('up') === -1 || $.inArray(
|
5135
|
+
(s.indexOf('down') === -1 || $.inArray(cur[i], obj.children_d) === -1) &&
|
5136
|
+
(s.indexOf('up') === -1 || $.inArray(cur[i], obj.parents) === -1)
|
4933
5137
|
) {
|
4934
|
-
|
5138
|
+
sel[cur[i]] = true;
|
4935
5139
|
}
|
4936
5140
|
}
|
4937
|
-
|
4938
|
-
|
5141
|
+
cur = [];
|
5142
|
+
for (i in sel) {
|
5143
|
+
if (sel.hasOwnProperty(i)) {
|
5144
|
+
cur.push(i);
|
5145
|
+
}
|
5146
|
+
}
|
5147
|
+
this._data[ t ? 'core' : 'checkbox' ].selected = cur;
|
5148
|
+
|
4939
5149
|
// apply down (process .children separately?)
|
4940
5150
|
if(s.indexOf('down') !== -1 && dom.length) {
|
4941
5151
|
dom.find('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', false);
|
@@ -5042,7 +5252,10 @@
|
|
5042
5252
|
for(i = 0, j = s.length; i < j; i++) {
|
5043
5253
|
if(m[s[i]] && m[s[i]].parents) {
|
5044
5254
|
for(k = 0, l = m[s[i]].parents.length; k < l; k++) {
|
5045
|
-
if(o[m[s[i]].parents[k]]
|
5255
|
+
if(o[m[s[i]].parents[k]] !== undefined) {
|
5256
|
+
break;
|
5257
|
+
}
|
5258
|
+
if(m[s[i]].parents[k] !== $.jstree.root) {
|
5046
5259
|
o[m[s[i]].parents[k]] = true;
|
5047
5260
|
p.push(m[s[i]].parents[k]);
|
5048
5261
|
}
|
@@ -5553,16 +5766,18 @@
|
|
5553
5766
|
/**
|
5554
5767
|
* an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too).
|
5555
5768
|
*
|
5556
|
-
* Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required):
|
5769
|
+
* Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu.
|
5557
5770
|
*
|
5558
5771
|
* * `separator_before` - a boolean indicating if there should be a separator before this item
|
5559
5772
|
* * `separator_after` - a boolean indicating if there should be a separator after this item
|
5560
5773
|
* * `_disabled` - a boolean indicating if this action should be disabled
|
5561
5774
|
* * `label` - a string - the name of the action (could be a function returning a string)
|
5562
|
-
* * `
|
5775
|
+
* * `title` - a string - an optional tooltip for the item
|
5776
|
+
* * `action` - a function to be executed if this item is chosen, the function will receive
|
5563
5777
|
* * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class
|
5564
5778
|
* * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)
|
5565
5779
|
* * `shortcut_label` - shortcut label (like for example `F2` for rename)
|
5780
|
+
* * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered
|
5566
5781
|
*
|
5567
5782
|
* @name $.jstree.defaults.contextmenu.items
|
5568
5783
|
* @plugin contextmenu
|
@@ -5680,6 +5895,9 @@
|
|
5680
5895
|
var last_ts = 0, cto = null, ex, ey;
|
5681
5896
|
this.element
|
5682
5897
|
.on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e, data) {
|
5898
|
+
if (e.target.tagName.toLowerCase() === 'input') {
|
5899
|
+
return;
|
5900
|
+
}
|
5683
5901
|
e.preventDefault();
|
5684
5902
|
last_ts = e.ctrlKey ? +new Date() : 0;
|
5685
5903
|
if(data || cto) {
|
@@ -5702,14 +5920,14 @@
|
|
5702
5920
|
if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {
|
5703
5921
|
return;
|
5704
5922
|
}
|
5705
|
-
ex = e.
|
5706
|
-
ey = e.
|
5923
|
+
ex = e.originalEvent.changedTouches[0].clientX;
|
5924
|
+
ey = e.originalEvent.changedTouches[0].clientY;
|
5707
5925
|
cto = setTimeout(function () {
|
5708
5926
|
$(e.currentTarget).trigger('contextmenu', true);
|
5709
5927
|
}, 750);
|
5710
5928
|
})
|
5711
5929
|
.on('touchmove.vakata.jstree', function (e) {
|
5712
|
-
if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.
|
5930
|
+
if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 50 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 50)) {
|
5713
5931
|
clearTimeout(cto);
|
5714
5932
|
}
|
5715
5933
|
})
|
@@ -5740,7 +5958,10 @@
|
|
5740
5958
|
});
|
5741
5959
|
}
|
5742
5960
|
*/
|
5743
|
-
$(document).on("context_hide.vakata.jstree", $.proxy(function () {
|
5961
|
+
$(document).on("context_hide.vakata.jstree", $.proxy(function (e, data) {
|
5962
|
+
this._data.contextmenu.visible = false;
|
5963
|
+
$(data.reference).removeClass('jstree-context');
|
5964
|
+
}, this));
|
5744
5965
|
};
|
5745
5966
|
this.teardown = function () {
|
5746
5967
|
if(this._data.contextmenu.visible) {
|
@@ -5803,6 +6024,7 @@
|
|
5803
6024
|
$(document).one("context_show.vakata.jstree", $.proxy(function (e, data) {
|
5804
6025
|
var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';
|
5805
6026
|
$(data.element).addClass(cls);
|
6027
|
+
a.addClass('jstree-context');
|
5806
6028
|
}, this));
|
5807
6029
|
this._data.contextmenu.visible = true;
|
5808
6030
|
$.vakata.context.show(a, { 'x' : x, 'y' : y }, i);
|
@@ -5878,7 +6100,7 @@
|
|
5878
6100
|
}
|
5879
6101
|
sep = false;
|
5880
6102
|
str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">";
|
5881
|
-
str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "'>";
|
6103
|
+
str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">";
|
5882
6104
|
if($.vakata.context.settings.icons) {
|
5883
6105
|
str += "<"+"i ";
|
5884
6106
|
if(val.icon) {
|
@@ -5916,7 +6138,8 @@
|
|
5916
6138
|
o = $(o);
|
5917
6139
|
if(!o.length || !o.children("ul").length) { return; }
|
5918
6140
|
var e = o.children("ul"),
|
5919
|
-
|
6141
|
+
xl = o.offset().left,
|
6142
|
+
x = xl + o.outerWidth(),
|
5920
6143
|
y = o.offset().top,
|
5921
6144
|
w = e.width(),
|
5922
6145
|
h = e.height(),
|
@@ -5927,11 +6150,23 @@
|
|
5927
6150
|
o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left");
|
5928
6151
|
}
|
5929
6152
|
else {
|
5930
|
-
o[x + w
|
6153
|
+
o[x + w > dw && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right");
|
5931
6154
|
}
|
5932
6155
|
if(y + h + 10 > dh) {
|
5933
6156
|
e.css("bottom","-1px");
|
5934
6157
|
}
|
6158
|
+
|
6159
|
+
//if does not fit - stick it to the side
|
6160
|
+
if (o.hasClass('vakata-context-right')) {
|
6161
|
+
if (xl < w) {
|
6162
|
+
e.css("margin-right", xl - w);
|
6163
|
+
}
|
6164
|
+
} else {
|
6165
|
+
if (dw - x < w) {
|
6166
|
+
e.css("margin-left", dw - x - w);
|
6167
|
+
}
|
6168
|
+
}
|
6169
|
+
|
5935
6170
|
e.show();
|
5936
6171
|
},
|
5937
6172
|
show : function (reference, position, data) {
|
@@ -6070,7 +6305,7 @@
|
|
6070
6305
|
switch(e.which) {
|
6071
6306
|
case 13:
|
6072
6307
|
case 32:
|
6073
|
-
e.type = "
|
6308
|
+
e.type = "click";
|
6074
6309
|
e.preventDefault();
|
6075
6310
|
$(e.currentTarget).trigger(e);
|
6076
6311
|
break;
|
@@ -6141,6 +6376,7 @@
|
|
6141
6376
|
}($));
|
6142
6377
|
// $.jstree.defaults.plugins.push("contextmenu");
|
6143
6378
|
|
6379
|
+
|
6144
6380
|
/**
|
6145
6381
|
* ### Drag'n'drop plugin
|
6146
6382
|
*
|
@@ -6212,34 +6448,90 @@
|
|
6212
6448
|
* @name $.jstree.defaults.dnd.large_drag_target
|
6213
6449
|
* @plugin dnd
|
6214
6450
|
*/
|
6215
|
-
large_drag_target : false
|
6451
|
+
large_drag_target : false,
|
6452
|
+
/**
|
6453
|
+
* controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls.
|
6454
|
+
* @reference http://caniuse.com/#feat=dragndrop
|
6455
|
+
* @name $.jstree.defaults.dnd.use_html5
|
6456
|
+
* @plugin dnd
|
6457
|
+
*/
|
6458
|
+
use_html5: false
|
6216
6459
|
};
|
6460
|
+
var drg, elm;
|
6217
6461
|
// TODO: now check works by checking for each node individually, how about max_children, unique, etc?
|
6218
6462
|
$.jstree.plugins.dnd = function (options, parent) {
|
6463
|
+
this.init = function (el, options) {
|
6464
|
+
parent.init.call(this, el, options);
|
6465
|
+
this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span'));
|
6466
|
+
};
|
6219
6467
|
this.bind = function () {
|
6220
6468
|
parent.bind.call(this);
|
6221
6469
|
|
6222
6470
|
this.element
|
6223
|
-
.on('mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
|
6224
|
-
|
6225
|
-
|
6226
|
-
|
6227
|
-
|
6228
|
-
|
6229
|
-
|
6230
|
-
|
6231
|
-
|
6232
|
-
|
6233
|
-
|
6234
|
-
|
6471
|
+
.on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
|
6472
|
+
if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {
|
6473
|
+
return true;
|
6474
|
+
}
|
6475
|
+
if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) {
|
6476
|
+
return true;
|
6477
|
+
}
|
6478
|
+
var obj = this.get_node(e.target),
|
6479
|
+
mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1,
|
6480
|
+
txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget));
|
6481
|
+
if(this.settings.core.force_text) {
|
6482
|
+
txt = $.vakata.html.escape(txt);
|
6483
|
+
}
|
6484
|
+
if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") &&
|
6485
|
+
(this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e)))
|
6486
|
+
) {
|
6487
|
+
drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] };
|
6488
|
+
elm = e.currentTarget;
|
6489
|
+
if (this.settings.dnd.use_html5) {
|
6490
|
+
$.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6491
|
+
} else {
|
6492
|
+
this.element.trigger('mousedown.jstree');
|
6493
|
+
return $.vakata.dnd.start(e, drg, '<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>');
|
6494
|
+
}
|
6495
|
+
}
|
6496
|
+
}, this));
|
6497
|
+
if (this.settings.dnd.use_html5) {
|
6498
|
+
this.element
|
6499
|
+
.on('dragover.jstree', function (e) {
|
6500
|
+
e.preventDefault();
|
6501
|
+
$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6502
|
+
return false;
|
6503
|
+
})
|
6504
|
+
//.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
|
6505
|
+
// e.preventDefault();
|
6506
|
+
// $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6507
|
+
// return false;
|
6508
|
+
// }, this))
|
6509
|
+
.on('drop.jstree', $.proxy(function (e) {
|
6510
|
+
e.preventDefault();
|
6511
|
+
$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6512
|
+
return false;
|
6513
|
+
}, this));
|
6514
|
+
}
|
6515
|
+
};
|
6516
|
+
this.redraw_node = function(obj, deep, callback, force_render) {
|
6517
|
+
obj = parent.redraw_node.apply(this, arguments);
|
6518
|
+
if (obj && this.settings.dnd.use_html5) {
|
6519
|
+
if (this.settings.dnd.large_drag_target) {
|
6520
|
+
obj.setAttribute('draggable', true);
|
6521
|
+
} else {
|
6522
|
+
var i, j, tmp = null;
|
6523
|
+
for(i = 0, j = obj.childNodes.length; i < j; i++) {
|
6524
|
+
if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
|
6525
|
+
tmp = obj.childNodes[i];
|
6526
|
+
break;
|
6527
|
+
}
|
6235
6528
|
}
|
6236
|
-
if(
|
6237
|
-
|
6238
|
-
) {
|
6239
|
-
this.element.trigger('mousedown.jstree');
|
6240
|
-
return $.vakata.dnd.start(e, { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), '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>');
|
6529
|
+
if(tmp) {
|
6530
|
+
tmp.setAttribute('draggable', true);
|
6241
6531
|
}
|
6242
|
-
}
|
6532
|
+
}
|
6533
|
+
}
|
6534
|
+
return obj;
|
6243
6535
|
};
|
6244
6536
|
};
|
6245
6537
|
|
@@ -6259,7 +6551,11 @@
|
|
6259
6551
|
marker.appendTo('body'); //.show();
|
6260
6552
|
})
|
6261
6553
|
.on('dnd_move.vakata.jstree', function (e, data) {
|
6262
|
-
if(opento) {
|
6554
|
+
if(opento) {
|
6555
|
+
if (!data.event || data.event.type !== 'dragover' || data.event.target !== lastev.target) {
|
6556
|
+
clearTimeout(opento);
|
6557
|
+
}
|
6558
|
+
}
|
6263
6559
|
if(!data || !data.data || !data.data.jstree) { return; }
|
6264
6560
|
|
6265
6561
|
// if we are hovering the marker image do nothing (can happen on "inside" drags)
|
@@ -6272,16 +6568,17 @@
|
|
6272
6568
|
ref = false,
|
6273
6569
|
off = false,
|
6274
6570
|
rel = false,
|
6275
|
-
tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm;
|
6571
|
+
tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn;
|
6276
6572
|
// if we are over an instance
|
6277
6573
|
if(ins && ins._data && ins._data.dnd) {
|
6278
6574
|
marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));
|
6575
|
+
is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)));
|
6279
6576
|
data.helper
|
6280
6577
|
.children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))
|
6281
|
-
.find('.jstree-copy').first()[
|
6282
|
-
|
6578
|
+
.find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ]();
|
6283
6579
|
|
6284
6580
|
// if are hovering the container itself add a new root node
|
6581
|
+
//console.log(data.event);
|
6285
6582
|
if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {
|
6286
6583
|
ok = true;
|
6287
6584
|
for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
|
@@ -6292,6 +6589,9 @@
|
|
6292
6589
|
lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };
|
6293
6590
|
marker.hide();
|
6294
6591
|
data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
|
6592
|
+
if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
|
6593
|
+
data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
|
6594
|
+
}
|
6295
6595
|
return;
|
6296
6596
|
}
|
6297
6597
|
}
|
@@ -6300,7 +6600,7 @@
|
|
6300
6600
|
ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');
|
6301
6601
|
if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {
|
6302
6602
|
off = ref.offset();
|
6303
|
-
rel = data.event.pageY - off.top;
|
6603
|
+
rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top;
|
6304
6604
|
h = ref.outerHeight();
|
6305
6605
|
if(rel < h / 3) {
|
6306
6606
|
o = ['b', 'i', 'a'];
|
@@ -6354,9 +6654,17 @@
|
|
6354
6654
|
opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);
|
6355
6655
|
}
|
6356
6656
|
if(ok) {
|
6657
|
+
pn = ins.get_node(p, true);
|
6658
|
+
if (!pn.hasClass('.jstree-dnd-parent')) {
|
6659
|
+
$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
|
6660
|
+
pn.addClass('jstree-dnd-parent');
|
6661
|
+
}
|
6357
6662
|
lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };
|
6358
6663
|
marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();
|
6359
6664
|
data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
|
6665
|
+
if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
|
6666
|
+
data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
|
6667
|
+
}
|
6360
6668
|
laster = {};
|
6361
6669
|
o = true;
|
6362
6670
|
return false;
|
@@ -6366,8 +6674,12 @@
|
|
6366
6674
|
}
|
6367
6675
|
}
|
6368
6676
|
}
|
6677
|
+
$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
|
6369
6678
|
lastmv = false;
|
6370
6679
|
data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');
|
6680
|
+
if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
|
6681
|
+
data.event.originalEvent.dataTransfer.dropEffect = 'none';
|
6682
|
+
}
|
6371
6683
|
marker.hide();
|
6372
6684
|
})
|
6373
6685
|
.on('dnd_scroll.vakata.jstree', function (e, data) {
|
@@ -6378,6 +6690,7 @@
|
|
6378
6690
|
data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');
|
6379
6691
|
})
|
6380
6692
|
.on('dnd_stop.vakata.jstree', function (e, data) {
|
6693
|
+
$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
|
6381
6694
|
if(opento) { clearTimeout(opento); }
|
6382
6695
|
if(!data || !data.data || !data.data.jstree) { return; }
|
6383
6696
|
marker.hide().detach();
|
@@ -6403,11 +6716,21 @@
|
|
6403
6716
|
.on('keyup.jstree keydown.jstree', function (e, data) {
|
6404
6717
|
data = $.vakata.dnd._get();
|
6405
6718
|
if(data && data.data && data.data.jstree) {
|
6406
|
-
|
6407
|
-
|
6408
|
-
|
6409
|
-
|
6410
|
-
|
6719
|
+
if (e.type === "keyup" && e.which === 27) {
|
6720
|
+
if (opento) { clearTimeout(opento); }
|
6721
|
+
lastmv = false;
|
6722
|
+
laster = false;
|
6723
|
+
lastev = false;
|
6724
|
+
opento = false;
|
6725
|
+
marker.hide().detach();
|
6726
|
+
$.vakata.dnd._clean();
|
6727
|
+
} else {
|
6728
|
+
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' ]();
|
6729
|
+
if(lastev) {
|
6730
|
+
lastev.metaKey = e.metaKey;
|
6731
|
+
lastev.ctrlKey = e.ctrlKey;
|
6732
|
+
$.vakata.dnd._trigger('move', lastev);
|
6733
|
+
}
|
6411
6734
|
}
|
6412
6735
|
}
|
6413
6736
|
});
|
@@ -6450,8 +6773,10 @@
|
|
6450
6773
|
threshold : 5,
|
6451
6774
|
threshold_touch : 50
|
6452
6775
|
},
|
6453
|
-
_trigger : function (event_name, e) {
|
6454
|
-
|
6776
|
+
_trigger : function (event_name, e, data) {
|
6777
|
+
if (data === undefined) {
|
6778
|
+
data = $.vakata.dnd._get();
|
6779
|
+
}
|
6455
6780
|
data.event = e;
|
6456
6781
|
$(document).triggerHandler("dnd_" + event_name + ".vakata", data);
|
6457
6782
|
},
|
@@ -6523,7 +6848,11 @@
|
|
6523
6848
|
try {
|
6524
6849
|
e.currentTarget.unselectable = "on";
|
6525
6850
|
e.currentTarget.onselectstart = function() { return false; };
|
6526
|
-
if(e.currentTarget.style) {
|
6851
|
+
if(e.currentTarget.style) {
|
6852
|
+
e.currentTarget.style.touchAction = "none";
|
6853
|
+
e.currentTarget.style.msTouchAction = "none";
|
6854
|
+
e.currentTarget.style.MozUserSelect = "none";
|
6855
|
+
}
|
6527
6856
|
} catch(ignore) { }
|
6528
6857
|
vakata_dnd.init_x = e.pageX;
|
6529
6858
|
vakata_dnd.init_y = e.pageY;
|
@@ -6564,6 +6893,7 @@
|
|
6564
6893
|
vakata_dnd.helper_w = vakata_dnd.helper.outerWidth();
|
6565
6894
|
}
|
6566
6895
|
vakata_dnd.is_drag = true;
|
6896
|
+
$(vakata_dnd.target).one('click.vakata', false);
|
6567
6897
|
/**
|
6568
6898
|
* triggered on the document when a drag starts
|
6569
6899
|
* @event
|
@@ -6664,6 +6994,9 @@
|
|
6664
6994
|
* @param {jQuery} helper the helper shown next to the mouse
|
6665
6995
|
* @param {Object} event the event that caused the stop
|
6666
6996
|
*/
|
6997
|
+
if (e.target !== vakata_dnd.target) {
|
6998
|
+
$(vakata_dnd.target).off('click.vakata');
|
6999
|
+
}
|
6667
7000
|
$.vakata.dnd._trigger("stop", e);
|
6668
7001
|
}
|
6669
7002
|
else {
|
@@ -6709,58 +7042,95 @@
|
|
6709
7042
|
$.jstree.defaults.massload = null;
|
6710
7043
|
$.jstree.plugins.massload = function (options, parent) {
|
6711
7044
|
this.init = function (el, options) {
|
6712
|
-
parent.init.call(this, el, options);
|
6713
7045
|
this._data.massload = {};
|
7046
|
+
parent.init.call(this, el, options);
|
6714
7047
|
};
|
6715
|
-
this._load_nodes = function (nodes, callback, is_callback) {
|
6716
|
-
var s = this.settings.massload
|
6717
|
-
|
6718
|
-
|
6719
|
-
|
6720
|
-
|
6721
|
-
|
6722
|
-
|
6723
|
-
|
6724
|
-
|
6725
|
-
|
6726
|
-
|
7048
|
+
this._load_nodes = function (nodes, callback, is_callback, force_reload) {
|
7049
|
+
var s = this.settings.massload,
|
7050
|
+
nodesString = JSON.stringify(nodes),
|
7051
|
+
toLoad = [],
|
7052
|
+
m = this._model.data,
|
7053
|
+
i, j, dom;
|
7054
|
+
if (!is_callback) {
|
7055
|
+
for(i = 0, j = nodes.length; i < j; i++) {
|
7056
|
+
if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) {
|
7057
|
+
toLoad.push(nodes[i]);
|
7058
|
+
dom = this.get_node(nodes[i], true);
|
7059
|
+
if (dom && dom.length) {
|
7060
|
+
dom.addClass("jstree-loading").attr('aria-busy',true);
|
6727
7061
|
}
|
6728
7062
|
}
|
6729
|
-
parent._load_nodes.call(this, nodes, callback, is_callback);
|
6730
|
-
}, this));
|
6731
|
-
}
|
6732
|
-
if(typeof s === 'object' && s && s.url) {
|
6733
|
-
s = $.extend(true, {}, s);
|
6734
|
-
if($.isFunction(s.url)) {
|
6735
|
-
s.url = s.url.call(this, nodes);
|
6736
|
-
}
|
6737
|
-
if($.isFunction(s.data)) {
|
6738
|
-
s.data = s.data.call(this, nodes);
|
6739
7063
|
}
|
6740
|
-
|
6741
|
-
|
7064
|
+
this._data.massload = {};
|
7065
|
+
if (toLoad.length) {
|
7066
|
+
if($.isFunction(s)) {
|
7067
|
+
return s.call(this, toLoad, $.proxy(function (data) {
|
7068
|
+
var i, j;
|
6742
7069
|
if(data) {
|
6743
|
-
for(
|
7070
|
+
for(i in data) {
|
6744
7071
|
if(data.hasOwnProperty(i)) {
|
6745
7072
|
this._data.massload[i] = data[i];
|
6746
7073
|
}
|
6747
7074
|
}
|
6748
7075
|
}
|
6749
|
-
|
6750
|
-
|
6751
|
-
|
6752
|
-
|
7076
|
+
for(i = 0, j = nodes.length; i < j; i++) {
|
7077
|
+
dom = this.get_node(nodes[i], true);
|
7078
|
+
if (dom && dom.length) {
|
7079
|
+
dom.removeClass("jstree-loading").attr('aria-busy',false);
|
7080
|
+
}
|
7081
|
+
}
|
7082
|
+
parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
|
6753
7083
|
}, this));
|
7084
|
+
}
|
7085
|
+
if(typeof s === 'object' && s && s.url) {
|
7086
|
+
s = $.extend(true, {}, s);
|
7087
|
+
if($.isFunction(s.url)) {
|
7088
|
+
s.url = s.url.call(this, toLoad);
|
7089
|
+
}
|
7090
|
+
if($.isFunction(s.data)) {
|
7091
|
+
s.data = s.data.call(this, toLoad);
|
7092
|
+
}
|
7093
|
+
return $.ajax(s)
|
7094
|
+
.done($.proxy(function (data,t,x) {
|
7095
|
+
var i, j;
|
7096
|
+
if(data) {
|
7097
|
+
for(i in data) {
|
7098
|
+
if(data.hasOwnProperty(i)) {
|
7099
|
+
this._data.massload[i] = data[i];
|
7100
|
+
}
|
7101
|
+
}
|
7102
|
+
}
|
7103
|
+
for(i = 0, j = nodes.length; i < j; i++) {
|
7104
|
+
dom = this.get_node(nodes[i], true);
|
7105
|
+
if (dom && dom.length) {
|
7106
|
+
dom.removeClass("jstree-loading").attr('aria-busy',false);
|
7107
|
+
}
|
7108
|
+
}
|
7109
|
+
parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
|
7110
|
+
}, this))
|
7111
|
+
.fail($.proxy(function (f) {
|
7112
|
+
parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
|
7113
|
+
}, this));
|
7114
|
+
}
|
7115
|
+
}
|
6754
7116
|
}
|
6755
|
-
return parent._load_nodes.call(this, nodes, callback, is_callback);
|
7117
|
+
return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
|
6756
7118
|
};
|
6757
7119
|
this._load_node = function (obj, callback) {
|
6758
|
-
var
|
6759
|
-
|
6760
|
-
|
6761
|
-
|
6762
|
-
|
6763
|
-
|
7120
|
+
var data = this._data.massload[obj.id],
|
7121
|
+
rslt = null, dom;
|
7122
|
+
if(data) {
|
7123
|
+
rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data'](
|
7124
|
+
obj,
|
7125
|
+
typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data,
|
7126
|
+
function (status) { callback.call(this, status); }
|
7127
|
+
);
|
7128
|
+
dom = this.get_node(obj.id, true);
|
7129
|
+
if (dom && dom.length) {
|
7130
|
+
dom.removeClass("jstree-loading").attr('aria-busy',false);
|
7131
|
+
}
|
7132
|
+
delete this._data.massload[obj.id];
|
7133
|
+
return rslt;
|
6764
7134
|
}
|
6765
7135
|
return parent._load_node.call(this, obj, callback);
|
6766
7136
|
};
|
@@ -6779,10 +7149,10 @@
|
|
6779
7149
|
*/
|
6780
7150
|
$.jstree.defaults.search = {
|
6781
7151
|
/**
|
6782
|
-
* a jQuery-like AJAX config, which jstree uses if a server should be queried for results.
|
6783
|
-
*
|
7152
|
+
* a jQuery-like AJAX config, which jstree uses if a server should be queried for results.
|
7153
|
+
*
|
6784
7154
|
* A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed.
|
6785
|
-
* Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to
|
7155
|
+
* Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to
|
6786
7156
|
* @name $.jstree.defaults.search.ajax
|
6787
7157
|
* @plugin search
|
6788
7158
|
*/
|
@@ -6800,7 +7170,7 @@
|
|
6800
7170
|
*/
|
6801
7171
|
case_sensitive : false,
|
6802
7172
|
/**
|
6803
|
-
* Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).
|
7173
|
+
* Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).
|
6804
7174
|
* This setting can be changed at runtime when calling the search method. Default is `false`.
|
6805
7175
|
* @name $.jstree.defaults.search.show_only_matches
|
6806
7176
|
* @plugin search
|
@@ -6849,24 +7219,30 @@
|
|
6849
7219
|
this.element
|
6850
7220
|
.on("search.jstree", $.proxy(function (e, data) {
|
6851
7221
|
if(this._data.search.som && data.res.length) {
|
6852
|
-
var m = this._model.data, i, j, p = [];
|
7222
|
+
var m = this._model.data, i, j, p = [], k, l;
|
6853
7223
|
for(i = 0, j = data.res.length; i < j; i++) {
|
6854
7224
|
if(m[data.res[i]] && !m[data.res[i]].state.hidden) {
|
6855
7225
|
p.push(data.res[i]);
|
6856
7226
|
p = p.concat(m[data.res[i]].parents);
|
6857
7227
|
if(this._data.search.smc) {
|
6858
|
-
|
7228
|
+
for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) {
|
7229
|
+
if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) {
|
7230
|
+
p.push(m[data.res[i]].children_d[k]);
|
7231
|
+
}
|
7232
|
+
}
|
6859
7233
|
}
|
6860
7234
|
}
|
6861
7235
|
}
|
6862
7236
|
p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);
|
6863
7237
|
this._data.search.hdn = this.hide_all(true);
|
6864
|
-
this.show_node(p);
|
7238
|
+
this.show_node(p, true);
|
7239
|
+
this.redraw(true);
|
6865
7240
|
}
|
6866
7241
|
}, this))
|
6867
7242
|
.on("clear_search.jstree", $.proxy(function (e, data) {
|
6868
7243
|
if(this._data.search.som && data.res.length) {
|
6869
|
-
this.show_node(this._data.search.hdn);
|
7244
|
+
this.show_node(this._data.search.hdn, true);
|
7245
|
+
this.redraw(true);
|
6870
7246
|
}
|
6871
7247
|
}, this));
|
6872
7248
|
};
|
@@ -6908,8 +7284,8 @@
|
|
6908
7284
|
return a.call(this, str, $.proxy(function (d) {
|
6909
7285
|
if(d && d.d) { d = d.d; }
|
6910
7286
|
this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
|
6911
|
-
this.search(str, true, show_only_matches, inside, append);
|
6912
|
-
}
|
7287
|
+
this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
|
7288
|
+
});
|
6913
7289
|
}, this), inside);
|
6914
7290
|
}
|
6915
7291
|
else {
|
@@ -6919,7 +7295,10 @@
|
|
6919
7295
|
if(inside) {
|
6920
7296
|
a.data.inside = inside;
|
6921
7297
|
}
|
6922
|
-
|
7298
|
+
if (this._data.search.lastRequest) {
|
7299
|
+
this._data.search.lastRequest.abort();
|
7300
|
+
}
|
7301
|
+
this._data.search.lastRequest = $.ajax(a)
|
6923
7302
|
.fail($.proxy(function () {
|
6924
7303
|
this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };
|
6925
7304
|
this.settings.core.error.call(this, this._data.core.last_error);
|
@@ -6927,9 +7306,10 @@
|
|
6927
7306
|
.done($.proxy(function (d) {
|
6928
7307
|
if(d && d.d) { d = d.d; }
|
6929
7308
|
this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
|
6930
|
-
this.search(str, true, show_only_matches, inside, append);
|
6931
|
-
}
|
7309
|
+
this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
|
7310
|
+
});
|
6932
7311
|
}, this));
|
7312
|
+
return this._data.search.lastRequest;
|
6933
7313
|
}
|
6934
7314
|
}
|
6935
7315
|
if(!append) {
|
@@ -6944,7 +7324,7 @@
|
|
6944
7324
|
f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });
|
6945
7325
|
$.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {
|
6946
7326
|
var v = m[i];
|
6947
|
-
if(v.text && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {
|
7327
|
+
if(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {
|
6948
7328
|
r.push(i);
|
6949
7329
|
p = p.concat(v.parents);
|
6950
7330
|
}
|
@@ -7342,6 +7722,8 @@
|
|
7342
7722
|
* * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.
|
7343
7723
|
* * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.
|
7344
7724
|
* * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.
|
7725
|
+
* * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data)
|
7726
|
+
* * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data)
|
7345
7727
|
*
|
7346
7728
|
* There are two predefined types:
|
7347
7729
|
*
|
@@ -7383,7 +7765,7 @@
|
|
7383
7765
|
var m = this._model.data,
|
7384
7766
|
dpc = data.nodes,
|
7385
7767
|
t = this.settings.types,
|
7386
|
-
i, j, c = 'default';
|
7768
|
+
i, j, c = 'default', k;
|
7387
7769
|
for(i = 0, j = dpc.length; i < j; i++) {
|
7388
7770
|
c = 'default';
|
7389
7771
|
if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {
|
@@ -7396,6 +7778,39 @@
|
|
7396
7778
|
if(m[dpc[i]].icon === true && t[c].icon !== undefined) {
|
7397
7779
|
m[dpc[i]].icon = t[c].icon;
|
7398
7780
|
}
|
7781
|
+
if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {
|
7782
|
+
for (k in t[c].li_attr) {
|
7783
|
+
if (t[c].li_attr.hasOwnProperty(k)) {
|
7784
|
+
if (k === 'id') {
|
7785
|
+
continue;
|
7786
|
+
}
|
7787
|
+
else if (m[dpc[i]].li_attr[k] === undefined) {
|
7788
|
+
m[dpc[i]].li_attr[k] = t[c].li_attr[k];
|
7789
|
+
}
|
7790
|
+
else if (k === 'class') {
|
7791
|
+
m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];
|
7792
|
+
}
|
7793
|
+
}
|
7794
|
+
}
|
7795
|
+
}
|
7796
|
+
if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {
|
7797
|
+
for (k in t[c].a_attr) {
|
7798
|
+
if (t[c].a_attr.hasOwnProperty(k)) {
|
7799
|
+
if (k === 'id') {
|
7800
|
+
continue;
|
7801
|
+
}
|
7802
|
+
else if (m[dpc[i]].a_attr[k] === undefined) {
|
7803
|
+
m[dpc[i]].a_attr[k] = t[c].a_attr[k];
|
7804
|
+
}
|
7805
|
+
else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {
|
7806
|
+
m[dpc[i]].a_attr['href'] = t[c].a_attr['href'];
|
7807
|
+
}
|
7808
|
+
else if (k === 'class') {
|
7809
|
+
m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];
|
7810
|
+
}
|
7811
|
+
}
|
7812
|
+
}
|
7813
|
+
}
|
7399
7814
|
}
|
7400
7815
|
m[$.jstree.root].type = $.jstree.root;
|
7401
7816
|
}, this));
|
@@ -7526,7 +7941,7 @@
|
|
7526
7941
|
* @plugin types
|
7527
7942
|
*/
|
7528
7943
|
this.set_type = function (obj, type) {
|
7529
|
-
var t, t1, t2, old_type, old_icon;
|
7944
|
+
var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;
|
7530
7945
|
if($.isArray(obj)) {
|
7531
7946
|
obj = obj.slice();
|
7532
7947
|
for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
|
@@ -7537,18 +7952,120 @@
|
|
7537
7952
|
t = this.settings.types;
|
7538
7953
|
obj = this.get_node(obj);
|
7539
7954
|
if(!t[type] || !obj) { return false; }
|
7955
|
+
d = this.get_node(obj, true);
|
7956
|
+
if (d && d.length) {
|
7957
|
+
a = d.children('.jstree-anchor');
|
7958
|
+
}
|
7540
7959
|
old_type = obj.type;
|
7541
7960
|
old_icon = this.get_icon(obj);
|
7542
7961
|
obj.type = type;
|
7543
|
-
if(old_icon === true ||
|
7962
|
+
if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {
|
7544
7963
|
this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);
|
7545
7964
|
}
|
7965
|
+
|
7966
|
+
// remove old type props
|
7967
|
+
if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {
|
7968
|
+
for (k in t[old_type].li_attr) {
|
7969
|
+
if (t[old_type].li_attr.hasOwnProperty(k)) {
|
7970
|
+
if (k === 'id') {
|
7971
|
+
continue;
|
7972
|
+
}
|
7973
|
+
else if (k === 'class') {
|
7974
|
+
m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');
|
7975
|
+
if (d) { d.removeClass(t[old_type].li_attr[k]); }
|
7976
|
+
}
|
7977
|
+
else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {
|
7978
|
+
m[obj.id].li_attr[k] = null;
|
7979
|
+
if (d) { d.removeAttr(k); }
|
7980
|
+
}
|
7981
|
+
}
|
7982
|
+
}
|
7983
|
+
}
|
7984
|
+
if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {
|
7985
|
+
for (k in t[old_type].a_attr) {
|
7986
|
+
if (t[old_type].a_attr.hasOwnProperty(k)) {
|
7987
|
+
if (k === 'id') {
|
7988
|
+
continue;
|
7989
|
+
}
|
7990
|
+
else if (k === 'class') {
|
7991
|
+
m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');
|
7992
|
+
if (a) { a.removeClass(t[old_type].a_attr[k]); }
|
7993
|
+
}
|
7994
|
+
else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {
|
7995
|
+
if (k === 'href') {
|
7996
|
+
m[obj.id].a_attr[k] = '#';
|
7997
|
+
if (a) { a.attr('href', '#'); }
|
7998
|
+
}
|
7999
|
+
else {
|
8000
|
+
delete m[obj.id].a_attr[k];
|
8001
|
+
if (a) { a.removeAttr(k); }
|
8002
|
+
}
|
8003
|
+
}
|
8004
|
+
}
|
8005
|
+
}
|
8006
|
+
}
|
8007
|
+
|
8008
|
+
// add new props
|
8009
|
+
if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {
|
8010
|
+
for (k in t[type].li_attr) {
|
8011
|
+
if (t[type].li_attr.hasOwnProperty(k)) {
|
8012
|
+
if (k === 'id') {
|
8013
|
+
continue;
|
8014
|
+
}
|
8015
|
+
else if (m[obj.id].li_attr[k] === undefined) {
|
8016
|
+
m[obj.id].li_attr[k] = t[type].li_attr[k];
|
8017
|
+
if (d) {
|
8018
|
+
if (k === 'class') {
|
8019
|
+
d.addClass(t[type].li_attr[k]);
|
8020
|
+
}
|
8021
|
+
else {
|
8022
|
+
d.attr(k, t[type].li_attr[k]);
|
8023
|
+
}
|
8024
|
+
}
|
8025
|
+
}
|
8026
|
+
else if (k === 'class') {
|
8027
|
+
m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];
|
8028
|
+
if (d) { d.addClass(t[type].li_attr[k]); }
|
8029
|
+
}
|
8030
|
+
}
|
8031
|
+
}
|
8032
|
+
}
|
8033
|
+
if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {
|
8034
|
+
for (k in t[type].a_attr) {
|
8035
|
+
if (t[type].a_attr.hasOwnProperty(k)) {
|
8036
|
+
if (k === 'id') {
|
8037
|
+
continue;
|
8038
|
+
}
|
8039
|
+
else if (m[obj.id].a_attr[k] === undefined) {
|
8040
|
+
m[obj.id].a_attr[k] = t[type].a_attr[k];
|
8041
|
+
if (a) {
|
8042
|
+
if (k === 'class') {
|
8043
|
+
a.addClass(t[type].a_attr[k]);
|
8044
|
+
}
|
8045
|
+
else {
|
8046
|
+
a.attr(k, t[type].a_attr[k]);
|
8047
|
+
}
|
8048
|
+
}
|
8049
|
+
}
|
8050
|
+
else if (k === 'href' && m[obj.id].a_attr[k] === '#') {
|
8051
|
+
m[obj.id].a_attr['href'] = t[type].a_attr['href'];
|
8052
|
+
if (a) { a.attr('href', t[type].a_attr['href']); }
|
8053
|
+
}
|
8054
|
+
else if (k === 'class') {
|
8055
|
+
m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];
|
8056
|
+
if (a) { a.addClass(t[type].a_attr[k]); }
|
8057
|
+
}
|
8058
|
+
}
|
8059
|
+
}
|
8060
|
+
}
|
8061
|
+
|
7546
8062
|
return true;
|
7547
8063
|
};
|
7548
8064
|
};
|
7549
8065
|
// include the types plugin by default
|
7550
8066
|
// $.jstree.defaults.plugins.push("types");
|
7551
8067
|
|
8068
|
+
|
7552
8069
|
/**
|
7553
8070
|
* ### Unique plugin
|
7554
8071
|
*
|
@@ -7699,9 +8216,11 @@
|
|
7699
8216
|
this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered');
|
7700
8217
|
}, this))
|
7701
8218
|
.on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) {
|
7702
|
-
|
7703
|
-
|
7704
|
-
|
8219
|
+
if (this._data.contextmenu) {
|
8220
|
+
e.preventDefault();
|
8221
|
+
var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });
|
8222
|
+
$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp);
|
8223
|
+
}
|
7705
8224
|
}, this))
|
7706
8225
|
/*!
|
7707
8226
|
.on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) {
|
@@ -7717,6 +8236,11 @@
|
|
7717
8236
|
var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
|
7718
8237
|
$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
|
7719
8238
|
})
|
8239
|
+
.on("dblclick.jstree", ".jstree-wholerow", function (e) {
|
8240
|
+
e.stopImmediatePropagation();
|
8241
|
+
var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
|
8242
|
+
$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
|
8243
|
+
})
|
7720
8244
|
.on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) {
|
7721
8245
|
e.stopImmediatePropagation();
|
7722
8246
|
var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
|