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