73e45ce8ceee39823400e8c1c7e7fc9d1d363f4c chmalee Fri Jan 22 08:40:30 2021 -0800 Support the standard bigBed URL substitutinos in bigPsl, refs #24672 diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 8021f17..b8ada21 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -3079,37 +3079,43 @@ struct bptFile *bpt = bigBedOpenExtraIndex(bbi, "name", &fieldIx); bbList = bigBedNameQuery(bbi, bpt, fieldIx, item, lm); } else bbList = bigBedIntervalQuery(bbi, seqName, ivStart, ivEnd, 0, lm); /* print out extra fields */ for (bb = bbList; bb != NULL; bb = bb->next) { char *restFields[256]; int restCount = chopTabs(cloneString(bb->rest), restFields); if (sameString(restFields[0], item)) { /* print standard position information */ char *strand = restFields[2]; - printPos(seqName, ivStart, ivEnd, strand, FALSE, item); int bedSize = 25; int restBedFields = bedSize - 3; + struct slPair *extraFieldPairs = NULL; if (restCount > restBedFields) { char **extraFields = (restFields + restBedFields); int extraFieldCount = restCount - restBedFields; + extraFieldPairs = getExtraFields(tdb, extraFields, extraFieldCount); + char *itemForUrl = getIdInUrl(tdb, item); + printCustomUrlWithFields(tdb, item, item, item == itemForUrl, extraFieldPairs); + if (itemForUrl) + printIframe(tdb, itemForUrl); + printPos(seqName, ivStart, ivEnd, strand, FALSE, item); int printCount = extraFieldsPrint(tdb,NULL,extraFields, extraFieldCount); printCount += 0; } } } char *bedRow[32]; char startBuf[16], endBuf[16]; int lastChromId = -1; char chromName[bbi->chromBpt->keySize+1]; boolean firstTime = TRUE; for (bb = bbList; bb != NULL; bb = bb->next) { @@ -4260,31 +4266,32 @@ headerItem = NULL; else if (( sameString(type, "narrowPeak") || sameString(type, "broadPeak") || sameString(type, "gappedPeak") ) && headerItem && sameString(headerItem, ".") ) headerItem = NULL; } /* Print header. */ genericHeader(tdb, headerItem); if (differentString(type, "bigInteract") && differentString(type, "interact")) { // skip generic URL code as these may have multiple items returned for a click itemForUrl = getIdInUrl(tdb, item); - if (itemForUrl != NULL && trackDbSetting(tdb, "url") && differentString(type, "bigBed")) + if (itemForUrl != NULL && trackDbSetting(tdb, "url") && differentString(type, "bigBed") + && differentString(type, "bigPsl")) { printCustomUrl(tdb, itemForUrl, item == itemForUrl); printIframe(tdb, itemForUrl); } } if (plus != NULL) { fputs(plus, stdout); } if (container != NULL) { genericContainerClick(conn, container, tdb, item, itemForUrl); } else if (wordCount > 0) {