94f9b53d3db05371699a8fae11407acf0b30e02f
braney
  Wed Jul 8 16:22:22 2026 -0700
Fix three base-position ruler click issues: show "1 base" instead of "0 bases" at single-base zoom, make single clicks recenter symmetrically instead of drifting one base left, and stop a click on the ruler track's grey side-label strip from hijacking the config popup to do a zoom. refs #27113

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 4a6a891c84c..4373ed0e182 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -1950,30 +1950,38 @@
     {
     scaleBases = pow(10, numFigs);
     scaleBasesTextNum = pow(10, numFigs % 3);
     }
 else if (frontNum > 4)
     {
     scaleBases = 2 * pow(10, numFigs);
     scaleBasesTextNum = 2 * pow(10, numFigs % 3);
     }
 if ((numFigs >= 3) && (numFigs < 6))
     baseWord = "kb";
 else if ((numFigs >= 6) && (numFigs < 9))
     baseWord = "Mb";
 else if ((numFigs >= 9) && (numFigs < 12))
     baseWord = "Gb";
+// At single-base zoom numBases is 1, which sends the frontNum==1 branch below zero
+// and rounds the scale down to a nonsensical "0 bases".  Never let it drop below one base.
+if (scaleBases < 1)
+    scaleBases = 1;
+if (scaleBasesTextNum < 1)
+    scaleBasesTextNum = 1;
+if ((scaleBasesTextNum == 1) && sameString(baseWord, "bases"))
+    baseWord = "base";
 safef(scaleText, scaleTextSize, "%d %s", scaleBasesTextNum, baseWord);
 return scaleBases;
 }
 
 enum trackVisibility limitedVisFromComposite(struct track *subtrack)
 /* returns the subtrack visibility which may be limited by composite with multi-view dropdowns. */
 {
 if (tdbIsCompositeChild(subtrack->tdb))
     {
     if (!subtrack->limitedVisSet)
         {
         subtrack->visibility = tdbVisLimitedByAncestors(cart, subtrack->tdb, TRUE, TRUE);
         limitVisibility(subtrack);
         }
     }