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;