a9b6ad6611b2c3c72d76c82044393c024bbe9933 max Thu Apr 7 05:39:23 2022 -0700 allow assembly-specific info links that work with hubs, for CHM13, refs #29224 diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index cc0f051..106bce3 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -8058,30 +8058,43 @@ hPrintf("</A>"); hPrintf("<BR>"); } void printSearchHelpLink() /* print the little search help link next to the go button */ { char *url = cfgOptionDefault("searchHelpUrl","../goldenPath/help/query.html"); char *label = cfgOptionDefault("searchHelpLabel", "examples"); if (!url || isEmpty(url)) return; printf("<div id='searchHelp'><a target=_blank title='Documentation on what you can enter into the Genome Browser search box' href='%s'>%s</a></div>", url, label); } +static void printDatabaseInfoHtml(char* database) +/* print database-specific piece of HTML defined in hg.conf, works also with Genark hubs */ +{ +char *cfgPrefix = database; +if (trackHubDatabase(cfgPrefix)) + // hub IDs look like hub_1234_GCA_1232.2, so skip the hub_1234 part + cfgPrefix = hubConnectSkipHubPrefix(cfgPrefix); +char *cfgName = catTwoStrings(cfgPrefix,"_html"); +char *html = cfgOption(cfgName); +if (html) + puts(html); +} + void doTrackForm(char *psOutput, struct tempName *ideoTn) /* Make the tracks display form with the zoom/scroll buttons and the active * image. If the ideoTn parameter is not NULL, it is filled in if the * ideogram is created. */ { struct group *group; struct track *track; char *freezeName = NULL; boolean hideAll = cgiVarExists("hgt.hideAll"); boolean hideTracks = cgiOptionalString( "hideTracks") != NULL; boolean defaultTracks = cgiVarExists("hgt.reset"); boolean showedRuler = FALSE; boolean showTrackControls = cartUsualBoolean(cart, "trackControlsOnMain", TRUE); boolean multiRegionButtonTop = cfgOptionBooleanDefault(MULTI_REGION_CFG_BUTTON_TOP, TRUE); long thisTime = 0, lastTime = 0; @@ -8610,30 +8623,32 @@ hPrintf("%s %s on Archaeon %s Assembly", organization, browserName, freezeName); } else { if (stringIn(database, freezeName)) hPrintf("%s %s on %s %s", organization, browserName, organism, freezeName); else hPrintf("%s %s on %s %s (%s)", organization, browserName, trackHubSkipHubName(organism), freezeName, trackHubSkipHubName(database)); } } hPrintf("</B></SPAN>"); + printDatabaseInfoHtml(database); + // Disable recommended track set panel when changing tracks, session, database char *sessionLabel = cartOptionalString(cart, hgsOtherUserSessionLabel); char *oldDb = hashFindVal(oldVars, "db"); if (sessionLabel) { if (defaultTracks || hideAll || hideTracks || (oldDb && differentString(database, oldDb)) || !hasRecTrackSet(cart) || sameString(sessionLabel, "off")) cartRemove(cart, hgsOtherUserSessionLabel); } sessionLabel = cartOptionalString(cart, hgsOtherUserSessionLabel); if (sessionLabel) { char *panel = "recTrackSetsPanel"; @@ -8773,46 +8788,48 @@ printSearchHelpLink(); if (!trackHubDatabase(database)) { jsonObjectAdd(jsonForClient, "assemblySupportsGeneSuggest", newJsonBoolean(assemblySupportsGeneSuggest(database))); if (assemblySupportsGeneSuggest(database)) hPrintf("<input type='hidden' name='hgt.suggestTrack' id='suggestTrack' value='%s'>\n", assemblyGeneSuggestTrack(database)); } // hg.conf controlled links // database-specific link: 2 hg.conf settings, format <db>_TopLink{Label} struct slName *dbLinks = cfgNamesWithPrefix(database); + struct slName *link; char *dbTopLink = NULL, *dbTopLinkLabel = NULL; for (link = dbLinks; link != NULL; link = link->next) { char *name = cloneString(link->name); char *setting = chopPrefixAt(link->name, '_'); if (sameString(setting, "TopLink")) dbTopLink = cfgOption(name); else if (sameString(setting, "TopLinkLabel")) dbTopLinkLabel = cfgOption(name); } if (dbTopLink && dbTopLinkLabel) { hPrintf(" <a href='%s' target='_blank'><em><b>%s</em></b></a>\n", dbTopLink, dbTopLinkLabel); } + // generic link char *survey = cfgOptionEnv("HGDB_SURVEY", "survey"); char *surveyLabel = cfgOptionEnv("HGDB_SURVEY_LABEL", "surveyLabel"); if (survey && differentWord(survey, "off")) hPrintf(" <span style='background-color:yellow;'>" "<A HREF='%s' TARGET=_BLANK><EM><B>%s</EM></B></A></span>\n", survey, surveyLabel ? surveyLabel : "Take survey"); hPutc('\n'); } } // TODO GALT how to handle ideos? boolean nukeIdeoFromList = FALSE; for(window=windows;window;window=window->next) {