|
- /**
- * ### Wholerow plugin
- *
- * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers.
- */
- /*globals jQuery, define, exports, require */
- (function (factory) {
- "use strict";
- if (typeof define === 'function' && define.amd) {
- define('jstree.wholerow', ['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.wholerow) { return; }
-
- var div = document.createElement('DIV');
- div.setAttribute('unselectable','on');
- div.setAttribute('role','presentation');
- div.className = 'jstree-wholerow';
- div.innerHTML = ' ';
- $.jstree.plugins.wholerow = function (options, parent) {
- this.bind = function () {
- parent.bind.call(this);
-
- this.element
- .on('ready.jstree set_state.jstree', $.proxy(function () {
- this.hide_dots();
- }, this))
- .on("init.jstree loading.jstree ready.jstree", $.proxy(function () {
- //div.style.height = this._data.core.li_height + 'px';
- this.get_container_ul().addClass('jstree-wholerow-ul');
- }, this))
- .on("deselect_all.jstree", $.proxy(function (e, data) {
- this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
- }, this))
- .on("changed.jstree", $.proxy(function (e, data) {
- this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');
- var tmp = false, i, j;
- for(i = 0, j = data.selected.length; i < j; i++) {
- tmp = this.get_node(data.selected[i], true);
- if(tmp && tmp.length) {
- tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
- }
- }
- }, this))
- .on("open_node.jstree", $.proxy(function (e, data) {
- this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');
- }, this))
- .on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) {
- if(e.type === "hover_node" && this.is_disabled(data.node)) { return; }
- this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered');
- }, this))
- .on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) {
- if (this._data.contextmenu) {
- e.preventDefault();
- var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });
- $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp);
- }
- }, this))
- /*!
- .on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) {
- if(e.target === e.currentTarget) {
- var a = $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor");
- e.target = a[0];
- a.trigger(e);
- }
- })
- */
- .on("click.jstree", ".jstree-wholerow", function (e) {
- e.stopImmediatePropagation();
- var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
- $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
- })
- .on("dblclick.jstree", ".jstree-wholerow", function (e) {
- e.stopImmediatePropagation();
- var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
- $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
- })
- .on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) {
- e.stopImmediatePropagation();
- var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });
- $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus();
- }, this))
- .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) {
- e.stopImmediatePropagation();
- if(!this.is_disabled(e.currentTarget)) {
- this.hover_node(e.currentTarget);
- }
- return false;
- }, this))
- .on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) {
- this.dehover_node(e.currentTarget);
- }, this));
- };
- this.teardown = function () {
- if(this.settings.wholerow) {
- this.element.find(".jstree-wholerow").remove();
- }
- parent.teardown.call(this);
- };
- this.redraw_node = function(obj, deep, callback, force_render) {
- obj = parent.redraw_node.apply(this, arguments);
- if(obj) {
- var tmp = div.cloneNode(true);
- //tmp.style.height = this._data.core.li_height + 'px';
- if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }
- if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }
- obj.insertBefore(tmp, obj.childNodes[0]);
- }
- return obj;
- };
- };
- // include the wholerow plugin by default
- // $.jstree.defaults.plugins.push("wholerow");
- }));
|