annotate vakata-jstree-3.3.5/src/misc.js @ 5:aacd5f53ac99 draft

v2.0.0
author mingchen0919
date Wed, 18 Apr 2018 13:17:28 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
mingchen0919
parents:
diff changeset
1 /* global jQuery */
mingchen0919
parents:
diff changeset
2
mingchen0919
parents:
diff changeset
3 // disable all events
mingchen0919
parents:
diff changeset
4 (function ($, undefined) {
mingchen0919
parents:
diff changeset
5 "use strict";
mingchen0919
parents:
diff changeset
6 $.jstree.plugins.trigger = function (options, parent) {
mingchen0919
parents:
diff changeset
7 this.init = function (el, options) {
mingchen0919
parents:
diff changeset
8 // do not forget parent
mingchen0919
parents:
diff changeset
9 parent.init.call(this, el, options);
mingchen0919
parents:
diff changeset
10 this._data.trigger.disabled = false;
mingchen0919
parents:
diff changeset
11 };
mingchen0919
parents:
diff changeset
12 this.trigger = function (ev, data) {
mingchen0919
parents:
diff changeset
13 if(!this._data.trigger.disabled) {
mingchen0919
parents:
diff changeset
14 parent.trigger.call(this, ev, data);
mingchen0919
parents:
diff changeset
15 }
mingchen0919
parents:
diff changeset
16 };
mingchen0919
parents:
diff changeset
17 this.disable_events = function () { this._data.trigger.disabled = true; };
mingchen0919
parents:
diff changeset
18 this.enable_events = function () { this._data.trigger.disabled = false; };
mingchen0919
parents:
diff changeset
19 };
mingchen0919
parents:
diff changeset
20 })(jQuery);
mingchen0919
parents:
diff changeset
21
mingchen0919
parents:
diff changeset
22 // mapping
mingchen0919
parents:
diff changeset
23 (function ($, undefined) {
mingchen0919
parents:
diff changeset
24 "use strict";
mingchen0919
parents:
diff changeset
25 // use this if you need any options
mingchen0919
parents:
diff changeset
26 $.jstree.defaults.mapper = {
mingchen0919
parents:
diff changeset
27 option_key : "option_value"
mingchen0919
parents:
diff changeset
28 };
mingchen0919
parents:
diff changeset
29 $.jstree.plugins.mapper = function () {
mingchen0919
parents:
diff changeset
30 this._parse_model_from_json = function (d, p, ps) {
mingchen0919
parents:
diff changeset
31 // d is the node from the server, it will be called recursively for children,
mingchen0919
parents:
diff changeset
32 // so you do not need to process at once
mingchen0919
parents:
diff changeset
33 /* // for example
mingchen0919
parents:
diff changeset
34 for(var i in d) {
mingchen0919
parents:
diff changeset
35 if(d.hasOwnProperty(i)) {
mingchen0919
parents:
diff changeset
36 d[i.toLowerCase()] = d[i];
mingchen0919
parents:
diff changeset
37 }
mingchen0919
parents:
diff changeset
38 }
mingchen0919
parents:
diff changeset
39 */
mingchen0919
parents:
diff changeset
40 return parent._parse_model_from_json.call(this, d, p, ps);
mingchen0919
parents:
diff changeset
41 };
mingchen0919
parents:
diff changeset
42 };
mingchen0919
parents:
diff changeset
43 })(jQuery);
mingchen0919
parents:
diff changeset
44
mingchen0919
parents:
diff changeset
45 // no hover
mingchen0919
parents:
diff changeset
46 (function ($, undefined) {
mingchen0919
parents:
diff changeset
47 "use strict";
mingchen0919
parents:
diff changeset
48 $.jstree.plugins.nohover = function () {
mingchen0919
parents:
diff changeset
49 this.hover_node = $.noop;
mingchen0919
parents:
diff changeset
50 };
mingchen0919
parents:
diff changeset
51 })(jQuery);
mingchen0919
parents:
diff changeset
52
mingchen0919
parents:
diff changeset
53 // force multiple select
mingchen0919
parents:
diff changeset
54 (function ($, undefined) {
mingchen0919
parents:
diff changeset
55 "use strict";
mingchen0919
parents:
diff changeset
56 $.jstree.defaults.multiselect = {};
mingchen0919
parents:
diff changeset
57 $.jstree.plugins.multiselect = function (options, parent) {
mingchen0919
parents:
diff changeset
58 this.activate_node = function (obj, e) {
mingchen0919
parents:
diff changeset
59 e.ctrlKey = true;
mingchen0919
parents:
diff changeset
60 parent.activate_node.call(this, obj, e);
mingchen0919
parents:
diff changeset
61 };
mingchen0919
parents:
diff changeset
62 };
mingchen0919
parents:
diff changeset
63 })(jQuery);
mingchen0919
parents:
diff changeset
64
mingchen0919
parents:
diff changeset
65 // real checkboxes
mingchen0919
parents:
diff changeset
66 (function ($, undefined) {
mingchen0919
parents:
diff changeset
67 "use strict";
mingchen0919
parents:
diff changeset
68
mingchen0919
parents:
diff changeset
69 var inp = document.createElement("INPUT");
mingchen0919
parents:
diff changeset
70 inp.type = "checkbox";
mingchen0919
parents:
diff changeset
71 inp.className = "jstree-checkbox jstree-realcheckbox";
mingchen0919
parents:
diff changeset
72
mingchen0919
parents:
diff changeset
73 $.jstree.defaults.realcheckboxes = {};
mingchen0919
parents:
diff changeset
74
mingchen0919
parents:
diff changeset
75 $.jstree.plugins.realcheckboxes = function (options, parent) {
mingchen0919
parents:
diff changeset
76 this.bind = function () {
mingchen0919
parents:
diff changeset
77 parent.bind.call(this);
mingchen0919
parents:
diff changeset
78 this._data.realcheckboxes.uto = false;
mingchen0919
parents:
diff changeset
79 this.element
mingchen0919
parents:
diff changeset
80 .on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree ready.jstree loaded.jstree', $.proxy(function () {
mingchen0919
parents:
diff changeset
81 // only if undetermined is in setting
mingchen0919
parents:
diff changeset
82 if(this._data.realcheckboxes.uto) { clearTimeout(this._data.realcheckboxes.uto); }
mingchen0919
parents:
diff changeset
83 this._data.realcheckboxes.uto = setTimeout($.proxy(this._realcheckboxes, this), 50);
mingchen0919
parents:
diff changeset
84 }, this));
mingchen0919
parents:
diff changeset
85 };
mingchen0919
parents:
diff changeset
86 this.redraw_node = function(obj, deep, callback, force_draw) {
mingchen0919
parents:
diff changeset
87 obj = parent.redraw_node.call(this, obj, deep, callback, force_draw);
mingchen0919
parents:
diff changeset
88 if(obj) {
mingchen0919
parents:
diff changeset
89 var i, j, tmp = null, chk = inp.cloneNode(true);
mingchen0919
parents:
diff changeset
90 for(i = 0, j = obj.childNodes.length; i < j; i++) {
mingchen0919
parents:
diff changeset
91 if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
mingchen0919
parents:
diff changeset
92 tmp = obj.childNodes[i];
mingchen0919
parents:
diff changeset
93 break;
mingchen0919
parents:
diff changeset
94 }
mingchen0919
parents:
diff changeset
95 }
mingchen0919
parents:
diff changeset
96 if(tmp) {
mingchen0919
parents:
diff changeset
97 for(i = 0, j = tmp.childNodes.length; i < j; i++) {
mingchen0919
parents:
diff changeset
98 if(tmp.childNodes[i] && tmp.childNodes[i].className && tmp.childNodes[i].className.indexOf("jstree-checkbox") !== -1) {
mingchen0919
parents:
diff changeset
99 tmp = tmp.childNodes[i];
mingchen0919
parents:
diff changeset
100 break;
mingchen0919
parents:
diff changeset
101 }
mingchen0919
parents:
diff changeset
102 }
mingchen0919
parents:
diff changeset
103 }
mingchen0919
parents:
diff changeset
104 if(tmp && tmp.tagName === "I") {
mingchen0919
parents:
diff changeset
105 tmp.style.backgroundColor = "transparent";
mingchen0919
parents:
diff changeset
106 tmp.style.backgroundImage = "none";
mingchen0919
parents:
diff changeset
107 tmp.appendChild(chk);
mingchen0919
parents:
diff changeset
108 }
mingchen0919
parents:
diff changeset
109 }
mingchen0919
parents:
diff changeset
110 return obj;
mingchen0919
parents:
diff changeset
111 };
mingchen0919
parents:
diff changeset
112 this._realcheckboxes = function () {
mingchen0919
parents:
diff changeset
113 var ts = this.settings.checkbox.tie_selection;
mingchen0919
parents:
diff changeset
114 console.log(ts);
mingchen0919
parents:
diff changeset
115 $('.jstree-realcheckbox').each(function () {
mingchen0919
parents:
diff changeset
116 this.checked = (!ts && this.parentNode.parentNode.className.indexOf("jstree-checked") !== -1) || (ts && this.parentNode.parentNode.className.indexOf('jstree-clicked') !== -1);
mingchen0919
parents:
diff changeset
117 this.indeterminate = this.parentNode.className.indexOf("jstree-undetermined") !== -1;
mingchen0919
parents:
diff changeset
118 this.disabled = this.parentNode.parentNode.className.indexOf("disabled") !== -1;
mingchen0919
parents:
diff changeset
119 });
mingchen0919
parents:
diff changeset
120 };
mingchen0919
parents:
diff changeset
121 };
mingchen0919
parents:
diff changeset
122 })(jQuery);
mingchen0919
parents:
diff changeset
123
mingchen0919
parents:
diff changeset
124 // no state
mingchen0919
parents:
diff changeset
125 (function ($, undefined) {
mingchen0919
parents:
diff changeset
126 "use strict";
mingchen0919
parents:
diff changeset
127 $.jstree.plugins.nostate = function () {
mingchen0919
parents:
diff changeset
128 this.set_state = function (state, callback) {
mingchen0919
parents:
diff changeset
129 if(callback) { callback.call(this); }
mingchen0919
parents:
diff changeset
130 this.trigger('set_state');
mingchen0919
parents:
diff changeset
131 };
mingchen0919
parents:
diff changeset
132 };
mingchen0919
parents:
diff changeset
133 })(jQuery);
mingchen0919
parents:
diff changeset
134
mingchen0919
parents:
diff changeset
135 // no selected in state
mingchen0919
parents:
diff changeset
136 (function ($, undefined) {
mingchen0919
parents:
diff changeset
137 "use strict";
mingchen0919
parents:
diff changeset
138 $.jstree.plugins.noselectedstate = function (options, parent) {
mingchen0919
parents:
diff changeset
139 this.get_state = function () {
mingchen0919
parents:
diff changeset
140 var state = parent.get_state.call(this);
mingchen0919
parents:
diff changeset
141 delete state.core.selected;
mingchen0919
parents:
diff changeset
142 return state;
mingchen0919
parents:
diff changeset
143 };
mingchen0919
parents:
diff changeset
144 };
mingchen0919
parents:
diff changeset
145 })(jQuery);
mingchen0919
parents:
diff changeset
146
mingchen0919
parents:
diff changeset
147 // additional icon on node (outside of anchor)
mingchen0919
parents:
diff changeset
148 (function ($, undefined) {
mingchen0919
parents:
diff changeset
149 "use strict";
mingchen0919
parents:
diff changeset
150 var img = document.createElement('IMG');
mingchen0919
parents:
diff changeset
151 //img.src = "http://www.dpcd.vic.gov.au/__data/assets/image/0004/30667/help.gif";
mingchen0919
parents:
diff changeset
152 img.className = "jstree-questionmark";
mingchen0919
parents:
diff changeset
153
mingchen0919
parents:
diff changeset
154 $.jstree.defaults.questionmark = $.noop;
mingchen0919
parents:
diff changeset
155 $.jstree.plugins.questionmark = function (options, parent) {
mingchen0919
parents:
diff changeset
156 this.bind = function () {
mingchen0919
parents:
diff changeset
157 parent.bind.call(this);
mingchen0919
parents:
diff changeset
158 this.element
mingchen0919
parents:
diff changeset
159 .on("click.jstree", ".jstree-questionmark", $.proxy(function (e) {
mingchen0919
parents:
diff changeset
160 e.stopImmediatePropagation();
mingchen0919
parents:
diff changeset
161 this.settings.questionmark.call(this, this.get_node(e.target));
mingchen0919
parents:
diff changeset
162 }, this));
mingchen0919
parents:
diff changeset
163 };
mingchen0919
parents:
diff changeset
164 this.teardown = function () {
mingchen0919
parents:
diff changeset
165 if(this.settings.questionmark) {
mingchen0919
parents:
diff changeset
166 this.element.find(".jstree-questionmark").remove();
mingchen0919
parents:
diff changeset
167 }
mingchen0919
parents:
diff changeset
168 parent.teardown.call(this);
mingchen0919
parents:
diff changeset
169 };
mingchen0919
parents:
diff changeset
170 this.redraw_node = function(obj, deep, callback, force_draw) {
mingchen0919
parents:
diff changeset
171 obj = parent.redraw_node.call(this, obj, deep, callback, force_draw);
mingchen0919
parents:
diff changeset
172 if(obj) {
mingchen0919
parents:
diff changeset
173 var tmp = img.cloneNode(true);
mingchen0919
parents:
diff changeset
174 obj.insertBefore(tmp, obj.childNodes[2]);
mingchen0919
parents:
diff changeset
175 }
mingchen0919
parents:
diff changeset
176 return obj;
mingchen0919
parents:
diff changeset
177 };
mingchen0919
parents:
diff changeset
178 };
mingchen0919
parents:
diff changeset
179 })(jQuery);
mingchen0919
parents:
diff changeset
180
mingchen0919
parents:
diff changeset
181 // auto numbering
mingchen0919
parents:
diff changeset
182 (function ($, undefined) {
mingchen0919
parents:
diff changeset
183 "use strict";
mingchen0919
parents:
diff changeset
184 var span = document.createElement('SPAN');
mingchen0919
parents:
diff changeset
185 span.className = "jstree-numbering";
mingchen0919
parents:
diff changeset
186
mingchen0919
parents:
diff changeset
187 $.jstree.defaults.numbering = {};
mingchen0919
parents:
diff changeset
188 $.jstree.plugins.numbering = function (options, parent) {
mingchen0919
parents:
diff changeset
189 this.teardown = function () {
mingchen0919
parents:
diff changeset
190 if(this.settings.questionmark) {
mingchen0919
parents:
diff changeset
191 this.element.find(".jstree-numbering").remove();
mingchen0919
parents:
diff changeset
192 }
mingchen0919
parents:
diff changeset
193 parent.teardown.call(this);
mingchen0919
parents:
diff changeset
194 };
mingchen0919
parents:
diff changeset
195 this.get_number = function (obj) {
mingchen0919
parents:
diff changeset
196 obj = this.get_node(obj);
mingchen0919
parents:
diff changeset
197 var ind = $.inArray(obj.id, this.get_node(obj.parent).children) + 1;
mingchen0919
parents:
diff changeset
198 return obj.parent === '#' ? ind : this.get_number(obj.parent) + '.' + ind;
mingchen0919
parents:
diff changeset
199 };
mingchen0919
parents:
diff changeset
200 this.redraw_node = function(obj, deep, callback, force_draw) {
mingchen0919
parents:
diff changeset
201 var i, j, tmp = null, elm = null, org = this.get_number(obj);
mingchen0919
parents:
diff changeset
202 obj = parent.redraw_node.call(this, obj, deep, callback, force_draw);
mingchen0919
parents:
diff changeset
203 if(obj) {
mingchen0919
parents:
diff changeset
204 for(i = 0, j = obj.childNodes.length; i < j; i++) {
mingchen0919
parents:
diff changeset
205 if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
mingchen0919
parents:
diff changeset
206 tmp = obj.childNodes[i];
mingchen0919
parents:
diff changeset
207 break;
mingchen0919
parents:
diff changeset
208 }
mingchen0919
parents:
diff changeset
209 }
mingchen0919
parents:
diff changeset
210 if(tmp) {
mingchen0919
parents:
diff changeset
211 elm = span.cloneNode(true);
mingchen0919
parents:
diff changeset
212 elm.innerHTML = org + '. ';
mingchen0919
parents:
diff changeset
213 tmp.insertBefore(elm, tmp.childNodes[tmp.childNodes.length - 1]);
mingchen0919
parents:
diff changeset
214 }
mingchen0919
parents:
diff changeset
215 }
mingchen0919
parents:
diff changeset
216 return obj;
mingchen0919
parents:
diff changeset
217 };
mingchen0919
parents:
diff changeset
218 };
mingchen0919
parents:
diff changeset
219 })(jQuery);
mingchen0919
parents:
diff changeset
220
mingchen0919
parents:
diff changeset
221 // additional icon on node (inside anchor)
mingchen0919
parents:
diff changeset
222 (function ($, undefined) {
mingchen0919
parents:
diff changeset
223 "use strict";
mingchen0919
parents:
diff changeset
224 var _s = document.createElement('SPAN');
mingchen0919
parents:
diff changeset
225 _s.className = 'fa-stack jstree-stackedicon';
mingchen0919
parents:
diff changeset
226 var _i = document.createElement('I');
mingchen0919
parents:
diff changeset
227 _i.className = 'jstree-icon';
mingchen0919
parents:
diff changeset
228 _i.setAttribute('role', 'presentation');
mingchen0919
parents:
diff changeset
229
mingchen0919
parents:
diff changeset
230 $.jstree.plugins.stackedicon = function (options, parent) {
mingchen0919
parents:
diff changeset
231 this.teardown = function () {
mingchen0919
parents:
diff changeset
232 this.element.find(".jstree-stackedicon").remove();
mingchen0919
parents:
diff changeset
233 parent.teardown.call(this);
mingchen0919
parents:
diff changeset
234 };
mingchen0919
parents:
diff changeset
235 this.redraw_node = function(obj, deep, is_callback, force_render) {
mingchen0919
parents:
diff changeset
236 obj = parent.redraw_node.apply(this, arguments);
mingchen0919
parents:
diff changeset
237 if(obj) {
mingchen0919
parents:
diff changeset
238 var i, j, tmp = null, icon = null, temp = null;
mingchen0919
parents:
diff changeset
239 for(i = 0, j = obj.childNodes.length; i < j; i++) {
mingchen0919
parents:
diff changeset
240 if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) {
mingchen0919
parents:
diff changeset
241 tmp = obj.childNodes[i];
mingchen0919
parents:
diff changeset
242 break;
mingchen0919
parents:
diff changeset
243 }
mingchen0919
parents:
diff changeset
244 }
mingchen0919
parents:
diff changeset
245 if(tmp) {
mingchen0919
parents:
diff changeset
246 if(this._model.data[obj.id].state.icons && this._model.data[obj.id].state.icons.length) {
mingchen0919
parents:
diff changeset
247 icon = _s.cloneNode(false);
mingchen0919
parents:
diff changeset
248 for(i = 0, j = this._model.data[obj.id].state.icons.length; i < j; i++) {
mingchen0919
parents:
diff changeset
249 temp = _i.cloneNode(false);
mingchen0919
parents:
diff changeset
250 temp.className += ' ' + this._model.data[obj.id].state.icons[i];
mingchen0919
parents:
diff changeset
251 icon.appendChild(temp);
mingchen0919
parents:
diff changeset
252 }
mingchen0919
parents:
diff changeset
253 tmp.insertBefore(icon, tmp.childNodes[0]);
mingchen0919
parents:
diff changeset
254 }
mingchen0919
parents:
diff changeset
255 }
mingchen0919
parents:
diff changeset
256 }
mingchen0919
parents:
diff changeset
257 return obj;
mingchen0919
parents:
diff changeset
258 };
mingchen0919
parents:
diff changeset
259 };
mingchen0919
parents:
diff changeset
260 })(jQuery);
mingchen0919
parents:
diff changeset
261
mingchen0919
parents:
diff changeset
262 // selecting a node opens it
mingchen0919
parents:
diff changeset
263 (function ($, undefined) {
mingchen0919
parents:
diff changeset
264 "use strict";
mingchen0919
parents:
diff changeset
265 $.jstree.plugins.selectopens = function (options, parent) {
mingchen0919
parents:
diff changeset
266 this.bind = function () {
mingchen0919
parents:
diff changeset
267 parent.bind.call(this);
mingchen0919
parents:
diff changeset
268 this.element.on('select_node.jstree', function (e, data) { data.instance.open_node(data.node); });
mingchen0919
parents:
diff changeset
269 };
mingchen0919
parents:
diff changeset
270 };
mingchen0919
parents:
diff changeset
271 })(jQuery);
mingchen0919
parents:
diff changeset
272
mingchen0919
parents:
diff changeset
273 // object as data
mingchen0919
parents:
diff changeset
274 (function ($, undefined) {
mingchen0919
parents:
diff changeset
275 "use strict";
mingchen0919
parents:
diff changeset
276 $.jstree.defaults.datamodel = {};
mingchen0919
parents:
diff changeset
277 $.jstree.plugins.datamodel = function (options, parent) {
mingchen0919
parents:
diff changeset
278 this.init = function (el, options) {
mingchen0919
parents:
diff changeset
279 this._data.datamodel = {};
mingchen0919
parents:
diff changeset
280 parent.init.call(this, el, options);
mingchen0919
parents:
diff changeset
281 };
mingchen0919
parents:
diff changeset
282 this._datamodel = function (id, nodes, callback) {
mingchen0919
parents:
diff changeset
283 var i = 0, j = nodes.length, tmp = [], obj = null;
mingchen0919
parents:
diff changeset
284 for(; i < j; i++) {
mingchen0919
parents:
diff changeset
285 this._data.datamodel[nodes[i].getID()] = nodes[i];
mingchen0919
parents:
diff changeset
286 obj = {
mingchen0919
parents:
diff changeset
287 id : nodes[i].getID(),
mingchen0919
parents:
diff changeset
288 text : nodes[i].getText(),
mingchen0919
parents:
diff changeset
289 children : nodes[i].hasChildren()
mingchen0919
parents:
diff changeset
290 };
mingchen0919
parents:
diff changeset
291 if(nodes[i].getExtra) {
mingchen0919
parents:
diff changeset
292 obj = nodes[i].getExtra(obj); // icon, type
mingchen0919
parents:
diff changeset
293 }
mingchen0919
parents:
diff changeset
294 tmp.push(obj);
mingchen0919
parents:
diff changeset
295 }
mingchen0919
parents:
diff changeset
296 return this._append_json_data(id, tmp, $.proxy(function (status) {
mingchen0919
parents:
diff changeset
297 callback.call(this, status);
mingchen0919
parents:
diff changeset
298 }, this));
mingchen0919
parents:
diff changeset
299 };
mingchen0919
parents:
diff changeset
300 this._load_node = function (obj, callback) {
mingchen0919
parents:
diff changeset
301 var id = obj.id;
mingchen0919
parents:
diff changeset
302 var nd = obj.id === "#" ? this.settings.core.data : this._data.datamodel[obj.id].getChildren($.proxy(function (nodes) {
mingchen0919
parents:
diff changeset
303 this._datamodel(id, nodes, callback);
mingchen0919
parents:
diff changeset
304 }, this));
mingchen0919
parents:
diff changeset
305 if($.isArray(nd)) {
mingchen0919
parents:
diff changeset
306 this._datamodel(id, nd, callback);
mingchen0919
parents:
diff changeset
307 }
mingchen0919
parents:
diff changeset
308 };
mingchen0919
parents:
diff changeset
309 };
mingchen0919
parents:
diff changeset
310 })(jQuery);
mingchen0919
parents:
diff changeset
311 /*
mingchen0919
parents:
diff changeset
312 demo of the above
mingchen0919
parents:
diff changeset
313 function treeNode(val) {
mingchen0919
parents:
diff changeset
314 var id = ++treeNode.counter;
mingchen0919
parents:
diff changeset
315 this.getID = function () {
mingchen0919
parents:
diff changeset
316 return id;
mingchen0919
parents:
diff changeset
317 };
mingchen0919
parents:
diff changeset
318 this.getText = function () {
mingchen0919
parents:
diff changeset
319 return val.toString();
mingchen0919
parents:
diff changeset
320 };
mingchen0919
parents:
diff changeset
321 this.getExtra = function (obj) {
mingchen0919
parents:
diff changeset
322 obj.icon = false;
mingchen0919
parents:
diff changeset
323 return obj;
mingchen0919
parents:
diff changeset
324 };
mingchen0919
parents:
diff changeset
325 this.hasChildren = function () {
mingchen0919
parents:
diff changeset
326 return true;
mingchen0919
parents:
diff changeset
327 };
mingchen0919
parents:
diff changeset
328 this.getChildren = function () {
mingchen0919
parents:
diff changeset
329 return [
mingchen0919
parents:
diff changeset
330 new treeNode(Math.pow(val, 2)),
mingchen0919
parents:
diff changeset
331 new treeNode(Math.sqrt(val)),
mingchen0919
parents:
diff changeset
332 ];
mingchen0919
parents:
diff changeset
333 };
mingchen0919
parents:
diff changeset
334 }
mingchen0919
parents:
diff changeset
335 treeNode.counter = 0;
mingchen0919
parents:
diff changeset
336
mingchen0919
parents:
diff changeset
337 $('#jstree').jstree({
mingchen0919
parents:
diff changeset
338 'core': {
mingchen0919
parents:
diff changeset
339 'data': [
mingchen0919
parents:
diff changeset
340 new treeNode(2),
mingchen0919
parents:
diff changeset
341 new treeNode(3),
mingchen0919
parents:
diff changeset
342 new treeNode(4),
mingchen0919
parents:
diff changeset
343 new treeNode(5)
mingchen0919
parents:
diff changeset
344 ]
mingchen0919
parents:
diff changeset
345 },
mingchen0919
parents:
diff changeset
346 plugins : ['datamodel']
mingchen0919
parents:
diff changeset
347 });
mingchen0919
parents:
diff changeset
348 */
mingchen0919
parents:
diff changeset
349
mingchen0919
parents:
diff changeset
350 // untested sample plugin to keep all nodes in the DOM
mingchen0919
parents:
diff changeset
351 (function ($, undefined) {
mingchen0919
parents:
diff changeset
352 "use strict";
mingchen0919
parents:
diff changeset
353 $.jstree.plugins.dom = function (options, parent) {
mingchen0919
parents:
diff changeset
354 this.redraw_node = function (node, deep, is_callback, force_render) {
mingchen0919
parents:
diff changeset
355 return parent.redraw_node.call(this, node, deep, is_callback, true);
mingchen0919
parents:
diff changeset
356 };
mingchen0919
parents:
diff changeset
357 this.close_node = function (obj, animation) {
mingchen0919
parents:
diff changeset
358 var t1, t2, t, d;
mingchen0919
parents:
diff changeset
359 if($.isArray(obj)) {
mingchen0919
parents:
diff changeset
360 obj = obj.slice();
mingchen0919
parents:
diff changeset
361 for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
mingchen0919
parents:
diff changeset
362 this.close_node(obj[t1], animation);
mingchen0919
parents:
diff changeset
363 }
mingchen0919
parents:
diff changeset
364 return true;
mingchen0919
parents:
diff changeset
365 }
mingchen0919
parents:
diff changeset
366 obj = this.get_node(obj);
mingchen0919
parents:
diff changeset
367 if(!obj || obj.id === $.jstree.root) {
mingchen0919
parents:
diff changeset
368 return false;
mingchen0919
parents:
diff changeset
369 }
mingchen0919
parents:
diff changeset
370 if(this.is_closed(obj)) {
mingchen0919
parents:
diff changeset
371 return false;
mingchen0919
parents:
diff changeset
372 }
mingchen0919
parents:
diff changeset
373 animation = animation === undefined ? this.settings.core.animation : animation;
mingchen0919
parents:
diff changeset
374 t = this;
mingchen0919
parents:
diff changeset
375 d = this.get_node(obj, true);
mingchen0919
parents:
diff changeset
376 if(d.length) {
mingchen0919
parents:
diff changeset
377 if(!animation) {
mingchen0919
parents:
diff changeset
378 d[0].className = d[0].className.replace('jstree-open', 'jstree-closed');
mingchen0919
parents:
diff changeset
379 d.attr("aria-expanded", false);
mingchen0919
parents:
diff changeset
380 }
mingchen0919
parents:
diff changeset
381 else {
mingchen0919
parents:
diff changeset
382 d
mingchen0919
parents:
diff changeset
383 .children(".jstree-children").attr("style","display:block !important").end()
mingchen0919
parents:
diff changeset
384 .removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false)
mingchen0919
parents:
diff changeset
385 .children(".jstree-children").stop(true, true).slideUp(animation, function () {
mingchen0919
parents:
diff changeset
386 this.style.display = "";
mingchen0919
parents:
diff changeset
387 t.trigger("after_close", { "node" : obj });
mingchen0919
parents:
diff changeset
388 });
mingchen0919
parents:
diff changeset
389 }
mingchen0919
parents:
diff changeset
390 }
mingchen0919
parents:
diff changeset
391 obj.state.opened = false;
mingchen0919
parents:
diff changeset
392 this.trigger('close_node',{ "node" : obj });
mingchen0919
parents:
diff changeset
393 if(!animation || !d.length) {
mingchen0919
parents:
diff changeset
394 this.trigger("after_close", { "node" : obj });
mingchen0919
parents:
diff changeset
395 }
mingchen0919
parents:
diff changeset
396 };
mingchen0919
parents:
diff changeset
397 };
mingchen0919
parents:
diff changeset
398 })(jQuery);
mingchen0919
parents:
diff changeset
399
mingchen0919
parents:
diff changeset
400 // customize plugin by @Lusito
mingchen0919
parents:
diff changeset
401 // https://github.com/Lusito/jstree/blob/node-customize/src/jstree-node-customize.js
mingchen0919
parents:
diff changeset
402 /**
mingchen0919
parents:
diff changeset
403 * ### Node Customize plugin
mingchen0919
parents:
diff changeset
404 *
mingchen0919
parents:
diff changeset
405 * Allows to customize nodes when they are drawn.
mingchen0919
parents:
diff changeset
406 */
mingchen0919
parents:
diff changeset
407 (function (factory) {
mingchen0919
parents:
diff changeset
408 "use strict";
mingchen0919
parents:
diff changeset
409 if (typeof define === 'function' && define.amd) {
mingchen0919
parents:
diff changeset
410 define('jstree.node_customize', ['jquery','jstree'], factory);
mingchen0919
parents:
diff changeset
411 }
mingchen0919
parents:
diff changeset
412 else if(typeof exports === 'object') {
mingchen0919
parents:
diff changeset
413 factory(require('jquery'), require('jstree'));
mingchen0919
parents:
diff changeset
414 }
mingchen0919
parents:
diff changeset
415 else {
mingchen0919
parents:
diff changeset
416 factory(jQuery, jQuery.jstree);
mingchen0919
parents:
diff changeset
417 }
mingchen0919
parents:
diff changeset
418 }(function ($, jstree, undefined) {
mingchen0919
parents:
diff changeset
419 "use strict";
mingchen0919
parents:
diff changeset
420
mingchen0919
parents:
diff changeset
421 if($.jstree.plugins.node_customize) { return; }
mingchen0919
parents:
diff changeset
422
mingchen0919
parents:
diff changeset
423 /**
mingchen0919
parents:
diff changeset
424 * the settings object.
mingchen0919
parents:
diff changeset
425 * key is the attribute name to select the customizer function from switch.
mingchen0919
parents:
diff changeset
426 * switch is a key => function(el, node) map.
mingchen0919
parents:
diff changeset
427 * default: function(el, node) will be called if the type could not be mapped
mingchen0919
parents:
diff changeset
428 * @name $.jstree.defaults.node_customize
mingchen0919
parents:
diff changeset
429 * @plugin node_customize
mingchen0919
parents:
diff changeset
430 */
mingchen0919
parents:
diff changeset
431 $.jstree.defaults.node_customize = {
mingchen0919
parents:
diff changeset
432 "key": "type",
mingchen0919
parents:
diff changeset
433 "switch": {},
mingchen0919
parents:
diff changeset
434 "default": null
mingchen0919
parents:
diff changeset
435 };
mingchen0919
parents:
diff changeset
436
mingchen0919
parents:
diff changeset
437 $.jstree.plugins.node_customize = function (options, parent) {
mingchen0919
parents:
diff changeset
438 this.redraw_node = function (obj, deep, callback, force_draw) {
mingchen0919
parents:
diff changeset
439 var node_id = obj;
mingchen0919
parents:
diff changeset
440 var el = parent.redraw_node.apply(this, arguments);
mingchen0919
parents:
diff changeset
441 if (el) {
mingchen0919
parents:
diff changeset
442 var node = this._model.data[node_id];
mingchen0919
parents:
diff changeset
443 var cfg = this.settings.node_customize;
mingchen0919
parents:
diff changeset
444 var key = cfg.key;
mingchen0919
parents:
diff changeset
445 var type = (node && node.original && node.original[key]);
mingchen0919
parents:
diff changeset
446 var customizer = (type && cfg.switch[type]) || cfg.default;
mingchen0919
parents:
diff changeset
447 if(customizer)
mingchen0919
parents:
diff changeset
448 customizer(el, node);
mingchen0919
parents:
diff changeset
449 }
mingchen0919
parents:
diff changeset
450 return el;
mingchen0919
parents:
diff changeset
451 };
mingchen0919
parents:
diff changeset
452 }
mingchen0919
parents:
diff changeset
453 }));
mingchen0919
parents:
diff changeset
454
mingchen0919
parents:
diff changeset
455
mingchen0919
parents:
diff changeset
456 // parentsload plugin by @ashl1
mingchen0919
parents:
diff changeset
457 /**
mingchen0919
parents:
diff changeset
458 * ### Parentsload plugin
mingchen0919
parents:
diff changeset
459 *
mingchen0919
parents:
diff changeset
460 * Change load_node() functionality in jsTree, to possible load not yes downloaded node with all it parent in a single request (only useful with lazy loading).
mingchen0919
parents:
diff changeset
461 *
mingchen0919
parents:
diff changeset
462 * version 1.0.0 (Alexey Shildyakov - ashl1future@gmail.com)
mingchen0919
parents:
diff changeset
463 * 2015: Compatible with jsTree-3.2.1
mingchen0919
parents:
diff changeset
464 */
mingchen0919
parents:
diff changeset
465 /*globals jQuery, define, exports, require, document */
mingchen0919
parents:
diff changeset
466 (function (factory) {
mingchen0919
parents:
diff changeset
467 "use strict";
mingchen0919
parents:
diff changeset
468 if (typeof define === 'function' && define.amd) {
mingchen0919
parents:
diff changeset
469 define('jstree.parentsload', ['jquery','jstree'], factory);
mingchen0919
parents:
diff changeset
470 }
mingchen0919
parents:
diff changeset
471 else if(typeof exports === 'object') {
mingchen0919
parents:
diff changeset
472 factory(require('jquery'), require('jstree'));
mingchen0919
parents:
diff changeset
473 }
mingchen0919
parents:
diff changeset
474 else {
mingchen0919
parents:
diff changeset
475 factory(jQuery, jQuery.jstree);
mingchen0919
parents:
diff changeset
476 }
mingchen0919
parents:
diff changeset
477 }(function ($, jstree, undefined) {
mingchen0919
parents:
diff changeset
478 "use strict";
mingchen0919
parents:
diff changeset
479
mingchen0919
parents:
diff changeset
480 if($.jstree.plugins.parentsload) { return; }
mingchen0919
parents:
diff changeset
481
mingchen0919
parents:
diff changeset
482 /**
mingchen0919
parents:
diff changeset
483 * parentsload configuration
mingchen0919
parents:
diff changeset
484 *
mingchen0919
parents:
diff changeset
485 * The configuration syntax is almost the same as for core.data option. You must set parenstload.data the following:
mingchen0919
parents:
diff changeset
486 *
mingchen0919
parents:
diff changeset
487 * parentsload: {
mingchen0919
parents:
diff changeset
488 * data: function(){} // this function overwrites core data.data options
mingchen0919
parents:
diff changeset
489 * }
mingchen0919
parents:
diff changeset
490 *
mingchen0919
parents:
diff changeset
491 * OR
mingchen0919
parents:
diff changeset
492 *
mingchen0919
parents:
diff changeset
493 * parentsload: {
mingchen0919
parents:
diff changeset
494 * data: {
mingchen0919
parents:
diff changeset
495 * url: function(node){} OR string,
mingchen0919
parents:
diff changeset
496 * data: function(node){} OR associative array as json{data} jQuery parameter
mingchen0919
parents:
diff changeset
497 * }
mingchen0919
parents:
diff changeset
498 * }
mingchen0919
parents:
diff changeset
499 *
mingchen0919
parents:
diff changeset
500 * In last case at least on of 'url' or 'data' must be presented.
mingchen0919
parents:
diff changeset
501 *
mingchen0919
parents:
diff changeset
502 * At first, the plugin load_node() detects if the node already downloaded. If is - uses the core.data settings, if not - uses parentsload.data settings
mingchen0919
parents:
diff changeset
503 * to fetch in one query the specified node and all its parent. The data must be in the first mentioned JSON format with set nested children[].
mingchen0919
parents:
diff changeset
504 * Each node level should consist of all nodes on the level to properly work with the tree in the future. Otherwise, you must manually call load_node
mingchen0919
parents:
diff changeset
505 * on every parent node to fetch all children nodes on that level.
mingchen0919
parents:
diff changeset
506 *
mingchen0919
parents:
diff changeset
507 * @name $.jstree.defaults.parentsload
mingchen0919
parents:
diff changeset
508 * @plugin parentsload
mingchen0919
parents:
diff changeset
509 */
mingchen0919
parents:
diff changeset
510 $.jstree.defaults.parentsload = null;
mingchen0919
parents:
diff changeset
511 $.jstree.plugins.parentsload = function (options, parent) {
mingchen0919
parents:
diff changeset
512 this.init = function (el, options) {
mingchen0919
parents:
diff changeset
513 parent.init.call(this, el, options);
mingchen0919
parents:
diff changeset
514 this.patch_data()
mingchen0919
parents:
diff changeset
515 };
mingchen0919
parents:
diff changeset
516 this.patch_data = function(){
mingchen0919
parents:
diff changeset
517 var parentsloadSettings = this.settings.parentsload;
mingchen0919
parents:
diff changeset
518 var jsTreeDataSettings = this.settings.core.data;
mingchen0919
parents:
diff changeset
519 var self = this;
mingchen0919
parents:
diff changeset
520
mingchen0919
parents:
diff changeset
521 var callError = function(number, message) {
mingchen0919
parents:
diff changeset
522 self._data.core.last_error = { 'error' : 'configuration', 'plugin' : 'parentsload', 'id' : 'parentsload_' + number, 'reason' : message, 'data' : JSON.stringify({config: parentsloadSettings}) };
mingchen0919
parents:
diff changeset
523 self.settings.core.error.call(self, self._data.core.last_error);
mingchen0919
parents:
diff changeset
524 }
mingchen0919
parents:
diff changeset
525
mingchen0919
parents:
diff changeset
526 if(!parentsloadSettings) {
mingchen0919
parents:
diff changeset
527 callError('01', 'The configuration must be presented')
mingchen0919
parents:
diff changeset
528 return
mingchen0919
parents:
diff changeset
529 }
mingchen0919
parents:
diff changeset
530 parentsloadSettings = parentsloadSettings.data;
mingchen0919
parents:
diff changeset
531
mingchen0919
parents:
diff changeset
532 var patchSettingsProperty = function (propertyName) {
mingchen0919
parents:
diff changeset
533 var property = parentsloadSettings[propertyName],
mingchen0919
parents:
diff changeset
534 coreProperty = jsTreeDataSettings[propertyName];
mingchen0919
parents:
diff changeset
535 if (property) {
mingchen0919
parents:
diff changeset
536 jsTreeDataSettings[propertyName] = function(node) {
mingchen0919
parents:
diff changeset
537 if (this.get_node(node).parentsload_required) {
mingchen0919
parents:
diff changeset
538 if ($.isFunction(property)) {
mingchen0919
parents:
diff changeset
539 return property.call(this, node)
mingchen0919
parents:
diff changeset
540 } else {// (typeof property === 'string')
mingchen0919
parents:
diff changeset
541 return property
mingchen0919
parents:
diff changeset
542 }
mingchen0919
parents:
diff changeset
543 } else {
mingchen0919
parents:
diff changeset
544 if ($.isFunction(coreProperty)) {
mingchen0919
parents:
diff changeset
545 return coreProperty.call(this, node)
mingchen0919
parents:
diff changeset
546 } else { // (typeof coreProperty === 'string')
mingchen0919
parents:
diff changeset
547 return coreProperty
mingchen0919
parents:
diff changeset
548 }
mingchen0919
parents:
diff changeset
549 }
mingchen0919
parents:
diff changeset
550 }
mingchen0919
parents:
diff changeset
551 } /* else {
mingchen0919
parents:
diff changeset
552 use jstree the same data[propertyName] settings
mingchen0919
parents:
diff changeset
553 }*/
mingchen0919
parents:
diff changeset
554 }
mingchen0919
parents:
diff changeset
555
mingchen0919
parents:
diff changeset
556 if($.isFunction(parentsloadSettings)) {
mingchen0919
parents:
diff changeset
557 this.settings.data = parentsloadSettings
mingchen0919
parents:
diff changeset
558 } else if (typeof parentsloadSettings === 'object') {
mingchen0919
parents:
diff changeset
559 if (! (parentsloadSettings.url || parentsloadSettings.data)) {
mingchen0919
parents:
diff changeset
560 callError('02', 'The "data.url" or "data.data" must be presented in configuration')
mingchen0919
parents:
diff changeset
561 return
mingchen0919
parents:
diff changeset
562 }
mingchen0919
parents:
diff changeset
563 patchSettingsProperty('url')
mingchen0919
parents:
diff changeset
564 patchSettingsProperty('data')
mingchen0919
parents:
diff changeset
565
mingchen0919
parents:
diff changeset
566 } else {
mingchen0919
parents:
diff changeset
567 callError('03', 'The appropriate "data.url" or "data.data" must be presented in configuration')
mingchen0919
parents:
diff changeset
568 }
mingchen0919
parents:
diff changeset
569 }
mingchen0919
parents:
diff changeset
570
mingchen0919
parents:
diff changeset
571 this.load_node = function (obj, callback) {
mingchen0919
parents:
diff changeset
572 if($.isArray(obj)) {
mingchen0919
parents:
diff changeset
573 // FIXME: _load_nodes will not load nodes not presented in the tree
mingchen0919
parents:
diff changeset
574 this._load_nodes(obj.slice(), callback);
mingchen0919
parents:
diff changeset
575 return true;
mingchen0919
parents:
diff changeset
576 }
mingchen0919
parents:
diff changeset
577 var foundObj = this.get_node(obj);
mingchen0919
parents:
diff changeset
578 if (foundObj) {
mingchen0919
parents:
diff changeset
579 return parent.load_node.apply(this, arguments)
mingchen0919
parents:
diff changeset
580 } else {
mingchen0919
parents:
diff changeset
581 // node hasn't been loaded
mingchen0919
parents:
diff changeset
582 var id = obj.id? obj.id: obj;
mingchen0919
parents:
diff changeset
583 this._model.data[id] = {
mingchen0919
parents:
diff changeset
584 id : id,
mingchen0919
parents:
diff changeset
585 parent : '#',
mingchen0919
parents:
diff changeset
586 parents : [],
mingchen0919
parents:
diff changeset
587 children : [],
mingchen0919
parents:
diff changeset
588 children_d : [],
mingchen0919
parents:
diff changeset
589 state : { loaded : false },
mingchen0919
parents:
diff changeset
590 li_attr : {},
mingchen0919
parents:
diff changeset
591 a_attr : {},
mingchen0919
parents:
diff changeset
592 parentsload_required : true,
mingchen0919
parents:
diff changeset
593 };
mingchen0919
parents:
diff changeset
594 return parent.load_node.call(this, obj, function(obj, status){
mingchen0919
parents:
diff changeset
595 obj.parentsload_required = !status
mingchen0919
parents:
diff changeset
596 callback.call(this, obj, status)
mingchen0919
parents:
diff changeset
597 })
mingchen0919
parents:
diff changeset
598 }
mingchen0919
parents:
diff changeset
599 }
mingchen0919
parents:
diff changeset
600 };
mingchen0919
parents:
diff changeset
601 }));
mingchen0919
parents:
diff changeset
602
mingchen0919
parents:
diff changeset
603 // conditional deselect
mingchen0919
parents:
diff changeset
604 (function (factory) {
mingchen0919
parents:
diff changeset
605 "use strict";
mingchen0919
parents:
diff changeset
606 if (typeof define === 'function' && define.amd) {
mingchen0919
parents:
diff changeset
607 define('jstree.conditionaldeselect', ['jquery','jstree'], factory);
mingchen0919
parents:
diff changeset
608 }
mingchen0919
parents:
diff changeset
609 else if(typeof exports === 'object') {
mingchen0919
parents:
diff changeset
610 factory(require('jquery'), require('jstree'));
mingchen0919
parents:
diff changeset
611 }
mingchen0919
parents:
diff changeset
612 else {
mingchen0919
parents:
diff changeset
613 factory(jQuery, jQuery.jstree);
mingchen0919
parents:
diff changeset
614 }
mingchen0919
parents:
diff changeset
615 }(function ($, jstree, undefined) {
mingchen0919
parents:
diff changeset
616 "use strict";
mingchen0919
parents:
diff changeset
617
mingchen0919
parents:
diff changeset
618 if($.jstree.plugins.conditionaldeselect) { return; }
mingchen0919
parents:
diff changeset
619 $.jstree.defaults.conditionaldeselect = function () { return true; };
mingchen0919
parents:
diff changeset
620 $.jstree.plugins.conditionaldeselect = function (options, parent) {
mingchen0919
parents:
diff changeset
621 // own function
mingchen0919
parents:
diff changeset
622 this.deselect_node = function (obj, supress_event, e) {
mingchen0919
parents:
diff changeset
623 if(this.settings.conditionaldeselect.call(this, this.get_node(obj), e)) {
mingchen0919
parents:
diff changeset
624 return parent.deselect_node.call(this, obj, supress_event, e);
mingchen0919
parents:
diff changeset
625 }
mingchen0919
parents:
diff changeset
626 };
mingchen0919
parents:
diff changeset
627 };
mingchen0919
parents:
diff changeset
628
mingchen0919
parents:
diff changeset
629 }));