bafe3eac7b6809e3e15c9171712f17ac5301c57f
angie
Fri Feb 22 14:56:22 2019 -0800
Allow pennantIcon to be a ;-separated sequence of icon settings so we can display more than one icon next to a track name.
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index f67c09e..91df2a8 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -8548,37 +8548,33 @@
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);
}
-static char *makePennantIcon(struct trackDb *tdb, char **hintRet)
+static char *makeOnePennantIcon(char *setting, char **hintRet)
// Builds a string with pennantIcon HTML and returns it. Also returns hint. */
{
-char *setting = trackDbSetting(tdb, "pennantIcon");
-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;
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))
@@ -8617,60 +8613,84 @@
else
dyStringPrintf(ds, "
", src);
// close tags
if (url)
dyStringAppend(ds, "");
else if (isTextIcon)
dyStringAppend(ds, "");
dyStringAppend(ds, "\n");
if (hint && hintRet)
*hintRet = cloneString(hint);
return dyStringCannibalize(&ds);
}
+static struct slPair *makePennantIcons(struct trackDb *tdb)
+/* Return a list of pairs of pennantIcon HTML and note strings. */
+{
+char *setting = trackDbSetting(tdb, "pennantIcon");
+if (setting == NULL)
+ return NULL;
+struct slPair *list = NULL;
+int maxPennants = 3;
+char *pennants[maxPennants];
+int numPennants = chopByChar(setting, ';', pennants, ArraySize(pennants));
+int i;
+for (i = 0; i < numPennants; i++)
+ {
+ char *hint = NULL;
+ char *html = makeOnePennantIcon(pennants[i], &hint);
+ slPairAdd(&list, html, hint);
+ freeMem(html);
+ }
+slReverse(&list);
+return list;
+}
boolean hPrintPennantIcon(struct trackDb *tdb)
// Returns TRUE and prints out the "pennantIcon" when found.
// Example: ENCODE tracks in hgTracks config list.
{
if (trackDbSetting(tdb, "wgEncode") != NULL)
{
hPrintf("
\n");
- return TRUE;
}
-char *pennantIcon = makePennantIcon(tdb, NULL);
-if (!pennantIcon)
- return FALSE;
-hPrintf("%s\n", pennantIcon);
-return TRUE;
+struct slPair *list = makePennantIcons(tdb), *el;
+boolean gotPennant = (list != NULL);
+for (el = list; el != NULL; el = el->next)
+ hPrintf("%s\n", el->name);
+slPairFreeValsAndList(&list);
+return gotPennant;
}
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("
%s\n", pennantIcon);
-if (hintRet)
- printf("Note: %s\n", hintRet);
-return TRUE;
+struct slPair *list = makePennantIcons(tdb), *el;
+boolean gotPennant = (list != NULL);
+for (el = list; el != NULL; el = el->next)
+ {
+ printf("
%s\n", el->name);
+ char *hint = el->val;
+ if (hint)
+ printf("Note: %s\n", hint);
+ }
+slPairFreeValsAndList(&list);
+return gotPennant;
}
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))
{