jstree-rails-4 3.3.4 → 3.3.8
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 +5 -5
- data/Gemfile.lock +2 -2
- data/README.md +2 -2
- data/lib/jstree-rails-4/version.rb +1 -1
- data/vendor/assets/images/default-dark/32px.png +0 -0
- data/vendor/assets/images/default-dark/40px.png +0 -0
- data/vendor/assets/images/default-dark/throbber.gif +0 -0
- data/vendor/assets/images/default/32px.png +0 -0
- data/vendor/assets/images/default/40px.png +0 -0
- data/vendor/assets/images/default/throbber.gif +0 -0
- data/vendor/assets/javascripts/jstree.js +349 -160
- data/vendor/assets/stylesheets/jstree-default-dark.scss +36 -42
- data/vendor/assets/stylesheets/jstree-default.scss +26 -32
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 15fd7da27ef66707c91e83381c14cd7bb7f964d506c420bfe0873ee9350a8a5c
|
4
|
+
data.tar.gz: e217421d7b25adfd3c930820a8e873a1dd7ba2bd202360270327cd865498041d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c174ed620d5e08ed67f3bdb457b145ccb3c5bc345a45b792caa7d1c8a2ef71511eacdd43a7c7e6bb1970c5bb6338629aa0966aa97583e0dcf8ac4aed0dd7364a
|
7
|
+
data.tar.gz: e80d5a236ea2130e4b552efded92ec280b410675a8507d8f5e8e2b30f93ef015c44579e13e9126bd42281f487d99c620f761255089cb1c2fbe74849351f89459
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -13,7 +13,7 @@
|
|
13
13
|
}(function ($, undefined) {
|
14
14
|
"use strict";
|
15
15
|
/*!
|
16
|
-
* jsTree 3.3.
|
16
|
+
* jsTree 3.3.8
|
17
17
|
* http://jstree.com/
|
18
18
|
*
|
19
19
|
* Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
|
@@ -54,7 +54,7 @@
|
|
54
54
|
* specifies the jstree version in use
|
55
55
|
* @name $.jstree.version
|
56
56
|
*/
|
57
|
-
version : '3.3.
|
57
|
+
version : '3.3.8',
|
58
58
|
/**
|
59
59
|
* holds all the default options used when creating new instances
|
60
60
|
* @name $.jstree.defaults
|
@@ -430,10 +430,90 @@
|
|
430
430
|
*/
|
431
431
|
force_text : false,
|
432
432
|
/**
|
433
|
-
* Should the node
|
433
|
+
* Should the node be toggled if the text is double clicked. Defaults to `true`
|
434
434
|
* @name $.jstree.defaults.core.dblclick_toggle
|
435
435
|
*/
|
436
|
-
dblclick_toggle : true
|
436
|
+
dblclick_toggle : true,
|
437
|
+
/**
|
438
|
+
* Should the loaded nodes be part of the state. Defaults to `false`
|
439
|
+
* @name $.jstree.defaults.core.loaded_state
|
440
|
+
*/
|
441
|
+
loaded_state : false,
|
442
|
+
/**
|
443
|
+
* Should the last active node be focused when the tree container is blurred and the focused again. This helps working with screen readers. Defaults to `true`
|
444
|
+
* @name $.jstree.defaults.core.restore_focus
|
445
|
+
*/
|
446
|
+
restore_focus : true,
|
447
|
+
/**
|
448
|
+
* Default keyboard shortcuts (an object where each key is the button name or combo - like 'enter', 'ctrl-space', 'p', etc and the value is the function to execute in the instance's scope)
|
449
|
+
* @name $.jstree.defaults.core.keyboard
|
450
|
+
*/
|
451
|
+
keyboard : {
|
452
|
+
'ctrl-space': function (e) {
|
453
|
+
// aria defines space only with Ctrl
|
454
|
+
e.type = "click";
|
455
|
+
$(e.currentTarget).trigger(e);
|
456
|
+
},
|
457
|
+
'enter': function (e) {
|
458
|
+
// enter
|
459
|
+
e.type = "click";
|
460
|
+
$(e.currentTarget).trigger(e);
|
461
|
+
},
|
462
|
+
'left': function (e) {
|
463
|
+
// left
|
464
|
+
e.preventDefault();
|
465
|
+
if(this.is_open(e.currentTarget)) {
|
466
|
+
this.close_node(e.currentTarget);
|
467
|
+
}
|
468
|
+
else {
|
469
|
+
var o = this.get_parent(e.currentTarget);
|
470
|
+
if(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }
|
471
|
+
}
|
472
|
+
},
|
473
|
+
'up': function (e) {
|
474
|
+
// up
|
475
|
+
e.preventDefault();
|
476
|
+
var o = this.get_prev_dom(e.currentTarget);
|
477
|
+
if(o && o.length) { o.children('.jstree-anchor').focus(); }
|
478
|
+
},
|
479
|
+
'right': function (e) {
|
480
|
+
// right
|
481
|
+
e.preventDefault();
|
482
|
+
if(this.is_closed(e.currentTarget)) {
|
483
|
+
this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });
|
484
|
+
}
|
485
|
+
else if (this.is_open(e.currentTarget)) {
|
486
|
+
var o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];
|
487
|
+
if(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }
|
488
|
+
}
|
489
|
+
},
|
490
|
+
'down': function (e) {
|
491
|
+
// down
|
492
|
+
e.preventDefault();
|
493
|
+
var o = this.get_next_dom(e.currentTarget);
|
494
|
+
if(o && o.length) { o.children('.jstree-anchor').focus(); }
|
495
|
+
},
|
496
|
+
'*': function (e) {
|
497
|
+
// aria defines * on numpad as open_all - not very common
|
498
|
+
this.open_all();
|
499
|
+
},
|
500
|
+
'home': function (e) {
|
501
|
+
// home
|
502
|
+
e.preventDefault();
|
503
|
+
var o = this._firstChild(this.get_container_ul()[0]);
|
504
|
+
if(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }
|
505
|
+
},
|
506
|
+
'end': function (e) {
|
507
|
+
// end
|
508
|
+
e.preventDefault();
|
509
|
+
this.element.find('.jstree-anchor').filter(':visible').last().focus();
|
510
|
+
},
|
511
|
+
'f2': function (e) {
|
512
|
+
// f2 - safe to include - if check_callback is false it will fail
|
513
|
+
e.preventDefault();
|
514
|
+
this.edit(e.currentTarget);
|
515
|
+
}
|
516
|
+
}
|
437
517
|
};
|
438
518
|
$.jstree.core.prototype = {
|
439
519
|
/**
|
@@ -548,7 +628,9 @@
|
|
548
628
|
this.teardown();
|
549
629
|
},
|
550
630
|
/**
|
551
|
-
* Create prototype node
|
631
|
+
* Create a prototype node
|
632
|
+
* @name _create_prototype_node()
|
633
|
+
* @return {DOMElement}
|
552
634
|
*/
|
553
635
|
_create_prototype_node : function () {
|
554
636
|
var _node = document.createElement('LI'), _temp1, _temp2;
|
@@ -570,6 +652,48 @@
|
|
570
652
|
|
571
653
|
return _node;
|
572
654
|
},
|
655
|
+
_kbevent_to_func : function (e) {
|
656
|
+
var keys = {
|
657
|
+
8: "Backspace", 9: "Tab", 13: "Enter", 19: "Pause", 27: "Esc",
|
658
|
+
32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home",
|
659
|
+
37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "Print", 45: "Insert",
|
660
|
+
46: "Delete", 96: "Numpad0", 97: "Numpad1", 98: "Numpad2", 99 : "Numpad3",
|
661
|
+
100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7",
|
662
|
+
104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1",
|
663
|
+
113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7",
|
664
|
+
119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock",
|
665
|
+
145: "Scrolllock", 16: 'Shift', 17: 'Ctrl', 18: 'Alt',
|
666
|
+
48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',
|
667
|
+
54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',
|
668
|
+
66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',
|
669
|
+
73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',
|
670
|
+
80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',
|
671
|
+
87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',
|
672
|
+
186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',
|
673
|
+
219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*', 173: '-'
|
674
|
+
};
|
675
|
+
var parts = [];
|
676
|
+
if (e.ctrlKey) { parts.push('ctrl'); }
|
677
|
+
if (e.altKey) { parts.push('alt'); }
|
678
|
+
if (e.shiftKey) { parts.push('shift'); }
|
679
|
+
parts.push(keys[e.which] || e.which);
|
680
|
+
parts = parts.sort().join('-').toLowerCase();
|
681
|
+
|
682
|
+
var kb = this.settings.core.keyboard, i, tmp;
|
683
|
+
for (i in kb) {
|
684
|
+
if (kb.hasOwnProperty(i)) {
|
685
|
+
tmp = i;
|
686
|
+
if (tmp !== '-' && tmp !== '+') {
|
687
|
+
tmp = tmp.replace('--', '-MINUS').replace('+-', '-MINUS').replace('++', '-PLUS').replace('-+', '-PLUS');
|
688
|
+
tmp = tmp.split(/-|\+/).sort().join('-').replace('MINUS', '-').replace('PLUS', '+').toLowerCase();
|
689
|
+
}
|
690
|
+
if (tmp === parts) {
|
691
|
+
return kb[i];
|
692
|
+
}
|
693
|
+
}
|
694
|
+
}
|
695
|
+
return null;
|
696
|
+
},
|
573
697
|
/**
|
574
698
|
* part of the destroying of an instance. Used internally.
|
575
699
|
* @private
|
@@ -635,83 +759,16 @@
|
|
635
759
|
}, this))
|
636
760
|
.on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {
|
637
761
|
if(e.target.tagName && e.target.tagName.toLowerCase() === "input") { return true; }
|
638
|
-
if(e.which !== 32 && e.which !== 13 && (e.shiftKey || e.ctrlKey || e.altKey || e.metaKey)) { return true; }
|
639
|
-
var o = null;
|
640
762
|
if(this._data.core.rtl) {
|
641
763
|
if(e.which === 37) { e.which = 39; }
|
642
764
|
else if(e.which === 39) { e.which = 37; }
|
643
765
|
}
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
break;
|
651
|
-
case 13: // enter
|
652
|
-
e.type = "click";
|
653
|
-
$(e.currentTarget).trigger(e);
|
654
|
-
break;
|
655
|
-
case 37: // left
|
656
|
-
e.preventDefault();
|
657
|
-
if(this.is_open(e.currentTarget)) {
|
658
|
-
this.close_node(e.currentTarget);
|
659
|
-
}
|
660
|
-
else {
|
661
|
-
o = this.get_parent(e.currentTarget);
|
662
|
-
if(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }
|
663
|
-
}
|
664
|
-
break;
|
665
|
-
case 38: // up
|
666
|
-
e.preventDefault();
|
667
|
-
o = this.get_prev_dom(e.currentTarget);
|
668
|
-
if(o && o.length) { o.children('.jstree-anchor').focus(); }
|
669
|
-
break;
|
670
|
-
case 39: // right
|
671
|
-
e.preventDefault();
|
672
|
-
if(this.is_closed(e.currentTarget)) {
|
673
|
-
this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });
|
674
|
-
}
|
675
|
-
else if (this.is_open(e.currentTarget)) {
|
676
|
-
o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];
|
677
|
-
if(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }
|
678
|
-
}
|
679
|
-
break;
|
680
|
-
case 40: // down
|
681
|
-
e.preventDefault();
|
682
|
-
o = this.get_next_dom(e.currentTarget);
|
683
|
-
if(o && o.length) { o.children('.jstree-anchor').focus(); }
|
684
|
-
break;
|
685
|
-
case 106: // aria defines * on numpad as open_all - not very common
|
686
|
-
this.open_all();
|
687
|
-
break;
|
688
|
-
case 36: // home
|
689
|
-
e.preventDefault();
|
690
|
-
o = this._firstChild(this.get_container_ul()[0]);
|
691
|
-
if(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }
|
692
|
-
break;
|
693
|
-
case 35: // end
|
694
|
-
e.preventDefault();
|
695
|
-
this.element.find('.jstree-anchor').filter(':visible').last().focus();
|
696
|
-
break;
|
697
|
-
case 113: // f2 - safe to include - if check_callback is false it will fail
|
698
|
-
e.preventDefault();
|
699
|
-
this.edit(e.currentTarget);
|
700
|
-
break;
|
701
|
-
default:
|
702
|
-
break;
|
703
|
-
/*!
|
704
|
-
// delete
|
705
|
-
case 46:
|
706
|
-
e.preventDefault();
|
707
|
-
o = this.get_node(e.currentTarget);
|
708
|
-
if(o && o.id && o.id !== $.jstree.root) {
|
709
|
-
o = this.is_selected(o) ? this.get_selected() : o;
|
710
|
-
this.delete_node(o);
|
711
|
-
}
|
712
|
-
break;
|
713
|
-
|
714
|
-
*/
|
766
|
+
var f = this._kbevent_to_func(e);
|
767
|
+
if (f) {
|
768
|
+
var r = f.call(this, e);
|
769
|
+
if (r === false || r === true) {
|
770
|
+
return r;
|
771
|
+
}
|
715
772
|
}
|
716
773
|
}, this))
|
717
774
|
.on("load_node.jstree", $.proxy(function (e, data) {
|
@@ -832,7 +889,7 @@
|
|
832
889
|
}, this))
|
833
890
|
.on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {
|
834
891
|
this._data.core.focused = null;
|
835
|
-
$(e.currentTarget).filter('.jstree-hovered').mouseleave
|
892
|
+
$(e.currentTarget).filter('.jstree-hovered').trigger('mouseleave');
|
836
893
|
this.element.attr('tabindex', '0');
|
837
894
|
}, this))
|
838
895
|
.on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {
|
@@ -840,12 +897,12 @@
|
|
840
897
|
if(tmp && tmp.id) {
|
841
898
|
this._data.core.focused = tmp.id;
|
842
899
|
}
|
843
|
-
this.element.find('.jstree-hovered').not(e.currentTarget).mouseleave
|
844
|
-
$(e.currentTarget).mouseenter
|
900
|
+
this.element.find('.jstree-hovered').not(e.currentTarget).trigger('mouseleave');
|
901
|
+
$(e.currentTarget).trigger('mouseenter');
|
845
902
|
this.element.attr('tabindex', '-1');
|
846
903
|
}, this))
|
847
904
|
.on('focus.jstree', $.proxy(function () {
|
848
|
-
if(+(new Date()) - was_click > 500 && !this._data.core.focused) {
|
905
|
+
if(+(new Date()) - was_click > 500 && !this._data.core.focused && this.settings.core.restore_focus) {
|
849
906
|
was_click = 0;
|
850
907
|
var act = this.get_node(this.element.attr('aria-activedescendant'), true);
|
851
908
|
if(act) {
|
@@ -966,6 +1023,9 @@
|
|
966
1023
|
if(obj && obj.id) {
|
967
1024
|
obj = obj.id;
|
968
1025
|
}
|
1026
|
+
if (obj instanceof $ && obj.length && obj[0].id) {
|
1027
|
+
obj = obj[0].id;
|
1028
|
+
}
|
969
1029
|
var dom;
|
970
1030
|
try {
|
971
1031
|
if(this._model.data[obj]) {
|
@@ -977,10 +1037,10 @@
|
|
977
1037
|
else if(typeof obj === "string" && (dom = $('#' + obj.replace($.jstree.idregex,'\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
|
978
1038
|
obj = this._model.data[dom.closest('.jstree-node').attr('id')];
|
979
1039
|
}
|
980
|
-
else if((dom =
|
1040
|
+
else if((dom = this.element.find(obj)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {
|
981
1041
|
obj = this._model.data[dom.closest('.jstree-node').attr('id')];
|
982
1042
|
}
|
983
|
-
else if((dom =
|
1043
|
+
else if((dom = this.element.find(obj)).length && dom.hasClass('jstree')) {
|
984
1044
|
obj = this._model.data[$.jstree.root];
|
985
1045
|
}
|
986
1046
|
else {
|
@@ -1114,7 +1174,7 @@
|
|
1114
1174
|
return obj.parent;
|
1115
1175
|
},
|
1116
1176
|
/**
|
1117
|
-
* get a jQuery collection of all the children of a node (node must be rendered)
|
1177
|
+
* get a jQuery collection of all the children of a node (node must be rendered), returns false on error
|
1118
1178
|
* @name get_children_dom(obj)
|
1119
1179
|
* @param {mixed} obj
|
1120
1180
|
* @return {jQuery}
|
@@ -1274,7 +1334,7 @@
|
|
1274
1334
|
return true;
|
1275
1335
|
},
|
1276
1336
|
/**
|
1277
|
-
* load an array of nodes (will also load unavailable nodes as soon as
|
1337
|
+
* load an array of nodes (will also load unavailable nodes as soon as they appear in the structure). Used internally.
|
1278
1338
|
* @private
|
1279
1339
|
* @name _load_nodes(nodes [, callback])
|
1280
1340
|
* @param {array} nodes
|
@@ -1453,7 +1513,7 @@
|
|
1453
1513
|
*/
|
1454
1514
|
_node_changed : function (obj) {
|
1455
1515
|
obj = this.get_node(obj);
|
1456
|
-
|
1516
|
+
if (obj && $.inArray(obj.id, this._model.changed) === -1) {
|
1457
1517
|
this._model.changed.push(obj.id);
|
1458
1518
|
}
|
1459
1519
|
},
|
@@ -1545,6 +1605,7 @@
|
|
1545
1605
|
't_cnt' : this._cnt,
|
1546
1606
|
'sel' : this._data.core.selected
|
1547
1607
|
},
|
1608
|
+
inst = this,
|
1548
1609
|
func = function (data, undefined) {
|
1549
1610
|
if(data.data) { data = data.data; }
|
1550
1611
|
var dat = data.dat,
|
@@ -1755,10 +1816,21 @@
|
|
1755
1816
|
if(!dat[i].children) {
|
1756
1817
|
dat[i].children = [];
|
1757
1818
|
}
|
1819
|
+
if(!dat[i].state) {
|
1820
|
+
dat[i].state = {};
|
1821
|
+
}
|
1758
1822
|
m[dat[i].id.toString()] = dat[i];
|
1759
1823
|
}
|
1760
1824
|
// 2) populate children (foreach)
|
1761
1825
|
for(i = 0, j = dat.length; i < j; i++) {
|
1826
|
+
if (!m[dat[i].parent.toString()]) {
|
1827
|
+
if (typeof inst !== "undefined") {
|
1828
|
+
inst._data.core.last_error = { 'error' : 'parse', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Node with invalid parent', 'data' : JSON.stringify({ 'id' : dat[i].id.toString(), 'parent' : dat[i].parent.toString() }) };
|
1829
|
+
inst.settings.core.error.call(inst, inst._data.core.last_error);
|
1830
|
+
}
|
1831
|
+
continue;
|
1832
|
+
}
|
1833
|
+
|
1762
1834
|
m[dat[i].parent.toString()].children.push(dat[i].id.toString());
|
1763
1835
|
// populate parent.children_d
|
1764
1836
|
p.children_d.push(dat[i].id.toString());
|
@@ -2222,7 +2294,7 @@
|
|
2222
2294
|
tmp.children_d = tmp.children_d.concat(e.children_d);
|
2223
2295
|
}
|
2224
2296
|
}
|
2225
|
-
tmp.children_d = tmp.
|
2297
|
+
tmp.children_d = tmp.children.concat(tmp.children_d);
|
2226
2298
|
}
|
2227
2299
|
if(d && d.children && d.children === true) {
|
2228
2300
|
tmp.state.loaded = false;
|
@@ -2259,7 +2331,7 @@
|
|
2259
2331
|
this.element.empty().append(f);
|
2260
2332
|
//this.get_container_ul()[0].appendChild(f);
|
2261
2333
|
}
|
2262
|
-
if(fe !== null) {
|
2334
|
+
if(fe !== null && this.settings.core.restore_focus) {
|
2263
2335
|
tmp = this.get_node(fe, true);
|
2264
2336
|
if(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {
|
2265
2337
|
tmp.children('.jstree-anchor').focus();
|
@@ -2435,6 +2507,9 @@
|
|
2435
2507
|
if(obj.state.hidden) {
|
2436
2508
|
c += ' jstree-hidden';
|
2437
2509
|
}
|
2510
|
+
if (obj.state.loading) {
|
2511
|
+
c += ' jstree-loading';
|
2512
|
+
}
|
2438
2513
|
if(obj.state.loaded && !has_children) {
|
2439
2514
|
c += ' jstree-leaf';
|
2440
2515
|
}
|
@@ -2539,7 +2614,7 @@
|
|
2539
2614
|
return node;
|
2540
2615
|
},
|
2541
2616
|
/**
|
2542
|
-
* opens a node,
|
2617
|
+
* opens a node, revealing its children. If the node is not loaded it will be loaded and opened once ready.
|
2543
2618
|
* @name open_node(obj [, callback, animation])
|
2544
2619
|
* @param {mixed} obj the node to open
|
2545
2620
|
* @param {Function} callback a function to execute once the node is opened
|
@@ -2743,7 +2818,7 @@
|
|
2743
2818
|
}
|
2744
2819
|
},
|
2745
2820
|
/**
|
2746
|
-
* opens all nodes within a node (or the tree),
|
2821
|
+
* opens all nodes within a node (or the tree), revealing their children. If the node is not loaded it will be loaded and opened once ready.
|
2747
2822
|
* @name open_all([obj, animation, original_obj])
|
2748
2823
|
* @param {mixed} obj the node to open recursively, omit to open all nodes in the tree
|
2749
2824
|
* @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation
|
@@ -2784,7 +2859,7 @@
|
|
2784
2859
|
}
|
2785
2860
|
},
|
2786
2861
|
/**
|
2787
|
-
* closes all nodes within a node (or the tree),
|
2862
|
+
* closes all nodes within a node (or the tree), revealing their children
|
2788
2863
|
* @name close_all([obj, animation])
|
2789
2864
|
* @param {mixed} obj the node to close recursively, omit to close all nodes in the tree
|
2790
2865
|
* @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation
|
@@ -3360,6 +3435,7 @@
|
|
3360
3435
|
var state = {
|
3361
3436
|
'core' : {
|
3362
3437
|
'open' : [],
|
3438
|
+
'loaded' : [],
|
3363
3439
|
'scroll' : {
|
3364
3440
|
'left' : this.element.scrollLeft(),
|
3365
3441
|
'top' : this.element.scrollTop()
|
@@ -3377,6 +3453,9 @@
|
|
3377
3453
|
for(i in this._model.data) {
|
3378
3454
|
if(this._model.data.hasOwnProperty(i)) {
|
3379
3455
|
if(i !== $.jstree.root) {
|
3456
|
+
if(this._model.data[i].state.loaded && this.settings.core.loaded_state) {
|
3457
|
+
state.core.loaded.push(i);
|
3458
|
+
}
|
3380
3459
|
if(this._model.data[i].state.opened) {
|
3381
3460
|
state.core.open.push(i);
|
3382
3461
|
}
|
@@ -3403,6 +3482,19 @@
|
|
3403
3482
|
}
|
3404
3483
|
if(state.core) {
|
3405
3484
|
var res, n, t, _this, i;
|
3485
|
+
if(state.core.loaded) {
|
3486
|
+
if(!this.settings.core.loaded_state || !$.isArray(state.core.loaded) || !state.core.loaded.length) {
|
3487
|
+
delete state.core.loaded;
|
3488
|
+
this.set_state(state, callback);
|
3489
|
+
}
|
3490
|
+
else {
|
3491
|
+
this._load_nodes(state.core.loaded, function (nodes) {
|
3492
|
+
delete state.core.loaded;
|
3493
|
+
this.set_state(state, callback);
|
3494
|
+
});
|
3495
|
+
}
|
3496
|
+
return false;
|
3497
|
+
}
|
3406
3498
|
if(state.core.open) {
|
3407
3499
|
if(!$.isArray(state.core.open) || !state.core.open.length) {
|
3408
3500
|
delete state.core.open;
|
@@ -3933,6 +4025,10 @@
|
|
3933
4025
|
var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,
|
3934
4026
|
chc = this.settings.core.check_callback;
|
3935
4027
|
if(chk === "move_node" || chk === "copy_node") {
|
4028
|
+
if((!more || !more.is_multi) && (chk === "move_node" && $.inArray(obj.id, par.children) === pos)) {
|
4029
|
+
this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_08', 'reason' : 'Moving node to its current position', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
|
4030
|
+
return false;
|
4031
|
+
}
|
3936
4032
|
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)) {
|
3937
4033
|
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 }) };
|
3938
4034
|
return false;
|
@@ -4405,7 +4501,7 @@
|
|
4405
4501
|
w2 = ai.width() * ai.length,
|
4406
4502
|
*/
|
4407
4503
|
t = default_text;
|
4408
|
-
h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo(
|
4504
|
+
h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo(document.body);
|
4409
4505
|
h2 = $("<"+"input />", {
|
4410
4506
|
"value" : t,
|
4411
4507
|
"class" : "jstree-rename-input",
|
@@ -4431,6 +4527,7 @@
|
|
4431
4527
|
s.replaceWith(a);
|
4432
4528
|
s.remove();
|
4433
4529
|
t = f ? t : $('<div></div>').append($.parseHTML(t)).html();
|
4530
|
+
obj = this.get_node(obj);
|
4434
4531
|
this.set_text(obj, t);
|
4435
4532
|
nv = !!this.rename_node(obj, f ? $('<div></div>').text(v).text() : $('<div></div>').append($.parseHTML(v)).html());
|
4436
4533
|
if(!nv) {
|
@@ -4705,6 +4802,7 @@
|
|
4705
4802
|
obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon;
|
4706
4803
|
dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon");
|
4707
4804
|
if(icon === false) {
|
4805
|
+
dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel");
|
4708
4806
|
this.hide_icon(obj);
|
4709
4807
|
}
|
4710
4808
|
else if(icon === true || icon === null || icon === undefined || icon === '') {
|
@@ -5077,14 +5175,15 @@
|
|
5077
5175
|
if(s.indexOf('down') !== -1) {
|
5078
5176
|
//this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));
|
5079
5177
|
var selectedIds = this._cascade_new_checked_state(obj.id, true);
|
5080
|
-
|
5081
|
-
|
5082
|
-
|
5083
|
-
|
5084
|
-
|
5085
|
-
|
5086
|
-
|
5087
|
-
|
5178
|
+
var temp = obj.children_d.concat(obj.id);
|
5179
|
+
for (i = 0, j = temp.length; i < j; i++) {
|
5180
|
+
if (selectedIds.indexOf(temp[i]) > -1) {
|
5181
|
+
sel[temp[i]] = true;
|
5182
|
+
}
|
5183
|
+
else {
|
5184
|
+
delete sel[temp[i]];
|
5185
|
+
}
|
5186
|
+
}
|
5088
5187
|
}
|
5089
5188
|
|
5090
5189
|
// apply up
|
@@ -5142,7 +5241,7 @@
|
|
5142
5241
|
if(s.indexOf('down') !== -1) {
|
5143
5242
|
var selectedIds = this._cascade_new_checked_state(obj.id, false);
|
5144
5243
|
|
5145
|
-
cur =
|
5244
|
+
cur = $.vakata.array_filter(cur, function(id) {
|
5146
5245
|
return allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1;
|
5147
5246
|
});
|
5148
5247
|
}
|
@@ -5162,7 +5261,7 @@
|
|
5162
5261
|
}
|
5163
5262
|
}
|
5164
5263
|
|
5165
|
-
cur =
|
5264
|
+
cur = $.vakata.array_filter(cur, function(id) {
|
5166
5265
|
return obj.parents.indexOf(id) === -1;
|
5167
5266
|
});
|
5168
5267
|
}
|
@@ -5258,16 +5357,18 @@
|
|
5258
5357
|
}, this));
|
5259
5358
|
}
|
5260
5359
|
};
|
5261
|
-
|
5262
5360
|
/**
|
5263
|
-
*
|
5264
|
-
* @
|
5265
|
-
* @
|
5361
|
+
* get an array of all nodes whose state is "undetermined"
|
5362
|
+
* @name get_undetermined([full])
|
5363
|
+
* @param {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned
|
5364
|
+
* @return {Array}
|
5266
5365
|
* @plugin checkbox
|
5267
5366
|
*/
|
5268
|
-
this.
|
5269
|
-
if(this.
|
5270
|
-
|
5367
|
+
this.get_undetermined = function (full) {
|
5368
|
+
if (this.settings.checkbox.cascade.indexOf('undetermined') === -1) {
|
5369
|
+
return [];
|
5370
|
+
}
|
5371
|
+
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, r = [];
|
5271
5372
|
for(i = 0, j = s.length; i < j; i++) {
|
5272
5373
|
if(m[s[i]] && m[s[i]].parents) {
|
5273
5374
|
for(k = 0, l = m[s[i]].parents.length; k < l; k++) {
|
@@ -5320,14 +5421,28 @@
|
|
5320
5421
|
}
|
5321
5422
|
}
|
5322
5423
|
});
|
5424
|
+
for (i = 0, j = p.length; i < j; i++) {
|
5425
|
+
if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {
|
5426
|
+
r.push(full ? m[p[i]] : p[i]);
|
5427
|
+
}
|
5428
|
+
}
|
5429
|
+
return r;
|
5430
|
+
};
|
5431
|
+
/**
|
5432
|
+
* set the undetermined state where and if necessary. Used internally.
|
5433
|
+
* @private
|
5434
|
+
* @name _undetermined()
|
5435
|
+
* @plugin checkbox
|
5436
|
+
*/
|
5437
|
+
this._undetermined = function () {
|
5438
|
+
if(this.element === null) { return; }
|
5439
|
+
var p = this.get_undetermined(false), i, j, s;
|
5323
5440
|
|
5324
5441
|
this.element.find('.jstree-undetermined').removeClass('jstree-undetermined');
|
5325
|
-
for(i = 0, j = p.length; i < j; i++) {
|
5326
|
-
|
5327
|
-
|
5328
|
-
|
5329
|
-
s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');
|
5330
|
-
}
|
5442
|
+
for (i = 0, j = p.length; i < j; i++) {
|
5443
|
+
s = this.get_node(p[i], true);
|
5444
|
+
if(s && s.length) {
|
5445
|
+
s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');
|
5331
5446
|
}
|
5332
5447
|
}
|
5333
5448
|
};
|
@@ -5432,7 +5547,7 @@
|
|
5432
5547
|
};
|
5433
5548
|
/**
|
5434
5549
|
* enable a node's checkbox
|
5435
|
-
* @name
|
5550
|
+
* @name enable_checkbox(obj)
|
5436
5551
|
* @param {mixed} obj an array can be used too
|
5437
5552
|
* @trigger enable_checkbox.jstree
|
5438
5553
|
* @plugin checkbox
|
@@ -5490,63 +5605,65 @@
|
|
5490
5605
|
};
|
5491
5606
|
|
5492
5607
|
/**
|
5493
|
-
*
|
5608
|
+
* Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants).
|
5494
5609
|
* However if these unaffected nodes are already selected their ids will be included in the returned array.
|
5495
|
-
* @
|
5496
|
-
* @param
|
5610
|
+
* @private
|
5611
|
+
* @param {string} id the node ID
|
5612
|
+
* @param {bool} checkedState should the nodes be checked or not
|
5497
5613
|
* @returns {Array} Array of all node id's (in this tree branch) that are checked.
|
5498
5614
|
*/
|
5499
|
-
this._cascade_new_checked_state = function(id, checkedState) {
|
5615
|
+
this._cascade_new_checked_state = function (id, checkedState) {
|
5500
5616
|
var self = this;
|
5501
5617
|
var t = this.settings.checkbox.tie_selection;
|
5502
5618
|
var node = this._model.data[id];
|
5503
5619
|
var selectedNodeIds = [];
|
5504
|
-
var selectedChildrenIds = [];
|
5620
|
+
var selectedChildrenIds = [], i, j, selectedChildIds;
|
5505
5621
|
|
5506
5622
|
if (
|
5507
5623
|
(this.settings.checkbox.cascade_to_disabled || !node.state.disabled) &&
|
5508
5624
|
(this.settings.checkbox.cascade_to_hidden || !node.state.hidden)
|
5509
5625
|
) {
|
5510
|
-
|
5511
|
-
|
5512
|
-
node.children.
|
5513
|
-
var
|
5626
|
+
//First try and check/uncheck the children
|
5627
|
+
if (node.children) {
|
5628
|
+
for (i = 0, j = node.children.length; i < j; i++) {
|
5629
|
+
var childId = node.children[i];
|
5630
|
+
selectedChildIds = self._cascade_new_checked_state(childId, checkedState);
|
5514
5631
|
selectedNodeIds = selectedNodeIds.concat(selectedChildIds);
|
5515
5632
|
if (selectedChildIds.indexOf(childId) > -1) {
|
5516
5633
|
selectedChildrenIds.push(childId);
|
5517
5634
|
}
|
5518
|
-
}
|
5635
|
+
}
|
5519
5636
|
}
|
5520
5637
|
|
5521
5638
|
var dom = self.get_node(node, true);
|
5522
5639
|
|
5523
|
-
|
5640
|
+
//A node's state is undetermined if some but not all of it's children are checked/selected .
|
5524
5641
|
var undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length;
|
5525
5642
|
|
5526
5643
|
if(node.original && node.original.state && node.original.state.undetermined) {
|
5527
5644
|
node.original.state.undetermined = undetermined;
|
5528
5645
|
}
|
5529
5646
|
|
5530
|
-
|
5647
|
+
//If a node is undetermined then remove selected class
|
5531
5648
|
if (undetermined) {
|
5532
|
-
|
5533
|
-
|
5649
|
+
node.state[ t ? 'selected' : 'checked' ] = false;
|
5650
|
+
dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
|
5534
5651
|
}
|
5535
|
-
|
5536
|
-
|
5652
|
+
//Otherwise, if the checkedState === true (i.e. the node is being checked now) and all of the node's children are checked (if it has any children),
|
5653
|
+
//check the node and style it correctly.
|
5537
5654
|
else if (checkedState && selectedChildrenIds.length === node.children.length) {
|
5538
|
-
|
5655
|
+
node.state[ t ? 'selected' : 'checked' ] = checkedState;
|
5539
5656
|
selectedNodeIds.push(node.id);
|
5540
5657
|
|
5541
5658
|
dom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
|
5542
5659
|
}
|
5543
5660
|
else {
|
5544
|
-
|
5661
|
+
node.state[ t ? 'selected' : 'checked' ] = false;
|
5545
5662
|
dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');
|
5546
5663
|
}
|
5547
5664
|
}
|
5548
5665
|
else {
|
5549
|
-
|
5666
|
+
selectedChildIds = this.get_checked_descendants(id);
|
5550
5667
|
|
5551
5668
|
if (node.state[ t ? 'selected' : 'checked' ]) {
|
5552
5669
|
selectedChildIds.push(node.id);
|
@@ -5560,14 +5677,17 @@
|
|
5560
5677
|
|
5561
5678
|
/**
|
5562
5679
|
* Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id)
|
5563
|
-
* @
|
5680
|
+
* @name get_checked_descendants(obj)
|
5681
|
+
* @param {string} id the node ID
|
5682
|
+
* @return {Array} array of IDs
|
5683
|
+
* @plugin checkbox
|
5564
5684
|
*/
|
5565
|
-
this.get_checked_descendants = function(id) {
|
5685
|
+
this.get_checked_descendants = function (id) {
|
5566
5686
|
var self = this;
|
5567
5687
|
var t = self.settings.checkbox.tie_selection;
|
5568
5688
|
var node = self._model.data[id];
|
5569
5689
|
|
5570
|
-
return node.children_d
|
5690
|
+
return $.vakata.array_filter(node.children_d, function(_id) {
|
5571
5691
|
return self._model.data[_id].state[ t ? 'selected' : 'checked' ];
|
5572
5692
|
});
|
5573
5693
|
};
|
@@ -5726,7 +5846,7 @@
|
|
5726
5846
|
*/
|
5727
5847
|
this.get_checked = function (full) {
|
5728
5848
|
if(this.settings.checkbox.tie_selection) { return this.get_selected(full); }
|
5729
|
-
return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected;
|
5849
|
+
return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected.slice();
|
5730
5850
|
};
|
5731
5851
|
/**
|
5732
5852
|
* get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected)
|
@@ -5813,7 +5933,7 @@
|
|
5813
5933
|
return res;
|
5814
5934
|
};
|
5815
5935
|
this.refresh = function (skip_loading, forget_state) {
|
5816
|
-
if(
|
5936
|
+
if(this.settings.checkbox.tie_selection) {
|
5817
5937
|
this._data.checkbox.selected = [];
|
5818
5938
|
}
|
5819
5939
|
return parent.refresh.apply(this, arguments);
|
@@ -5840,7 +5960,7 @@
|
|
5840
5960
|
// own function
|
5841
5961
|
this.activate_node = function (obj, e) {
|
5842
5962
|
if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) {
|
5843
|
-
parent.activate_node.call(this, obj, e);
|
5963
|
+
return parent.activate_node.call(this, obj, e);
|
5844
5964
|
}
|
5845
5965
|
};
|
5846
5966
|
};
|
@@ -6041,8 +6161,9 @@
|
|
6041
6161
|
}, 750);
|
6042
6162
|
})
|
6043
6163
|
.on('touchmove.vakata.jstree', function (e) {
|
6044
|
-
if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) >
|
6164
|
+
if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) {
|
6045
6165
|
clearTimeout(cto);
|
6166
|
+
$.vakata.context.hide();
|
6046
6167
|
}
|
6047
6168
|
})
|
6048
6169
|
.on('touchend.vakata.jstree', function (e) {
|
@@ -6314,7 +6435,7 @@
|
|
6314
6435
|
vakata_context.element.html(vakata_context.html);
|
6315
6436
|
}
|
6316
6437
|
if(vakata_context.items.length) {
|
6317
|
-
vakata_context.element.appendTo(
|
6438
|
+
vakata_context.element.appendTo(document.body);
|
6318
6439
|
e = vakata_context.element;
|
6319
6440
|
x = vakata_context.position_x;
|
6320
6441
|
y = vakata_context.position_y;
|
@@ -6370,7 +6491,7 @@
|
|
6370
6491
|
}
|
6371
6492
|
};
|
6372
6493
|
$(function () {
|
6373
|
-
right_to_left = $(
|
6494
|
+
right_to_left = $(document.body).css("direction") === "rtl";
|
6374
6495
|
var to = false;
|
6375
6496
|
|
6376
6497
|
vakata_context.element = $("<ul class='vakata-context'></ul>");
|
@@ -6658,11 +6779,23 @@
|
|
6658
6779
|
marker = $('<div id="jstree-marker"> </div>').hide(); //.appendTo('body');
|
6659
6780
|
|
6660
6781
|
$(document)
|
6782
|
+
.on('dragover.vakata.jstree', function (e) {
|
6783
|
+
if (elm) {
|
6784
|
+
$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6785
|
+
}
|
6786
|
+
})
|
6787
|
+
.on('drop.vakata.jstree', function (e) {
|
6788
|
+
if (elm) {
|
6789
|
+
$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6790
|
+
elm = null;
|
6791
|
+
drg = null;
|
6792
|
+
}
|
6793
|
+
})
|
6661
6794
|
.on('dnd_start.vakata.jstree', function (e, data) {
|
6662
6795
|
lastmv = false;
|
6663
6796
|
lastev = false;
|
6664
6797
|
if(!data || !data.data || !data.data.jstree) { return; }
|
6665
|
-
marker.appendTo(
|
6798
|
+
marker.appendTo(document.body); //.show();
|
6666
6799
|
})
|
6667
6800
|
.on('dnd_move.vakata.jstree', function (e, data) {
|
6668
6801
|
var isDifferentNode = data.event.target !== lastev.target;
|
@@ -6796,7 +6929,7 @@
|
|
6796
6929
|
lastmv = false;
|
6797
6930
|
data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');
|
6798
6931
|
if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
|
6799
|
-
data.event.originalEvent.dataTransfer.dropEffect = 'none';
|
6932
|
+
//data.event.originalEvent.dataTransfer.dropEffect = 'none';
|
6800
6933
|
}
|
6801
6934
|
marker.hide();
|
6802
6935
|
})
|
@@ -6889,7 +7022,7 @@
|
|
6889
7022
|
helper_left : 5,
|
6890
7023
|
helper_top : 10,
|
6891
7024
|
threshold : 5,
|
6892
|
-
threshold_touch :
|
7025
|
+
threshold_touch : 10
|
6893
7026
|
},
|
6894
7027
|
_trigger : function (event_name, e, data) {
|
6895
7028
|
if (data === undefined) {
|
@@ -7007,7 +7140,7 @@
|
|
7007
7140
|
Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)
|
7008
7141
|
) {
|
7009
7142
|
if(vakata_dnd.helper) {
|
7010
|
-
vakata_dnd.helper.appendTo(
|
7143
|
+
vakata_dnd.helper.appendTo(document.body);
|
7011
7144
|
vakata_dnd.helper_w = vakata_dnd.helper.outerWidth();
|
7012
7145
|
}
|
7013
7146
|
vakata_dnd.is_drag = true;
|
@@ -7754,7 +7887,13 @@
|
|
7754
7887
|
* @name $.jstree.defaults.state.filter
|
7755
7888
|
* @plugin state
|
7756
7889
|
*/
|
7757
|
-
filter : false
|
7890
|
+
filter : false,
|
7891
|
+
/**
|
7892
|
+
* Should loaded nodes be restored (setting this to true means that it is possible that the whole tree will be loaded for some users - use with caution). Defaults to `false`
|
7893
|
+
* @name $.jstree.defaults.state.preserve_loaded
|
7894
|
+
* @plugin state
|
7895
|
+
*/
|
7896
|
+
preserve_loaded : false
|
7758
7897
|
};
|
7759
7898
|
$.jstree.plugins.state = function (options, parent) {
|
7760
7899
|
this.bind = function () {
|
@@ -7784,7 +7923,11 @@
|
|
7784
7923
|
* @plugin state
|
7785
7924
|
*/
|
7786
7925
|
this.save_state = function () {
|
7787
|
-
var
|
7926
|
+
var tm = this.get_state();
|
7927
|
+
if (!this.settings.state.preserve_loaded) {
|
7928
|
+
delete tm.core.loaded;
|
7929
|
+
}
|
7930
|
+
var st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };
|
7788
7931
|
$.vakata.storage.set(this.settings.state.key, JSON.stringify(st));
|
7789
7932
|
};
|
7790
7933
|
/**
|
@@ -7799,6 +7942,9 @@
|
|
7799
7942
|
if(!!k && k.state) { k = k.state; }
|
7800
7943
|
if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }
|
7801
7944
|
if(!!k) {
|
7945
|
+
if (!this.settings.state.preserve_loaded) {
|
7946
|
+
delete k.core.loaded;
|
7947
|
+
}
|
7802
7948
|
this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });
|
7803
7949
|
this.set_state(k);
|
7804
7950
|
return true;
|
@@ -8202,6 +8348,12 @@
|
|
8202
8348
|
* @plugin unique
|
8203
8349
|
*/
|
8204
8350
|
case_sensitive : false,
|
8351
|
+
/**
|
8352
|
+
* Indicates if white space should be trimmed before the comparison. Default is `false`.
|
8353
|
+
* @name $.jstree.defaults.unique.trim_whitespace
|
8354
|
+
* @plugin unique
|
8355
|
+
*/
|
8356
|
+
trim_whitespace : false,
|
8205
8357
|
/**
|
8206
8358
|
* A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`.
|
8207
8359
|
* @name $.jstree.defaults.unique.duplicate
|
@@ -8221,16 +8373,32 @@
|
|
8221
8373
|
var n = chk === "rename_node" ? pos : obj.text,
|
8222
8374
|
c = [],
|
8223
8375
|
s = this.settings.unique.case_sensitive,
|
8224
|
-
|
8376
|
+
w = this.settings.unique.trim_whitespace,
|
8377
|
+
m = this._model.data, i, j, t;
|
8225
8378
|
for(i = 0, j = par.children.length; i < j; i++) {
|
8226
|
-
|
8379
|
+
t = m[par.children[i]].text;
|
8380
|
+
if (!s) {
|
8381
|
+
t = t.toLowerCase();
|
8382
|
+
}
|
8383
|
+
if (w) {
|
8384
|
+
t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
8385
|
+
}
|
8386
|
+
c.push(t);
|
8227
8387
|
}
|
8228
8388
|
if(!s) { n = n.toLowerCase(); }
|
8389
|
+
if (w) { n = n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); }
|
8229
8390
|
switch(chk) {
|
8230
8391
|
case "delete_node":
|
8231
8392
|
return true;
|
8232
8393
|
case "rename_node":
|
8233
|
-
|
8394
|
+
t = obj.text || '';
|
8395
|
+
if (!s) {
|
8396
|
+
t = t.toLowerCase();
|
8397
|
+
}
|
8398
|
+
if (w) {
|
8399
|
+
t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
8400
|
+
}
|
8401
|
+
i = ($.inArray(n, c) === -1 || (obj.text && t === n));
|
8234
8402
|
if(!i) {
|
8235
8403
|
this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
|
8236
8404
|
}
|
@@ -8270,15 +8438,36 @@
|
|
8270
8438
|
return parent.create_node.call(this, par, node, pos, callback, is_loaded);
|
8271
8439
|
}
|
8272
8440
|
if(!node) { node = {}; }
|
8273
|
-
var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, cb = this.settings.unique.duplicate;
|
8441
|
+
var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t;
|
8274
8442
|
n = tmp = this.get_string('New node');
|
8275
8443
|
dpc = [];
|
8276
8444
|
for(i = 0, j = par.children.length; i < j; i++) {
|
8277
|
-
|
8445
|
+
t = m[par.children[i]].text;
|
8446
|
+
if (!s) {
|
8447
|
+
t = t.toLowerCase();
|
8448
|
+
}
|
8449
|
+
if (w) {
|
8450
|
+
t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
8451
|
+
}
|
8452
|
+
dpc.push(t);
|
8278
8453
|
}
|
8279
8454
|
i = 1;
|
8280
|
-
|
8455
|
+
t = n;
|
8456
|
+
if (!s) {
|
8457
|
+
t = t.toLowerCase();
|
8458
|
+
}
|
8459
|
+
if (w) {
|
8460
|
+
t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
8461
|
+
}
|
8462
|
+
while($.inArray(t, dpc) !== -1) {
|
8281
8463
|
n = cb.call(this, tmp, (++i)).toString();
|
8464
|
+
t = n;
|
8465
|
+
if (!s) {
|
8466
|
+
t = t.toLowerCase();
|
8467
|
+
}
|
8468
|
+
if (w) {
|
8469
|
+
t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
8470
|
+
}
|
8282
8471
|
}
|
8283
8472
|
node.text = n;
|
8284
8473
|
}
|
@@ -8395,7 +8584,7 @@
|
|
8395
8584
|
};
|
8396
8585
|
// include the wholerow plugin by default
|
8397
8586
|
// $.jstree.defaults.plugins.push("wholerow");
|
8398
|
-
if(
|
8587
|
+
if(window.customElements && Object && Object.create) {
|
8399
8588
|
var proto = Object.create(HTMLElement.prototype);
|
8400
8589
|
proto.createdCallback = function () {
|
8401
8590
|
var c = { core : {}, plugins : [] }, i;
|
@@ -8416,8 +8605,8 @@
|
|
8416
8605
|
};
|
8417
8606
|
// proto.attributeChangedCallback = function (name, previous, value) { };
|
8418
8607
|
try {
|
8419
|
-
|
8420
|
-
} catch(ignore) { }
|
8608
|
+
window.customElements.define("vakata-jstree", function() {}, { prototype: proto });
|
8609
|
+
} catch (ignore) { }
|
8421
8610
|
}
|
8422
8611
|
|
8423
8612
|
}));
|