41d305a15ff5aec9ee260f1aabe2876f0c5163c8 jcasper Tue Aug 1 19:44:25 2017 -0700 hgHubConnect now includes context for hub assembly description hits in searches, and following the link to configure composite subtracks goes to the composite page, refs #19758 diff --git src/hg/hgHubConnect/hgHubConnect.c src/hg/hgHubConnect/hgHubConnect.c index 41fa255..02188e0 100644 --- src/hg/hgHubConnect/hgHubConnect.c +++ src/hg/hgHubConnect/hgHubConnect.c @@ -391,31 +391,30 @@ char *hyphenatedTerms[1024]; int hyphenTerms = chopString(splitTerms[i], "-", hyphenatedTerms, sizeof(hyphenatedTerms)); int j; for (j=0; j<hyphenTerms-1; j++) { dyStringPrintf(modifiedTerms, "+%s ", hyphenatedTerms[j]); } if (isStrictSearch) dyStringPrintf(modifiedTerms, "+%s ", hyphenatedTerms[j]); else { dyStringPrintf(modifiedTerms, "+%s* ", hyphenatedTerms[j]); } } } -fprintf(stderr, "Final search terms: %s\n", dyStringContents(modifiedTerms)); return dyStringCannibalize(&modifiedTerms); } struct hubSearchText *getHubSearchResults(struct sqlConnection *conn, char *hubSearchTableName, char *hubSearchTerms, bool checkLongText, char *dbFilter, struct hash *hubLookup) /* Find hubs, genomes, and tracks that match the provided search terms. * Return all hits that satisfy the (optional) supplied assembly filter. * if checkLongText is FALSE, skip searching within the long description text entries */ { char *cleanSearchTerms = cloneString(hubSearchTerms); if (isNotEmpty(cleanSearchTerms)) tolowers(cleanSearchTerms); bool isStrictSearch = FALSE; char *modifiedSearchTerms = modifyTermsForHubSearch(cleanSearchTerms, isStrictSearch); @@ -749,32 +748,41 @@ struct trackDb *trackInfo = (struct trackDb *) hashFindVal(tdbHash, track); if (trackInfo == NULL) { // Some tracks are prefixed with the hub name; try that char withHubName[4096]; safef(withHubName, sizeof(withHubName), "%s_%s", hub->name, track); trackInfo = hashMustFindVal(tdbHash, withHubName); } if (isNotEmpty(trackInfo->longLabel)) dyStringPrintf(tdbOut->shortLabel, "%s", trackInfo->longLabel); else if (isNotEmpty(trackInfo->shortLabel)) dyStringPrintf(tdbOut->shortLabel, "%s", trackInfo->shortLabel); else dyStringPrintf(tdbOut->shortLabel, "%s", trackHubSkipHubName(trackInfo->track)); + if (tdbIsCompositeView(trackInfo) || tdbIsCompositeChild(trackInfo)) + { + struct trackDb *parentTdb = tdbGetComposite(trackInfo); + dyStringPrintf(tdbOut->configUrl, "../cgi-bin/hgTrackUi?hubUrl=%s&db=%s&g=%s&hgsid=%s&%s", hub->url, + genomeOut->genomeName, parentTdb->track, cartSessionId(cart), genomeOut->positionString); + } + else + { dyStringPrintf(tdbOut->configUrl, "../cgi-bin/hgTrackUi?hubUrl=%s&db=%s&g=%s&hgsid=%s&%s", hub->url, genomeOut->genomeName, trackInfo->track, cartSessionId(cart), genomeOut->positionString); + } if (trackInfo->parent != NULL) { struct trackDb *parent = trackInfo->parent; struct tdbOutputStructure *parentOut = addOrUpdateTrackOut(parent->track, genomeOut, tdbHash, hub); slAddTail(&(parentOut->children), tdbOut); parentOut->childCount++; } else slAddTail(&(genomeOut->tracks), tdbOut); hashAdd(genomeOut->tdbOutHash, track, tdbOut); } return tdbOut; } @@ -862,30 +870,35 @@ genomeOut->positionString = getPositionStringForDb(genome); dyStringPrintf(genomeOut->assemblyLink, "../cgi-bin/hgTracks?hubUrl=%s&db=%s&hgsid=%s&%s", hub->url, genome->name, cartSessionId(cart), genomeOut->positionString); char *name = trackHubSkipHubName(genome->name); if (isNotEmpty(genome->description)) dyStringPrintf(genomeOut->shortLabel, "%s (%s)", genome->description, name); else if (isNotEmpty(genome->organism)) dyStringPrintf(genomeOut->shortLabel, "%s %s", genome->organism, name); else dyStringPrintf(genomeOut->shortLabel, "%s", name); genomeOut->genomeName = cloneString(genome->name); hashAdd(hubOut->genomeOutHash, db, genomeOut); slAddTail(&(hubOut->genomes), genomeOut); hubOut->genomeCount++; } + if (isEmpty(hst->track) && hst->textLength == hubSearchTextLong) + { + // Genome description match + dyStringPrintf(genomeOut->descriptionMatch, "%s", hst->text); + } if (isNotEmpty(hst->track)) { // Time to add a track! (or add info to one, maybe) struct hash *tdbHash = (struct hash *) hashFindVal(tdbHashHash, db); if (tdbHash == NULL) { tdbHash = newHash(5); hashAdd(tdbHashHash, db, tdbHash); struct trackDb *tdbList = trackHubTracksForGenome(hub, genome); tdbList = trackDbLinkUpGenerations(tdbList); tdbList = trackDbPolishAfterLinkup(tdbList, db); trackHubPolishTrackNames(hub, tdbList); buildTdbHash(tdbHash, tdbList); }