1f1b38c1c05c0e0011260a38a9eb926cd6038afd
max
  Tue Mar 12 14:00:43 2013 -0700
new pubsBlat format allows to specify mouseover text and labels as part of primary table, without join. Also allows to define classes of papers and color them via a second table
diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 139ce9b..1508575 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -1985,38 +1985,40 @@
 puts("&nbsp;<B>Show reverse complements of motifs also</B>");
 puts("<P>Options for slides and presentations:");
 puts("<P><B>Title:&nbsp;</B>");
 cgiMakeTextVar(titleVar, title, 30);
 puts("<P><B>Display:&nbsp;</B>");
 cgiMakeCheckBox(BASE_SHOWASM, showAsm);
 puts("&nbsp;<B>assembly&nbsp;</B>");
 cgiMakeCheckBox(BASE_SHOWPOS, showPos);
 puts("&nbsp;<B>position</B>");
 
 }
 
 void pubsUi(struct trackDb *tdb)
 /* UI for pubs match track */
 {
-#define NUM_YEARS 30  // similar to google scholar, which goes back to 20 years
+#define NUM_YEARS 15  // similar to google scholar, which goes back to 20 years
 
 #define PUBS_KEYWORDS_TAG "pubsKeywords"
 #define PUBS_YEAR_TAG     "pubsYear"
+#define PUBS_COLORBY_TAG    "pubsColorBy"
 
 // get current set filters from cart
 char *keywords   = cartUsualStringClosestToHome(cart, tdb, FALSE, PUBS_KEYWORDS_TAG, "");
 char *yearFilter = cartUsualStringClosestToHome(cart, tdb, FALSE, PUBS_YEAR_TAG, "anytime");
+char *colorBy    = cartUsualStringClosestToHome(cart, tdb, FALSE, PUBS_COLORBY_TAG, "topic");
 
 // print keyword input box
 puts("<P><B>Filter articles by keywords in abstract, title or authors:</B>");
 char cgiVar[128];
 safef(cgiVar,sizeof(cgiVar),"%s.%s",tdb->track,PUBS_KEYWORDS_TAG);
 cgiMakeTextVar(cgiVar, keywords, 45);
 
 // generate strings like "since <year>" for last 30 years
 char *text[NUM_YEARS + 1];
 char *values[NUM_YEARS + 1];
 text[0] = "anytime";
 values[0] = "anytime";
 time_t nowTime = time(NULL);
 struct tm *tm = localtime(&nowTime);
 int nowYear = 1900 + tm->tm_year;
@@ -2024,30 +2026,38 @@
 int i;
 for(i = 0; i < NUM_YEARS; i++)
     {
     char buf[20];
     safef(buf, sizeof(buf), "since %d", nowYear - i);
     text[i + 1] = cloneString(buf);
     safef(buf, sizeof(buf), "%d", nowYear - i);
     values[i + 1] = cloneString(buf);
     }
 
 // print dropdown box with "since <year>" lines
 puts("</P><P>\n");
 printf("<B>Show articles published </B>");
 safef(cgiVar,sizeof(cgiVar),"%s.%s",tdb->track,PUBS_YEAR_TAG);
 cgiDropDownWithTextValsAndExtra(cgiVar, text, values, NUM_YEARS + 1, yearFilter, NULL);
+
+// print dropdown box with "since <year>" lines
+puts("</P><P>\n");
+printf("<B>Color sequence matches by </B>");
+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("</P>\n");
 }
 
 
 void oligoMatchUi(struct trackDb *tdb)
 /* UI for oligo match track */
 {
 char *oligo = cartUsualString(cart, oligoMatchVar, oligoMatchDefault);
 puts("<P><B>Short (2-30 base) sequence:</B>");
 cgiMakeTextVar(oligoMatchVar, oligo, 45);
 }
 
 void cutterUi(struct trackDb *tdb)
 /* UI for restriction enzyme track */
 {