b53a97d26633a1f174a7031559a69d37e393379f
chmalee
  Fri May 1 14:19:19 2026 -0700
Allow myVariants tracks to be shared similar to google docs, read only and read+edit access by username or for all. Last write wins. Currently no history of changes, leaving that for the next version of the feature

diff --git src/hg/hgTracks/config.c src/hg/hgTracks/config.c
index 748ec3ab426..c34f1d89cda 100644
--- src/hg/hgTracks/config.c
+++ src/hg/hgTracks/config.c
@@ -765,30 +765,59 @@
 hPrintf("</TD><TD>");
 hPrintf("Enable highlight with drag-and-select "
         "(if unchecked, drag-and-select always zooms to selection)");
 hPrintf("</TD></TR>\n");
 
 // check if we can do hgc pages in a pop up before putting up the user control
 if (cfgOptionBooleanDefault("canDoHgcInPopUp", TRUE))
     {
     // put a checkbox, on by default, to control whether item clicks stay on hgTracks or
     // go to hgTracks
     hPrintf("<tr><td>");
     hCheckBox("doHgcInPopUp", cartUsualBoolean(cart, "doHgcInPopUp", TRUE));
     hPrintf("<td>Enable pop-up when clicking items</td></tr>\n");
     }
 
+// My Variants navigation preference reset - stored in localStorage
+if (cfgOptionBooleanDefault("doMyVariants", FALSE))
+    {
+    hPrintf("<TR><TD>");
+    hPrintf("<input type='checkbox' id='resetMyVariantsNav' name='resetMyVariantsNav'>");
+    hPrintf("</TD><TD>");
+    hPrintf("Reset 'My Variants' navigation preference (currently: <span id='myVariantsNavPrefDisplay'>not set</span>)");
+    hPrintf("</TD></TR>\n");
+    // Display current preference and clear localStorage on form submit if checkbox is checked
+    jsInlineF(
+        "document.addEventListener('DOMContentLoaded', function() {"
+        "    var prefSpan = document.getElementById('myVariantsNavPrefDisplay');"
+        "    if (prefSpan) {"
+        "        var pref = localStorage.getItem('myVariants_navPref');"
+        "        prefSpan.textContent = pref ? pref : 'not set';"
+        "    }"
+        "    var form = document.forms['TrackForm'] || document.forms['TrackHeaderForm'];"
+        "    if (form) {"
+        "        form.addEventListener('submit', function() {"
+        "            var cb = document.getElementById('resetMyVariantsNav');"
+        "            if (cb && cb.checked) {"
+        "                localStorage.removeItem('myVariants_navPref');"
+        "            }"
+        "        });"
+        "    }"
+        "});"
+    );
+    }
+
 hTableEnd();
 
 
 cgiDown(0.9);
 
 char buf[256];
 char *freeze = hFreezeFromDb(database);
 if (freeze == NULL)
     safef(buf, sizeof buf, "Configure Tracks on %s %s: %s",
 	  organization, browserName, trackHubSkipHubName(organism));
 else if (stringIn(database, freeze))
     safef(buf, sizeof buf, "Configure Tracks on %s %s: %s %s",
 	  organization, browserName, trackHubSkipHubName(organism), freeze);
 else
     safef(buf, sizeof buf, "Configure Tracks on %s %s: %s %s (%s)",