9b0b0bcba6332c559c8834d1b34c386b9692e485
hiram
  Mon Nov 16 08:25:02 2020 -0800
avoid wigMaf track types and composite tracks with children (overlayed wiggles) refs #21980

diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js
index 730b127..e3b4126 100644
--- src/hg/js/hgTracks.js
+++ src/hg/js/hgTracks.js
@@ -3783,31 +3783,31 @@
                 }
 
                 // Need to update vis box (in case this is reached via back-button)
                 if (imageV2.backSupport && fullImageReload) {
                     // Update abbr so that rows can be resorted properly
                     var abbr = $(newTr).attr('abbr');
 
                     if (abbr) {
                         $(tr).attr('abbr', abbr);
                     }
 
                     if (newJsonRec)
                         vis.update(id, vis.enumOrder[newJsonRec.visibility]);
                 }
                 // hg.conf will turn this on 2020-10 - Hiram
-                if (window.mouseOverEnabled) { mouseOver.updateMouseOver(id); }
+                if (window.mouseOverEnabled) { mouseOver.updateMouseOver(id, newJsonRec); }
                 return true;
             }
         }
         return false;
     },
 
     updateImgForAllIds: function (response, oldJson, newJson)
     {   // update all rows in imgTbl based upon navigateInPlace response.
         var imgTbl = $('#imgTbl');
 
         // We update rows one at a time 
         // (b/c updating the whole imgTbl at one time doesn't work in IE).
         var id;
         for (id in newJson.trackDb) {
             var newJsonRec = newJson.trackDb[id];
@@ -4486,47 +4486,60 @@
     // tracks{}  - tracks that were set up initially, key is track name
     //             value is the number of boxes (for debugging)
     // maximumWidth{} - key is track name, value is length of longest
     //                         number string as measured when rendered
 
     // given hgt_....png file name, change to trackName_....json file name
     jsonFileName: function(imgElement, trackName)
     {
       var jsonFile=imgElement.src.replace("hgt/hgt_", "hgt/" + trackName + "_");
       jsonFile = jsonFile.replace(".png", ".json");
       return jsonFile;
     },
 
     // called from: updateImgForId when it has updated a track in place
     // need to refresh the event handlers and json data
-    updateMouseOver: function (trackName)
+    updateMouseOver: function (trackName, trackDb)
     {
+      var trackType = null;
+      var hasChildren = null;
+      if (trackDb) {
+	trackType = trackDb.type;
+	hasChildren = trackDb.hasChildren;
+      } else {
+	if (hgTracks.trackDb) {
+	   if (hgTracks.trackDb[trackName]) {
+	      trackType = hgTracks.trackDb[trackName].type;
+	   }
+	}
+      }
       var tdData = "td_data_" + trackName;
       var tdDataId  = document.getElementById(tdData);
       var imgData = "img_data_" + trackName;
       var imgElement  = document.getElementById(imgData);
       if (imgElement && tdDataId) {
         if (mouseOver.tracks[trackName]) {
             $( tdDataId ).mousemove(mouseOver.mouseMoveDelay);
             $( tdDataId ).mouseout(mouseOver.popUpDisappear);
             mouseOver.fetchMapData(mouseOver.jsonFileName(imgElement, trackName), trackName);
         } else {
-	  if (hgTracks.trackDb[trackName]) {
-            var trackType = hgTracks.trackDb[trackName].type;
+	  if (trackType) {
             var validType = false;
             if (trackType.indexOf("wig") === 0) { validType = true; }
             if (trackType.indexOf("bigWig") === 0) { validType = true; }
+            if (trackType.indexOf("wigMaf") === 0) { validType = false; }
+            if (hasChildren) { validType = false; }
             if (validType) {
               $( tdDataId ).mousemove(mouseOver.mouseMoveDelay);
               $( tdDataId ).mouseout(mouseOver.popUpDisappear);
               mouseOver.fetchMapData(mouseOver.jsonFileName(imgElement, trackName), trackName);
             }
           }
         }
       }
     },
 
     // given an X coordinate: x, find the index idx
     // in the rects[idx] array where rects[idx].x1 <= x < rects[idx].x2
     // returning -1 when not found
     // if we knew the array was sorted on x1 we could get out early
     //   when x < x1