b941fc533ca6f91c5cafaa52e0af5382daff2bc0
braney
  Mon Feb 26 14:19:43 2018 -0800
be smarter about recognizing leaf nodes in track grouping

diff --git src/hg/js/hgCollection.js src/hg/js/hgCollection.js
index 5b8a041..5150671 100644
--- src/hg/js/hgCollection.js
+++ src/hg/js/hgCollection.js
@@ -280,74 +280,77 @@
         isDirty = true;
         var color = $("#customColorPicker").spectrum("get"); 
         $('#customColorInput').val(color);
     }
 
     function isDraggable(nodes) {
         // only children can be dragged
         var ii;
         for (ii=0; ii < nodes.length; ii++)
             if (nodes[ii].children.length !== 0)
                 return false;
         return true;
     }
 
     function checkEmpty(parentId) {
+        // add or remove the "empty collection" stub
         if ($('#'+parentId).hasClass('empty')) {
             var parentNode = $(selectedTree).jstree('get_node', parentId);
             var stub;
             for (i = 0; i < parentNode.children.length; i++) {
                 stub = $(selectedTree).jstree('get_node', parentNode.children[i]);
                 if (stub.icon === true)
                     break;
             }
 
             if (i === parentNode.children.length)
                 return;
 
             $(selectedTree).jstree('delete_node', stub);
             $('#'+parentId).removeClass('empty');
             parentNode.li_attr.class = 'folder';
         }
     }
 
     function findCollection(parentNode) {
         while(parentNode.parent !== '#') {
             parentNode = $(selectedTree).jstree("get_node", parentNode.parent);
         }
 
         return parentNode.id;
     }
     
     function plusHit(event, data) {
         // called with the plus icon is hit
-        if (selectedNode === undefined) {
+        var treeObject = $(event.currentTarget).parent().parent();
+        var id = treeObject.attr('id');
+        var node = treeObject.jstree("get_node", id);
+
+        if (node.icon !== 'fa fa-plus')  // if this isn't a leaf, then return
+            return;
+
+        if (selectedNode === undefined) {   // if there are no collections
             alert(addWithoutCollectionText);
             return;
         }
 
-        var treeObject = $(event.currentTarget).parent().parent();
-        var id = treeObject.attr('id');
-        var node = treeObject.jstree("get_node", id);
-        if (node.children.length === 0) {
         var parentId = $(selectedNode).attr('id');
         parentId = findCollection(selectedNode);
         checkEmpty(parentId);
         isDirty = true;
         $(selectedTree).jstree("copy_node", node, parentId,'last');
     }
-    }
 
     function minusHit (event, data) {
         // called with the minus icon is hit
         var treeObject = $(event.currentTarget).parent().parent();
         var id = treeObject.attr('id');
         var node = treeObject.jstree("get_node", id);
         if (node.parent !== '#') {
             isDirty = true;
             var parentNode = treeObject.jstree("get_node", node.parent);
             if (parentNode.children.length === 1) {
                 treeObject.jstree("create_node", node.parent, emptyCollectionText);
                 parentNode.li_attr.class = "folder empty";
             }
             $(selectedTree).jstree( "delete_node", node);
         }