80b2452df24da8a148ea3bd9ceafe8dd0cdc6e74
larrym
  Fri Aug 13 00:16:19 2010 -0700
changes to make changing visibility work for subtracks
diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js
index cf383ef..2bd7604 100644
--- src/hg/js/hgTracks.js
+++ src/hg/js/hgTracks.js
@@ -1519,16 +1519,14 @@
         // Change visibility settings:
         //
         // First change the select on our form:
-
         var id = selectedMenuItem.id;
         var rec = trackDbJson[id];
-        if(rec && rec.parentTrack) {
-            // currently we fall back to the parentTrack
-            id = rec.parentTrack;
-        }
         $("select[name=" + id + "]").each(function(t) {
             $(this).val(cmd);
                 });
+        if(rec) {
+            rec.localVisibility = cmd;
+        }
 
         // Now change the track image
         if(imageV2 && cmd == 'hide')
@@ -1566,6 +1564,14 @@
     }
 }
 
+function makeContextMenuHitCallback(title)
+{
+// stub to avoid problem with a function closure w/n a loop
+    return function(menuItemClicked, menuObject) {
+        contextMenuHit(menuItemClicked, menuObject, title); return true;
+    };
+}
+
 function loadContextMenu(img)
 {
     var menu = img.contextMenu(
@@ -1580,13 +1586,8 @@
                     isGene = href.match("hgGene");
                     isHgc = href.match("hgc");
                 }
-                var rec = trackDbJson[id];
                 var id = selectedMenuItem.id;
                 var rec = trackDbJson[id];
-                if(rec && rec.parentTrack) {
-                    // currently we fall back to the parentTrack
-                    id = rec.parentTrack;
-                }
                 // XXXX what if select is not available (b/c trackControlsOnMain is off)?
                 // Move functionality to a hidden variable?
                 var select = $("select[name=" + id + "]");
@@ -1604,7 +1605,6 @@
                                            });
                     done = true;
                 } else {
-                    // XXXX currently dead code (unless JSON is enabled in hgTracks.c)
                     if(rec) {
                         // XXXX check current state from a hidden variable.
                         var visibilityStrsOrder = new Array("hide", "dense", "full", "pack", "squish");
@@ -1614,10 +1614,14 @@
                             var o = new Object();
                             var str = visibilityStrs[i];
                             if(rec.canPack || (str != "pack" && str != "squish")) {
-                                if(str == visibilityStrsOrder[rec.visibility]) {
+                                if(rec.localVisibility) {
+                                    if(rec.localVisibility == str) {
                                     str += selectedImg;
                                 }
-                                o[str] = {onclick: function(menuItemClicked, menuObject) { contextMenuHit(menuItemClicked, menuObject, visibilityStrs[i]); return true; }};
+                                } else if(str == visibilityStrsOrder[rec.visibility]) {
+                                    str += selectedImg;
+                                }
+                                o[str] = {onclick: makeContextMenuHitCallback(visibilityStrs[i])};
                                 menu.push(o);
                             }
                         }
@@ -1750,10 +1754,6 @@
           // this updates src in img_left_ID, img_center_ID and img_data_ID and map in map_data_ID
           var id = selectedMenuItem.id;
           var rec = trackDbJson[id];
-          if(rec && rec.parentTrack) {
-              // currently we fall back to the parentTrack
-              id = rec.parentTrack;
-          }
           var str = "<TR id='tr_" + id + "'[^>]*>([\\s\\S]+?)</TR>";
           var reg = new RegExp(str);
           a = reg.exec(response);