src/hg/hgTracks/hgTracks.c 1.1633
1.1633 2010/03/04 21:24:08 larrym
refactor code into trackUrl; add track search code within TRACK_SEARCH #define; add ruler entry to trackDbJson; clear suggest field when user hits 'clear' button
Index: src/hg/hgTracks/hgTracks.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/hgTracks.c,v
retrieving revision 1.1632
retrieving revision 1.1633
diff -b -B -U 4 -r1.1632 -r1.1633
--- src/hg/hgTracks/hgTracks.c 3 Mar 2010 19:30:02 -0000 1.1632
+++ src/hg/hgTracks/hgTracks.c 4 Mar 2010 21:24:08 -0000 1.1633
@@ -291,31 +291,26 @@
int height, char *name, char *shortLabel, char *id)
/* Print out image map rectangle that invokes hgTrackUi. */
{
x = hvGfxAdjXW(hvg, x, width);
-char *encodedName = cgiEncode(name);
+char *url = trackUrl(name, chromName);
if(theImgBox && curImgTrack)
{
- char link[512];
- safef(link,sizeof(link),"%s?%s=%u&g=%s",
- hgTrackUiName(), cartSessionVarName(),cartSessionId(cart), encodedName);
char title[256];
-
safef(title,sizeof(title),"%s controls", shortLabel);
struct imgSlice *curSlice = imgTrackSliceGetByType(curImgTrack,stButton);
if(curSlice)
- sliceAddLink(curSlice,link,title);
+ sliceAddLink(curSlice,url,title);
}
else
{
hPrintf("<AREA SHAPE=RECT COORDS=\"%d,%d,%d,%d\" ", x, y, x+width, y+height);
- hPrintf("HREF=\"%s?%s=%u&c=%s&g=%s\"", hgTrackUiName(), cartSessionVarName(),
- cartSessionId(cart), chromName, encodedName);
+ hPrintf("HREF=\"%s\"", url);
mapStatusMessage("%s controls", shortLabel);
hPrintf(">\n");
}
-freeMem(encodedName);
+freeMem(url);
}
static void mapBoxToggleComplement(struct hvGfx *hvg, int x, int y, int width, int height,
struct track *toggleGroup, char *chrom,
@@ -344,8 +339,21 @@
hPrintf(">\n");
}
}
+char *trackUrl(char *mapName, char *chromName)
+{
+/* Return hgTrackUi url; chromName is optional. */
+char *encodedMapName = cgiEncode(mapName);
+char buf[2048];
+if(chromName == NULL)
+ safef(buf, sizeof(buf), "%s?%s=%u&g=%s", hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), encodedMapName);
+else
+ safef(buf, sizeof(buf), "%s?%s=%u&c=%s&g=%s", hgTrackUiName(), cartSessionVarName(), cartSessionId(cart), chromName, encodedMapName);
+freeMem(encodedMapName);
+return(cloneString(buf));
+}
+
void smallBreak()
/* Draw small horizontal break */
{
hPrintf("<FONT SIZE=1><BR></FONT>\n");
@@ -4134,9 +4142,9 @@
// add entry for given track to the trackDbJson string
if(count)
dyStringAppend(trackDbJson, "\n,");
dyStringPrintf(trackDbJson, "\t%s: {", track->mapName);
-if(tdbIsSuperTrackChild(track->tdb))
+if(tdbIsSuperTrackChild(track->tdb) || tdbIsCompositeChild(track->tdb))
dyStringPrintf(trackDbJson, "\n\t\tparentTrack: '%s',", track->tdb->parent->tableName);
dyStringPrintf(trackDbJson, "\n\t\tshortLabel: '%s',\n\t\tlongLabel: '%s',\n\t\tcanPack: %d,\n\t\tvisibility: %d\n\t}",
track->shortLabel, track->longLabel, track->canPack, track->limitedVis);
}
@@ -4158,10 +4166,10 @@
long thisTime = 0, lastTime = 0;
char *clearButtonJavascript;
#ifdef CONTEXT_MENU
struct dyString *trackDbJson = newDyString(1000);
-int trackDbJsonCount = 0;
-dyStringAppend(trackDbJson, "<script>var trackDbJson = {\n");
+int trackDbJsonCount = 1;
+dyStringPrintf(trackDbJson, "<script>var trackDbJson = {\nruler: {shortLabel: 'ruler', longLabel: 'Base Position Controls', canPack: 0, visibility: %d}", rulerMode);
#endif
basesPerPixel = ((float)winBaseCount) / ((float)insideWidth);
zoomedToBaseLevel = (winBaseCount <= insideWidth / tl.mWidth);
@@ -4181,9 +4189,9 @@
hPrintf("<FORM ACTION=\"%s\" NAME=\"TrackHeaderForm\" id=\"TrackHeaderForm\" METHOD=\"GET\">\n\n", hgTracksName());
hPrintf("<input type='hidden' id='hgt.insideX' name='insideX' value='%d'>\n", insideX);
hPrintf("<input type='hidden' id='hgt.revCmplDisp' name='revCmplDisp' value='%d'>\n", revCmplDisp);
if (!psOutput) cartSaveSession(cart);
-clearButtonJavascript = "document.TrackHeaderForm.position.value=''";
+clearButtonJavascript = "document.TrackHeaderForm.position.value=''; document.getElementById('suggest').value='';";
/* See if want to include sequence search results. */
userSeqString = cartOptionalString(cart, "ss");
if (userSeqString && !ssFilesExist(userSeqString))
@@ -4405,9 +4413,9 @@
hPrintf("%s", trackGroupsHidden2->string);
freeDyString(&trackGroupsHidden1);
freeDyString(&trackGroupsHidden2);
if (!psOutput) cartSaveSession(cart); /* Put up hgsid= as hidden variable. */
- clearButtonJavascript = "document.TrackForm.position.value=''";
+ clearButtonJavascript = "document.TrackForm.position.value=''; document.getElementById('suggest').value='';";
hPrintf("<CENTER>");
}
@@ -4427,9 +4435,9 @@
hWrites("position/search ");
hTextVar("position", addCommasToPos(database, position), 30);
sprintLongWithCommas(buf, winEnd - winStart);
if(dragZooming && assemblySupportsGeneSuggest(database))
- hWrites(" gene <input type='text' size='8' name='hgt.ignoreme' id='suggest'>\n");
+ hWrites(" gene <input type='text' size='8' name='hgt.suggest' id='suggest'>\n");
hWrites(" ");
hButtonWithOnClick("hgt.jump", "jump", NULL, "jumpButtonOnClick()");
hOnClickButton(clearButtonJavascript,"clear");
hPrintf(" size <span id='size'>%s</span> bp. ", buf);
@@ -4565,8 +4573,13 @@
hButton("hgt.toggleRevCmplDisp", "reverse");
hPrintf(" ");
}
+#ifdef TRACK_SEARCH
+ hPrintf("<input type='submit' name='%s' value='find tracks'>", searchTracks);
+ hPrintf(" ");
+#endif
+
hButton("hgt.refresh", "refresh");
hPrintf("<BR>\n");
@@ -4651,20 +4664,20 @@
* unless it's collapsed. */
if (!showedRuler && isFirstNotCtGroup &&
differentString(group->name, "user"))
{
+ char *url = trackUrl(RULER_TRACK_NAME, chromName);
showedRuler = TRUE;
myControlGridStartCell(cg, isOpen, group->name);
- hPrintf("<A HREF=\"%s?%s=%u&c=%s&g=%s\">", hgTrackUiName(),
- cartSessionVarName(), cartSessionId(cart),
- chromName, RULER_TRACK_NAME);
+ hPrintf("<A HREF=\"%s\">", url);
hPrintf(" %s<BR> ", RULER_TRACK_LABEL);
hPrintf("</A>");
hDropListClassWithStyle("ruler", rulerMenu,
sizeof(rulerMenu)/sizeof(char *), rulerMenu[rulerMode],
rulerMode == tvHide ? "hiddenText" : "normalText",
TV_DROPDOWN_STYLE);
controlGridEndCell(cg);
+ freeMem(url);
}
if (differentString(group->name, "user"))
isFirstNotCtGroup = FALSE;
@@ -4681,16 +4694,14 @@
continue;
myControlGridStartCell(cg, isOpen, group->name);
if (track->hasUi)
{
- char *encodedMapName = cgiEncode(track->mapName);
+ char *url = trackUrl(track->mapName, chromName);
char *longLabel = replaceChars(track->longLabel, "\"", """);
if(trackDbSetting(track->tdb, "wgEncode") != NULL)
hPrintf("<a title='encode project' href='../ENCODE'><img height='16' width='16' src='../images/encodeThumbnail.jpg'></a>\n");
- hPrintf("<A HREF=\"%s?%s=%u&c=%s&g=%s\" title=\"%s\">", hgTrackUiName(),
- cartSessionVarName(), cartSessionId(cart),
- chromName, encodedMapName, longLabel);
- freeMem(encodedMapName);
+ hPrintf("<A HREF=\"%s\" title=\"%s\">", url, longLabel);
+ freeMem(url);
freeMem(longLabel);
}
hPrintf(" %s", track->shortLabel);
if (tdbIsSuper(track->tdb))
@@ -5482,8 +5493,15 @@
if (startsWith("encode", grp->name))
collapseGroup(grp->name, FALSE);
configPageSetTrackVis(-2);
}
+#ifdef TRACK_SEARCH
+else if (cartVarExists(cart, searchTracks))
+ {
+ cartRemove(cart, searchTracks);
+ doSearchTracks(groupList);
+ }
+#endif
else
{
tracksDisplay();
}
@@ -5511,13 +5529,16 @@
"hgt.tui", "hgt.hideAll", "hgt.visAllFromCt",
"hgt.psOutput", "hideControls", "hgt.toggleRevCmplDisp",
"hgt.chromName", "hgt.winStart", "hgt.winEnd", "hgt.newWinWidth",
"hgt.insideX", "hgt.rulerClickHeight", "hgt.dragSelection", "hgt.revCmplDisp",
- "hgt.collapseGroups", "hgt.expandGroups", "hgt.ignoreme",
+ "hgt.collapseGroups", "hgt.expandGroups", "hgt.suggest",
"hgt.jump", "hgt.refresh",
#ifdef CONTEXT_MENU
"hgt.trackImgOnly", "hgt.ideogramToo", "hgt.trackNameFilter",
#endif
+#ifdef TRACK_SEARCH
+ searchTracks,
+#endif
NULL };
int main(int argc, char *argv[])
{