7d86d32d1dd31afc7508edb2ee157a583cc5e6e3
max
  Mon May 19 06:46:24 2025 -0700
improve exon mouseover for genePreds after feedback from QA, refs #33749

diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c
index 35869b057d2..46dff1be32e 100644
--- src/hg/hgTracks/simpleTracks.c
+++ src/hg/hgTracks/simpleTracks.c
@@ -2659,55 +2659,57 @@
 if (*pNewWinEnd > virtSeqBaseCount)
     *pNewWinEnd = virtSeqBaseCount;
 *pNewWinStart = *pNewWinEnd - newWinSize;
 }
 
 #define EXONTEXTLEN 4096
 
 static void makeExonFrameText(int exonIntronNumber, int numExons, int startPhase, int endPhase, char *buf) 
 /* Write mouseover text that describes the exon's phase into buf[EXONTEXTLEN].
 
    Note that start/end-phases are in the direction of transcription:
    if transcript is on + strand, the start phase is the exonFrame value, and the end phase is the next exonFrame (3' on DNA) value
    if transcript is on - strand, the start phase is the previous (=3' on DNA) exonFrame and the end phase is the exonFrame */
 {
 
-static const char *phaseHelp = "<a style='float:right' target=_blank href='../goldenPath/help/codonPhase.html'>Help</a><br>";
-
 if (startPhase==-1) // UTRs don't have a frame at all
     {
     safef(buf, EXONTEXTLEN, "<b>No Codon:</b> Untranslated region<br>");
     }
 else
     {
     char *exonNote = "";
     boolean isNotLastExon = (exonIntronNumber<numExons);
+
+    static const char *phasePrefix  = 
+        "<b><a target=_blank href='../goldenPath/help/codonPhase.html'>Codon phase: <i class='fa fa-question-circle-o'></i></a></b>";
+
     if (isNotLastExon)
         {
         if (startPhase==endPhase)
             exonNote = ": in-frame exon";
         else
             exonNote = ": out-of-frame exon";
-        safef(buf, EXONTEXTLEN, "<b>Codon phase:</b> start %d, end %d%s<br>%s", startPhase, endPhase, exonNote, phaseHelp);
+        safef(buf, EXONTEXTLEN, "%s start %d, end %d%s<br>", phasePrefix, startPhase, endPhase, exonNote);
         } 
     else
         {
         if (startPhase==0)
             exonNote = ": in-frame exon";
         else
             exonNote = ": out-of-frame exon";
-        safef(buf, EXONTEXTLEN, "<b>Codon phase:</b> start %d%s<br>%s", startPhase, exonNote, phaseHelp);
+        safef(buf, EXONTEXTLEN, "%s start %d%s<br>", phasePrefix, startPhase, exonNote);
         }
     }
 }
 
 boolean linkedFeaturesNextPrevItem(struct track *tg, struct hvGfx *hvg, void *item, int x, int y, int w, int h, boolean next)
 /* Draw a mapBox over the arrow-button on an *item already in the window*. */
 /* Clicking this will do one of several things: */
 {
 boolean result = FALSE;
 struct linkedFeatures *lf = item;
 struct simpleFeature *exons = lf->components;
 struct simpleFeature *exon = exons;
 char *nextExonText;
 char *prevExonText;
 long newWinSize = virtWinEnd - virtWinStart;