8f72a658697996ae65727d8583d0df20765b7b8b max Mon Apr 17 06:43:13 2023 -0700 changes after code review #31051, and after QA, refs #30904 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index f82b4d5..60b3a6e 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -529,56 +529,60 @@ "%s=%s&" "%s=%s&" "%s=%s'>" "Display regions of interest (%d)</a>", MULTI_REGION_BED_WIN_FULL, tdb->track, cgiEncode(regionFile), tdb->track, hStringFromTv(vis), CT_CUSTOM_DOC_TEXT_VAR, cgiEncode(customHtml), CT_CUSTOM_TEXT_VAR, cgiEncode(dyStringCannibalize(&dsCustomText)), regionCount); printf(" in multi-region view (custom regions mode)"); printf(" "); printf("<a href=\"../goldenPath/help/multiRegionHelp.html\" target=_blank>(Help)</a>\n"); printf("</p>"); return TRUE; } -static void printDownloadUrl(char *downloadUrl) +static void printDownloadUrl(char *downloadUrl, char *database, char *track) /* given a string <label><space><url>, print a nice download link */ { char *parts[2]; int partCount = chopByWhiteRespectDoubleQuotes(downloadUrl, parts, 2); if (partCount!=2) + { puts("<b>Internal Error:</b> The downloadUrl trackDb statement needs exactly two arguments, the file type and the URL."); + return; + } char* fileType = parts[0]; -stripString(fileType, "\""); // Remove any double quotes now and chop by commmas +stripString(fileType, "\""); // Remove double quotes, weird that chopByWhiteRespectDoubleQuotes doesn't do this char* url = parts[1]; -printf("<br>Download: <a href=\"%s\">%s</a>", url, fileType); +char *newUrl = replaceInUrl(url, "", NULL, database, "", 0, 0, track, FALSE, NULL); +printf("<br>Download: <a href=\"%s\">%s</a>", newUrl, fileType); } -static void makeFileDownloads(struct trackDb *tdb) +static void makeFileDownloads(struct trackDb *tdb, char *db) /* given either downloadUrl or downloadUrl.1/.2/... in trackDb, print links to these files. * File can be anywhere on the internet, useful e.g. for GTF files for gene tracks */ { char *downloadUrl = trackDbSetting(tdb, "downloadUrl"); struct slName* tdbNames = trackDbSettingsWildMatch(tdb, "downloadUrl.*"); if (downloadUrl) - printDownloadUrl(downloadUrl); + printDownloadUrl(downloadUrl, db, tdb->track); while (tdbNames != NULL) { struct slName *tdbName = slPopHead(&tdbNames); - printDownloadUrl(trackDbSetting(tdb, tdbName->name)); + printDownloadUrl(trackDbSetting(tdb, tdbName->name), db, tdb->track); slNameFree(&tdbName); } } void extraUiLinks(char *db, struct trackDb *tdb, struct cart *cart) // Show metadata, and downloads, schema links where appropriate { makeMultiRegionLink(db, tdb, cart); struct slPair *pairs = trackDbMetaPairs(tdb); if (pairs != NULL) printf("<b>Metadata:</b><br>%s\n", pairsAsHtmlTable( pairs, tdb, FALSE, FALSE)); else if (!tdbIsComposite(tdb) && !trackHubDatabase(db) && (metadataForTable(db, tdb, NULL) != NULL)) printf("<b>Metadata:</b><br>%s\n", metadataAsHtmlTable(db, tdb, FALSE, FALSE)); @@ -592,31 +596,31 @@ if (links > 0) cgiDown(0.7); if (links > 1) printf("<table><tr><td nowrap>View table: "); if (schemaLink && differentString("longTabix", tdb->type) && !isCustomComposite(tdb)) // FIXME: hgTables.showSchmaLongTabix is a currently a dummy routine, so let's not got here // until it's implemented { makeSchemaLink(db,tdb,(links > 1 ? "Data format":"Data schema/format description and download")); if (downloadLink) printf(", "); } -makeFileDownloads(tdb); +makeFileDownloads(tdb, db); if (downloadLink) { // special case exception (hg18:NHGRI BiPs are in 7 different dbs but only hg18 has downloads): char *targetDb = trackDbSetting(tdb, "compareGenomeLinks"); if (targetDb != NULL) { targetDb = cloneFirstWordByDelimiter(targetDb,'='); if (!startsWith("hg",targetDb)) freez(&targetDb); } if (targetDb == NULL) targetDb = cloneString(db); makeNamedDownloadsLink(targetDb, tdb, (links > 1 ? "downloads":"Downloads"));