2ab031187ac37e8f7b16de41a771e6852c4f7030 markd Tue Sep 27 19:39:06 2016 -0700 fixed cases were cgi encoding was done at higher levels and hence double encode in my previous change. diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index a1a1713..77da76f 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -6505,52 +6505,51 @@ puts("<HR>"); } printPcrSequence(target, itemPsl, fPrimer, rPrimer); puts("<BR><HR>"); printTrackHtml(tdb); } void doUserPsl(char *track, char *item) /* Process click on user-defined alignment. */ { int start = cartInt(cart, "o"); struct lineFile *lf; struct psl *pslList = NULL, *psl; char *pslName, *faName, *qName; -char *encItem = cgiEncode(item); enum gfType qt, tt; cartWebStart(cart, database, "BLAT Search Alignments"); printf("<H2>BLAT Search Alignments</H2>\n"); printf("<H3>Click on a line to see detailed letter-by-letter display</H3>"); parseSs(item, &pslName, &faName, &qName); pslxFileOpen(pslName, &qt, &tt, &lf); while ((psl = pslNext(lf)) != NULL) { if (sameString(psl->qName, qName)) { slAddHead(&pslList, psl); } else { pslFree(&psl); } } slReverse(&pslList); lineFileClose(&lf); -printAlignments(pslList, start, "htcUserAli", "user", encItem); +printAlignments(pslList, start, "htcUserAli", "user", item); pslFreeList(&pslList); webIncludeHelpFile(USER_PSL_TRACK_NAME, TRUE); } void doHgGold(struct trackDb *tdb, char *fragName) /* Click on a fragment of golden path. */ { struct sqlConnection *conn = hAllocConn(database); struct sqlConnection *conn2 = hAllocConn(database); struct sqlConnection *conn3 = hAllocConn(database); char query[256]; struct sqlResult *sr; char **row; char query2[256]; struct sqlResult *sr2; @@ -13615,102 +13614,98 @@ tRange = nextWord(&rangePair); if (tRange == NULL) errAbort("Expecting two ranges in loadPslFromRangePair"); mustParseRange(qRange, &qName, &qStart, &qEnd); mustParseRange(tRange, &tName, &tStart, &tEnd); return loadPslAt(track, qName, qStart, qEnd, tName, tStart, tEnd); } void longXenoPsl1Given(struct trackDb *tdb, char *item, char *otherOrg, char *otherChromTable, char *otherDb, struct psl *psl, char *pslTableName ) /* Put up cross-species alignment when the second species * sequence is in a nib file, AND psl record is given. */ { char otherString[256]; -char *cgiItem = cgiEncode(item); char *thisOrg = hOrganism(database); cartWebStart(cart, database, "%s", tdb->longLabel); printf("<B>%s position:</B> <a target=\"_blank\" href=\"%s?db=%s&position=%s%%3A%d-%d\">%s:%d-%d</a><BR>\n", otherOrg, hgTracksName(), otherDb, psl->qName, psl->qStart+1, psl->qEnd, psl->qName, psl->qStart+1, psl->qEnd); printf("<B>%s size:</B> %d<BR>\n", otherOrg, psl->qEnd - psl->qStart); printf("<B>%s position:</B> %s:%d-%d<BR>\n", thisOrg, psl->tName, psl->tStart+1, psl->tEnd); printf("<B>%s size:</B> %d<BR>\n", thisOrg, psl->tEnd - psl->tStart); printf("<B>Identical Bases:</B> %d<BR>\n", psl->match + psl->repMatch); printf("<B>Number of Gapless Aligning Blocks:</B> %d<BR>\n", psl->blockCount ); printf("<B>Percent identity within gapless aligning blocks:</B> %3.1f%%<BR>\n", 0.1*(1000 - pslCalcMilliBad(psl, FALSE))); printf("<B>Strand:</B> %s<BR>\n",psl->strand); printf("<B>Browser window position:</B> %s:%d-%d<BR>\n", seqName, winStart+1, winEnd); printf("<B>Browser window size:</B> %d<BR>\n", winEnd - winStart); safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", psl->tStart, pslTableName, otherOrg, otherChromTable, otherDb); if (pslTrimToTargetRange(psl, winStart, winEnd) != NULL) { - hgcAnchorSomewhere("htcLongXenoPsl2", cgiItem, otherString, psl->tName); + hgcAnchorSomewhere("htcLongXenoPsl2", item, otherString, psl->tName); printf("<BR>View details of parts of alignment within browser window</A>.<BR>\n"); } -freez(&cgiItem); } /* Multipurpose function to show alignments in details pages where applicable */ void longXenoPsl1(struct trackDb *tdb, char *item, char *otherOrg, char *otherChromTable, char *otherDb) /* Put up cross-species alignment when the second species * sequence is in a nib file. */ { struct psl *psl = NULL; char otherString[256]; -char *cgiItem = cgiEncode(item); char *thisOrg = hOrganism(database); cartWebStart(cart, database, "%s", tdb->longLabel); psl = loadPslFromRangePair(tdb->table, item); printf("<B>%s position:</B> <a target=\"_blank\" href=\"%s?db=%s&position=%s%%3A%d-%d\">%s:%d-%d</a><BR>\n", otherOrg, hgTracksName(), otherDb, psl->qName, psl->qStart+1, psl->qEnd, psl->qName, psl->qStart+1, psl->qEnd); printf("<B>%s size:</B> %d<BR>\n", otherOrg, psl->qEnd - psl->qStart); printf("<B>%s position:</B> %s:%d-%d<BR>\n", thisOrg, psl->tName, psl->tStart+1, psl->tEnd); printf("<B>%s size:</B> %d<BR>\n", thisOrg, psl->tEnd - psl->tStart); printf("<B>Identical Bases:</B> %d<BR>\n", psl->match + psl->repMatch); printf("<B>Number of Gapless Aligning Blocks:</B> %d<BR>\n", psl->blockCount ); printf("<B>Percent identity within gapless aligning blocks:</B> %3.1f%%<BR>\n", 0.1*(1000 - pslCalcMilliBad(psl, FALSE))); printf("<B>Strand:</B> %s<BR>\n",psl->strand); printf("<B>Browser window position:</B> %s:%d-%d<BR>\n", seqName, winStart+1, winEnd); printf("<B>Browser window size:</B> %d<BR>\n", winEnd - winStart); safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", psl->tStart, tdb->table, otherOrg, otherChromTable, otherDb); /* joni */ if (pslTrimToTargetRange(psl, winStart, winEnd) != NULL) { - hgcAnchorSomewhere("htcLongXenoPsl2", cgiItem, otherString, psl->tName); + hgcAnchorSomewhere("htcLongXenoPsl2", item, otherString, psl->tName); printf("<BR>View details of parts of alignment within browser window</A>.<BR>\n"); } if (containsStringNoCase(otherDb, "zoo")) printf("<P><A HREF='%s&db=%s'>Go to the browser view of the %s</A><BR>\n", hgTracksPathAndSettings(), otherDb, otherOrg); printTrackHtml(tdb); -freez(&cgiItem); } /* Multipurpose function to show alignments in details pages where applicable Show the URL from trackDb as well. Only used for the Chimp tracks right now. */ void longXenoPsl1Chimp(struct trackDb *tdb, char *item, char *otherOrg, char *otherChromTable, char *otherDb) /* Put up cross-species alignment when the second species * sequence is in a nib file. */ { struct psl *psl = NULL; char otherString[256]; char *cgiItem = cgiEncode(item); char *thisOrg = hOrganism(database); @@ -13733,63 +13728,61 @@ tdb->table, otherOrg, otherChromTable, otherDb); printCustomUrl(tdb, item, TRUE); printTrackHtml(tdb); freez(&cgiItem); } void longXenoPsl1zoo2(struct trackDb *tdb, char *item, char *otherOrg, char *otherChromTable) /* Put up cross-species alignment when the second species * sequence is in a nib file. */ { struct psl *psl = NULL; char otherString[256]; char anotherString[256]; -char *cgiItem = cgiEncode(item); char *thisOrg = hOrganism(database); cartWebStart(cart, database, "%s", tdb->longLabel); psl = loadPslFromRangePair(tdb->table, item); printf("<B>%s position:</B> %s:%d-%d<BR>\n", otherOrg, psl->qName, psl->qStart+1, psl->qEnd); printf("<B>%s size:</B> %d<BR>\n", otherOrg, psl->qEnd - psl->qStart); printf("<B>%s position:</B> %s:%d-%d<BR>\n", thisOrg, psl->tName, psl->tStart+1, psl->tEnd); printf("<B>%s size:</B> %d<BR>\n", thisOrg, psl->tEnd - psl->tStart); printf("<B>Identical Bases:</B> %d<BR>\n", psl->match + psl->repMatch); printf("<B>Number of Gapless Aligning Blocks:</B> %d<BR>\n", psl->blockCount ); printf("<B>Strand:</B> %s<BR>\n",psl->strand); printf("<B>Percent identity within gapless aligning blocks:</B> %3.1f%%<BR>\n", 0.1*(1000 - pslCalcMilliBad(psl, FALSE))); printf("<B>Browser window position:</B> %s:%d-%d<BR>\n", seqName, winStart, winEnd); printf("<B>Browser window size:</B> %d<BR>\n", winEnd - winStart); safef(anotherString, sizeof anotherString, "%s",otherOrg); toUpperN(anotherString,1); printf("Link to <a href=\"http://hgwdev-tcbruen.cse.ucsc.edu/cgi-bin/hgTracks?db=zoo%s1&position=chr1:%d-%d\">%s database</a><BR>\n", anotherString, psl->qStart, psl->qEnd, otherOrg); safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s", psl->tStart, tdb->table, otherOrg, otherChromTable); if (pslTrimToTargetRange(psl, winStart, winEnd) != NULL) { - hgcAnchorSomewhere("htcLongXenoPsl2", cgiItem, otherString, psl->tName); + hgcAnchorSomewhere("htcLongXenoPsl2", item, otherString, psl->tName); printf("<BR>View details of parts of alignment within browser window</A>.<BR>\n"); } printTrackHtml(tdb); -freez(&cgiItem); } void doAlignmentOtherDb(struct trackDb *tdb, char *item) /* Put up cross-species alignment when the second species * is another db, indicated by the 3rd word of tdb->type. */ { char *otherOrg; char *otherDb; char *words[8]; char *typeLine = cloneString(tdb->type); int wordCount = chopLine(typeLine, words); if (wordCount < 3 || !(sameString(words[0], "psl") && sameString(words[1], "xeno"))) errAbort("doAlignmentOtherDb: trackDb type must be \"psl xeno XXX\" where XXX is the name of the other database."); otherDb = words[2]; otherOrg = hOrganism(otherDb); @@ -20713,40 +20706,38 @@ struct lineFile *openExtLineFile(unsigned int extFileId) /* Open line file corresponding to id in extFile table. */ { char *path = hExtFileName(database, "extFile", extFileId); struct lineFile *lf = lineFileOpen(path, TRUE); freeMem(path); return lf; } void printSampleWindow( struct psl *thisPsl, int thisWinStart, int thisWinEnd, char *winStr, char *otherOrg, char *otherDb, char *pslTableName ) { char otherString[256]; char pslItem[1024]; -char *cgiPslItem; safef(pslItem, sizeof pslItem, "%s:%d-%d %s:%d-%d", thisPsl->qName, thisPsl->qStart, thisPsl->qEnd, thisPsl->tName, thisPsl->tStart, thisPsl->tEnd ); -cgiPslItem = cgiEncode(pslItem); safef(otherString, sizeof otherString, "%d&pslTable=%s&otherOrg=%s&otherChromTable=%s&otherDb=%s", thisPsl->tStart, pslTableName, otherOrg, "chromInfo" , otherDb ); if (pslTrimToTargetRange(thisPsl, thisWinStart, thisWinEnd) != NULL) { - hgcAnchorWindow("htcLongXenoPsl2", cgiPslItem, thisWinStart, + hgcAnchorWindow("htcLongXenoPsl2", pslItem, thisWinStart, thisWinEnd, otherString, thisPsl->tName); printf("%s</A>\n", winStr ); } } void firstAndLastPosition( int *thisStart, int *thisEnd, struct psl *thisPsl ) /*return the first and last base of a psl record (not just chromStart * and chromEnd but the actual blocks.*/ { *thisStart = thisPsl->tStarts[0]; *thisEnd = thisPsl->tStarts[thisPsl->blockCount - 1]; if( thisPsl->strand[1] == '-' ) { *thisStart = thisPsl->tSize - *thisStart;