5199438a1019eff8b60a3f9bc404b6494ed800c2
braney
  Tue May 9 07:41:33 2017 -0700
Add menus to do sorting on custom composites.

diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js
index 90abac5..fc40da8 100644
--- src/hg/js/hgTracks.js
+++ src/hg/js/hgTracks.js
@@ -2672,30 +2672,46 @@
 
             url = "hgTrackUi?hgsid=" + getHgsid() + "&g=";
             rec = hgTracks.trackDb[id];
             if (tdbHasParent(rec) && tdbIsLeaf(rec))
                 url += rec.parentTrack;
             else {
                 // The button already has the ref
                 var link = normed($( 'td#td_btn_'+ rightClick.selectedMenuItem.id ).children('a')); 
                 if (link)
                     url = $(link).attr('href');
                 else
                     url += rightClick.selectedMenuItem.id;
             }
             location.assign(url);
 
+        } else if ((cmd === 'sortExp') || (cmd === 'sortSim')) {
+
+            url = "hgTracks?hgsid=" + getHgsid() + "&" + cmd + "=";
+            rec = hgTracks.trackDb[id];
+            if (tdbHasParent(rec) && tdbIsLeaf(rec))
+                url += rec.parentTrack;
+            else {
+                // The button already has the ref
+                var link2 = normed($( 'td#td_btn_'+ rightClick.selectedMenuItem.id ).children('a')); 
+                if (link2)
+                    url = $(link2).attr('href');
+                else
+                    url += rightClick.selectedMenuItem.id;
+            }
+            location.assign(url);
+
         } else if (cmd === 'viewImg') {
             // Fetch a new copy of track img and show it to the user in another window. This code
             // assume we have updated remote cart with all relevant chages (e.g. drag-reorder).
             jQuery('body').css('cursor', 'wait');
             $.ajax({
                     type: "GET",
                     url: "../cgi-bin/hgTracks",
                     data: cart.varsToUrlData({ 'hgt.imageV1': '1','hgt.trackImgOnly': '1', 
                                                'hgsid': getHgsid() }),
                     dataType: "html",
                     trueSuccess: rightClick.handleViewImg,
                     success: catchErrorOrDispatch,
                     error: errorHandler,
                     cmd: cmd,
                     cache: false
@@ -3184,30 +3200,53 @@
                     // Jumps to highlight when not currently seen in image
                     var text = (currentlySeen ? " Zoom" : " Jump") + " to highlight";
                     o[rightClick.makeImgTag("highlightZoom.png") + text] = {
                         onclick: rightClick.makeHitCallback('jumpToHighlight')
                     };
 
                     if ( currentlySeen ) {   // Remove only when seen
                         o[rightClick.makeImgTag("highlightRemove.png") + 
                                                                    " Remove highlight"] = {
                             onclick: rightClick.makeHitCallback('removeHighlight')
                         };
                     }
                     menu.push(o);
                 }
             }
+
+            // add sort options if this is a custom composite
+            if (rec.isCustomComposite) {
+
+                o = {};
+                o[" Sort by Expression "] = {
+                    onclick: function(menuItemClicked, menuObject) {
+                        rightClick.hit(menuItemClicked, menuObject, "sortExp");
+                        return true; }
+                };  
+                menu.push(o);
+
+                o = {};
+                o[" Sort by Similarity "] = {
+                    onclick: function(menuItemClicked, menuObject) {
+                        rightClick.hit(menuItemClicked, menuObject, "sortSim");
+                        return true; }
+                };  
+                menu.push(o);
+
+                menu.push($.contextMenu.separator);
+            }
+
             // Add view image at end
             o = {};
             o[rightClick.makeImgTag("eye.png") + " View image"] = {
                 onclick: function(menuItemClicked, menuObject) {
                     rightClick.hit(menuItemClicked, menuObject, "viewImg");
                     return true; }
             };
             menu.push(o);
 
             return menu;
         },
         {
             beforeShow: function(e) {
                 // console.log(mapItems[rightClick.selectedMenuItem]);
                 rightClick.selectedMenuItem = rightClick.findMapItem(e);