Mercurial > repos > mingchen0919 > aurora_dustmasker
comparison vakata-jstree-3.3.5/src/misc.js @ 0:b8c76b06d724 draft
planemo upload
| author | mingchen0919 |
|---|---|
| date | Fri, 09 Nov 2018 13:29:21 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:b8c76b06d724 |
|---|---|
| 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 })); | |
| 602 | |
| 603 // conditional deselect | |
| 604 (function (factory) { | |
| 605 "use strict"; | |
| 606 if (typeof define === 'function' && define.amd) { | |
| 607 define('jstree.conditionaldeselect', ['jquery','jstree'], factory); | |
| 608 } | |
| 609 else if(typeof exports === 'object') { | |
| 610 factory(require('jquery'), require('jstree')); | |
| 611 } | |
| 612 else { | |
| 613 factory(jQuery, jQuery.jstree); | |
| 614 } | |
| 615 }(function ($, jstree, undefined) { | |
| 616 "use strict"; | |
| 617 | |
| 618 if($.jstree.plugins.conditionaldeselect) { return; } | |
| 619 $.jstree.defaults.conditionaldeselect = function () { return true; }; | |
| 620 $.jstree.plugins.conditionaldeselect = function (options, parent) { | |
| 621 // own function | |
| 622 this.deselect_node = function (obj, supress_event, e) { | |
| 623 if(this.settings.conditionaldeselect.call(this, this.get_node(obj), e)) { | |
| 624 return parent.deselect_node.call(this, obj, supress_event, e); | |
| 625 } | |
| 626 }; | |
| 627 }; | |
| 628 | |
| 629 })); |
