Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,6 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-copy');

// register one or more task lists (you should ALWAYS have a "default" task list)
grunt.registerTask('default', ['uglify', 'cssmin', 'copy', 'qunit', 'watch']);
grunt.registerTask('default', ['uglify', 'cssmin', 'copy', /*'qunit' 'watch'*/]);
grunt.registerTask('test', 'qunit');
};
74 changes: 71 additions & 3 deletions dist/bootstrap-treeview.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@
onNodeEnabled: undefined,
onNodeExpanded: undefined,
onNodeSelected: undefined,
onNodeEnter: undefined,
onNodeLeave: undefined,
onNodeContextMenu: undefined,
onNodeUnchecked: undefined,
onNodeUnselected: undefined,

Expand Down Expand Up @@ -126,9 +129,11 @@

// Query methods
findNodes: $.proxy(this.findNodes, this),
getTree: $.proxy(this.getTree, this), // todo document + test
getNodes: $.proxy(this.getNodes, this), // todo document + test
getParents: $.proxy(this.getParents, this),
getSiblings: $.proxy(this.getSiblings, this),
getRootNodes: $.proxy(this.getRootNodes, this),
getSelected: $.proxy(this.getSelected, this),
getUnselected: $.proxy(this.getUnselected, this),
getExpanded: $.proxy(this.getExpanded, this),
Expand Down Expand Up @@ -264,12 +269,17 @@
this.$element.off('rendered');
this.$element.off('destroyed');
this.$element.off('click');
this.$element.off('mouseover');
this.$element.off('mouseleave');
this.$element.off('nodeChecked');
this.$element.off('nodeCollapsed');
this.$element.off('nodeDisabled');
this.$element.off('nodeEnabled');
this.$element.off('nodeExpanded');
this.$element.off('nodeSelected');
this.$element.off('nodeEnter');
this.$element.off('nodeLeave');
this.$element.off('nodeContextMenu');
this.$element.off('nodeUnchecked');
this.$element.off('nodeUnselected');
this.$element.off('searchComplete');
Expand Down Expand Up @@ -305,6 +315,12 @@

this.$element.on('click', $.proxy(this._clickHandler, this));

this.$element.on('mouseover', $.proxy(this._mouseoverHandler, this));

this.$element.on('mouseleave', $.proxy(this._mouseleaveHandler, this));

this.$element.on('contextmenu', $.proxy(this._contextmenuHandler, this));

if (typeof (this._options.onNodeChecked) === 'function') {
this.$element.on('nodeChecked', this._options.onNodeChecked);
}
Expand All @@ -329,6 +345,18 @@
this.$element.on('nodeSelected', this._options.onNodeSelected);
}

if (typeof (this._options.onNodeEnter) === 'function') {
this.$element.on('nodeEnter', this._options.onNodeEnter);
}

if (typeof (this._options.onNodeLeave) === 'function') {
this.$element.on('nodeLeave', this._options.onNodeLeave);
}

if (typeof (this._options.onNodeContextMenu) === 'function') {
this.$element.on('nodeContextMenu', this._options.onNodeContextMenu);
}

if (typeof (this._options.onNodeUnchecked) === 'function') {
this.$element.on('nodeUnchecked', this._options.onNodeUnchecked);
}
Expand Down Expand Up @@ -487,7 +515,6 @@
};

Tree.prototype._clickHandler = function (event) {

var target = $(event.target);
var node = this.targetNode(target);
if (!node || node.state.disabled) return;
Expand All @@ -510,6 +537,27 @@
}
};

Tree.prototype._mouseoverHandler = function (event) {
var target = $(event.target);
var node = this.targetNode(target);
this._triggerEvent('nodeEnter', node, _default.options);
};

Tree.prototype._mouseleaveHandler = function (event) {
this._triggerEvent('nodeLeave', null, _default.options);
};

Tree.prototype._contextmenuHandler = function (event) {
event.preventDefault();
var target = $(event.target);
var node = this.targetNode(target);
if (node) {
node.clientX = event.pageX;
node.clientY = event.pageY;
this._triggerEvent('nodeContextMenu', node, _default.options);
}
};

// Looks up the DOM for the closest parent list item to retrieve the
// data attribute nodeid, which is used to lookup the node in the flattened structure.
Tree.prototype.targetNode = function (target) {
Expand Down Expand Up @@ -1179,11 +1227,15 @@
@param {String} pattern - A pattern to match against a given field
@return {String} field - Field to query pattern against
*/
Tree.prototype.findNodes = function (pattern, field) {
return this._findNodes(pattern, field);
Tree.prototype.findNodes = function (pattern, field, modifier) {
return this._findNodes(pattern, field, modifier);
};


Tree.prototype.getTree = function () {
return this._tree;
};

/**
Returns an ordered aarray of node objects.
@return {Array} nodes - An array of all nodes
Expand Down Expand Up @@ -1237,6 +1289,22 @@
});
};

Tree.prototype.getRootNodes = function () {
var siblingNodes = [];
var nodes = this._tree;
$.each(nodes, $.proxy(function (index, node) {
siblingNodes = nodes.filter(function (obj) {
return obj.nodeId !== node.nodeId;
});
}, this));

// flatten possible nested array before returning
return $.map(siblingNodes, function (obj) {
return obj;
});
};


/**
Returns an array of selected nodes.
@returns {Array} nodes - Selected nodes
Expand Down
2 changes: 1 addition & 1 deletion dist/bootstrap-treeview.min.js

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,13 @@
},
"dependencies": {
"bootstrap": "3.3.x",
"jquery": ">= 2.1.x"
"copy": "^0.3.1",
"cssmin": "^0.4.3",
"jquery": ">= 2.1.x",
"qunit": "^2.4.1",
"require": "^2.4.20",
"uglify": "^0.1.5",
"watch": "^1.0.2"
},
"devDependencies": {
"bower": "1.3.x",
Expand Down
4 changes: 3 additions & 1 deletion public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,9 @@ <h2></h2>


$('#treeview1').treeview({
data: defaultData
data: defaultData,
onNodeSelected: function (event, node) { console.log("SELECT");},
onNodeContextMenu: function (event, node) { alert('CONTEXT X:' + node.clientX + " Y:" + node.clientY);}
});

$('#treeview2').treeview({
Expand Down
74 changes: 71 additions & 3 deletions public/js/bootstrap-treeview.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@
onNodeEnabled: undefined,
onNodeExpanded: undefined,
onNodeSelected: undefined,
onNodeEnter: undefined,
onNodeLeave: undefined,
onNodeContextMenu: undefined,
onNodeUnchecked: undefined,
onNodeUnselected: undefined,

Expand Down Expand Up @@ -126,9 +129,11 @@

// Query methods
findNodes: $.proxy(this.findNodes, this),
getTree: $.proxy(this.getTree, this), // todo document + test
getNodes: $.proxy(this.getNodes, this), // todo document + test
getParents: $.proxy(this.getParents, this),
getSiblings: $.proxy(this.getSiblings, this),
getRootNodes: $.proxy(this.getRootNodes, this),
getSelected: $.proxy(this.getSelected, this),
getUnselected: $.proxy(this.getUnselected, this),
getExpanded: $.proxy(this.getExpanded, this),
Expand Down Expand Up @@ -264,12 +269,17 @@
this.$element.off('rendered');
this.$element.off('destroyed');
this.$element.off('click');
this.$element.off('mouseover');
this.$element.off('mouseleave');
this.$element.off('nodeChecked');
this.$element.off('nodeCollapsed');
this.$element.off('nodeDisabled');
this.$element.off('nodeEnabled');
this.$element.off('nodeExpanded');
this.$element.off('nodeSelected');
this.$element.off('nodeEnter');
this.$element.off('nodeLeave');
this.$element.off('nodeContextMenu');
this.$element.off('nodeUnchecked');
this.$element.off('nodeUnselected');
this.$element.off('searchComplete');
Expand Down Expand Up @@ -305,6 +315,12 @@

this.$element.on('click', $.proxy(this._clickHandler, this));

this.$element.on('mouseover', $.proxy(this._mouseoverHandler, this));

this.$element.on('mouseleave', $.proxy(this._mouseleaveHandler, this));

this.$element.on('contextmenu', $.proxy(this._contextmenuHandler, this));

if (typeof (this._options.onNodeChecked) === 'function') {
this.$element.on('nodeChecked', this._options.onNodeChecked);
}
Expand All @@ -329,6 +345,18 @@
this.$element.on('nodeSelected', this._options.onNodeSelected);
}

if (typeof (this._options.onNodeEnter) === 'function') {
this.$element.on('nodeEnter', this._options.onNodeEnter);
}

if (typeof (this._options.onNodeLeave) === 'function') {
this.$element.on('nodeLeave', this._options.onNodeLeave);
}

if (typeof (this._options.onNodeContextMenu) === 'function') {
this.$element.on('nodeContextMenu', this._options.onNodeContextMenu);
}

if (typeof (this._options.onNodeUnchecked) === 'function') {
this.$element.on('nodeUnchecked', this._options.onNodeUnchecked);
}
Expand Down Expand Up @@ -487,7 +515,6 @@
};

Tree.prototype._clickHandler = function (event) {

var target = $(event.target);
var node = this.targetNode(target);
if (!node || node.state.disabled) return;
Expand All @@ -510,6 +537,27 @@
}
};

Tree.prototype._mouseoverHandler = function (event) {
var target = $(event.target);
var node = this.targetNode(target);
this._triggerEvent('nodeEnter', node, _default.options);
};

Tree.prototype._mouseleaveHandler = function (event) {
this._triggerEvent('nodeLeave', null, _default.options);
};

Tree.prototype._contextmenuHandler = function (event) {
event.preventDefault();
var target = $(event.target);
var node = this.targetNode(target);
if (node) {
node.clientX = event.pageX;
node.clientY = event.pageY;
this._triggerEvent('nodeContextMenu', node, _default.options);
}
};

// Looks up the DOM for the closest parent list item to retrieve the
// data attribute nodeid, which is used to lookup the node in the flattened structure.
Tree.prototype.targetNode = function (target) {
Expand Down Expand Up @@ -1179,11 +1227,15 @@
@param {String} pattern - A pattern to match against a given field
@return {String} field - Field to query pattern against
*/
Tree.prototype.findNodes = function (pattern, field) {
return this._findNodes(pattern, field);
Tree.prototype.findNodes = function (pattern, field, modifier) {
return this._findNodes(pattern, field, modifier);
};


Tree.prototype.getTree = function () {
return this._tree;
};

/**
Returns an ordered aarray of node objects.
@return {Array} nodes - An array of all nodes
Expand Down Expand Up @@ -1237,6 +1289,22 @@
});
};

Tree.prototype.getRootNodes = function () {
var siblingNodes = [];
var nodes = this._tree;
$.each(nodes, $.proxy(function (index, node) {
siblingNodes = nodes.filter(function (obj) {
return obj.nodeId !== node.nodeId;
});
}, this));

// flatten possible nested array before returning
return $.map(siblingNodes, function (obj) {
return obj;
});
};


/**
Returns an array of selected nodes.
@returns {Array} nodes - Selected nodes
Expand Down
Loading