From bb6bc729ba6faa3262d27db0fcd6f54480b758ce Mon Sep 17 00:00:00 2001
From: karsten gebbert <k@ioctl.it>
Date: Wed, 28 Jan 2015 13:36:33 +0100
Subject: [PATCH] add itemSelect option and associated test cases to tree.js

---
 js/tree.js        | 12 ++++++++++--
 test/tree-test.js | 24 ++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/js/tree.js b/js/tree.js
index 16b6ef225..ae4029cd7 100644
--- a/js/tree.js
+++ b/js/tree.js
@@ -32,7 +32,10 @@
 		this.$element = $(element);
 		this.options = $.extend({}, $.fn.tree.defaults, options);
 
-		this.$element.on('click.fu.tree', '.tree-item', $.proxy( function(ev) { this.selectItem(ev.currentTarget); } ,this));
+		if( this.options.itemSelect ){
+      this.$element.on('click.fu.tree', '.tree-item', $.proxy( function(ev) { this.selectItem(ev.currentTarget); } ,this));
+    }
+
 		this.$element.on('click.fu.tree', '.tree-branch-name', $.proxy( function(ev) { this.openFolder(ev.currentTarget); }, this));
 
 		if( this.options.folderSelect ){
@@ -147,6 +150,8 @@
 		},
 
 		selectItem: function (el) {
+      if(!this.options.itemSelect) return;
+
 			var $el = $(el);
 			var selData = $el.data();
 			var $all = this.$element.find('.tree-selected');
@@ -249,6 +254,8 @@
 		},
 
 		selectFolder: function (clickedElement) {
+      if(!this.options.folderSelect) return;
+
 			var $clickedElement = $(clickedElement);
 			var $clickedBranch = $clickedElement.closest('.tree-branch');
 			var $selectedBranch = this.$element.find('.tree-branch.tree-selected');
@@ -349,7 +356,8 @@
 		dataSource: function(options, callback){},
 		multiSelect: false,
 		cacheItems: true,
-		folderSelect: true
+		folderSelect: true,
+		itemSelect: true
 	};
 
 	$.fn.tree.Constructor = Tree;
diff --git a/test/tree-test.js b/test/tree-test.js
index a40bde387..6f29ce9c9 100644
--- a/test/tree-test.js
+++ b/test/tree-test.js
@@ -142,6 +142,30 @@ define(function(require){
 		equal($tree.tree('selectedItems').length, 1, 'Return single selected value');
 	});
 
+  test("should not allow selecting items if disabled", function() {
+		var $tree = $(html).find('#MyTree');
+
+		$tree.tree({
+			dataSource: this.dataSource,
+			itemSelect: false
+		});
+
+		$tree.tree('selectItem', $tree.find('.tree-item:eq(1)'));
+		equal($tree.tree('selectedItems').length, 0, 'Return no value');
+  });
+
+  test("should not allow selecting folders if disabled", function() {
+		var $tree = $(html).find('#MyTree');
+
+		$tree.tree({
+			dataSource: this.dataSource,
+			folderSelect: false
+		});
+
+		$tree.tree('selectFolder', $tree.find('.tree-branch-name:eq(1)'));
+		equal($tree.tree('selectedItems').length, 0, 'Return no value');
+  });
+
 	test("should destroy control", function () {
 		var $tree = $(html).find('#MyTree');