478610d3be4abc22e330f4fbb154a2ac8ac4abfa max Tue Jan 20 15:24:18 2026 -0800 add strand filter option to oligoMatch track refs #36984 Co-Authored-By: Claude Opus 4.5 diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c index cacbbcb946b..c1c21d0ac0e 100644 --- src/hg/hgTrackUi/hgTrackUi.c +++ src/hg/hgTrackUi/hgTrackUi.c @@ -2242,42 +2242,51 @@ puts("

\n"); printf("Color sequence matches by "); char *colorText[3] = {"topic", "impact of journal", "year"}; char *colorVals[3] = {"topic", "impact", "year"}; safef(cgiVar,sizeof(cgiVar),"%s.%s",tdb->track,PUBS_COLORBY_TAG); cgiDropDownWithTextValsAndExtra(cgiVar, colorText, colorVals, 3, colorBy, NULL); puts("

\n"); wigOption(cart, tdb->track, tdb->shortLabel, tdb); } void oligoMatchUi(struct trackDb *tdb) /* UI for oligo match track */ { char *oligo = cartUsualString(cart, oligoMatchVar, oligoMatchDefault); +char *strand = cartUsualString(cart, oligoMatchStrandVar, oligoMatchStrandDefault); puts("

Short (2-30 base) sequence:"); jsInline( "function packTrack()\n" "{\n" "var box = jQuery('select[name$=oligoMatch]');\n" "if (box.val()=='hide')\n" " box.val('pack');\n" "}\n"); printf("", oligoMatchVar, oligoMatchVar, 45, oligo); puts("
Examples: TATAWAAR, AAAAA"); jsOnEventById("input", oligoMatchVar, "packTrack();"); + +puts("

Search strand: "); +cgiMakeRadioButton(oligoMatchStrandVar, "both", sameString(strand, "both")); +puts(" Both "); +cgiMakeRadioButton(oligoMatchStrandVar, "forward", sameString(strand, "forward")); +puts(" Forward (+) "); +cgiMakeRadioButton(oligoMatchStrandVar, "reverse", sameString(strand, "reverse")); +puts(" Reverse (-) "); } void cutterUi(struct trackDb *tdb) /* UI for restriction enzyme track */ { char *enz = cartUsualString(cart, cutterVar, cutterDefault); puts("

Filter display by enzymes (separate with commas):
"); cgiMakeTextVar(cutterVar, enz, 100); } void genericWiggleUi(struct trackDb *tdb, int optionNum ) /* put up UI for any standard wiggle track (a.k.a. sample track)*/ { char options[7][256];