abf281af7771f068acf620c8fe56f01f3b946ab1 larrym Thu Sep 8 19:07:57 2011 -0700 refactor blue bar hotLinks code so we build up a list which can be printed or sent to the javascript client code (see redmine #5245) diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index 90ce5b7..4e647e1 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -2604,32 +2604,43 @@ insideWidth = tl.picWidth-gfxBorder-insideX; } #endif//def IMAGEv2_DRAG_SCROLL imgBoxFree(&theImgBox); } else { char *titleAttr = dragZooming ? "title='click or drag mouse in base position track to zoom in'" : ""; hPrintf("
\n"); } flatTracksFree(&flatTracks); } +static void appendLink(struct hotLink **links, char *url, char *name, char *id) +{ +// append to list of links for later printing and/or communication with javascript client +struct hotLink *link; +AllocVar(link); +link->name = cloneString(name); +link->url = cloneString(url); +link->id = cloneString(id); +slAddTail(links, link); +} + static void printEnsemblAnchor(char *database, char* archive, - char *chrName, int start, int end) + char *chrName, int start, int end, struct hotLink **links) /* Print anchor to Ensembl display on same window. */ { char *scientificName = hScientificName(database); char *dir = ensOrgNameFromScientificName(scientificName); struct dyString *ensUrl; char *name; int localStart, localEnd; name = chrName; if (sameWord(scientificName, "Takifugu rubripes")) { /* for Fugu, must give scaffold, not chr coordinates */ /* Also, must give "chrom" as "scaffold_N", name below. */ if (differentWord(chromName,"chrM") && @@ -2655,31 +2666,31 @@ name = fixupName; } } else if (sameWord(scientificName, "Saccharomyces cerevisiae")) { if (stringIn("2micron", chrName)) { char *fixupName = replaceChars(chrName, "2micron", "2-micron"); name = fixupName; } } if (sameWord(chrName, "chrM")) name = "chrMt"; ensUrl = ensContigViewUrl(database, dir, name, seqBaseCount, start+1, end, archive); -hPrintf("", ensUrl->string); +appendLink(links, ensUrl->string, "Ensembl", "ensemblLink"); /* NOTE: you can not freeMem(dir) because sometimes it is a literal * constant */ freeMem(scientificName); dyStringFree(&ensUrl); } void makeHgGenomeTrackVisible(struct track *track) /* This turns on a track clicked from hgGenome, even if it was previously */ /* hidden manually and there are cart vars to support that. */ { struct hashEl *hels; struct hashEl *hel; char prefix[SMALLBUF]; /* First check if the click was from hgGenome. If not, leave. */ /* get the names of the tracks in the cart */ @@ -3466,31 +3477,31 @@ hubSetErrorMessage(NULL, hub->id); errCatchFree(&errCatch); } } hubConnectStatusFreeList(&hubList); } boolean restrictionEnzymesOk() /* Check to see if it's OK to do restriction enzymes. */ { return (hTableExists("hgFixed", "cutters") && hTableExists("hgFixed", "rebaseRefs") && hTableExists("hgFixed", "rebaseCompanies")); } -void fr2ScaffoldEnsemblLink(char *archive) +static void fr2ScaffoldEnsemblLink(char *archive, struct hotLink **links) /* print out Ensembl link to appropriate scaffold there */ { struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr = NULL; char **row = NULL; char query[256]; safef(query, sizeof(query), "select * from chrUn_gold where chrom = '%s' and chromStart<%u and chromEnd>%u", chromName, winEnd, winStart); sr = sqlGetResult(conn, query); int itemCount = 0; struct agpFrag *agpItem = NULL; while ((row = sqlNextRow(sr)) != NULL) { @@ -3499,44 +3510,45 @@ ++itemCount; if (itemCount > 1) break; } sqlFreeResult(&sr); hFreeConn(&conn); if (1 == itemCount) { // verify *entirely* within single contig if ((winEnd <= agpItem->chromEnd) && (winStart >= agpItem->chromStart)) { int agpStart = winStart - agpItem->chromStart; int agpEnd = agpStart + winEnd - winStart; hPuts(""); printEnsemblAnchor(database, archive, agpItem->frag, - agpStart, agpEnd); + agpStart, agpEnd, links); hPrintf("%s", "Ensembl"); } } agpFragFree(&agpItem); // the one we maybe used } void hotLinks() /* Put up the hot links bar. */ { boolean gotBlat = hIsBlatIndexedDatabase(database); struct dyString *uiVars = uiStateUrlPart(NULL); char *orgEnc = cgiEncode(organism); boolean psOutput = cgiVarExists("hgt.psOutput"); +struct hotLink *link, *links = NULL; hPrintf("
\n"); hPrintf("\n"); hPrintf("
\n"); hPrintf("", orgEnc, database, cartSessionVarName(), cartSessionId(cart)); if (hIsGisaidServer()) { /* disable hgGateway for gisaid for now */ //hPrintf("", orgEnc, database); hPrintf( "", '%', '%', cartSessionVarName(), @@ -3634,59 +3646,53 @@ char ensVersionString[256]; char ensDateReference[256]; ensGeneTrackVersion(database, ensVersionString, ensDateReference, sizeof(ensVersionString)); if (!psOutput) { if (differentWord(database,"susScr2")) { /* Print Ensembl anchor for latest assembly of organisms we have * supported by Ensembl == if versionString from trackVersion exists */ if (sameWord(database,"hg19")) { - hPrintf("", "Ensembl"); + printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links); } else if (sameWord(database,"hg18")) { - hPrintf("", "Ensembl"); + printEnsemblAnchor(database, "ncbi36", chromName, winStart, winEnd, &links); } else if (sameWord(database,"oryCun2") || sameWord(database,"anoCar2") || sameWord(database,"calJac3")) { - hPrintf("", "Ensembl"); + printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links); } else if (ensVersionString[0]) { char *archive = NULL; if (ensDateReference[0] && differentWord("current", ensDateReference)) archive = cloneString(ensDateReference); /* Can we perhaps map from a UCSC random chrom to an Ensembl contig ? */ if (isUnknownChrom(database, chromName)) { // which table to check char *ctgPos = "ctgPos"; if (sameWord(database,"fr2")) - fr2ScaffoldEnsemblLink(archive); + fr2ScaffoldEnsemblLink(archive, &links); else if (hTableExists(database, ctgPos)) /* see if we are entirely within a single contig */ { struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr = NULL; char **row = NULL; char query[256]; safef(query, sizeof(query), "select * from %s where chrom = '%s' and chromStart<%u and chromEnd>%u", ctgPos, chromName, winEnd, winStart); sr = sqlGetResult(conn, query); int itemCount = 0; struct ctgPos *ctgItem = NULL; while ((row = sqlNextRow(sr)) != NULL) @@ -3694,152 +3700,150 @@ ctgPosFree(&ctgItem); // if there is a second one ctgItem = ctgPosLoad(row); ++itemCount; if (itemCount > 1) break; } sqlFreeResult(&sr); hFreeConn(&conn); if (1 == itemCount) { // verify *entirely* within single contig if ((winEnd <= ctgItem->chromEnd) && (winStart >= ctgItem->chromStart)) { int ctgStart = winStart - ctgItem->chromStart; int ctgEnd = ctgStart + winEnd - winStart; - hPrintf("", "Ensembl"); + ctgStart, ctgEnd, &links); } } ctgPosFree(&ctgItem); // the one we maybe used } } else { - hPrintf("", "Ensembl"); + printEnsemblAnchor(database, archive, chromName, winStart, winEnd, &links); } } } } if (!psOutput) { + char buf[2056]; /* Print NCBI MapView anchor */ if (sameString(database, "hg18")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "hg19")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "mm8")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "danRer2")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "galGal3")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "canFam2")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "rheMac2")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "panTro2")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "anoGam1")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (sameString(database, "bosTau6")) { - hPrintf("", "NCBI"); + appendLink(&links, buf, "NCBI", "ncbiLink"); } if (startsWith("oryLat", database)) { - hPrintf("", - skipChr(chromName), winStart+1, winEnd, "UTGB"); + safef(buf, sizeof(buf), "http://medaka.utgenome.org/browser_ens_jump.php?revision=version1.0&chr=chromosome%s&start=%d&end=%d", + skipChr(chromName), winStart+1, winEnd); + appendLink(&links, buf, "UTGB", "medakaLink"); } if (sameString(database, "cb3")) { - hPrintf("", - skipChr(chromName), winStart+1, winEnd, "WormBase"); + safef(buf, sizeof(buf), "http://www.wormbase.org/db/seq/gbrowse/briggsae?name=%s:%d-%d", + skipChr(chromName), winStart+1, winEnd); + appendLink(&links, buf, "WormBase", "wormbaseLink"); } if (sameString(database, "cb4")) { - hPrintf("", - chromName, winStart+1, winEnd, "WormBase"); + safef(buf, sizeof(buf), "http://www.wormbase.org/db/gb2/gbrowse/c_briggsae?name=%s:%d-%d", + chromName, winStart+1, winEnd); + appendLink(&links, buf, "WormBase", "wormbaseLink"); } if (sameString(database, "ce10")) { - hPrintf("", - skipChr(chromName), winStart+1, winEnd, "WormBase"); + safef(buf, sizeof(buf), "http://www.wormbase.org/db/gb2/gbrowse/c_elegans?name=%s:%d-%d", + skipChr(chromName), winStart+1, winEnd); + appendLink(&links, buf, "WormBase", "wormbaseLink"); } if (sameString(database, "ce4")) { - hPrintf("", - skipChr(chromName), winStart+1, winEnd, "WormBase"); + safef(buf, sizeof(buf), "http://ws170.wormbase.org/db/seq/gbrowse/wormbase?name=%s:%d-%d", + skipChr(chromName), winStart+1, winEnd); + appendLink(&links, buf, "WormBase", "wormbaseLink"); } if (sameString(database, "ce2")) { - hPrintf("", - skipChr(chromName), winStart+1, winEnd, "WormBase"); + safef(buf, sizeof(buf), "http://ws120.wormbase.org/db/seq/gbrowse/wormbase?name=%s:%d-%d", + skipChr(chromName), winStart+1, winEnd); + appendLink(&links, buf, "WormBase", "wormbaseLink"); } } +for(link = links; link != NULL; link = link->next) + hPrintf("\n", link->url, link->id, link->name); + if (hIsGisaidServer()) { //hPrintf("\n", "Help"); hPrintf("\n", "Help"); } else if (hIsGsidServer()) { hPrintf("\n", "Help"); } else { hPrintf("\n", "Help"); }
Home    Sequence View Gateway    %s    "); - printEnsemblAnchor(database, NULL, chromName, winStart, winEnd); - hPrintf("%s    "); - printEnsemblAnchor(database, "ncbi36", chromName, winStart, winEnd); - hPrintf("%s    "); - printEnsemblAnchor(database, NULL, chromName, winStart, winEnd); - hPrintf("%s    "); printEnsemblAnchor(database, archive, ctgItem->contig, - ctgStart, ctgEnd); - hPrintf("%s    "); - printEnsemblAnchor(database, archive, chromName, winStart, winEnd); - hPrintf("%s    ", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9606&build=previous&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s    ", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9606&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s  "); - hPrintf("", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=10090&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s  "); - hPrintf("", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=7955&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s  "); - hPrintf("", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9031&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s  "); - hPrintf("", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9615&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s  "); - hPrintf("", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9544&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s  "); - hPrintf("", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9598&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s  "); - hPrintf("", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=7165&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s  "); - hPrintf("", + safef(buf, sizeof(buf), "http://www.ncbi.nlm.nih.gov/mapview/maps.cgi?taxid=9913&CHR=%s&BEG=%d&END=%d", skipChr(chromName), winStart+1, winEnd); - hPrintf("%s    %s    %s    %s    %s    %s    %s    %s    %s    %s    %s    %s