0028868b72060a31d1ac6d35407f6d78c7ceb680 kate Tue Nov 7 10:00:48 2017 -0800 Implement text pennantIcon (for 'New' tag). Simplify code while hood is up. refs #20270 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 75611db..92bdd19 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -8384,133 +8384,129 @@ count++; while (sources && sameString(sources->name, source->name)) { source = slPopHead(&sources); fputs(", ", stdout); fputs(source->description, stdout); count++; } webPrintLinkCellEnd(); } sqlFreeResult(&sr); webPrintLinkTableEnd(); printf("Total: %d\n", count); } -boolean printPennantIconNote(struct trackDb *tdb) -// Returns TRUE and prints out the "pennantIcon" and note when found. -//This is used by hgTrackUi and hgc before printing out trackDb "html" +static char *makePennantIcon(struct trackDb *tdb, char **hintRet) +// Builds a string with pennantIcon HTML and returns it. Also returns hint. */ { char *setting = trackDbSetting(tdb, "pennantIcon"); -if (setting != NULL) - { +if (setting == NULL) + return FALSE; + setting = cloneString(setting); char *icon = nextWord(&setting); char buffer[4096]; char *src = NULL; +char *url = NULL, *hint = NULL, *color = NULL; - if (startsWith("http://", icon) || startsWith("ftp://", icon) || - startsWith("https://", icon)) +boolean isTextIcon = FALSE; +if (!(endsWith(icon, ".jpg") || endsWith(icon, ".png"))) + { + isTextIcon = TRUE; + color = nextWord(&setting); + src = strLower(icon); + } +else if (startsWith("http://", icon) || startsWith("https://", icon) || + startsWith("ftp://", icon)) src = htmlEncode(icon); else { safef(buffer, sizeof buffer, "../images/%s", icon); src = htmlEncode(buffer); } - char *url = NULL; - if (setting != NULL) - url = nextWord(&setting); - char *hint = NULL; - if (setting != NULL) - hint = htmlEncode(stripEnclosingDoubleQuotes(setting)); - - if (!isEmpty(url)) +if (setting) { - if (isEmpty(hint)) - printf("<P><a href='%s' TARGET=ucscHelp><img height='16' width='16' " - "src='%s'></a>",url,src); - else + url = nextWord(&setting); + if (setting) { - printf("<P><a title='%s' href='%s' TARGET=ucscHelp><img height='16' width='16' " - "src='%s'></a>",hint,url,src); - - // Special case for liftOver from hg17 or hg18, but this should probably be generalized. - if (sameString(icon,"18.jpg") && startsWithWord("lifted",hint)) - printf(" Note: these data have been converted via liftOver from the Mar. 2006 " - "(NCBI36/hg18) version of the track."); - else if (sameString(icon,"17.jpg") && startsWithWord("lifted",hint)) - printf(" Note: these data have been converted via liftOver from the May 2004 " - "(NCBI35/hg17) version of the track."); - else - printf(" Note: %s.",hint); - printf("</P>\n"); + hint = htmlEncode(stripEnclosingDoubleQuotes(setting)); } } +struct dyString *ds = dyStringNew(0); + +// generate markup +if (url) + dyStringPrintf(ds, "<a class='pennantIconText' href='%s' target='ucscHelp' ", url); +else if (isTextIcon) + dyStringAppend(ds, "<span class='pennantIconText' "); +if (isTextIcon) + dyStringPrintf(ds, "style='color: %s;' ", color); +if (hint) + dyStringPrintf(ds, "title='%s' ", hint); +if (url || isTextIcon) + dyStringAppend(ds, ">"); + +// add text or image +if (isTextIcon) + dyStringPrintf(ds, "%s", src); else - printf("<BR><img height='16' width='16' src='%s'>\n",src); - return TRUE; - } -return FALSE; + dyStringPrintf(ds, "<img height='16' width='16' src='%s'>", src); + +// close tags +if (url) + dyStringAppend(ds, "</a>"); +else if (isTextIcon) + dyStringAppend(ds, "</span>"); +dyStringAppend(ds, "\n"); + +if (hint && hintRet) + *hintRet = cloneString(hint); +return dyStringCannibalize(&ds); } + boolean hPrintPennantIcon(struct trackDb *tdb) // Returns TRUE and prints out the "pennantIcon" when found. // Example: ENCODE tracks in hgTracks config list. { -char *setting = trackDbSetting(tdb, "pennantIcon"); -if (setting != NULL) - { - setting = cloneString(setting); - char buffer[4096]; - char *src = NULL; - char *icon = nextWord(&setting); - if (startsWith("http://", icon) || startsWith("ftp://", icon) || - startsWith("https://", icon)) - src = htmlEncode(icon); - else - { - safef(buffer, sizeof buffer, "../images/%s", icon); - src = htmlEncode(buffer); - } - - if (setting) - { - char *url = nextWord(&setting); - if (setting) - { - char *hint = htmlEncode(stripEnclosingDoubleQuotes(setting)); - hPrintf("<a title='%s' href='%s' TARGET=ucscHelp><img height='16' width='16' " - "src='%s'></a>\n",hint,url,src); - freeMem(hint); - } - else - hPrintf("<a href='%s' TARGET=ucscHelp><img height='16' width='16' " - "src='%s'></a>\n",url,src); - } - else - hPrintf("<img height='16' width='16' src='%s'>\n",icon); - freeMem(icon); - return TRUE; - } -else if (trackDbSetting(tdb, "wgEncode") != NULL) +if (trackDbSetting(tdb, "wgEncode") != NULL) { hPrintf("<a title='encode project' href='../ENCODE'><img height='16' width='16' " "src='../images/encodeThumbnail.jpg'></a>\n"); return TRUE; } +char *pennantIcon = makePennantIcon(tdb, NULL); +if (!pennantIcon) + return FALSE; +hPrintf("%s\n", pennantIcon); +return TRUE; +} + +boolean printPennantIconNote(struct trackDb *tdb) +// Returns TRUE and prints out the "pennantIcon" and note when found. +//This is used by hgTrackUi and hgc before printing out trackDb "html" +{ +char *hintRet; +char *pennantIcon = makePennantIcon(tdb, &hintRet); +if (!pennantIcon) return FALSE; +printf("<br>%s\n", pennantIcon); +if (hintRet) + printf("<b>Note:</b> %s\n", hintRet); +return TRUE; } void printUpdateTime(char *database, struct trackDb *tdb, struct customTrack *ct) /* display table update time */ { if (trackHubDatabase(database)) return; /* have not decided what to do for a composite container */ if (tdbIsComposite(tdb) || tdbIsSuper(tdb)) return; struct sqlConnection *conn = NULL; char *tableName = NULL; if (isCustomTrack(tdb->track)) {