billy_cms 0.0.15 → 0.0.17
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/app/assets/javascripts/billy_cms/backend/controllers/attributes.controller.js +4 -4
- data/app/assets/javascripts/billy_cms/backend/controllers/page_types.controller.js +23 -1
- data/app/assets/javascripts/billy_cms/backend/factories/page_type.js +1 -0
- data/app/assets/javascripts/billy_cms/backend/jstree.js +735 -207
- data/app/assets/javascripts/billy_cms/frontend/editing.es6 +8 -3
- data/app/assets/stylesheets/billy_cms/backend/index.scss +4 -0
- data/app/assets/stylesheets/billy_cms/editmode.scss +6 -7
- data/app/controllers/api/page_types_controller.rb +21 -0
- data/app/controllers/api/pages_controller.rb +5 -4
- data/app/models/billy_cms/page.rb +1 -1
- data/app/views/billy_cms/backend/_page_types.html.erb +72 -48
- data/lib/billy_cms/version.rb +1 -1
- metadata +2 -2
@@ -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) {
|
@@ -35,32 +36,14 @@
|
|
35
36
|
* ### jsTree core functionality
|
36
37
|
*/
|
37
38
|
|
38
|
-
|
39
|
+
// internal variables
|
39
40
|
var instance_counter = 0,
|
40
41
|
ccp_node = false,
|
41
42
|
ccp_mode = false,
|
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
|
@@ -519,12 +510,13 @@
|
|
519
510
|
this._data.core.original_container_html
|
520
511
|
.find("li").addBack()
|
521
512
|
.contents().filter(function() {
|
522
|
-
|
523
|
-
|
513
|
+
return this.nodeType === 3 && (!this.nodeValue || /^\s+$/.test(this.nodeValue));
|
514
|
+
})
|
524
515
|
.remove();
|
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
|
}
|
@@ -1715,9 +1747,13 @@
|
|
1715
1747
|
}
|
1716
1748
|
// 2) populate children (foreach)
|
1717
1749
|
for(i = 0, j = dat.length; i < j; i++) {
|
1718
|
-
|
1719
|
-
|
1720
|
-
|
1750
|
+
try {
|
1751
|
+
m[dat[i].parent.toString()].children.push(dat[i].id.toString());
|
1752
|
+
// populate parent.children_d
|
1753
|
+
p.children_d.push(dat[i].id.toString());
|
1754
|
+
} catch(e) {
|
1755
|
+
debugger;
|
1756
|
+
}
|
1721
1757
|
}
|
1722
1758
|
// 3) normalize && populate parents and children_d with recursion
|
1723
1759
|
for(i = 0, j = p.children.length; i < j; i++) {
|
@@ -1775,10 +1811,17 @@
|
|
1775
1811
|
rslt = function (rslt, worker) {
|
1776
1812
|
if(this.element === null) { return; }
|
1777
1813
|
this._cnt = rslt.cnt;
|
1814
|
+
var i, m = this._model.data;
|
1815
|
+
for (i in m) {
|
1816
|
+
if (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) {
|
1817
|
+
rslt.mod[i].state.loading = true;
|
1818
|
+
}
|
1819
|
+
}
|
1778
1820
|
this._model.data = rslt.mod; // breaks the reference in load_node - careful
|
1779
1821
|
|
1780
1822
|
if(worker) {
|
1781
|
-
var
|
1823
|
+
var j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice();
|
1824
|
+
m = this._model.data;
|
1782
1825
|
// if selection was changed while calculating in worker
|
1783
1826
|
if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {
|
1784
1827
|
// deselect nodes that are no longer selected
|
@@ -2334,7 +2377,7 @@
|
|
2334
2377
|
//node = d.createElement('LI');
|
2335
2378
|
//node = node[0];
|
2336
2379
|
}
|
2337
|
-
node =
|
2380
|
+
node = this._data.core.node.cloneNode(true);
|
2338
2381
|
// node is DOM, deep is boolean
|
2339
2382
|
|
2340
2383
|
c = 'jstree-node ';
|
@@ -2419,7 +2462,7 @@
|
|
2419
2462
|
node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';
|
2420
2463
|
}
|
2421
2464
|
else {
|
2422
|
-
node.childNodes[1].childNodes[0].style.backgroundImage = 'url('+obj.icon+')';
|
2465
|
+
node.childNodes[1].childNodes[0].style.backgroundImage = 'url("'+obj.icon+'")';
|
2423
2466
|
node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';
|
2424
2467
|
node.childNodes[1].childNodes[0].style.backgroundSize = 'auto';
|
2425
2468
|
node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';
|
@@ -2549,7 +2592,9 @@
|
|
2549
2592
|
.children(".jstree-children").stop(true, true)
|
2550
2593
|
.slideDown(animation, function () {
|
2551
2594
|
this.style.display = "";
|
2552
|
-
t.
|
2595
|
+
if (t.element) {
|
2596
|
+
t.trigger("after_open", { "node" : obj });
|
2597
|
+
}
|
2553
2598
|
});
|
2554
2599
|
}
|
2555
2600
|
}
|
@@ -2630,22 +2675,7 @@
|
|
2630
2675
|
animation = animation === undefined ? this.settings.core.animation : animation;
|
2631
2676
|
t = this;
|
2632
2677
|
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
|
-
}
|
2678
|
+
|
2649
2679
|
obj.state.opened = false;
|
2650
2680
|
/**
|
2651
2681
|
* triggered when a node is closed (if there is an animation it will not be complete yet)
|
@@ -2654,7 +2684,7 @@
|
|
2654
2684
|
* @param {Object} node the closed node
|
2655
2685
|
*/
|
2656
2686
|
this.trigger('close_node',{ "node" : obj });
|
2657
|
-
if(!
|
2687
|
+
if(!d.length) {
|
2658
2688
|
/**
|
2659
2689
|
* triggered when a node is closed and the animation is complete
|
2660
2690
|
* @event
|
@@ -2663,6 +2693,25 @@
|
|
2663
2693
|
*/
|
2664
2694
|
this.trigger("after_close", { "node" : obj });
|
2665
2695
|
}
|
2696
|
+
else {
|
2697
|
+
if(!animation) {
|
2698
|
+
d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
|
2699
|
+
d.attr("aria-expanded", false).children('.jstree-children').remove();
|
2700
|
+
this.trigger("after_close", { "node" : obj });
|
2701
|
+
}
|
2702
|
+
else {
|
2703
|
+
d
|
2704
|
+
.children(".jstree-children").attr("style","display:block !important").end()
|
2705
|
+
.removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
|
2706
|
+
.children(".jstree-children").stop(true, true).slideUp(animation, function () {
|
2707
|
+
this.style.display = "";
|
2708
|
+
d.children('.jstree-children').remove();
|
2709
|
+
if (t.element) {
|
2710
|
+
t.trigger("after_close", { "node" : obj });
|
2711
|
+
}
|
2712
|
+
});
|
2713
|
+
}
|
2714
|
+
}
|
2666
2715
|
},
|
2667
2716
|
/**
|
2668
2717
|
* toggles a node - closing it if it is open, opening it if it is closed
|
@@ -2822,11 +2871,20 @@
|
|
2822
2871
|
*/
|
2823
2872
|
this.trigger('disable_node', { 'node' : obj });
|
2824
2873
|
},
|
2874
|
+
/**
|
2875
|
+
* determines if a node is hidden
|
2876
|
+
* @name is_hidden(obj)
|
2877
|
+
* @param {mixed} obj the node
|
2878
|
+
*/
|
2879
|
+
is_hidden : function (obj) {
|
2880
|
+
obj = this.get_node(obj);
|
2881
|
+
return obj.state.hidden === true;
|
2882
|
+
},
|
2825
2883
|
/**
|
2826
2884
|
* hides a node - it is still in the structure but will not be visible
|
2827
2885
|
* @name hide_node(obj)
|
2828
2886
|
* @param {mixed} obj the node to hide
|
2829
|
-
* @param {Boolean}
|
2887
|
+
* @param {Boolean} skip_redraw internal parameter controlling if redraw is called
|
2830
2888
|
* @trigger hide_node.jstree
|
2831
2889
|
*/
|
2832
2890
|
hide_node : function (obj, skip_redraw) {
|
@@ -2836,7 +2894,9 @@
|
|
2836
2894
|
for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
|
2837
2895
|
this.hide_node(obj[t1], true);
|
2838
2896
|
}
|
2839
|
-
|
2897
|
+
if (!skip_redraw) {
|
2898
|
+
this.redraw();
|
2899
|
+
}
|
2840
2900
|
return true;
|
2841
2901
|
}
|
2842
2902
|
obj = this.get_node(obj);
|
@@ -2872,7 +2932,9 @@
|
|
2872
2932
|
for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
|
2873
2933
|
this.show_node(obj[t1], true);
|
2874
2934
|
}
|
2875
|
-
|
2935
|
+
if (!skip_redraw) {
|
2936
|
+
this.redraw();
|
2937
|
+
}
|
2876
2938
|
return true;
|
2877
2939
|
}
|
2878
2940
|
obj = this.get_node(obj);
|
@@ -2993,7 +3055,9 @@
|
|
2993
3055
|
c = !c;
|
2994
3056
|
}
|
2995
3057
|
if(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {
|
2996
|
-
this.
|
3058
|
+
if (!this.is_hidden(p[i])) {
|
3059
|
+
this.select_node(p[i], true, false, e);
|
3060
|
+
}
|
2997
3061
|
}
|
2998
3062
|
else {
|
2999
3063
|
this.deselect_node(p[i], true, e);
|
@@ -3338,7 +3402,7 @@
|
|
3338
3402
|
this.open_node(nodes, false, 0);
|
3339
3403
|
delete state.core.open;
|
3340
3404
|
this.set_state(state, callback);
|
3341
|
-
}
|
3405
|
+
});
|
3342
3406
|
}
|
3343
3407
|
return false;
|
3344
3408
|
}
|
@@ -3448,10 +3512,10 @@
|
|
3448
3512
|
var opened = [], to_load = [], s = this._data.core.selected.concat([]);
|
3449
3513
|
to_load.push(obj.id);
|
3450
3514
|
if(obj.state.opened === true) { opened.push(obj.id); }
|
3451
|
-
this.get_node(obj, true).find('.jstree-open').each(function() { opened.push(this.id); });
|
3515
|
+
this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });
|
3452
3516
|
this._load_nodes(to_load, $.proxy(function (nodes) {
|
3453
3517
|
this.open_node(opened, false, 0);
|
3454
|
-
this.select_node(
|
3518
|
+
this.select_node(s);
|
3455
3519
|
/**
|
3456
3520
|
* triggered when a node is refreshed
|
3457
3521
|
* @event
|
@@ -3460,7 +3524,7 @@
|
|
3460
3524
|
* @param {Array} nodes - an array of the IDs of the nodes that were reloaded
|
3461
3525
|
*/
|
3462
3526
|
this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });
|
3463
|
-
}, this));
|
3527
|
+
}, this), false, true);
|
3464
3528
|
},
|
3465
3529
|
/**
|
3466
3530
|
* set (change) the ID of a node
|
@@ -3468,11 +3532,12 @@
|
|
3468
3532
|
* @param {mixed} obj the node
|
3469
3533
|
* @param {String} id the new ID
|
3470
3534
|
* @return {Boolean}
|
3535
|
+
* @trigger set_id.jstree
|
3471
3536
|
*/
|
3472
3537
|
set_id : function (obj, id) {
|
3473
3538
|
obj = this.get_node(obj);
|
3474
3539
|
if(!obj || obj.id === $.jstree.root) { return false; }
|
3475
|
-
var i, j, m = this._model.data;
|
3540
|
+
var i, j, m = this._model.data, old = obj.id;
|
3476
3541
|
id = id.toString();
|
3477
3542
|
// update parents (replace current ID with new one in children and children_d)
|
3478
3543
|
m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;
|
@@ -3491,7 +3556,7 @@
|
|
3491
3556
|
// update model and obj itself (obj.id, this._model.data[KEY])
|
3492
3557
|
i = this.get_node(obj.id, true);
|
3493
3558
|
if(i) {
|
3494
|
-
i.attr('id', id)
|
3559
|
+
i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor');
|
3495
3560
|
if(this.element.attr('aria-activedescendant') === obj.id) {
|
3496
3561
|
this.element.attr('aria-activedescendant', id);
|
3497
3562
|
}
|
@@ -3500,6 +3565,14 @@
|
|
3500
3565
|
obj.id = id;
|
3501
3566
|
obj.li_attr.id = id;
|
3502
3567
|
m[id] = obj;
|
3568
|
+
/**
|
3569
|
+
* triggered when a node id value is changed
|
3570
|
+
* @event
|
3571
|
+
* @name set_id.jstree
|
3572
|
+
* @param {Object} node
|
3573
|
+
* @param {String} old the old id
|
3574
|
+
*/
|
3575
|
+
this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old });
|
3503
3576
|
return true;
|
3504
3577
|
},
|
3505
3578
|
/**
|
@@ -3555,6 +3628,8 @@
|
|
3555
3628
|
* @param {Boolean} options.no_id do not return ID
|
3556
3629
|
* @param {Boolean} options.no_children do not include children
|
3557
3630
|
* @param {Boolean} options.no_data do not include node data
|
3631
|
+
* @param {Boolean} options.no_li_attr do not include LI attributes
|
3632
|
+
* @param {Boolean} options.no_a_attr do not include A attributes
|
3558
3633
|
* @param {Boolean} options.flat return flat JSON instead of nested
|
3559
3634
|
* @return {Object}
|
3560
3635
|
*/
|
@@ -3584,6 +3659,14 @@
|
|
3584
3659
|
tmp.state[i] = obj.state[i];
|
3585
3660
|
}
|
3586
3661
|
}
|
3662
|
+
} else {
|
3663
|
+
delete tmp.state;
|
3664
|
+
}
|
3665
|
+
if(options && options.no_li_attr) {
|
3666
|
+
delete tmp.li_attr;
|
3667
|
+
}
|
3668
|
+
if(options && options.no_a_attr) {
|
3669
|
+
delete tmp.a_attr;
|
3587
3670
|
}
|
3588
3671
|
if(options && options.no_id) {
|
3589
3672
|
delete tmp.id;
|
@@ -3611,7 +3694,7 @@
|
|
3611
3694
|
},
|
3612
3695
|
/**
|
3613
3696
|
* create a new node (do not confuse with load_node)
|
3614
|
-
* @name create_node([
|
3697
|
+
* @name create_node([par, node, pos, callback, is_loaded])
|
3615
3698
|
* @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`)
|
3616
3699
|
* @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name)
|
3617
3700
|
* @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last"
|
@@ -3765,21 +3848,22 @@
|
|
3765
3848
|
}
|
3766
3849
|
tmp = obj.children_d.concat([]);
|
3767
3850
|
tmp.push(obj.id);
|
3851
|
+
for(i = 0, j = obj.parents.length; i < j; i++) {
|
3852
|
+
this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {
|
3853
|
+
return $.inArray(v, tmp) === -1;
|
3854
|
+
});
|
3855
|
+
}
|
3768
3856
|
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
3857
|
if(this._model.data[tmp[k]].state.selected) {
|
3776
3858
|
c = true;
|
3777
|
-
|
3778
|
-
if(pos !== -1) {
|
3779
|
-
this._data.core.selected = $.vakata.array_remove(this._data.core.selected, pos);
|
3780
|
-
}
|
3859
|
+
break;
|
3781
3860
|
}
|
3782
3861
|
}
|
3862
|
+
if (c) {
|
3863
|
+
this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {
|
3864
|
+
return $.inArray(v, tmp) === -1;
|
3865
|
+
});
|
3866
|
+
}
|
3783
3867
|
/**
|
3784
3868
|
* triggered when a node is deleted
|
3785
3869
|
* @event
|
@@ -3799,7 +3883,9 @@
|
|
3799
3883
|
top = this.element[0].scrollTop;
|
3800
3884
|
lft = this.element[0].scrollLeft;
|
3801
3885
|
if(par.id === $.jstree.root) {
|
3802
|
-
|
3886
|
+
if (this._model.data[$.jstree.root].children[0]) {
|
3887
|
+
this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();
|
3888
|
+
}
|
3803
3889
|
}
|
3804
3890
|
else {
|
3805
3891
|
this.get_node(par, true).children('.jstree-anchor').focus();
|
@@ -3827,7 +3913,7 @@
|
|
3827
3913
|
var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,
|
3828
3914
|
chc = this.settings.core.check_callback;
|
3829
3915
|
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)) {
|
3916
|
+
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
3917
|
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
3918
|
return false;
|
3833
3919
|
}
|
@@ -4342,6 +4428,7 @@
|
|
4342
4428
|
if(callback) {
|
4343
4429
|
callback.call(this, tmp, nv, cancel);
|
4344
4430
|
}
|
4431
|
+
h2 = null;
|
4345
4432
|
}, this),
|
4346
4433
|
"keydown" : function (e) {
|
4347
4434
|
var key = e.which;
|
@@ -4380,6 +4467,11 @@
|
|
4380
4467
|
a.replaceWith(s);
|
4381
4468
|
h1.css(fn);
|
4382
4469
|
h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
|
4470
|
+
$(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {
|
4471
|
+
if (h2 && e.target !== h2) {
|
4472
|
+
$(h2).blur();
|
4473
|
+
}
|
4474
|
+
});
|
4383
4475
|
},
|
4384
4476
|
|
4385
4477
|
|
@@ -4445,12 +4537,30 @@
|
|
4445
4537
|
* shows a striped background on the container (if the theme supports it)
|
4446
4538
|
* @name show_stripes()
|
4447
4539
|
*/
|
4448
|
-
show_stripes : function () {
|
4540
|
+
show_stripes : function () {
|
4541
|
+
this._data.core.themes.stripes = true;
|
4542
|
+
this.get_container_ul().addClass("jstree-striped");
|
4543
|
+
/**
|
4544
|
+
* triggered when stripes are shown
|
4545
|
+
* @event
|
4546
|
+
* @name show_stripes.jstree
|
4547
|
+
*/
|
4548
|
+
this.trigger('show_stripes');
|
4549
|
+
},
|
4449
4550
|
/**
|
4450
4551
|
* hides the striped background on the container
|
4451
4552
|
* @name hide_stripes()
|
4452
4553
|
*/
|
4453
|
-
hide_stripes : function () {
|
4554
|
+
hide_stripes : function () {
|
4555
|
+
this._data.core.themes.stripes = false;
|
4556
|
+
this.get_container_ul().removeClass("jstree-striped");
|
4557
|
+
/**
|
4558
|
+
* triggered when stripes are hidden
|
4559
|
+
* @event
|
4560
|
+
* @name hide_stripes.jstree
|
4561
|
+
*/
|
4562
|
+
this.trigger('hide_stripes');
|
4563
|
+
},
|
4454
4564
|
/**
|
4455
4565
|
* toggles the striped background on the container
|
4456
4566
|
* @name toggle_stripes()
|
@@ -4460,12 +4570,30 @@
|
|
4460
4570
|
* shows the connecting dots (if the theme supports it)
|
4461
4571
|
* @name show_dots()
|
4462
4572
|
*/
|
4463
|
-
show_dots : function () {
|
4573
|
+
show_dots : function () {
|
4574
|
+
this._data.core.themes.dots = true;
|
4575
|
+
this.get_container_ul().removeClass("jstree-no-dots");
|
4576
|
+
/**
|
4577
|
+
* triggered when dots are shown
|
4578
|
+
* @event
|
4579
|
+
* @name show_dots.jstree
|
4580
|
+
*/
|
4581
|
+
this.trigger('show_dots');
|
4582
|
+
},
|
4464
4583
|
/**
|
4465
4584
|
* hides the connecting dots
|
4466
4585
|
* @name hide_dots()
|
4467
4586
|
*/
|
4468
|
-
hide_dots : function () {
|
4587
|
+
hide_dots : function () {
|
4588
|
+
this._data.core.themes.dots = false;
|
4589
|
+
this.get_container_ul().addClass("jstree-no-dots");
|
4590
|
+
/**
|
4591
|
+
* triggered when dots are hidden
|
4592
|
+
* @event
|
4593
|
+
* @name hide_dots.jstree
|
4594
|
+
*/
|
4595
|
+
this.trigger('hide_dots');
|
4596
|
+
},
|
4469
4597
|
/**
|
4470
4598
|
* toggles the connecting dots
|
4471
4599
|
* @name toggle_dots()
|
@@ -4475,17 +4603,68 @@
|
|
4475
4603
|
* show the node icons
|
4476
4604
|
* @name show_icons()
|
4477
4605
|
*/
|
4478
|
-
show_icons : function () {
|
4606
|
+
show_icons : function () {
|
4607
|
+
this._data.core.themes.icons = true;
|
4608
|
+
this.get_container_ul().removeClass("jstree-no-icons");
|
4609
|
+
/**
|
4610
|
+
* triggered when icons are shown
|
4611
|
+
* @event
|
4612
|
+
* @name show_icons.jstree
|
4613
|
+
*/
|
4614
|
+
this.trigger('show_icons');
|
4615
|
+
},
|
4479
4616
|
/**
|
4480
4617
|
* hide the node icons
|
4481
4618
|
* @name hide_icons()
|
4482
4619
|
*/
|
4483
|
-
hide_icons : function () {
|
4620
|
+
hide_icons : function () {
|
4621
|
+
this._data.core.themes.icons = false;
|
4622
|
+
this.get_container_ul().addClass("jstree-no-icons");
|
4623
|
+
/**
|
4624
|
+
* triggered when icons are hidden
|
4625
|
+
* @event
|
4626
|
+
* @name hide_icons.jstree
|
4627
|
+
*/
|
4628
|
+
this.trigger('hide_icons');
|
4629
|
+
},
|
4484
4630
|
/**
|
4485
4631
|
* toggle the node icons
|
4486
4632
|
* @name toggle_icons()
|
4487
4633
|
*/
|
4488
4634
|
toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },
|
4635
|
+
/**
|
4636
|
+
* show the node ellipsis
|
4637
|
+
* @name show_icons()
|
4638
|
+
*/
|
4639
|
+
show_ellipsis : function () {
|
4640
|
+
this._data.core.themes.ellipsis = true;
|
4641
|
+
this.get_container_ul().addClass("jstree-ellipsis");
|
4642
|
+
/**
|
4643
|
+
* triggered when ellisis is shown
|
4644
|
+
* @event
|
4645
|
+
* @name show_ellipsis.jstree
|
4646
|
+
*/
|
4647
|
+
this.trigger('show_ellipsis');
|
4648
|
+
},
|
4649
|
+
/**
|
4650
|
+
* hide the node ellipsis
|
4651
|
+
* @name hide_ellipsis()
|
4652
|
+
*/
|
4653
|
+
hide_ellipsis : function () {
|
4654
|
+
this._data.core.themes.ellipsis = false;
|
4655
|
+
this.get_container_ul().removeClass("jstree-ellipsis");
|
4656
|
+
/**
|
4657
|
+
* triggered when ellisis is hidden
|
4658
|
+
* @event
|
4659
|
+
* @name hide_ellipsis.jstree
|
4660
|
+
*/
|
4661
|
+
this.trigger('hide_ellipsis');
|
4662
|
+
},
|
4663
|
+
/**
|
4664
|
+
* toggle the node ellipsis
|
4665
|
+
* @name toggle_icons()
|
4666
|
+
*/
|
4667
|
+
toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } },
|
4489
4668
|
/**
|
4490
4669
|
* set the node icon for a node
|
4491
4670
|
* @name set_icon(obj, icon)
|
@@ -4607,17 +4786,31 @@
|
|
4607
4786
|
return a;
|
4608
4787
|
};
|
4609
4788
|
// 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);
|
4789
|
+
$.vakata.array_remove = function(array, from) {
|
4790
|
+
array.splice(from, 1);
|
4614
4791
|
return array;
|
4792
|
+
//var rest = array.slice((to || from) + 1 || array.length);
|
4793
|
+
//array.length = from < 0 ? array.length + from : from;
|
4794
|
+
//array.push.apply(array, rest);
|
4795
|
+
//return array;
|
4615
4796
|
};
|
4616
4797
|
// remove item from array
|
4617
4798
|
$.vakata.array_remove_item = function(array, item) {
|
4618
4799
|
var tmp = $.inArray(item, array);
|
4619
4800
|
return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;
|
4620
4801
|
};
|
4802
|
+
$.vakata.array_filter = function(c,a,b,d,e) {
|
4803
|
+
if (c.filter) {
|
4804
|
+
return c.filter(a, b);
|
4805
|
+
}
|
4806
|
+
d=[];
|
4807
|
+
for (e in c) {
|
4808
|
+
if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {
|
4809
|
+
d.push(c[e]);
|
4810
|
+
}
|
4811
|
+
}
|
4812
|
+
return d;
|
4813
|
+
};
|
4621
4814
|
|
4622
4815
|
|
4623
4816
|
/**
|
@@ -4839,12 +5032,17 @@
|
|
4839
5032
|
m = this._model.data,
|
4840
5033
|
par = this.get_node(obj.parent),
|
4841
5034
|
dom = this.get_node(obj, true),
|
4842
|
-
i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection
|
5035
|
+
i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
|
5036
|
+
sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected;
|
4843
5037
|
|
5038
|
+
for (i = 0, j = cur.length; i < j; i++) {
|
5039
|
+
sel[cur[i]] = true;
|
5040
|
+
}
|
4844
5041
|
// apply down
|
4845
5042
|
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));
|
5043
|
+
//this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));
|
4847
5044
|
for(i = 0, j = obj.children_d.length; i < j; i++) {
|
5045
|
+
sel[obj.children_d[i]] = true;
|
4848
5046
|
tmp = m[obj.children_d[i]];
|
4849
5047
|
tmp.state[ t ? 'selected' : 'checked' ] = true;
|
4850
5048
|
if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {
|
@@ -4862,7 +5060,8 @@
|
|
4862
5060
|
}
|
4863
5061
|
if(c === j) {
|
4864
5062
|
par.state[ t ? 'selected' : 'checked' ] = true;
|
4865
|
-
|
5063
|
+
sel[par.id] = true;
|
5064
|
+
//this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);
|
4866
5065
|
tmp = this.get_node(par, true);
|
4867
5066
|
if(tmp && tmp.length) {
|
4868
5067
|
tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');
|
@@ -4875,6 +5074,14 @@
|
|
4875
5074
|
}
|
4876
5075
|
}
|
4877
5076
|
|
5077
|
+
cur = [];
|
5078
|
+
for (i in sel) {
|
5079
|
+
if (sel.hasOwnProperty(i)) {
|
5080
|
+
cur.push(i);
|
5081
|
+
}
|
5082
|
+
}
|
5083
|
+
this._data[ t ? 'core' : 'checkbox' ].selected = cur;
|
5084
|
+
|
4878
5085
|
// apply down (process .children separately?)
|
4879
5086
|
if(s.indexOf('down') !== -1 && dom.length) {
|
4880
5087
|
dom.find('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked').parent().attr('aria-selected', true);
|
@@ -4894,7 +5101,8 @@
|
|
4894
5101
|
.on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {
|
4895
5102
|
var obj = data.node,
|
4896
5103
|
dom = this.get_node(obj, true),
|
4897
|
-
i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection
|
5104
|
+
i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,
|
5105
|
+
cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {};
|
4898
5106
|
if(obj && obj.original && obj.original.state && obj.original.state.undetermined) {
|
4899
5107
|
obj.original.state.undetermined = false;
|
4900
5108
|
}
|
@@ -4924,17 +5132,23 @@
|
|
4924
5132
|
}
|
4925
5133
|
}
|
4926
5134
|
}
|
4927
|
-
|
4928
|
-
for(i = 0, j =
|
5135
|
+
sel = {};
|
5136
|
+
for(i = 0, j = cur.length; i < j; i++) {
|
4929
5137
|
// apply down + apply up
|
4930
5138
|
if(
|
4931
|
-
(s.indexOf('down') === -1 || $.inArray(
|
4932
|
-
(s.indexOf('up') === -1 || $.inArray(
|
5139
|
+
(s.indexOf('down') === -1 || $.inArray(cur[i], obj.children_d) === -1) &&
|
5140
|
+
(s.indexOf('up') === -1 || $.inArray(cur[i], obj.parents) === -1)
|
4933
5141
|
) {
|
4934
|
-
|
5142
|
+
sel[cur[i]] = true;
|
5143
|
+
}
|
5144
|
+
}
|
5145
|
+
cur = [];
|
5146
|
+
for (i in sel) {
|
5147
|
+
if (sel.hasOwnProperty(i)) {
|
5148
|
+
cur.push(i);
|
4935
5149
|
}
|
4936
5150
|
}
|
4937
|
-
this._data[ t ? 'core' : 'checkbox' ].selected =
|
5151
|
+
this._data[ t ? 'core' : 'checkbox' ].selected = cur;
|
4938
5152
|
|
4939
5153
|
// apply down (process .children separately?)
|
4940
5154
|
if(s.indexOf('down') !== -1 && dom.length) {
|
@@ -5042,7 +5256,10 @@
|
|
5042
5256
|
for(i = 0, j = s.length; i < j; i++) {
|
5043
5257
|
if(m[s[i]] && m[s[i]].parents) {
|
5044
5258
|
for(k = 0, l = m[s[i]].parents.length; k < l; k++) {
|
5045
|
-
if(o[m[s[i]].parents[k]]
|
5259
|
+
if(o[m[s[i]].parents[k]] !== undefined) {
|
5260
|
+
break;
|
5261
|
+
}
|
5262
|
+
if(m[s[i]].parents[k] !== $.jstree.root) {
|
5046
5263
|
o[m[s[i]].parents[k]] = true;
|
5047
5264
|
p.push(m[s[i]].parents[k]);
|
5048
5265
|
}
|
@@ -5553,16 +5770,18 @@
|
|
5553
5770
|
/**
|
5554
5771
|
* 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
5772
|
*
|
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):
|
5773
|
+
* 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
5774
|
*
|
5558
5775
|
* * `separator_before` - a boolean indicating if there should be a separator before this item
|
5559
5776
|
* * `separator_after` - a boolean indicating if there should be a separator after this item
|
5560
5777
|
* * `_disabled` - a boolean indicating if this action should be disabled
|
5561
5778
|
* * `label` - a string - the name of the action (could be a function returning a string)
|
5562
|
-
* * `
|
5779
|
+
* * `title` - a string - an optional tooltip for the item
|
5780
|
+
* * `action` - a function to be executed if this item is chosen, the function will receive
|
5563
5781
|
* * `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
5782
|
* * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)
|
5565
5783
|
* * `shortcut_label` - shortcut label (like for example `F2` for rename)
|
5784
|
+
* * `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
5785
|
*
|
5567
5786
|
* @name $.jstree.defaults.contextmenu.items
|
5568
5787
|
* @plugin contextmenu
|
@@ -5680,6 +5899,9 @@
|
|
5680
5899
|
var last_ts = 0, cto = null, ex, ey;
|
5681
5900
|
this.element
|
5682
5901
|
.on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e, data) {
|
5902
|
+
if (e.target.tagName.toLowerCase() === 'input') {
|
5903
|
+
return;
|
5904
|
+
}
|
5683
5905
|
e.preventDefault();
|
5684
5906
|
last_ts = e.ctrlKey ? +new Date() : 0;
|
5685
5907
|
if(data || cto) {
|
@@ -5702,14 +5924,14 @@
|
|
5702
5924
|
if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {
|
5703
5925
|
return;
|
5704
5926
|
}
|
5705
|
-
ex = e.
|
5706
|
-
ey = e.
|
5927
|
+
ex = e.originalEvent.changedTouches[0].clientX;
|
5928
|
+
ey = e.originalEvent.changedTouches[0].clientY;
|
5707
5929
|
cto = setTimeout(function () {
|
5708
5930
|
$(e.currentTarget).trigger('contextmenu', true);
|
5709
5931
|
}, 750);
|
5710
5932
|
})
|
5711
5933
|
.on('touchmove.vakata.jstree', function (e) {
|
5712
|
-
if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.
|
5934
|
+
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
5935
|
clearTimeout(cto);
|
5714
5936
|
}
|
5715
5937
|
})
|
@@ -5740,7 +5962,10 @@
|
|
5740
5962
|
});
|
5741
5963
|
}
|
5742
5964
|
*/
|
5743
|
-
$(document).on("context_hide.vakata.jstree", $.proxy(function () {
|
5965
|
+
$(document).on("context_hide.vakata.jstree", $.proxy(function (e, data) {
|
5966
|
+
this._data.contextmenu.visible = false;
|
5967
|
+
$(data.reference).removeClass('jstree-context');
|
5968
|
+
}, this));
|
5744
5969
|
};
|
5745
5970
|
this.teardown = function () {
|
5746
5971
|
if(this._data.contextmenu.visible) {
|
@@ -5803,6 +6028,7 @@
|
|
5803
6028
|
$(document).one("context_show.vakata.jstree", $.proxy(function (e, data) {
|
5804
6029
|
var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';
|
5805
6030
|
$(data.element).addClass(cls);
|
6031
|
+
a.addClass('jstree-context');
|
5806
6032
|
}, this));
|
5807
6033
|
this._data.contextmenu.visible = true;
|
5808
6034
|
$.vakata.context.show(a, { 'x' : x, 'y' : y }, i);
|
@@ -5878,7 +6104,7 @@
|
|
5878
6104
|
}
|
5879
6105
|
sep = false;
|
5880
6106
|
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) + "'>";
|
6107
|
+
str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">";
|
5882
6108
|
if($.vakata.context.settings.icons) {
|
5883
6109
|
str += "<"+"i ";
|
5884
6110
|
if(val.icon) {
|
@@ -5916,7 +6142,8 @@
|
|
5916
6142
|
o = $(o);
|
5917
6143
|
if(!o.length || !o.children("ul").length) { return; }
|
5918
6144
|
var e = o.children("ul"),
|
5919
|
-
|
6145
|
+
xl = o.offset().left,
|
6146
|
+
x = xl + o.outerWidth(),
|
5920
6147
|
y = o.offset().top,
|
5921
6148
|
w = e.width(),
|
5922
6149
|
h = e.height(),
|
@@ -5927,11 +6154,23 @@
|
|
5927
6154
|
o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left");
|
5928
6155
|
}
|
5929
6156
|
else {
|
5930
|
-
o[x + w
|
6157
|
+
o[x + w > dw && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right");
|
5931
6158
|
}
|
5932
6159
|
if(y + h + 10 > dh) {
|
5933
6160
|
e.css("bottom","-1px");
|
5934
6161
|
}
|
6162
|
+
|
6163
|
+
//if does not fit - stick it to the side
|
6164
|
+
if (o.hasClass('vakata-context-right')) {
|
6165
|
+
if (xl < w) {
|
6166
|
+
e.css("margin-right", xl - w);
|
6167
|
+
}
|
6168
|
+
} else {
|
6169
|
+
if (dw - x < w) {
|
6170
|
+
e.css("margin-left", dw - x - w);
|
6171
|
+
}
|
6172
|
+
}
|
6173
|
+
|
5935
6174
|
e.show();
|
5936
6175
|
},
|
5937
6176
|
show : function (reference, position, data) {
|
@@ -6070,7 +6309,7 @@
|
|
6070
6309
|
switch(e.which) {
|
6071
6310
|
case 13:
|
6072
6311
|
case 32:
|
6073
|
-
e.type = "
|
6312
|
+
e.type = "click";
|
6074
6313
|
e.preventDefault();
|
6075
6314
|
$(e.currentTarget).trigger(e);
|
6076
6315
|
break;
|
@@ -6141,6 +6380,7 @@
|
|
6141
6380
|
}($));
|
6142
6381
|
// $.jstree.defaults.plugins.push("contextmenu");
|
6143
6382
|
|
6383
|
+
|
6144
6384
|
/**
|
6145
6385
|
* ### Drag'n'drop plugin
|
6146
6386
|
*
|
@@ -6212,15 +6452,27 @@
|
|
6212
6452
|
* @name $.jstree.defaults.dnd.large_drag_target
|
6213
6453
|
* @plugin dnd
|
6214
6454
|
*/
|
6215
|
-
large_drag_target : false
|
6455
|
+
large_drag_target : false,
|
6456
|
+
/**
|
6457
|
+
* controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls.
|
6458
|
+
* @reference http://caniuse.com/#feat=dragndrop
|
6459
|
+
* @name $.jstree.defaults.dnd.use_html5
|
6460
|
+
* @plugin dnd
|
6461
|
+
*/
|
6462
|
+
use_html5: false
|
6216
6463
|
};
|
6464
|
+
var drg, elm;
|
6217
6465
|
// TODO: now check works by checking for each node individually, how about max_children, unique, etc?
|
6218
6466
|
$.jstree.plugins.dnd = function (options, parent) {
|
6467
|
+
this.init = function (el, options) {
|
6468
|
+
parent.init.call(this, el, options);
|
6469
|
+
this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span'));
|
6470
|
+
};
|
6219
6471
|
this.bind = function () {
|
6220
6472
|
parent.bind.call(this);
|
6221
6473
|
|
6222
6474
|
this.element
|
6223
|
-
.on('mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
|
6475
|
+
.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) {
|
6224
6476
|
if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {
|
6225
6477
|
return true;
|
6226
6478
|
}
|
@@ -6233,13 +6485,57 @@
|
|
6233
6485
|
if(this.settings.core.force_text) {
|
6234
6486
|
txt = $.vakata.html.escape(txt);
|
6235
6487
|
}
|
6236
|
-
if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart") &&
|
6488
|
+
if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") &&
|
6237
6489
|
(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)))
|
6238
6490
|
) {
|
6239
|
-
this.
|
6240
|
-
|
6491
|
+
drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] };
|
6492
|
+
elm = e.currentTarget;
|
6493
|
+
if (this.settings.dnd.use_html5) {
|
6494
|
+
$.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6495
|
+
} else {
|
6496
|
+
this.element.trigger('mousedown.jstree');
|
6497
|
+
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>');
|
6498
|
+
}
|
6241
6499
|
}
|
6242
6500
|
}, this));
|
6501
|
+
if (this.settings.dnd.use_html5) {
|
6502
|
+
this.element
|
6503
|
+
.on('dragover.jstree', function (e) {
|
6504
|
+
e.preventDefault();
|
6505
|
+
$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6506
|
+
return false;
|
6507
|
+
})
|
6508
|
+
//.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {
|
6509
|
+
// e.preventDefault();
|
6510
|
+
// $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6511
|
+
// return false;
|
6512
|
+
// }, this))
|
6513
|
+
.on('drop.jstree', $.proxy(function (e) {
|
6514
|
+
e.preventDefault();
|
6515
|
+
$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });
|
6516
|
+
return false;
|
6517
|
+
}, this));
|
6518
|
+
}
|
6519
|
+
};
|
6520
|
+
this.redraw_node = function(obj, deep, callback, force_render) {
|
6521
|
+
obj = parent.redraw_node.apply(this, arguments);
|
6522
|
+
if (obj && this.settings.dnd.use_html5) {
|
6523
|
+
if (this.settings.dnd.large_drag_target) {
|
6524
|
+
obj.setAttribute('draggable', true);
|
6525
|
+
} else {
|
6526
|
+
var i, j, tmp = null;
|
6527
|
+
for(i = 0, j = obj.childNodes.length; i < j; i++) {
|
6528
|
+
if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
|
6529
|
+
tmp = obj.childNodes[i];
|
6530
|
+
break;
|
6531
|
+
}
|
6532
|
+
}
|
6533
|
+
if(tmp) {
|
6534
|
+
tmp.setAttribute('draggable', true);
|
6535
|
+
}
|
6536
|
+
}
|
6537
|
+
}
|
6538
|
+
return obj;
|
6243
6539
|
};
|
6244
6540
|
};
|
6245
6541
|
|
@@ -6259,7 +6555,11 @@
|
|
6259
6555
|
marker.appendTo('body'); //.show();
|
6260
6556
|
})
|
6261
6557
|
.on('dnd_move.vakata.jstree', function (e, data) {
|
6262
|
-
if(opento) {
|
6558
|
+
if(opento) {
|
6559
|
+
if (!data.event || data.event.type !== 'dragover' || data.event.target !== lastev.target) {
|
6560
|
+
clearTimeout(opento);
|
6561
|
+
}
|
6562
|
+
}
|
6263
6563
|
if(!data || !data.data || !data.data.jstree) { return; }
|
6264
6564
|
|
6265
6565
|
// if we are hovering the marker image do nothing (can happen on "inside" drags)
|
@@ -6272,16 +6572,17 @@
|
|
6272
6572
|
ref = false,
|
6273
6573
|
off = false,
|
6274
6574
|
rel = false,
|
6275
|
-
tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm;
|
6575
|
+
tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn;
|
6276
6576
|
// if we are over an instance
|
6277
6577
|
if(ins && ins._data && ins._data.dnd) {
|
6278
6578
|
marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));
|
6579
|
+
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
6580
|
data.helper
|
6280
6581
|
.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
|
-
|
6582
|
+
.find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ]();
|
6283
6583
|
|
6284
6584
|
// if are hovering the container itself add a new root node
|
6585
|
+
//console.log(data.event);
|
6285
6586
|
if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {
|
6286
6587
|
ok = true;
|
6287
6588
|
for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {
|
@@ -6292,6 +6593,9 @@
|
|
6292
6593
|
lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };
|
6293
6594
|
marker.hide();
|
6294
6595
|
data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
|
6596
|
+
if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
|
6597
|
+
data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
|
6598
|
+
}
|
6295
6599
|
return;
|
6296
6600
|
}
|
6297
6601
|
}
|
@@ -6300,7 +6604,7 @@
|
|
6300
6604
|
ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');
|
6301
6605
|
if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {
|
6302
6606
|
off = ref.offset();
|
6303
|
-
rel = data.event.pageY - off.top;
|
6607
|
+
rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top;
|
6304
6608
|
h = ref.outerHeight();
|
6305
6609
|
if(rel < h / 3) {
|
6306
6610
|
o = ['b', 'i', 'a'];
|
@@ -6354,9 +6658,17 @@
|
|
6354
6658
|
opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);
|
6355
6659
|
}
|
6356
6660
|
if(ok) {
|
6661
|
+
pn = ins.get_node(p, true);
|
6662
|
+
if (!pn.hasClass('.jstree-dnd-parent')) {
|
6663
|
+
$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
|
6664
|
+
pn.addClass('jstree-dnd-parent');
|
6665
|
+
}
|
6357
6666
|
lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };
|
6358
6667
|
marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();
|
6359
6668
|
data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');
|
6669
|
+
if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
|
6670
|
+
data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';
|
6671
|
+
}
|
6360
6672
|
laster = {};
|
6361
6673
|
o = true;
|
6362
6674
|
return false;
|
@@ -6366,8 +6678,12 @@
|
|
6366
6678
|
}
|
6367
6679
|
}
|
6368
6680
|
}
|
6681
|
+
$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
|
6369
6682
|
lastmv = false;
|
6370
6683
|
data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');
|
6684
|
+
if (data.event.originalEvent && data.event.originalEvent.dataTransfer) {
|
6685
|
+
data.event.originalEvent.dataTransfer.dropEffect = 'none';
|
6686
|
+
}
|
6371
6687
|
marker.hide();
|
6372
6688
|
})
|
6373
6689
|
.on('dnd_scroll.vakata.jstree', function (e, data) {
|
@@ -6378,6 +6694,7 @@
|
|
6378
6694
|
data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');
|
6379
6695
|
})
|
6380
6696
|
.on('dnd_stop.vakata.jstree', function (e, data) {
|
6697
|
+
$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');
|
6381
6698
|
if(opento) { clearTimeout(opento); }
|
6382
6699
|
if(!data || !data.data || !data.data.jstree) { return; }
|
6383
6700
|
marker.hide().detach();
|
@@ -6403,11 +6720,21 @@
|
|
6403
6720
|
.on('keyup.jstree keydown.jstree', function (e, data) {
|
6404
6721
|
data = $.vakata.dnd._get();
|
6405
6722
|
if(data && data.data && data.data.jstree) {
|
6406
|
-
|
6407
|
-
|
6408
|
-
|
6409
|
-
|
6410
|
-
|
6723
|
+
if (e.type === "keyup" && e.which === 27) {
|
6724
|
+
if (opento) { clearTimeout(opento); }
|
6725
|
+
lastmv = false;
|
6726
|
+
laster = false;
|
6727
|
+
lastev = false;
|
6728
|
+
opento = false;
|
6729
|
+
marker.hide().detach();
|
6730
|
+
$.vakata.dnd._clean();
|
6731
|
+
} else {
|
6732
|
+
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' ]();
|
6733
|
+
if(lastev) {
|
6734
|
+
lastev.metaKey = e.metaKey;
|
6735
|
+
lastev.ctrlKey = e.ctrlKey;
|
6736
|
+
$.vakata.dnd._trigger('move', lastev);
|
6737
|
+
}
|
6411
6738
|
}
|
6412
6739
|
}
|
6413
6740
|
});
|
@@ -6450,8 +6777,10 @@
|
|
6450
6777
|
threshold : 5,
|
6451
6778
|
threshold_touch : 50
|
6452
6779
|
},
|
6453
|
-
_trigger : function (event_name, e) {
|
6454
|
-
|
6780
|
+
_trigger : function (event_name, e, data) {
|
6781
|
+
if (data === undefined) {
|
6782
|
+
data = $.vakata.dnd._get();
|
6783
|
+
}
|
6455
6784
|
data.event = e;
|
6456
6785
|
$(document).triggerHandler("dnd_" + event_name + ".vakata", data);
|
6457
6786
|
},
|
@@ -6523,7 +6852,11 @@
|
|
6523
6852
|
try {
|
6524
6853
|
e.currentTarget.unselectable = "on";
|
6525
6854
|
e.currentTarget.onselectstart = function() { return false; };
|
6526
|
-
if(e.currentTarget.style) {
|
6855
|
+
if(e.currentTarget.style) {
|
6856
|
+
e.currentTarget.style.touchAction = "none";
|
6857
|
+
e.currentTarget.style.msTouchAction = "none";
|
6858
|
+
e.currentTarget.style.MozUserSelect = "none";
|
6859
|
+
}
|
6527
6860
|
} catch(ignore) { }
|
6528
6861
|
vakata_dnd.init_x = e.pageX;
|
6529
6862
|
vakata_dnd.init_y = e.pageY;
|
@@ -6564,6 +6897,7 @@
|
|
6564
6897
|
vakata_dnd.helper_w = vakata_dnd.helper.outerWidth();
|
6565
6898
|
}
|
6566
6899
|
vakata_dnd.is_drag = true;
|
6900
|
+
$(vakata_dnd.target).one('click.vakata', false);
|
6567
6901
|
/**
|
6568
6902
|
* triggered on the document when a drag starts
|
6569
6903
|
* @event
|
@@ -6664,6 +6998,9 @@
|
|
6664
6998
|
* @param {jQuery} helper the helper shown next to the mouse
|
6665
6999
|
* @param {Object} event the event that caused the stop
|
6666
7000
|
*/
|
7001
|
+
if (e.target !== vakata_dnd.target) {
|
7002
|
+
$(vakata_dnd.target).off('click.vakata');
|
7003
|
+
}
|
6667
7004
|
$.vakata.dnd._trigger("stop", e);
|
6668
7005
|
}
|
6669
7006
|
else {
|
@@ -6709,58 +7046,95 @@
|
|
6709
7046
|
$.jstree.defaults.massload = null;
|
6710
7047
|
$.jstree.plugins.massload = function (options, parent) {
|
6711
7048
|
this.init = function (el, options) {
|
6712
|
-
parent.init.call(this, el, options);
|
6713
7049
|
this._data.massload = {};
|
7050
|
+
parent.init.call(this, el, options);
|
6714
7051
|
};
|
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
|
-
|
7052
|
+
this._load_nodes = function (nodes, callback, is_callback, force_reload) {
|
7053
|
+
var s = this.settings.massload,
|
7054
|
+
nodesString = JSON.stringify(nodes),
|
7055
|
+
toLoad = [],
|
7056
|
+
m = this._model.data,
|
7057
|
+
i, j, dom;
|
7058
|
+
if (!is_callback) {
|
7059
|
+
for(i = 0, j = nodes.length; i < j; i++) {
|
7060
|
+
if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) {
|
7061
|
+
toLoad.push(nodes[i]);
|
7062
|
+
dom = this.get_node(nodes[i], true);
|
7063
|
+
if (dom && dom.length) {
|
7064
|
+
dom.addClass("jstree-loading").attr('aria-busy',true);
|
6727
7065
|
}
|
6728
7066
|
}
|
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
7067
|
}
|
6740
|
-
|
6741
|
-
|
6742
|
-
|
6743
|
-
|
6744
|
-
|
6745
|
-
|
7068
|
+
this._data.massload = {};
|
7069
|
+
if (toLoad.length) {
|
7070
|
+
if($.isFunction(s)) {
|
7071
|
+
return s.call(this, toLoad, $.proxy(function (data) {
|
7072
|
+
var i, j;
|
7073
|
+
if(data) {
|
7074
|
+
for(i in data) {
|
7075
|
+
if(data.hasOwnProperty(i)) {
|
7076
|
+
this._data.massload[i] = data[i];
|
7077
|
+
}
|
7078
|
+
}
|
7079
|
+
}
|
7080
|
+
for(i = 0, j = nodes.length; i < j; i++) {
|
7081
|
+
dom = this.get_node(nodes[i], true);
|
7082
|
+
if (dom && dom.length) {
|
7083
|
+
dom.removeClass("jstree-loading").attr('aria-busy',false);
|
6746
7084
|
}
|
6747
7085
|
}
|
7086
|
+
parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
|
7087
|
+
}, this));
|
7088
|
+
}
|
7089
|
+
if(typeof s === 'object' && s && s.url) {
|
7090
|
+
s = $.extend(true, {}, s);
|
7091
|
+
if($.isFunction(s.url)) {
|
7092
|
+
s.url = s.url.call(this, toLoad);
|
6748
7093
|
}
|
6749
|
-
|
6750
|
-
|
6751
|
-
|
6752
|
-
|
6753
|
-
|
7094
|
+
if($.isFunction(s.data)) {
|
7095
|
+
s.data = s.data.call(this, toLoad);
|
7096
|
+
}
|
7097
|
+
return $.ajax(s)
|
7098
|
+
.done($.proxy(function (data,t,x) {
|
7099
|
+
var i, j;
|
7100
|
+
if(data) {
|
7101
|
+
for(i in data) {
|
7102
|
+
if(data.hasOwnProperty(i)) {
|
7103
|
+
this._data.massload[i] = data[i];
|
7104
|
+
}
|
7105
|
+
}
|
7106
|
+
}
|
7107
|
+
for(i = 0, j = nodes.length; i < j; i++) {
|
7108
|
+
dom = this.get_node(nodes[i], true);
|
7109
|
+
if (dom && dom.length) {
|
7110
|
+
dom.removeClass("jstree-loading").attr('aria-busy',false);
|
7111
|
+
}
|
7112
|
+
}
|
7113
|
+
parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
|
7114
|
+
}, this))
|
7115
|
+
.fail($.proxy(function (f) {
|
7116
|
+
parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
|
7117
|
+
}, this));
|
7118
|
+
}
|
7119
|
+
}
|
6754
7120
|
}
|
6755
|
-
return parent._load_nodes.call(this, nodes, callback, is_callback);
|
7121
|
+
return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);
|
6756
7122
|
};
|
6757
7123
|
this._load_node = function (obj, callback) {
|
6758
|
-
var
|
6759
|
-
|
6760
|
-
|
6761
|
-
|
6762
|
-
|
6763
|
-
|
7124
|
+
var data = this._data.massload[obj.id],
|
7125
|
+
rslt = null, dom;
|
7126
|
+
if(data) {
|
7127
|
+
rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data'](
|
7128
|
+
obj,
|
7129
|
+
typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data,
|
7130
|
+
function (status) { callback.call(this, status); }
|
7131
|
+
);
|
7132
|
+
dom = this.get_node(obj.id, true);
|
7133
|
+
if (dom && dom.length) {
|
7134
|
+
dom.removeClass("jstree-loading").attr('aria-busy',false);
|
7135
|
+
}
|
7136
|
+
delete this._data.massload[obj.id];
|
7137
|
+
return rslt;
|
6764
7138
|
}
|
6765
7139
|
return parent._load_node.call(this, obj, callback);
|
6766
7140
|
};
|
@@ -6849,24 +7223,30 @@
|
|
6849
7223
|
this.element
|
6850
7224
|
.on("search.jstree", $.proxy(function (e, data) {
|
6851
7225
|
if(this._data.search.som && data.res.length) {
|
6852
|
-
var m = this._model.data, i, j, p = [];
|
7226
|
+
var m = this._model.data, i, j, p = [], k, l;
|
6853
7227
|
for(i = 0, j = data.res.length; i < j; i++) {
|
6854
7228
|
if(m[data.res[i]] && !m[data.res[i]].state.hidden) {
|
6855
7229
|
p.push(data.res[i]);
|
6856
7230
|
p = p.concat(m[data.res[i]].parents);
|
6857
7231
|
if(this._data.search.smc) {
|
6858
|
-
|
7232
|
+
for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) {
|
7233
|
+
if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) {
|
7234
|
+
p.push(m[data.res[i]].children_d[k]);
|
7235
|
+
}
|
7236
|
+
}
|
6859
7237
|
}
|
6860
7238
|
}
|
6861
7239
|
}
|
6862
7240
|
p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);
|
6863
7241
|
this._data.search.hdn = this.hide_all(true);
|
6864
|
-
this.show_node(p);
|
7242
|
+
this.show_node(p, true);
|
7243
|
+
this.redraw(true);
|
6865
7244
|
}
|
6866
7245
|
}, this))
|
6867
7246
|
.on("clear_search.jstree", $.proxy(function (e, data) {
|
6868
7247
|
if(this._data.search.som && data.res.length) {
|
6869
|
-
this.show_node(this._data.search.hdn);
|
7248
|
+
this.show_node(this._data.search.hdn, true);
|
7249
|
+
this.redraw(true);
|
6870
7250
|
}
|
6871
7251
|
}, this));
|
6872
7252
|
};
|
@@ -6908,8 +7288,8 @@
|
|
6908
7288
|
return a.call(this, str, $.proxy(function (d) {
|
6909
7289
|
if(d && d.d) { d = d.d; }
|
6910
7290
|
this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
|
6911
|
-
this.search(str, true, show_only_matches, inside, append);
|
6912
|
-
}
|
7291
|
+
this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
|
7292
|
+
});
|
6913
7293
|
}, this), inside);
|
6914
7294
|
}
|
6915
7295
|
else {
|
@@ -6919,7 +7299,10 @@
|
|
6919
7299
|
if(inside) {
|
6920
7300
|
a.data.inside = inside;
|
6921
7301
|
}
|
6922
|
-
|
7302
|
+
if (this._data.search.lastRequest) {
|
7303
|
+
this._data.search.lastRequest.abort();
|
7304
|
+
}
|
7305
|
+
this._data.search.lastRequest = $.ajax(a)
|
6923
7306
|
.fail($.proxy(function () {
|
6924
7307
|
this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };
|
6925
7308
|
this.settings.core.error.call(this, this._data.core.last_error);
|
@@ -6927,9 +7310,10 @@
|
|
6927
7310
|
.done($.proxy(function (d) {
|
6928
7311
|
if(d && d.d) { d = d.d; }
|
6929
7312
|
this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {
|
6930
|
-
this.search(str, true, show_only_matches, inside, append);
|
6931
|
-
}
|
7313
|
+
this.search(str, true, show_only_matches, inside, append, show_only_matches_children);
|
7314
|
+
});
|
6932
7315
|
}, this));
|
7316
|
+
return this._data.search.lastRequest;
|
6933
7317
|
}
|
6934
7318
|
}
|
6935
7319
|
if(!append) {
|
@@ -6944,7 +7328,7 @@
|
|
6944
7328
|
f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });
|
6945
7329
|
$.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {
|
6946
7330
|
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) ) ) {
|
7331
|
+
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
7332
|
r.push(i);
|
6949
7333
|
p = p.concat(v.parents);
|
6950
7334
|
}
|
@@ -7342,6 +7726,8 @@
|
|
7342
7726
|
* * `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
7727
|
* * `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
7728
|
* * `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.
|
7729
|
+
* * `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)
|
7730
|
+
* * `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
7731
|
*
|
7346
7732
|
* There are two predefined types:
|
7347
7733
|
*
|
@@ -7383,7 +7769,7 @@
|
|
7383
7769
|
var m = this._model.data,
|
7384
7770
|
dpc = data.nodes,
|
7385
7771
|
t = this.settings.types,
|
7386
|
-
i, j, c = 'default';
|
7772
|
+
i, j, c = 'default', k;
|
7387
7773
|
for(i = 0, j = dpc.length; i < j; i++) {
|
7388
7774
|
c = 'default';
|
7389
7775
|
if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {
|
@@ -7396,6 +7782,39 @@
|
|
7396
7782
|
if(m[dpc[i]].icon === true && t[c].icon !== undefined) {
|
7397
7783
|
m[dpc[i]].icon = t[c].icon;
|
7398
7784
|
}
|
7785
|
+
if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {
|
7786
|
+
for (k in t[c].li_attr) {
|
7787
|
+
if (t[c].li_attr.hasOwnProperty(k)) {
|
7788
|
+
if (k === 'id') {
|
7789
|
+
continue;
|
7790
|
+
}
|
7791
|
+
else if (m[dpc[i]].li_attr[k] === undefined) {
|
7792
|
+
m[dpc[i]].li_attr[k] = t[c].li_attr[k];
|
7793
|
+
}
|
7794
|
+
else if (k === 'class') {
|
7795
|
+
m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];
|
7796
|
+
}
|
7797
|
+
}
|
7798
|
+
}
|
7799
|
+
}
|
7800
|
+
if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {
|
7801
|
+
for (k in t[c].a_attr) {
|
7802
|
+
if (t[c].a_attr.hasOwnProperty(k)) {
|
7803
|
+
if (k === 'id') {
|
7804
|
+
continue;
|
7805
|
+
}
|
7806
|
+
else if (m[dpc[i]].a_attr[k] === undefined) {
|
7807
|
+
m[dpc[i]].a_attr[k] = t[c].a_attr[k];
|
7808
|
+
}
|
7809
|
+
else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {
|
7810
|
+
m[dpc[i]].a_attr['href'] = t[c].a_attr['href'];
|
7811
|
+
}
|
7812
|
+
else if (k === 'class') {
|
7813
|
+
m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];
|
7814
|
+
}
|
7815
|
+
}
|
7816
|
+
}
|
7817
|
+
}
|
7399
7818
|
}
|
7400
7819
|
m[$.jstree.root].type = $.jstree.root;
|
7401
7820
|
}, this));
|
@@ -7526,7 +7945,7 @@
|
|
7526
7945
|
* @plugin types
|
7527
7946
|
*/
|
7528
7947
|
this.set_type = function (obj, type) {
|
7529
|
-
var t, t1, t2, old_type, old_icon;
|
7948
|
+
var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;
|
7530
7949
|
if($.isArray(obj)) {
|
7531
7950
|
obj = obj.slice();
|
7532
7951
|
for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
|
@@ -7537,18 +7956,120 @@
|
|
7537
7956
|
t = this.settings.types;
|
7538
7957
|
obj = this.get_node(obj);
|
7539
7958
|
if(!t[type] || !obj) { return false; }
|
7959
|
+
d = this.get_node(obj, true);
|
7960
|
+
if (d && d.length) {
|
7961
|
+
a = d.children('.jstree-anchor');
|
7962
|
+
}
|
7540
7963
|
old_type = obj.type;
|
7541
7964
|
old_icon = this.get_icon(obj);
|
7542
7965
|
obj.type = type;
|
7543
|
-
if(old_icon === true ||
|
7966
|
+
if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {
|
7544
7967
|
this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);
|
7545
7968
|
}
|
7969
|
+
|
7970
|
+
// remove old type props
|
7971
|
+
if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {
|
7972
|
+
for (k in t[old_type].li_attr) {
|
7973
|
+
if (t[old_type].li_attr.hasOwnProperty(k)) {
|
7974
|
+
if (k === 'id') {
|
7975
|
+
continue;
|
7976
|
+
}
|
7977
|
+
else if (k === 'class') {
|
7978
|
+
m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');
|
7979
|
+
if (d) { d.removeClass(t[old_type].li_attr[k]); }
|
7980
|
+
}
|
7981
|
+
else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {
|
7982
|
+
m[obj.id].li_attr[k] = null;
|
7983
|
+
if (d) { d.removeAttr(k); }
|
7984
|
+
}
|
7985
|
+
}
|
7986
|
+
}
|
7987
|
+
}
|
7988
|
+
if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {
|
7989
|
+
for (k in t[old_type].a_attr) {
|
7990
|
+
if (t[old_type].a_attr.hasOwnProperty(k)) {
|
7991
|
+
if (k === 'id') {
|
7992
|
+
continue;
|
7993
|
+
}
|
7994
|
+
else if (k === 'class') {
|
7995
|
+
m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');
|
7996
|
+
if (a) { a.removeClass(t[old_type].a_attr[k]); }
|
7997
|
+
}
|
7998
|
+
else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {
|
7999
|
+
if (k === 'href') {
|
8000
|
+
m[obj.id].a_attr[k] = '#';
|
8001
|
+
if (a) { a.attr('href', '#'); }
|
8002
|
+
}
|
8003
|
+
else {
|
8004
|
+
delete m[obj.id].a_attr[k];
|
8005
|
+
if (a) { a.removeAttr(k); }
|
8006
|
+
}
|
8007
|
+
}
|
8008
|
+
}
|
8009
|
+
}
|
8010
|
+
}
|
8011
|
+
|
8012
|
+
// add new props
|
8013
|
+
if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {
|
8014
|
+
for (k in t[type].li_attr) {
|
8015
|
+
if (t[type].li_attr.hasOwnProperty(k)) {
|
8016
|
+
if (k === 'id') {
|
8017
|
+
continue;
|
8018
|
+
}
|
8019
|
+
else if (m[obj.id].li_attr[k] === undefined) {
|
8020
|
+
m[obj.id].li_attr[k] = t[type].li_attr[k];
|
8021
|
+
if (d) {
|
8022
|
+
if (k === 'class') {
|
8023
|
+
d.addClass(t[type].li_attr[k]);
|
8024
|
+
}
|
8025
|
+
else {
|
8026
|
+
d.attr(k, t[type].li_attr[k]);
|
8027
|
+
}
|
8028
|
+
}
|
8029
|
+
}
|
8030
|
+
else if (k === 'class') {
|
8031
|
+
m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];
|
8032
|
+
if (d) { d.addClass(t[type].li_attr[k]); }
|
8033
|
+
}
|
8034
|
+
}
|
8035
|
+
}
|
8036
|
+
}
|
8037
|
+
if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {
|
8038
|
+
for (k in t[type].a_attr) {
|
8039
|
+
if (t[type].a_attr.hasOwnProperty(k)) {
|
8040
|
+
if (k === 'id') {
|
8041
|
+
continue;
|
8042
|
+
}
|
8043
|
+
else if (m[obj.id].a_attr[k] === undefined) {
|
8044
|
+
m[obj.id].a_attr[k] = t[type].a_attr[k];
|
8045
|
+
if (a) {
|
8046
|
+
if (k === 'class') {
|
8047
|
+
a.addClass(t[type].a_attr[k]);
|
8048
|
+
}
|
8049
|
+
else {
|
8050
|
+
a.attr(k, t[type].a_attr[k]);
|
8051
|
+
}
|
8052
|
+
}
|
8053
|
+
}
|
8054
|
+
else if (k === 'href' && m[obj.id].a_attr[k] === '#') {
|
8055
|
+
m[obj.id].a_attr['href'] = t[type].a_attr['href'];
|
8056
|
+
if (a) { a.attr('href', t[type].a_attr['href']); }
|
8057
|
+
}
|
8058
|
+
else if (k === 'class') {
|
8059
|
+
m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];
|
8060
|
+
if (a) { a.addClass(t[type].a_attr[k]); }
|
8061
|
+
}
|
8062
|
+
}
|
8063
|
+
}
|
8064
|
+
}
|
8065
|
+
|
7546
8066
|
return true;
|
7547
8067
|
};
|
7548
8068
|
};
|
7549
8069
|
// include the types plugin by default
|
7550
8070
|
// $.jstree.defaults.plugins.push("types");
|
7551
8071
|
|
8072
|
+
|
7552
8073
|
/**
|
7553
8074
|
* ### Unique plugin
|
7554
8075
|
*
|
@@ -7699,9 +8220,11 @@
|
|
7699
8220
|
this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered');
|
7700
8221
|
}, this))
|
7701
8222
|
.on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) {
|
7702
|
-
|
7703
|
-
|
7704
|
-
|
8223
|
+
if (this._data.contextmenu) {
|
8224
|
+
e.preventDefault();
|
8225
|
+
var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });
|
8226
|
+
$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp);
|
8227
|
+
}
|
7705
8228
|
}, this))
|
7706
8229
|
/*!
|
7707
8230
|
.on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) {
|
@@ -7717,6 +8240,11 @@
|
|
7717
8240
|
var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
|
7718
8241
|
$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
|
7719
8242
|
})
|
8243
|
+
.on("dblclick.jstree", ".jstree-wholerow", function (e) {
|
8244
|
+
e.stopImmediatePropagation();
|
8245
|
+
var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
|
8246
|
+
$(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
|
8247
|
+
})
|
7720
8248
|
.on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) {
|
7721
8249
|
e.stopImmediatePropagation();
|
7722
8250
|
var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
|