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, "\"", "&quot;");
 		    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[])
 {