%PDF- %PDF-
Direktori : /home/tjamichg/intranet.tjamich.gob.mx/intranet/common/vendors/jstree/src/ |
Current File : /home/tjamichg/intranet.tjamich.gob.mx/intranet/common/vendors/jstree/src/jstree.checkbox.js |
/** * ### Checkbox plugin * * This plugin renders checkbox icons in front of each node, making multiple selection much easier. * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up. */ /*globals jQuery, define, exports, require, document */ (function (factory) { "use strict"; if (typeof define === 'function' && define.amd) { define('jstree.checkbox', ['jquery','jstree'], factory); } else if(typeof exports === 'object') { factory(require('jquery'), require('jstree')); } else { factory(jQuery, jQuery.jstree); } }(function ($, jstree, undefined) { "use strict"; if($.jstree.plugins.checkbox) { return; } var _i = document.createElement('I'); _i.className = 'jstree-icon jstree-checkbox'; /** * stores all defaults for the checkbox plugin * @name $.jstree.defaults.checkbox * @plugin checkbox */ $.jstree.defaults.checkbox = { /** * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`. * @name $.jstree.defaults.checkbox.visible * @plugin checkbox */ visible : true, /** * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`. * @name $.jstree.defaults.checkbox.three_state * @plugin checkbox */ three_state : true, /** * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`. * @name $.jstree.defaults.checkbox.whole_node * @plugin checkbox */ whole_node : true, /** * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`. * @name $.jstree.defaults.checkbox.keep_selected_style * @plugin checkbox */ keep_selected_style : true }; $.jstree.plugins.checkbox = function (options, parent) { this.bind = function () { parent.bind.call(this); this._data.checkbox.uto = false; this.element .on("init.jstree", $.proxy(function () { this._data.checkbox.visible = this.settings.checkbox.visible; if(!this.settings.checkbox.keep_selected_style) { this.element.addClass('jstree-checkbox-no-clicked'); } }, this)) .on("loading.jstree", $.proxy(function () { this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ](); }, this)); if(this.settings.checkbox.three_state) { this.element .on('changed.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () { if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50); }, this)) .on('model.jstree', $.proxy(function (e, data) { var m = this._model.data, p = m[data.parent], dpc = data.nodes, chd = [], c, i, j, k, l, tmp; // apply down if(p.state.selected) { for(i = 0, j = dpc.length; i < j; i++) { m[dpc[i]].state.selected = true; } this._data.core.selected = this._data.core.selected.concat(dpc); } else { for(i = 0, j = dpc.length; i < j; i++) { if(m[dpc[i]].state.selected) { for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) { m[m[dpc[i]].children_d[k]].state.selected = true; } this._data.core.selected = this._data.core.selected.concat(m[dpc[i]].children_d); } } } // apply up for(i = 0, j = p.children_d.length; i < j; i++) { if(!m[p.children_d[i]].children.length) { chd.push(m[p.children_d[i]].parent); } } chd = $.vakata.array_unique(chd); for(k = 0, l = chd.length; k < l; k++) { p = m[chd[k]]; while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state.selected; } if(c === j) { p.state.selected = true; this._data.core.selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass('jstree-clicked'); } } else { break; } p = this.get_node(p.parent); } } this._data.core.selected = $.vakata.array_unique(this._data.core.selected); }, this)) .on('select_node.jstree', $.proxy(function (e, data) { var obj = data.node, m = this._model.data, par = this.get_node(obj.parent), dom = this.get_node(obj, true), i, j, c, tmp; this._data.core.selected = $.vakata.array_unique(this._data.core.selected.concat(obj.children_d)); for(i = 0, j = obj.children_d.length; i < j; i++) { tmp = m[obj.children_d[i]]; tmp.state.selected = true; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } } while(par && par.id !== '#') { c = 0; for(i = 0, j = par.children.length; i < j; i++) { c += m[par.children[i]].state.selected; } if(c === j) { par.state.selected = true; this._data.core.selected.push(par.id); tmp = this.get_node(par, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass('jstree-clicked'); } } else { break; } par = this.get_node(par.parent); } if(dom.length) { dom.find('.jstree-anchor').addClass('jstree-clicked'); } }, this)) .on('deselect_all.jstree', $.proxy(function (e, data) { var obj = this.get_node('#'), m = this._model.data, i, j, tmp; for(i = 0, j = obj.children_d.length; i < j; i++) { tmp = m[obj.children_d[i]]; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } } }, this)) .on('deselect_node.jstree', $.proxy(function (e, data) { var obj = data.node, dom = this.get_node(obj, true), i, j, tmp; if(obj && obj.original && obj.original.state && obj.original.state.undetermined) { obj.original.state.undetermined = false; } for(i = 0, j = obj.children_d.length; i < j; i++) { tmp = this._model.data[obj.children_d[i]]; tmp.state.selected = false; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } } for(i = 0, j = obj.parents.length; i < j; i++) { tmp = this._model.data[obj.parents[i]]; tmp.state.selected = false; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } tmp = this.get_node(obj.parents[i], true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').removeClass('jstree-clicked'); } } tmp = []; for(i = 0, j = this._data.core.selected.length; i < j; i++) { if($.inArray(this._data.core.selected[i], obj.children_d) === -1 && $.inArray(this._data.core.selected[i], obj.parents) === -1) { tmp.push(this._data.core.selected[i]); } } this._data.core.selected = $.vakata.array_unique(tmp); if(dom.length) { dom.find('.jstree-anchor').removeClass('jstree-clicked'); } }, this)) .on('delete_node.jstree', $.proxy(function (e, data) { var p = this.get_node(data.parent), m = this._model.data, i, j, c, tmp; while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state.selected; } if(c === j) { p.state.selected = true; this._data.core.selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass('jstree-clicked'); } } else { break; } p = this.get_node(p.parent); } }, this)) .on('move_node.jstree', $.proxy(function (e, data) { var is_multi = data.is_multi, old_par = data.old_parent, new_par = this.get_node(data.parent), m = this._model.data, p, c, i, j, tmp; if(!is_multi) { p = this.get_node(old_par); while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state.selected; } if(c === j) { p.state.selected = true; this._data.core.selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass('jstree-clicked'); } } else { break; } p = this.get_node(p.parent); } } p = new_par; while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state.selected; } if(c === j) { if(!p.state.selected) { p.state.selected = true; this._data.core.selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass('jstree-clicked'); } } } else { if(p.state.selected) { p.state.selected = false; this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').removeClass('jstree-clicked'); } } else { break; } } p = this.get_node(p.parent); } }, this)); } }; /** * set the undetermined state where and if necessary. Used internally. * @private * @name _undetermined() * @plugin checkbox */ this._undetermined = function () { var i, j, m = this._model.data, s = this._data.core.selected, p = [], t = this; for(i = 0, j = s.length; i < j; i++) { if(m[s[i]] && m[s[i]].parents) { p = p.concat(m[s[i]].parents); } } // attempt for server side undetermined state this.element.find('.jstree-closed').not(':has(.jstree-children)') .each(function () { var tmp = t.get_node(this), tmp2; if(!tmp.state.loaded) { if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) { p.push(tmp.id); p = p.concat(tmp.parents); } } else { for(i = 0, j = tmp.children_d.length; i < j; i++) { tmp2 = m[tmp.children_d[i]]; if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) { p.push(tmp2.id); p = p.concat(tmp2.parents); } } } }); p = $.vakata.array_unique(p); p = $.vakata.array_remove_item(p,'#'); this.element.find('.jstree-undetermined').removeClass('jstree-undetermined'); for(i = 0, j = p.length; i < j; i++) { if(!m[p[i]].state.selected) { s = this.get_node(p[i], true); if(s && s.length) { s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined'); } } } }; this.redraw_node = function(obj, deep, is_callback) { obj = parent.redraw_node.call(this, obj, deep, is_callback); if(obj) { var i, j, tmp = null; for(i = 0, j = obj.childNodes.length; i < j; i++) { if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { tmp = obj.childNodes[i]; break; } } if(tmp) { tmp.insertBefore(_i.cloneNode(false), tmp.childNodes[0]); } } if(!is_callback && this.settings.checkbox.three_state) { if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50); } return obj; }; this.activate_node = function (obj, e) { if(this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox')) { e.ctrlKey = true; } return parent.activate_node.call(this, obj, e); }; /** * show the node checkbox icons * @name show_checkboxes() * @plugin checkbox */ this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); }; /** * hide the node checkbox icons * @name hide_checkboxes() * @plugin checkbox */ this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); }; /** * toggle the node icons * @name toggle_checkboxes() * @plugin checkbox */ this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } }; }; // include the checkbox plugin by default // $.jstree.defaults.plugins.push("checkbox"); }));